У меня есть следующие настройки в моем приложении:Как я могу получить строку ресурса без отката к культуре по умолчанию
MyResources.resx // english strings
MyResources.zh-CN.resx // chinese strings
Из-за запаздывания в процессе перевода, некоторые клавиши имеют английские значения, но ни один китаец значения. В других случаях весь файл resx zh-CN не существует. По умолчанию ResourceManager
вернется к английскому значению, если китайская ценность не существует. Это приемлемо для моего использования в большинстве сценариев. Тем не менее, в настоящее время мне нужно получить строку китайского ресурса БЕЗ возврата на английский язык.
Мой вопрос: что такое правильный способ?
я сначала подумал, что это может быть сделано с помощью метода GetResourceSet:
var manager = MyResources.ResourceManager;
var set = manager.GetResourceSet(CultureInfo.GetCultureInfo("zh-CN"), createIfNotExists: true, tryParents: false);
if (set == null || set.GetString("key") == null) { /* not translated! */ }
// however, this has issues because resource set lookup is cached:
// this will force the association of the zh-CN culture with the
// English resource set unde the hood
manager.GetString("key", CultureInfo.GetCultureInfo("zh-CN"));
// now this returns the English resource set, thus breaking my check
var set2 = manager.GetResourceSet(CultureInfo.GetCultureInfo("zh-CN"), createIfNotExists: true, tryParents: false);
if (set == null || set.GetString("key") == null) { /* checks whether key exists in english :-(*/ }
Добавить значения в файл ресурсов zh-CN – Fabio
@Fabio предположительно вы предлагаете какие-то значения заглушки? Я не согласен, что это идеально; однако данный код является библиотекой, которая используется ~ 30 различными кодами, управляемыми разными разработчиками. Я хотел бы иметь решение, которое не полагается на них, мгновенно обновляя свои кодовые базы пустыми файлами resx всякий раз, когда мы начинаем переводить наши ресурсы на новый язык. – ChaseMedallion
Как строки доступа доступны в коде? Сгенерированными классами (Visual Studio будет генерировать классы ресурсов) 'ResourceNamespace.MyResourcesFileName.KeyofString' или с помощью ResourceManager с жестко закодированным ключом:' ResourceManager.GetString («KeyofString») '? – Fabio