Перевод на языки с Нерегулярные правила

Чтобы сделать систему управления контентомPHP расширяемой, языковые переводы имеют решающее значение. Я изучал подходы к программированию для системы переводов и подумал, что хорошим примером может служить Qt Linguist.

Это пример использования из документации Qt:

int n = messages.count();
showMessage(tr("%n message(s) saved", "", n));

Qt использует известные языковые правила, чтобы определить, имеет ли " message" " s" добавленное на английском языке.

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

Это аналогичный пример, за исключением того, что теперь что-то серьезно не так.

int n = deadBacteria.count();
showMessage(tr("%n bacterium(s) killed", "", n));

Множественное число от «бактерия» равно «бактерии». Добавлять "s" неправильно.

У меня нет большого опыта работы с Qt Linguist, но я не видел, как он обрабатывает неправильные спряжения и формы.

Более сложной фразой может быть «%n кактусов выросло».. Множественное число должно быть «cactii», а «have» должно быть сопряжено с «has», если есть один кактус.

Вы можете подумать, что логичное исправление состоит в том, чтобы избегать этих неправильных слов, потому что они не используются в программировании. Что ж, это бесполезно по двум причинам:

  1. Возможно, существует язык, который изменяет существительные неправильным образом, хотя исходная строка работает на английском языке, например "%n сообщений сохранено".В MyImaginaryLanguage правильным способом формирования переведенной строки может быть «1Message save», «M2ssage save», «Me3ssage save» for % nзначения 1, 2и 3соответственно, и не похоже, что в Qt Linguist есть правила для обработки этого.
  2. Чтобы сделать CMS расширяемой, как мне нужно, необходимо учитывать все типы веб-приложений. Кто-то может создать ролевую игру, которая требует, чтобы предложения строились как " 5 кактусов выросли. " Или, может быть, программа безопасности хочет сказать, " ClamAV обнаружил 2 вируса. " в отличие от " ClamAV обнаружил 2 вируса. "

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

Я хочу знать:

  1. Какой расширяемый и эффективный метод программирования следует использовать для преобразования строк с возможными неправильными правилами?
  2. Что делают программисты и переводчики Qt, если сталкиваются с этой проблемой?

6
задан Tadeusz A. Kadłubowski 20 March 2012 в 08:28
поделиться