библиотека интернационализации для приложений ASP.NET - PullRequest
3 голосов
/ 30 июня 2009

Я пишу веб-приложение в ASP.NET (2.0), VS2005. Основная причина разработки нового приложения (а не использования готовых готовых решений) заключается в том, что мне нужна полная поддержка как минимум двух языков (это интерфейс и данные). Я ищу лучшие способы решения i18n в ASP.NET (это может быть только пользовательский интерфейс, сортировка БД проще). Очевидно, что .NET предоставляет свои собственные механизмы i18n, и я уже использовал их раньше, но меня это не впечатлило - на мой взгляд, недостаточно получить текст, который я использовал в нескольких крупных проектах с открытым исходным кодом на C ++ и Java. Я ищу решение, которое удовлетворяло бы следующим требованиям:

  • все переводы собраны в одном месте
  • Легко добавлять новые языки
  • перевод не требует VS и может выполняться довольно неопытным пользователем (переводчиком)
  • обнаружение доступных языков
  • изменения в исходных строках, легко каскадные с существующими переводами
  • поддержка множественного числа форм (ngettext)

(есть еще идеи?)

Ответы [ 5 ]

6 голосов
/ 30 июня 2009

Я не уверен, что вы имеете против обычных Глобализация и Локализация , которые, как вы сказали, уже использовали.

. Локализация .Net прекрасно работала над проектами, для которых я ее использовал, без изменения основных принципов. Как именно он потерпел неудачу для вас?

Например, перечисленные вами функции могут быть реализованы с помощью ASP.Net Globalization Framework.

  • Все ваши переводы собраны в файлах вашего ресурса (.resx). Которые могут быть вставлены в одну или несколько сборок.
  • Добавить язык так же просто, как добавить файл ресурса с соответствующим префиксом культуры. Это снова может быть отдельный файл или встроенный ресурс.
  • Перевод не требует Visual Studio в зависимости от вашего сценария. Файлы ресурсов (.resx) являются файлами XML. Вам нужно перекомпилировать только если вы встраиваете файлы ресурсов.
  • поддерживается обнаружение языка, поддерживаются "каскадные" переводы.
  • Множественные числа могут иметь дело с использованием логики, но это кажется простым решением.

Наконец, если вам ничего не подходит, вы можете расширить модель поставщика ресурсов , чтобы получить текст локализации из любого источника, который вы выберете.

4 голосов
/ 18 февраля 2010

Небольшое примечание: gettext, очевидно, может использоваться как неуправляемая библиотека на платформах Win32. Прочтите сообщение этого чувака в блоге:

http://weblogs.manas.com.ar/spalladino/2009/10/07/gettext-i18n-strings-in-asp-net-controls/

Также из документации по языкам gettext на C #:

http://www.gnu.org/software/hello/manual/gettext/C_0023.html#C_0023

И еще один говорит о gettext i18n для asp.net:

http://www.expatsoftware.com/articles/2010/03/fixing-internationalization-in-aspnet.html


Мнение продолжается: я действительно думаю, что файл интернационализации с использованием ресурсов в стиле .NET не так хорош. Прежде всего, вы должны написать свои строки в коде:

My.Resources.ErrorMsgDbNotConnected

Прежде чем ваш код скомпилируется, вы должны добавить строку в файл ресурсов. Прыгать из того, над чем вы работаете, добавить строку в файл ресурсов, а затем вернуться, если вы спросите меня, - это помеха. Также верно и обратное: чтобы найти строку, нужно заглянуть в папку ресурсов. Менее радикально, но все же раздражает.

gettext использует строки вашего домашнего языка в качестве ключей:

gettext("Sorry, the database connection could not be created.")

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

gettext также имеет поддержку множественного числа, пола и других языковых вариаций, поэтому он может решить проблемы плюрализации («у вас 1 новое письмо») даже на английском языке!

Не думайте, что я ненавижу .NET: календарь, время и числовое форматирование .NET действительно превосходны, мне просто не хватает материала для перевода.

2 голосов
/ 07 декабря 2010

Выезд FairlyLocal. Это основанная на GetText библиотека i18n для ASP.NET , и это почти то же, что и вы.

Гораздо лучше, чем иметь дело с гигантскими файлами .resx и оборачивать весь ваш текст в элементы управления сервером.

1 голос
/ 30 июня 2009

.Net уже поддерживает добавление новых языков и обнаружение доступных языков.

Чтобы удовлетворить требования редактирования без VS и сбора всех ресурсов в одном месте:

Если вы хотите использовать встроенную среду .net для локализации, я бы рекомендовал использовать Zeta Resource Editor для редактирования файлов ресурсов. У Zeta есть некоторые приятные функции, такие как маркировка ресурсов, которые не имеют всех необходимых переводов, а также маркировка ресурсов, где символы форматирования (например, {0} {1}) не совпадают.

Если вы хотите что-то более централизованное, взгляните на создание поставщика ресурсов базы данных .

К сожалению, поддержка множественного числа отсутствует.

Я не знаю, что вы подразумеваете под "изменениями в исходных строках, которые легко каскадируются в существующие переводы".

0 голосов
/ 07 ноября 2017

Для множественного числа и пола вы можете использовать

https://github.com/jaska45/I18N

Он использует правила из CLDR без необходимости использования XML-файлов CLDR или DLL ICU. Все (логика и правила) реализованы в виде файлов C # библиотеки. Очень прост в использовании.

var message = MultiPattern.Format("one;I have {0} car;other;I have {0} cars", cars);

При локализации переводчик может предоставить столько шаблонов, сколько требуется целевому языку.

...