へのフォールバックせずにリソース文字列を取得することができ、私は私のアプリでは、次のセットアップがあります翻訳プロセスに遅れが原因はどのように私は、デフォルトの文化
MyResources.resx // english strings
MyResources.zh-CN.resx // chinese strings
を、いくつかのキーは、英語の値が、ありません中国の値を持っています。それ以外の場合は、zh-CN resxファイル全体が存在しません。中国の価値が存在しない場合、デフォルトで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