Локализация строк на корейском языке зависит от конечного согласного аргумента с использованием MessageFormat

Мы пытаемся перевести наше приложение на корейский язык, используя MessageFormat библиотеки ICU (точнее, MessageFormatter PHP).

Корейский язык широко использует суффиксы (어미), которые прикрепляются к концу слов. Форма большинства именных суффиксов зависит от последнего согласного (받침) последнего слога предыдущего существительного. Например, предметный маркер принимает форму (-i), когда он следует за последним согласным, и (-ga), когда нет окончательного согласного. Итак переводчики, которым дано:

{0} is good.
John is good.
Susie is good.

может перевести это как:

{0}이 좋다.   ({0}-i joh-da.)
길동이 좋다.   (gil-dong-i joh-da.)

если {0} заканчивается согласной и как:

{0}가 좋다.   ({0}-ga joh-da.)
지혜가 좋다.   (ji-hye-ga joh-da.)

если {0} не заканчивается согласной.

Одно соглашение состоит в том, чтобы отформатировать строки как это:

{0}이(가) 좋다.   ({0}-i(-ga) joh-da.)
지혜이(가) 좋다.   (ji-hye-i(-ga) joh-da.)

Конечно, это выглядит неуклюже и непрофессионально, и это именно то, что MessageFormat был разработан для устранения (по крайней мере, в случае множественного числа и гендерной зависимости, ни одна из которых, кстати, не имеет отношения к корейскому языку).

В идеале, мне нужна функциональность, аналогичная множественному числу или выбору, но специально для того, чтобы переводчики могли легко предоставлять разные переводы на основе обнаруженного конечного согласного. Примерно так было бы идеально:

{0}{0, final, none {가} other {이}} 좋다.
{0}{0, final, none {로} ㄹ {로} other {으로}} 갔다.

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

Как лучше всего обрабатывать подобные ситуации с MessageFormatter?

0 ответов

Другие вопросы по тегам