2009-06-25 4 views
2

У меня есть приложение, написанное на wxPython, которое я хочу сделать многоязычным. Наши вариантыСоздание приложения wxPython многоязычное

  1. с использованием Gettext http://docs.python.org/library/gettext.html
  2. seprating из всего текста пользовательского интерфейса для messages.py файл, и использовать его для перевести текст

Я очень склонен к 2-ю и Я не вижу никакой выгоды при переходе gettext way, , используя второй способ, у меня могут быть все мои сообщения в одном месте, а не в коде, поэтому, если мне нужно изменить сообщение, код не нужно менять, в случае gettext я могу запутать msg -константы, поскольку я буду просто обертывать тзд оригинала вместо преобразования его в константу в messages.py

в основном вместо

wx.MessageBox(_("Hi stackoverflow!")) 

Я думаю

wx.MessageBox(messages.GREET_SO) 

лучше, так что есть какое-либо преимущество в GetText пути и невыгодном Второй путь? и есть ли третий способ?

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

опыт: Я уже прошел второй путь, и я должен сказать, что каждое приложение должно пытаться извлечь текст интерфейса из кода, это дает возможность рефакторингу, см., где UI ползут в модели, и где текст UI может быть улучшен, gettext в сравнении является механическим, не дает никакого ввода для кодера, и я думаю, будет сложнее поддерживать.

и при создании имени для текста, например. PRINT_PROGRESS_MSG, дает возможность увидеть, что во многих местах одни и те же msg используются несколько иначе и могут быть объединены в одно имя, которое позже поможет, когда мне нужно изменить msg только один раз.

Заключение: Я по-прежнему не уверен в преимуществах использования gettext и использую свой собственный файл сообщений. но я выбрал ответ, который, по крайней мере, объяснил несколько моментов, почему gettext может быть полезным. Окончательное решение ИМО, который берет лучшее от обоих способов, то есть мой собственный идентификатор сообщения обернут Gettext например

wx.MessageBox(_("GREET_SO")) 
+0

Вы видели страницу рецептов wxPyWiki для i18n с примерами с использованием gettext? http://wiki.wxpython.org/RecipesI18n – DrBloodmoney

+0

да, я видел это, и это одна из причин, почему я не хочу идти gettext way –

+0

Все «профи», о которых вы упоминали, используя свои собственные файлы сообщений также существует метод gettext. Однако обратное неверно. –

ответ

1

Gettext является путь, в вашем примере вы можете также использовать Gettext «избегать хранения переводов в код»:

wx.MessageBox(messages.GREET_SO) 

может быть таким же, как Gettext:

wx.MessageBox(_("GREET_SO")) or wx.MessageBox(_("messages.GREET_SO")) 

Gettext в значительной степени стандарт для многоязычных приложений, и я уверен, что вы будете пользоваться от его использования в будущем. Например, вы можете использовать Poedit (или другое подобное приложение), чтобы назначать переводы вашим сотрудникам или вкладчикам, а затем на флаге одно или несколько сообщений, которые неправильно переводились. Также, если отсутствуют/дополнительные записи, poedit предупредит вас. Не обманывайте себя, gettext - единственный проверенный надежный способ поддержания переводов.

+0

да, это может быть хорошим способом, слияние обоих, по крайней мере, решает мою основную проблему с gettext, что сообщения такие же, как и идентификатор сообщения, и при необходимости я могу заменить _ своей функцией просто для удовольствия :) –

-1

Для сети (это PHP, но идея та же), я всегда создаю несколько языковых файлов в конкретный каталог. en.php, fr.php и т. д. Эти файлы содержат определения всего выходного текста на данном языке. Предпочтения пользователей для языка определяет, какой из этих файлов получить включены, таким образом, на каком языке появляется выход в К ...

в файле En.php:. TEXT_I_AM = «Я»

в фр.PHP: TEXT_I_AM = «Je суис»

1

Есть некоторые преимущества Gettext:

  1. Одним из самых больших преимуществ: при использовании Poedit делать переводы вы можете извлечь выгоду из базы данных перевода. В основном poedit ca сканирует ваш жесткий диск и находит уже переведенные файлы и будет делать предложения, когда вы переводите свой файл.
  2. Когда вы даете код другим людям для перевода, они могут уже знать способ gettext для перевода, в то время как вы должны объяснить им свой способ перевода.
  3. У вас есть текст в контексте кода, поэтому его нужно будет легко перевести при просмотре кода вокруг перевода.
  4. Рассмотрите приведенный ниже текст: print _('%d files of %d files selected') % (num, numTotal) и еще более сложные ситуации. Вот это действительно помогает, имеющий код вокруг ...
+0

'1', я думаю, не имеет значения, в моем случае я никогда не буду полагаться на автоматический перевод, '2' - это alsonot большое беспокойство, поскольку мой путь был бы проще, просто переводил данные строки, а не критические файлы gettext, я не понять '3', как вы видите код вокруг перевода, isn; t он обратный? 4, кажется, действительный случай –

+1

колодец (4) является специальным часто используемым примером для (3). Относительно (1): вы пробовали автоматический перевод poedit - это действительно помогает. – RSabet

+0

Да, я забыл функцию автоматического перевода - это действительно удобно! –

Смежные вопросы