Чтобы сделать систему управления контентом PHP расширяемой , языковые переводы имеют решающее значение.Я исследовал подходы к программированию для системы переводов и подумал, что Qt Linguist является хорошим примером.
Это пример использования из документации Qt:
int n = messages.count();
showMessage(tr("%n message(s) saved", "", n));
Qt использует правила известного языка, чтобы определить, имеет ли "message
" добавление "s
" на английском языке.
Когда я привел этот пример в команду разработчиков, они обнаружили проблему, которая ставит под угрозу эффективность расширяемости моделирования с помощью функции tr()
Qt.
Это аналогичный пример, за исключением того, что сейчас что-то серьезно не так.
int n = deadBacteria.count();
showMessage(tr("%n bacterium(s) killed", "", n));
Множественное число от«bacterium
» - это «bacteria
».Неправильно добавлять «s
».
У меня нет большого опыта работы с Qt Linguist, но я не видел, как он обрабатывает нерегулярные спряжения и формы.
Aболее сложная фраза может быть "%n cactus(s) have grown."
.Множественное число должно быть «cactii
», а «have
» должно быть сопряжено с «has
», если есть один кактус.
Вы можете подумать, что логическое исправление состоит в том, чтобы избежать этих нерегулярныхслова, потому что они не используются в программировании.Что ж, это не помогает двумя способами:
- Возможно, существует язык, который изменяет существительные нерегулярным образом, даже если исходная строка работает на английском языке, например,
"%n message(s) saved"
.В MyImaginaryLanguage правильным способом формирования переведенной строки может быть « 1Message сохранено », « M2essage сохранено », « Me3ssage сохранено » для значений %n
1
, 2
и 3
соответственно, и не похоже, что в Qt Linguist есть правила для этого. - Чтобы сделать CMS расширяемой, как мне нужна моя, все типывеб-приложений должны быть учтены. Кто-то может создать ролевую игру , которая требует построения предложений типа " 5 кактусов выросли. " Или, может быть, программное обеспечение безопасности хочетскажем, " ClamAV обнаружил 2 вируса. " вместо " ClamAV обнаружил 2 вируса (ов). "
После поиска в Интернете, чтобы увидеть, если другиеРазработчики Qt имеют решение этой проблемы и, не найдя ни одного, я пришел к Stack Overflow.
Я хочу знать:
- Какой должна быть расширяемая и эффективная техника программированияиспользуется для перевода строк с возможными нерегулярными правилами?
- Что делают программисты и переводчики Qt, если сталкиваются с этой проблемой нерегулярности?