泰国破线:如何有效打破泰国文本

时间:2011-12-13 16:39:17

标签: html css unicode internationalization browser-bugs

场合 在客户端网站上使用泰语文本是因为我们无法控制(Web浏览器将如何处理它)之间的特定单词/句子的确切位置。通常,本地评论者会将内容外观表示为不正确。

解决方法 对此,撰稿人需要提供包含​和非中断零宽度空格字符的泰语内容。

在实践中,而不是:
ของเพื่อนๆ ที่ออนไลน์อยู่
我们应该使用丑陋的东西:
ของเพื่อนๆ​ที่​ออนไลน์อยู่

以上只是一个例子,我真的不知道断点的确切位置 实际上,单独的非零空间也可以做到这一点......使用破坏的空间也更加严格和正确,以获得更好的准确性。

尽管它确实是可行的,但它对于大型网站内容管理来说也是一个耗时且不是非常有效的解决方案。简单地说,投入的努力与所需的效果不符。

研究 到目前为止已经导致了提到的解决方法,寻找更好的方法来处理这个问题。甚至W3C doesn't have a solution yet并且只讨论它是否应该成为CSS3规范的一部分。

泰语很少使用空间,主要用于区分句子等。因此,泰语句子的常见外观是一个looong字符串。 当更多行文本放在一起时,在哪里打破这样的字符串由特定的单词标识确定。对于单词识别,使用了本地词典,这些词典很可能是操作系统或Web浏览器的一部分,我对这些词汇并不完全确定。

显然,您检查的网络浏览器/操作系统越多,获得的结果就越多!此外,由于系统驱动并且没有“在哪里打破泰国”设置,因此您无法做到这一点。

使用<wbr/>&#8203;&shy;来指示断点的真实位置不会阻止网络浏览器思考(即使错误)在你没有定义它们的地方也是可能的在一个可能在语法上不正确的单词的中间。

如果这句话放在一行的末尾(取决于屏幕分辨率,复制长度,定义的CSS规则)并且浏览器在其上应用了错误的换行规则那么你就会结束一个泰国突破问题,无论你在之前,之后或其他地方定义了另一个断点 - 浏览器总是使用他认为最接近EOL的断点,而不仅仅是你通过插入轻轻建议的断点你标记中提到的一个字符。

这就是为什么你真的需要专注于不打破你的文字(不打破零宽度空间)的地方,而不是它允许的地方。这就是我们回到上面“解决方法”部分中的丑陋和长标记示例的原因。这样一个换行符只能在你允许它的地方发生,但它很麻烦。

任何其他解决方案 如何更有效地处理这一点将不胜感激......谁知道,它甚至可能有助于W3C的实施?

谢谢!

2 个答案:

答案 0 :(得分:27)

我知道这个帖子已经有一段时间但是我有话要说作为泰国本土人。我每天都阅读很多泰国网页,我觉得现在的现代网络浏览器打破泰国线的质量是完全可以接受的。

据我所知,Google Chrome浏览器使用ICU4C,Internet Explorer使用Uniscribe API,Firefox使用libthai将泰语句子分解为单词。对于泰国人我知道,这些网络浏览器如何处理泰语中的换行符对他们来说是完全可以接受的。 (实际上我们曾经在早期版本的Firefox(1.x)中遇到过这个问题,但现在已经解决了。)

与西方语言不同,泰语断线和断字仍然被认为是一个未解决的问题,并且仍然被许多语言学研究人员积极处理。目前没有任何实施可以完美地将句子打破泰语单词。 IBM ICU Boundary Analysis页面包含对此问题的一些分析。

很多时候,它与上下文有关。例如,短语“ตากลม”可以正确地分解为“ตา”,“กลม”“ตาก”,“ลม”。每种方式都说完全不同的东西,但鉴于上下文,泰国读者仍然可以完全理解其意图。

鉴于您的本地审稿人已经熟悉阅读泰国网站,我想他们可能会过于强迫您解决此问题。对于所有泰国网站,网络浏览器甚至Microsoft Word,这都是常见的无法解决的问题。

最好等到(或贡献给IBM ICU),直到泰语判刑实施变得更好。让Web浏览器处理这个问题。我不认为尝试解决这个问题值得您花费宝贵的时间。据我所知,即使泰国网站出版商也不在乎这一点。

如果您需要发布具有完美线条/分词的文档,您可以考虑使用其他媒介,例如PDF文档,您可以在其中更好地控制换行符。

希望这会有所帮助:)

答案 1 :(得分:3)

ICU和ICU4J库有一个基于字典的泰语单词分词迭代器,您可以在服务器端使用它来在适当的位置注入零宽度空格。

或者,如果您事先知道间距要求,则可以使用它来构建可在构建时或传递翻译时运行的实用程序。

有关详情,请参阅ICU Boundary Analysis。这些库可用于C,C ++和Java。