IFreeOvO / i18n-cli

支持将vue、react项目里的中文替换成 i18n 国际化标记,并支持自动翻译的命令行工具
MIT License
131 stars 38 forks source link

模板中有引号时key计算不一致 #88

Closed mo-n closed 1 year ago

mo-n commented 1 year ago

模板中存在引号时会导致key不一致,导致i18n Ally插件无法匹配。修改了key计算方式

input

export const a = `测试'"测试`
export const b = `测试'测试`

out

之前

export const a = t('测试\'"测试')
export const b = t("测试'测试")
{
  "测试'\"测试": "测试'\"测试",
  "测试'测试": "测试'测试"
}

现在

export const a = t('ce-shi-ce-shi')
export const b = t('ce-shi-ce-shi-0')
{
  "ce-shi-ce-shi": "测试'\"测试",
  "ce-shi-ce-shi-0": "测试'测试"
}
IFreeOvO commented 1 year ago

没看明白。。。是说翻译后多了'/'会影响key的匹配?

IFreeOvO commented 1 year ago

加q群46847850讨论下

mo-n commented 1 year ago

没看明白。。。是说翻译后多了'/'会影响key的匹配?

翻译文件里的多了 /,生成的代码里没有。而且 这里 没有用escapeQuotes处理。自定义 customizeKey的时候,代码和翻译文件生成的key会不一样

我索性把key的生成方式改成拼音,这样兼容性会好一点

IFreeOvO commented 1 year ago

没看明白。。。是说翻译后多了'/'会影响key的匹配?

翻译文件里的多了 /,生成的代码里没有。而且 这里 没有用escapeQuotes处理。自定义 customizeKey的时候,代码和翻译文件生成的key会不一样

我索性把key的生成方式改成拼音,这样兼容性会好一点

'\'这个反斜杠是为了转义单引号和双引号,避免跟最外层的引号冲突。应该是哪漏加了escapeQuotes处理。我周末处理下

IFreeOvO commented 1 year ago

这个例子确实很特殊。我试了多次没能解决。鉴于单引号和双引号同时出现的场景不多。还是建议手动改

IFreeOvO commented 1 year ago

谢谢你的commit。不过我还是要驳回commit,理由如下:首先,中文拼音也会有同音的单词,这会导致key因为重复而覆盖。其次,仅我个人的观点,key的最佳实践,应该是中文或者hash,因为中文作为母语最直观,hash的话,我是认为除了中文以外的key,反正都是看着不直观,那为何不用hash来保证唯一。最后还是要谢谢你,看了我丑陋的代码并做出修改建议,辛苦了。后面我如果有思路解决,一定第一时间更新O(∩_∩)O

mo-n commented 1 year ago

@IFreeOvO key 重复的问题其实这里有判断的。方便浏览可以用i18n-ally处理一下。img

如果用现在的方法,这里 没有用escapeQuotes处理,如果自定义customizeKey的话,key有引号就会出问题的

IFreeOvO commented 1 year ago

自定义customizeKey那我试过加escapeQuotes处理,处理后,我可以保证翻译后的key和字典key一样。卡住我的是将测试'"测试存入json这一步,在它序列化时会自动加斜杠变成"测试'\"测试"。会使得key的值变的跟js文件里的不一样

mo-n commented 1 year ago

这里 调用customizeKey的时候经过escapeQuotes处理了。上面那个地方没经过处理,会导致两次传给customizeKey的值不一致,我想自定义一下customizeKey出现了问题。所以我干脆把escapeQuotes去掉,保证传给customizeKey的值一致,默认customizeKey函数改为转拼音。

IFreeOvO commented 1 year ago

这里 调用customizeKey的时候经过escapeQuotes处理了。上面那个地方没经过处理,会导致两次传给customizeKey的值不一致,我想自定义一下customizeKey出现了问题。所以我干脆把escapeQuotes去掉,保证传给customizeKey的值一致,默认customizeKey函数改为转拼音。

我想了个其他方案。周末改下