Closed M69W closed 3 months ago
感谢反馈,上面的 伯
和 都
后面的拼音为正确的,其中 伯
需要本库更正其默认读音,都
作为地名,后续会出一个地名包添加进去。
下面的 底特律
和 吕梁
,汉语拼音中不存在 v
这个符号,只有 ü
。因为书写方便很多网站可能使用 v
代替 ü
,也可以对 pinyin
api 添加 v: true
的设置将结果中的 ü
替换为 v
import {
pinyin,
// addDict, // addDict 是用来让用户自定义词典的 api,在拼音转换时,会根据通过 addDict 添加的词的权重来定义优先级。
customPinyin // 如果要强制定义所有单字的读音,可以使用 customPinyin api,命中 customPinyin 的字词都会优先走这个 api 定义的读音
} from "pinyin-pro";
/**
* 强制定义某些单字的读音
*/
export function customPinyinFunc() {
// 国家/地区名
const arr = [
{
伯: "bo",
都: "du"
}
];
for (let index = 0; index < arr.length; index++) {
// addDict(arr[index]);
customPinyin(arr[index]);
}
}
/**
* 为什么要单独写,编译后使用 CDN 会报 En.pinyin is not a function
* @param {*} text
* @param {*} options
* @returns
*/
export function pinyinR(text, options) {
const pinyinValue = pinyin(text, options);
return pinyinValue;
}
// import { pinyin } from "pinyin-pro";
import { customPinyinFunc, pinyinR } from "./customPinyin";
let index = 0;
/**
* 强制定义某些单字的读音
* @param {String} text 需要进行拼音转换的字符串
* @param {String} options 转换输出的内容及格式
*/
export function customPinyin(text, options) {
index === 0 && customPinyinFunc();
index += 1;
if (text) {
// return pinyin(text, options);
return pinyinR(text, options);
} else {
console.warn("请输入需要转换拼音的字符串");
return false;
}
}
const proValue = customPinyin(chnName, {
toneType: "none",
nonZh: "consecutive",
v: true
})
.replace(/\s*/g, "")
.toUpperCase();
目前的做法能解决以上所说的
使用中还遇到两个问题
1、如果是使用CDN引用 pinyin-pro ,报错 En.pinyin is not a function
,
解决方法是再次在自定义函数里面再调用一次,【pinyinR】的作用在于此。
2、如果输入 【hongkong 或 hk】去搜索 香港【HONG KONG】,同时支持中文、英文名、声母、全拼,
根据上面的设置,需要去空把 .replace(/\s*/g, "").toUpperCase();
上面的设置只支持想要功能中的一种,
除了每个功能都设置一遍来实现这几个功能,还有没有更好的方法实现这种特定的功能?
customPinyin.js
import { pinyin, // addDict, // addDict 是用来让用户自定义词典的 api,在拼音转换时,会根据通过 addDict 添加的词的权重来定义优先级。 customPinyin // 如果要强制定义所有单字的读音,可以使用 customPinyin api,命中 customPinyin 的字词都会优先走这个 api 定义的读音 } from "pinyin-pro"; /** * 强制定义某些单字的读音 */ export function customPinyinFunc() { // 国家/地区名 const arr = [ { 伯: "bo", 都: "du" } ]; for (let index = 0; index < arr.length; index++) { // addDict(arr[index]); customPinyin(arr[index]); } } /** * 为什么要单独写,编译后使用 CDN 会报 En.pinyin is not a function * @param {*} text * @param {*} options * @returns */ export function pinyinR(text, options) { const pinyinValue = pinyin(text, options); return pinyinValue; }
index.js
// import { pinyin } from "pinyin-pro"; import { customPinyinFunc, pinyinR } from "./customPinyin"; let index = 0; /** * 强制定义某些单字的读音 * @param {String} text 需要进行拼音转换的字符串 * @param {String} options 转换输出的内容及格式 */ export function customPinyin(text, options) { index === 0 && customPinyinFunc(); index += 1; if (text) { // return pinyin(text, options); return pinyinR(text, options); } else { console.warn("请输入需要转换拼音的字符串"); return false; } }
index.vue
const proValue = customPinyin(chnName, { toneType: "none", nonZh: "consecutive", v: true }) .replace(/\s*/g, "") .toUpperCase();
目前的做法能解决以上所说的
使用中还遇到两个问题 1、如果是使用CDN引用 pinyin-pro ,报错
En.pinyin is not a function
, 解决方法是再次在自定义函数里面再调用一次,【pinyinR】的作用在于此。 2、如果输入 【hongkong 或 hk】去搜索 香港【HONG KONG】,同时支持中文、英文名、声母、全拼, 根据上面的设置,需要去空把.replace(/\s*/g, "").toUpperCase();
上面的设置只支持想要功能中的一种, 除了每个功能都设置一遍来实现这几个功能,还有没有更好的方法实现这种特定的功能?
addDict
和 match
api 实现比较方便,我给你写了个例子,可以看下:example
问题描述
请输入遇到的问题...
伯明翰 【 baiminghan bominghan 】 伯力 【 baili boli 】 新西伯利亚 【 xinxibailiya xinxiboliya 】
昌都 【 changdou changdu 】 加德满都 【 jiademandou jiademandu 】 内比都 【 neibidou neibidu 】
底特律 【 ditelü ditelv 】 吕梁 【 lüliang lvliang 】
上面这些用哪些才是“对”的