Тайский разрыв строки: как эффективно разбить тайский текст
Ситуация с тайским текстом на клиентском сайте такова, что мы не можем контролировать, где именно отдельные слова / предложения будут ломаться между строками (как веб-браузер будет это обрабатывать). Часто внешний вид контента указывается местными рецензентами как неправильный.
Обходным путем является то, что копирайтер должен доставлять тайский контент с нарушением ​
и не ломается 
символы нулевой ширины-пространства включены.
На практике, а не: ของเพื่อนๆ ที่ออนไลน์อยู่
мы должны использовать что-то такое уродливое, как: ของเพื่อนๆ​ที่​ออนไลน์อยู่
Выше приведен только пример, я не знаю, где именно разрешены точки останова.
На самом деле, неразрывные пробелы в одиночку тоже бы сработали... просто более строго и правильно использовать ломающие пробелы для большей точности.
И хотя это, безусловно, выполнимо, это также трудоемкое и не очень эффективное решение для управления контентом большого сайта. Проще говоря, приложенные усилия не соответствуют необходимому эффекту.
Исследования до сих пор привели к упомянутому обходному пути, ищущему лучший способ справиться с этим. Даже W3C пока не имеет решения и просто обсуждает, должно ли оно быть частью спецификации CSS3.
В тайском языке очень редко используются пробелы, в основном для разграничения предложений и т. Д. Таким образом, обычным видом тайского предложения является одна длинная строка. Где разбить такую строку, когда больше строк текста соединено, определяется определением отдельных слов. Для идентификации слов используются локальные словари, которые, скорее всего, являются частью операционной системы или веб-браузера, я не совсем уверен в этом.
Очевидно, чем больше веб-браузеров / операционных систем вы проверяете, тем больше результатов вы получаете! Более того, вы мало что можете с этим поделать, так как это зависит от системы, и нет доступных настроек "где сломать тайский".
С помощью <wbr/>
, ​
или же ­
указание того, где в действительности находятся точки останова, не помешает веб-браузеру думать (хотя и неправильно), что некоторые разрывы также возможны в местах, где вы их не определили, например, в середине слова, что может быть грамматически некорректно.
Если такое слово помещается в конце строки (зависит от разрешения экрана, длины копии, определенных правил CSS), и браузер применяет к нему свое неправильное правило разрыва строки, то вы получите тайскую проблему разрыва строки, независимо от того, что вы определили другие точки останова до, после или где-то еще в слове - браузер всегда будет использовать точку останова, которая, по его мнению, наиболее близка к EOL, а не только ту, которую вы мягко предложили, вставив один из упомянутых символов в вашу разметку.
Вот почему вам действительно нужно сосредоточиться на том, где не разбить ваш текст (неразрывный пробел нулевой ширины), а не там, где это разрешено. И это то, что приводит нас к уродливому и длинному примеру разметки в разделе "Временное решение" выше. Таким образом, разрыв строки может произойти только там, где вы позволили, но это грязно.
Любое другое решение, как справиться с этим более эффективно, будет оценено... и кто знает, может ли оно даже помочь W3C в их реализации?
БЛАГОДАРЮ ВАС!
3 ответа
Я знаю, что эта тема была довольно долгое время, но мне есть что сказать, как родной тайский язык. Я читаю много тайских веб-страниц каждый день, и я чувствую, что качество прорыва тайских строк современными веб-браузерами в настоящее время вполне приемлемо.
Как я знаю, браузер Google Chrome использует ICU4C, Internet Explorer использует Uniscribe API, а Firefox использует libthai для разбиения тайских предложений на слова. Для тайцев, которых я знаю, то, как эти веб-браузеры обрабатывают разрывы строк на тайском, для них совершенно приемлемо. (на самом деле у нас была эта проблема с очень ранней версией Firefox (1.x), но сейчас она решена.)
В отличие от западных языков, тайский разрыв строк и слов по-прежнему считается нерешенной проблемой и до сих пор активно решается многими лингвистическими исследователями. В настоящее время нет реализации, которая могла бы идеально разбить предложение на тайские слова. На странице IBM ICU Boundary Analysis содержится анализ этой проблемы.
Много раз, это как-то связано с контекстом. Например, фразу "ตากลม" можно правильно разбить на "ตา","กลม" или "ตาก", "ลม". Каждый способ говорит совершенно по-разному, но тайские читатели все еще могут прекрасно понять предполагаемое значение, учитывая контекст.
Учитывая, что ваши местные рецензенты уже знакомы с чтением тайских веб-сайтов, я думаю, что они слишком настойчивы, чтобы решить эту проблему. Это общая неразрешимая проблема для всех тайских веб-сайтов, веб-браузеров и даже Microsoft Word.
Лучше всего подождать (или внести свой вклад в IBM ICU), пока реализация разрыва предложений в Таиланде не станет лучше. Пусть веб-браузеры справятся с этим. Я не думаю, что попытка обойти эту проблему стоит вашего драгоценного времени. Насколько я знаю, даже тайские веб-издатели здесь просто не хотят, чтобы это было правильно.
Если вам нужно опубликовать документ с идеальным переносом строк / слов, вы можете рассмотреть другой носитель, такой как PDF-документ, в котором вы должны лучше контролировать разрывы строк.
Надеюсь это поможет:)
Библиотеки ICU и ICU4J имеют итератор разрыва слов на тайском языке, который можно использовать на стороне сервера для вставки пробелов нулевой ширины, где это необходимо.
Или вы могли бы использовать это для создания утилиты, которая могла бы работать во время сборки или при доставке переводов, если вы знали требования к расстоянию заранее.
см. Анализ границ ICU для получения дополнительной информации. Эти библиотеки доступны для C, C++ и Java.
Именно над этим работает рабочая группа W3C (для тайского и других языков Юго-Восточной Азии). Их проект требований к макету совсем свежий, с прошлого месяца:
- Тайские требования к макету (проект) (10 января 2023 г.)https://www.w3.org/International/sealreq/thai/
- Анализ пробелов в Таиланде (19 января 2022 г.) https://www.w3.org/TR/thai-gap/
Я надеюсь, что эта информация поможет в плодотворном обсуждении здесь.
Вы также можете подписаться или присоединиться к активности Southeast Asia Language Enablement (sealreq) на GitHub: https://github.com/w3c/sealreq .