2015-02-08 4 views
1

У меня есть три варианта этого вопроса в возрастающей сложности. Все вопросы предполагают, что gettext запрашивает однобуквенный ответ. В настоящее время я пишу в perl, но ответ на C является приемлемым, как и у меня, и я могу писать модули XS. вы можете предположить, что нет проблем с методом ввода и что языковые переменные установлены правильно.Как мне интернационализировать ввод?

  1. Итак, давайте скажем, что у меня есть программа, которая просит gettext("are you sure you want to do that (Yes/No)?") и она была переведена на испанский язык (... (Si/No)?"), французский и valspeak (... (No problemo/Stop right there)?" Как я могу сказать, если письмо я получаю от средства ввода да или нет?

  2. не предположим, что мы отображения меню с вопросом, как gettext("Which install procedure do you want?") с вариантами, как gettext("(N)ovice"), gettext("(I)ntermediate"), gettext("(E)xpert") и gettext("(A)utomated"). на английском языке я принимаю [niea]. что я принимаю, если пользователь говорит по-русски ? или китайский? или суахили?

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

    1. (easy) Переведите все меню. Преимущества в том, что файл прост, действие и связанные с ним ключи можно игнорировать, не работать. Недостатки в том, что для этого нет инструментов перевода, и языки могут выйти из строя.
    2. (medium) Добавить языковые значения ключа, такие как menu_fr, hotkey_fr, menu_ch ... Преимущества в том, что их просто реализовать и что все там. Недостатки снова связаны с проблемами синхронизации.
    3. (неизвестно) Используйте gettext в главном меню на английском языке. Преимущества включают множество инструментов для переводчиков, установленный рабочий процесс, записи в меню не сложно реализовать, и поскольку я уже использую gettext для сообщений о проделанной работе, большая часть реализации довольно проста. Недостатком является то, что я не знаю, как распознавать горячие клавиши.

Что является лучшим решением?

+0

Перевод на русский язык не в том месте, где вы можете использовать его в качестве основного механизма. Не знаю, какие различия существуют между # 1 или # 2, или что вы подразумеваете под «проблемами синхронизации». – ikegami

+0

@ikegami gettext не выполняет машинный перевод, это позволяет переводчикам не работать с кодом. Что касается синхронизации, когда есть изменение, которое влияет на сообщение, это сообщение нуждается в ретрансляции. # 1 проще, чем # 2, поскольку он касается только логических ответов. – hildred

+0

Я пошел от непонимания №1 и №2, чтобы также не понимать № 3, так как я думал, что это автоматический перевод. – ikegami

ответ

0

После долгих чтений, я считаю, что нашел ответ: контекстные варианты звонков gettext, таких как pgettext.

echo gettext("Which install procedure do you want?"); 
echo pgettext("Which install procedure do you want?", "Novice"); 
echo pgettext("Which install procedure do you want?", "Intermediate"); 
echo pgettext("Which install procedure do you want?", "Expert"); 
echo pgettext("Which install procedure do you want?", "Automated"); 
ans=getc(); 
if(ans == pgettext("Which install procedure do you want?|Novice","N")){ 
    do novice; 
}elseif(ans == pgettext("Which install procedure do you want?|Intermediate","I")){ 
. . . 
Смежные вопросы