Как лучше всего локализовать все приложение на множество разных языков? - PullRequest
6 голосов
/ 15 сентября 2008

Я использую Visual Studio (2005 и выше). Я пытаюсь создать приложение, в котором пользователь может изменить язык для всех меню, форматов ввода и тому подобное. Как бы я продолжил это делать, так как полагаю, что в .Net есть какая-то полная функция, которая может помочь мне в этом?

Мне нужно принять во внимание следующее (и заполнить меня, если я пропущу некоторые очевидные вещи)

  • Строки (меню, тексты)
  • Входные данные (разбор чисел, дат и т. Д.)
  • Должно быть легко добавить поддержку другого языка

Ответы [ 5 ]

3 голосов
/ 15 сентября 2008

Я ни в коем случае не эксперт в .NET, но локализация никогда не бывает такой простой, как «замена значений строк» ​​или «изменение форматов даты». Есть еще много чего, что нужно принять во внимание, например, расположение, правильное размещение текста.

Взять, к примеру, китайский. То, как вы читаете, сверху вниз, а не слева направо. При правильной локализации приложение должно учитывать это.

http://msdn.microsoft.com/en-us/library/y99d1cd3(VS.80).aspx кажется хорошим началом, если вы имеете дело с Windows Forms.

3 голосов
/ 15 сентября 2008

Классический рецепт: разработайте приложение без родного языка, но с возможностью локализации и разработайте инициализацию на одном языке (например, английском). Итак, вы создаете приложение и переводите его на английский каждый вечер; без шага локализации это было бы невозможно. Сделайте это хорошо, и ресурсы для начальной локализации образца могут быть заменены ресурсами для любого другого языка. Примите во внимание не римские сценарии с самого начала. Гораздо чище иметь приложение без языка, которое всегда требует локализации, а не приложение для конкретного языка, для которого необходимо вычесть свой родной язык и добавить замену.

1 голос
/ 16 сентября 2008

Microsoft рекомендует использовать спутниковые сборки, как описано в Упаковка и развертывание ресурсов . Если вы используете ResourceManager для загрузки ресурсов, .NET загрузит правильные ресурсы для CurrentUICulture. По умолчанию используется текущая языковая настройка пользовательского интерфейса в Windows.

Локализовать Windows Forms можно либо с помощью Visual Studio, либо с помощью внешнего инструмента WinRes.exe. В этой статье описываются WinRes и способы использования Visual Studio для локализации формы.

1 голос
/ 16 сентября 2008

Вы определенно должны использовать .NET ResourceManager и формат xx файла resx, однако есть несколько подходов к использованию.

Это действительно зависит от того, чего вы хотите достичь. Для меня я хотел один файл ресурсов XML (для каждого поддерживаемого языка), который может быть изменен кем угодно. Я создал вспомогательный класс, который загружал файл глобальных ресурсов в ResourceManager (только один раз), и у меня была вспомогательная функция, которая дает мне необходимый ресурс для данного имени. Единственным недостатком этого подхода было то, что я не мог использовать динамическое связывание ресурсов со свойствами.

Мне показалось, что управлять этим лучше и проще, чем несколькими или встроенными файлами ресурсов для каждой формы. Кроме того, точно такой же подход можно использовать в приложении ASP.NET. Я также обнаружил, что такой подход означает, что аутсорсинг перевода ресурсов и доставки языковых пакетов клиентам гораздо более управляемый.

1 голос
/ 15 сентября 2008

Для строк вы должны просто отделить свои строки от вашего кода (наличие XML / DLL, которая преобразует идентификаторы строк в реальные строки, является одним из способов). Однако вам необходимо убедиться, что вы поддерживаете двухбайтовые символы для некоторых языков (это актуально, если вы используете C / C ++).

Для ввода данных вам нужно иметь разные локали. В Java это относительно просто, и если вы используете C #, это, вероятно, также довольно просто. В C / C ++ я действительно не знаю. Основная идея заключается в том, что синтаксические анализаторы ввода должны отличаться в зависимости от локали, выбранной в то время. Поэтому каждое поле (текстовое поле, текстовое поле и т. Д.) Должно иметь абстрактный синтаксический анализатор, который затем реализуется другим классом в зависимости от локали (справа налево, двухбайтовый и т. Д.).

Проверьте реализацию Java для деталей о том, как они это сделали. Это довольно функционально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...