Тайский разрыв строки: как эффективно разбить тайский текст - PullRequest
28 голосов
/ 13 декабря 2011

Положение Тайский текст на клиентском сайте заключается в том, что мы не можем контролировать, где именно отдельные слова / предложения будут ломаться между строками (как веб-браузер будет это обрабатывать) . Часто внешний вид контента указывается местными рецензентами как неправильный.

Обход это означает, что копирайтер должен доставлять тайский контент с разрывными ​ и неразрывными  пробелами нулевой ширины с пробелом.

На практике, а не:
ของเพื่อนๆ ที่ออนไลน์อยู่
мы должны использовать что-то такое уродливое, как:
ของเพื่อนๆ​ที่​ออนไลน์อยู่

Выше приведен только пример, я не знаю, где именно разрешены точки останова.
На самом деле, неразрывные нулевые пробелы тоже могут помочь ... просто более строго и правильно использовать разрывные пробелы для большей точности.

И хотя это определенно выполнимо, это также трудоемкое и не очень эффективное решение для управления контентом большого сайта. Проще говоря, приложенные усилия не соответствуют необходимому эффекту.

Research до сих пор привел к упомянутому обходному пути, ища лучший способ справиться с этим. Даже W3C пока не имеет решения и просто обсуждает, должно ли оно быть частью спецификации CSS3.

В тайском языке очень редко используются пробелы, в основном для разграничения между предложениями и т. Д. Поэтому обычным видом тайского предложения является одна длинная строка. Где разбить такую ​​строку, когда больше строк текста соединено, определяется определением отдельных слов. Для идентификации слов используются локальные словари, которые, скорее всего, являются частью операционной системы или веб-браузера, я не совсем уверен в этом.

Очевидно, чем больше веб-браузеров / операционных систем вы проверяете, тем больше результатов вы получаете! Более того, вы мало что можете с этим поделать, так как он управляется системой, и нет доступных настроек «где сломать тайский».

Использование <wbr/>, &#8203; или &shy; для указания того, где на самом деле находятся точки останова, не помешает веб-браузеру думать (хотя и неправильно) что некоторые перерывы также возможны в местах, где вы их не определили, например в середине слова, которое может быть грамматически неверным.

Если такое слово помещается в конец строки (зависит от разрешения экрана, длины копии, определенных правил CSS) и браузер применяет к нему свое неправильное правило разрыва строки, то вы в конечном итоге с проблемой разрыва строки на тайском языке, независимо от того, что вы определили другие точки останова до, после или где-то еще в слове - браузер всегда будет использовать точку останова, которая, по его мнению, наиболее близка к EOL, а не только те, которые вы мягко предложили, вставив одну из упомянутых символов в вашей разметке.

Вот почему вам действительно нужно сосредоточиться на том, где не разбить текст (неразрывный пробел нулевой ширины) , а не там, где это разрешено. И это то, что приводит нас к уродливому и длинному примеру разметки в разделе «Временное решение» выше. Таким образом, разрыв строки может произойти только там, где вы позволили, но это грязно.

Любое другое решение Как это сделать эффективнее, было бы полезно ... и кто знает, может ли это даже помочь W3C в их реализации?

СПАСИБО!

Ответы [ 2 ]

27 голосов
/ 21 января 2012

Я знаю, что эта тема была довольно долгое время, но мне есть что сказать как родной тайский. Я читаю много тайских веб-страниц каждый день, и я чувствую, что качество прорыва тайских строк современными веб-браузерами в настоящее время вполне приемлемо.

Как я знаю, браузер Google Chrome использует ICU4C, Internet Explorer использует Uniscribe API, а Firefox использует libthai для разбиения тайских предложений на слова. Для тайцев, которых я знаю, то, как эти веб-браузеры обрабатывают разрывы строк на тайском, для них совершенно приемлемо. (на самом деле у нас была эта проблема с очень ранней версией Firefox (1.x), но теперь она решена.)

Тайский разрыв строк и слов в отличие от западных языков до сих пор считается нерешенной проблемой и до сих пор активно решается многими лингвистическими исследователями. В настоящее время нет реализации, которая могла бы идеально разбить предложение на тайские слова. Страница IBM ICU Boundary Analysis содержит анализ этой проблемы.

Много раз, это как-то связано с контекстом. Например, фразу "ตากลม" можно правильно разбить на "ตา", "กลม" или "ตาก", "ลม" . Каждый способ говорит совершенно по-разному, но тайские читатели все еще могут прекрасно понять предполагаемое значение, учитывая контекст.

Учитывая, что ваши местные рецензенты уже знакомы с чтением тайских веб-сайтов, я думаю, что они слишком настойчивы, чтобы решить эту проблему. Это общая проблема неразрешимая для всех тайских веб-сайтов, веб-браузеров и даже Microsoft Word.

Лучше всего подождать (или внести свой вклад в IBM ICU), пока не улучшится реализация разрыва предложений на тайском языке. Пусть веб-браузеры справятся с этим. Я не думаю, что попытка обойти эту проблему стоит вашего драгоценного времени. Насколько я знаю, даже тайские веб-издатели здесь просто не хотят, чтобы это было правильно.

Если вам нужно опубликовать документ с идеальным переносом строк / слов, вы можете рассмотреть другой носитель, такой как PDF-документ, в котором вы должны лучше контролировать разрывы строк.

Надеюсь, это поможет:)

3 голосов
/ 14 декабря 2011

В библиотеках ICU и ICU4J есть итератор разрыва слов на тайском языке, который вы можете использовать на стороне сервера для вставки пробелов нулевой ширины, где это необходимо.

Или вы можете использовать его для создания утилитыон может выполняться во время сборки или при доставке переводов, если вы заранее знали требования к расстоянию.

см. Анализ границ ICU для получения дополнительной информации.Эти библиотеки доступны для C, C ++ и Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...