2017-05-02 13 views
0

私のXamarin Formsアプリケーションでは、電話言語に基づいていないユーザーの選択に基づいて、英語とアラビア語のような複数の言語をサポートしています。 次のコードは、言語をアラビア語または英語に変更する方法を示しています。ユーザーの選択に基づいてアプリケーション言語の設定を変更します。

次のコードは、Xamarin Forms SamplesからTranslateExtensionの一部です:

public object ProvideValue(IServiceProvider serviceProvider) 
{ 
    if (Text == null) 
     return ""; 
    ResourceManager resmgr = new ResourceManager(ResourceId, typeof(TranslateExtension).GetTypeInfo().Assembly); 

    var translation = resmgr.GetString(Text, ci); 
    if (translation == null) 
    { 
#if DEBUG 
     throw new ArgumentException(
     String.Format("Key '{0}' was not found in resources '{1}' for culture '{2}'.", Text, ResourceId, ci.Name),"Text"); 
#else 
     translation = Text; // HACK: returns the key, which GETS DISPLAYED TO THE USER 
#endif 
    } 
    return translation; 
} 

誰も私を助け、どのようにデバイスの言語に基づいていないユーザーの選択に基づいて、この仕事をするために教えてもらえます。手伝ってくれてありがとう。

答えて

0

あなたが貼り付けたコードは明らかにthis exampleです。その例に基づいて、拡張子が機能するCultureInfoを含む変数ciがあることがわかります。

したがって、問題の解決策は、その変数ciを正しく設定していることです。ユーザーがロケールを選択した場合は、おそらくそれをどこかに保存します。 TranslateExtensionコンストラクタで、そのロケールを保存した場所からそのロケールを取得できます。

ような何か:またTranslateExtensionを使用していないが正しく変換されますリソース(AppResourcesをすることができます、あなたは、リソースファイルに付ける名前ですので、あなたはまた、リソース上のCultureInfoを設定することができ

public TranslateExtension() { 
    var userlocaleSvc = DependencyService.Get<IUserLocale>(); 
    if (userlocaleSvc.CustomCultureInfoSet()) // this method is made up 
    { 
     ci = userlocaleSvc.GetCultureInfo(); // this method is made up 
    } else { 
     ci = DependencyService.Get<ILocalize>().GetCurrentCultureInfo(); // fallback 
    } 
} 

Xamarin documentation on localization here

を参照してください

AppResources.Culture = new CultureInfo ("<shortcode of selected locale>"); 

:あなたは任意の名前)を使用します

関連する問題