2016-08-18 106 views
1

我正在建立一个小网站,并希望使其成为国际化的。所有内容将以不同语言存储在外部XML中,并通过javascript解析为html。哪种编码适用于多种国际语言

现在的问题是,还有德语变音符号,俄语,中国和日本符号,以及从阿拉伯语和波斯语等右到左的语言。

什么是最好的方法/解决方案?有没有可以正确显示所有语言的“国际编码”?还是有其他解决方案,你会建议?

在此先感谢!

+0

我认为XML是错误的方法 - PHP gettext扩展名(.mo/.po)是我认为的方式。它是为多语种网站,翻译目录等制作的。 – 2016-08-18 15:05:28

+0

谢谢您的回复!是的,我也首先想到了PHP ...... [尽管我对gettext扩展名(.mo/.po)]不太熟悉......只要我记得没错,使用PHP并将语言改为网站再次被加载新的语言文本,对吧?!?但对于我的项目,我希望立即翻译而不用重新加载。所以当你点击一个标志来改变语言时,当前网站的文本和导航栏应该立即改变。有没有办法用PHP实现这一点? –

+0

我不知道PHP中的* gettext *扩展是否可以通过ajax加载。但我认为这将是值得搜索,并尝试。我希望你熟悉AJAX,它是异步的Javascript - > Click>触发一个js/ajax函数,它触发一个php文件加载,并吐出你的信息。 – 2016-08-19 14:23:44

回答

2

多语言站点的正常(并推荐)解决方案是使用UTF-8。这可以可以处理已分配的Unicode代码点与一对夫妇的注意事项的任何字符:

  1. Unicode是一个版本的标准,不同的JavaScript实现可以支持不同的Unicode版本。

  2. 如果您的文本包含Unicode Basic Multilingual Plane(BMP)之外的字符,那么您需要以Unicode的方式处理文本(使用Javascript)。例如,如果您使用Javascript String类,则需要在进行文本操作时正确考虑代理对。

(一个JavaScript String实际上是编码为UTF-16。它有让你操纵它作为Unicode代码点,方法/属性,如substringlength使用codeunit而不是代码点索引方法。如果你是不小心,最终可能会在代理对的低部分和高部分之间拆分字符串,结果将无法正确显示,这只会影响更高层面的代码点......但包含新的表情符号代码点。 )

+0

谢谢你的回复,斯蒂芬! Sooo ...如果我理解正确,你还会推荐使用UTF-8进行多语言网站。我之前没有新增Unicode Basic Multilingual Plane,但我现在要详细了解它。你用什么样的方式“用文字处理(用Java)来处理Unicode”?你知道这个例子,所以我可以看到吗?我不会使用任何表情符号或类似的东西....只是简单的文本和数字在所有不同的语言.....虽然许多语言,如俄语和普通话看起来像外星人的符号:-):D –

+0

“ (用Java)“是一个错字。应该是Javascript –

5

所有Unicode转换(UTF-8,UTF-16,UTF-32)都可以对所有Unicode字符进行编码。您可以根据大小选择要使用的内容:如果大部分文本都使用西方脚本,可能是UTF-8,因为它只对大多数字符使用一个字节,但如果需要,则使用2,3或4。如果你编码远东脚本,你可能会想要其他转换之一。

这里最根本的是它都是Unicode;转换只是表示​​相同字符的不同方式。

堆栈溢出的联合创始人对这个话题的好文章:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)


不管你用什么编码为您的文档,请注意,如果你做这些字符串的处理在JavaScript ,JavaScript strings are UTF-16(除了容许无效值)。 (即使文档采用UTF-8或UTF-32格式)。这意味着,例如,这些表情符号的人每天都非常兴奋,看起来像JavaScript中的两个“字符”,因为他们需要两个字母的UTF -16来表示。就像,例如:

console.log("".length); // 2

所以你必须要小心,不要分裂了在UTF-16的两个词编码字符的两半。

+0

感谢您的回复,T.J.!好的,所以如果我用UTF-8正确地做到这一点,我也可以使用亚洲,cyrllic和阿拉伯文字......但是最值得推荐的是西方(拉丁)文本。正确?那么我不会在网站上使用任何emojis ....但是如果我会......使用UTF-16不会更安全,所以它在JS中的字符串长度相同? –

+0

@RostamN .:是的,UTF-8可以编码**所有** Unicode字符(就像所有其他转换可以)。不,使用UTF-16并不安全; JavaScript字符串的本质与您的HTML或XML完全无关。 –

+0

太好了,非常感谢! –