2016-06-16 3 views
0

私は、MulitlingualAppToolkit 4.0で2つの言語(英語とドイツ語)で自分のアプリケーションをローカライズしました。英語は基本言語であり、ドイツ語は英語による翻訳です。 翻訳はフォルダ "strings.en"と "strings.de"内にresw-fileとして保存されます。 App.xaml.csアプリで私のローカリゼーションは私のDevelopment-Machineでのみ動作しますか?

()私はこのような文化を設定します。私はそれを認識するので(私はこの記事https://www.pedrolamas.com/2015/11/02/cultureinfo-changes-in-uwp/からのWindows 10の地域・文化へのこの静かな奇妙な方法を持って

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = GetCurrentCulture(); 
CultureInfo.CurrentUICulture = GetCurrentCulture(); 

private CultureInfo GetCurrentCulture() 
{ 
    var cultureName = new DateTimeFormatter("longdate", new[] {"US"}).ResolvedLanguage; 
    return new CultureInfo(cultureName); 
} 

CultureInfo.CurrentCultureとCultureInfo.CurrentUICultureは、自分のマシンの地域設定と言語設定で何を設定していても常に "en-EN"です。

PrimaryLanguageOverrideが期待通りに機能するかどうかを確認するために、TextBoxをtbTest私の最初のページとこのイベントへのボタンのリンク:

(Windows10-を

は、デバッグ、または私の開発・マシンからアプリケーションを実行するには、すべてが期待通りに動作しますが、私はAPPX-バンドルを作成し、他にインストールしてください:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = tbTest.Text; 
    Frame.Navigate(this.GetType(), 0); 
    System.IO.File.AppendAllText(System.IO.Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "PrimaryLanguageOverride.txt"), 
     DateTime.Now + " - Actual PrimaryLanguageOverride:\n " + WIndows.Globalization.ApplicationLanguages.PrimaryLanguageOverride); 
    } 
    catch(Exception ex) { Helper.Log.LogUnhandledError(ex); } 
} 

は今奇妙なものが来ますデスクトップ)デバイスでは、アプリケーションはその言語を認識しません。 私の状況では、デバイスはドイツ語、地域およびその言語に設定されています。また、テストプロシージャを使用する場合、有効なカルチャ名である限り、設定した文字列をdefenetively取得します。たとえば、 "en-EN"、 "en-US"、 "de-DE"、 "de" "en"(これらはすべて私の開発マシン上で正常に動作しています)。無効な文字列の場合は、例外が発生し、処理されていないエラーログにログエントリがあります。 Pageをリフレッシュして、PrimaryLanguageOverride-Logに新しく設定した言語を書きますが、翻訳したテキストは変更されません。

私の質問は、これは共通の問題です(UWP/Win10で認識されているため、カルチャーシステムがちょっと台無しです)か、間違った手順でApp-Cultureを無効にしますか?

答えて

1

これはAppXBundlingの問題です。バンドルをインストールすると、インストールされている言語パックの現在のOSがチェックされ、バンドルから関連する言語リソースがコピーされ、他の言語ファイルは省略されます。単一のバンドルの目的は、必要なリソースをコピーしてアプリケーションを構築することであり、システムにない言語は無関係とみなされます。修正として、単一のバンドルの生成を停止し、各CPUアーキテクチャー用のパッケージを作成することができます。 Check this for more info

+0

回答のためのThx。私たちはすでにこの解決策を見つけましたが、MATについて多くのリソースがないので、これはうまくいけば他のUWP開発者を助けるでしょう。 –

+0

あなたの歓迎:D。では、ソリューションとして、CPUアーキテクチャに複数のパッケージを使用していますか?または、アプリケーションから手動でリソースをロードしますか? – Kishath

+1

マイクロソフトはアプリケーションを多言語化するための選択の手段としてMAT4.0を提示しているので、現時点ではアンバンドルパッケージを使用しています。 –

関連する問題