Чтобы сделать систему управления контентом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
», если есть один кактус.
Вы можете подумать, что логичное исправление состоит в том, чтобы избегать этих неправильных слов, потому что они не используются в программировании. Что ж, это бесполезно по двум причинам:
"%n сообщений сохранено"
.В MyImaginaryLanguage правильным способом формирования переведенной строки может быть «1Message save», «M2ssage save», «Me3ssage save» for % n
значения 1
, 2
и 3
соответственно, и не похоже, что в Qt Linguist есть правила для обработки этого.После поиска в Интернете, чтобы узнать, есть ли у других разработчиков Qt решение этой проблемы, и не найдя его, я пришел к переполнению стека.
Я хочу знать: