Недавно я углубился в локализацию с помощью .NET. По сути, я узнал, как настроить форму (используя свойство Language и Localizable), а затем соответствующим образом изменить культуру.
Однако я обнаружил, что при переносе моих жестко запрограммированных английских строк в автоматически сгенерированные файлы ресурсов и использования .GetString ("Key") - ну, скажем так, это не очень понравилось: P.
Я решил создать отдельный набор файлов resx, предназначенных исключительно для жестко закодированных переводов строк. Они следовали соглашению / требованию [name]. [Culture-code] .resx. Я сделал из них для каждого соответствующего языка; например appstrings.de.resx (для немецкого языка) и appstrings.resx (в качестве инварианта базовой линии).
Чтобы использовать эти новые ресурсы, я создал экземпляр ResourceManager и Resource Set
Dim resManager As New ResourceManager("LanguageTest.appstrings", Assembly.GetExecutingAssembly)
Dim resSet As ResourceSet = resManager.GetResourceSet(My.Application.UICulture, True, True)
Текущая культура пользовательского интерфейса была установлена (например, на немецкий) с помощью
My.Application.ChangeUICulture("de")
Оригинальный выпуск
Если только resSet.GetString ("Key") явно не определено в appstrings.de.resx , он вернет пустую строку. Могу ли я в любом случае сделать это откатом к appstrings.resx (где «Ключ» существует), который, как я предполагал, будет базовой линией по умолчанию?
Обновление
Rhapsody сделала предложение ниже, хотя сам фактический совет не сработал, на самом деле он вызвал интересную точку, используя resManager.GetString ("Key"), а не resSet.GetString ("Key"). Это, кажется, работает без изъянов. То есть значения, присутствующие в специализированном языковом файле, возвращаются, в то время как «отсутствующие» значения возвращаются к культуре по умолчанию при доступе одним ключом.
Последующий выпуск
Единственная оставшаяся проблема заключается в том, будет ли влияние производительности на использование ResourceManger в отличие от кэшированного ResourceSet таким пагубным?