У меня есть приложение, написанное на wxPython, которое я хочу сделать многоязычным. Наши вариантыСоздание приложения wxPython многоязычное
- с использованием Gettext http://docs.python.org/library/gettext.html
- 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"))
Вы видели страницу рецептов wxPyWiki для i18n с примерами с использованием gettext? http://wiki.wxpython.org/RecipesI18n – DrBloodmoney
да, я видел это, и это одна из причин, почему я не хочу идти gettext way –
Все «профи», о которых вы упоминали, используя свои собственные файлы сообщений также существует метод gettext. Однако обратное неверно. –