本地化/语言首选项不会更改机器人

时间:2015-08-30 16:57:55

标签: android localization widget

在我的应用程序中,我让用户更改应用程序的语言。我这样做:

        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
    final int N = appWidgetIds.length;
    for (int i = 0; i < N; i++) {
        updateAppWidget(context, appWidgetManager, appWidgetIds[i]);

        int appWidgetId = appWidgetIds[i];



        //get sharedPreferences
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
        //get default local for first initialization
        String defaultLanguage = context.getResources().getConfiguration().locale.getLanguage();
        Configuration configuration = new Configuration();
        //check language preference everytime onCreate of all activities, if there is no choise set default language
        Locale newLocaleLanguage = new Locale(sharedPreferences.getString("newLanguagePref",defaultLanguage));
        //finally setdefault language/locale according to newLocaleLanguage.
        Locale.setDefault(newLocaleLanguage);
        configuration.locale = newLocaleLanguage;
        context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());

        Log.i("DefaultLanguage", defaultLanguage);
        Log.i("PrefferedLanguage",sharedPreferences.getString("newLanguagePref",defaultLanguage));

appWidgetManager.updateAppWidget(appWidgetId, views);


        }

我可以使用此代码更改所有活动中的优先本地。但是本地化不适用于小部件。小部件总是以手机的本地语言显示。

如您所见,在LOG行上,我检查默认语言和优先语言,并且外翻很好。它们根据语言选择onUpdate方法更改。

在我看来,小部件无法看到自定义本地化pref,因为它可以在主屏幕上工作,它可以看到手机的本地化优势。是吗?

那么,改变小部件的语言是不可能的?我该如何处理呢?

2 个答案:

答案 0 :(得分:1)

  

但是本地化不适用于小部件。小部件总是以手机的本地语言显示。

在更改区域设置之前,您正在调用updateAppWidget(context, appWidgetManager, appWidgetIds[i]);。因此,您在getString()内通过updateAppWidget()获得的任何字符串都将使用默认的设备区域设置。

在更改进程'区域设置的代码后移动updateAppWidget()调用。如果这没有帮助,请将代码发布到updateAppWidget(),因为您在设置RemoteViews时可能存在问题。

答案 1 :(得分:0)

尝试android:supportsRtl="false"