Небольшое примечание: 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 действительно превосходны, мне просто не хватает материала для перевода.