自定义多语言支持

时间:2010-10-26 09:58:53

标签: android

我知道为语言创建一个新值目录,后面是语言代码。对于german:values-de或french:values-fr然后将我们的string.xml复制到其中并翻译每个条目。这基于电话本地化设置

我想知道我们是否可以绕过手机设置并让用户在应用内选择所需的语言?

我的要求是,我想在我的应用程序中提供语言选择选项,并让用户选择他想要的应用程序语言..如何在string.xml之间动态切换(针对不同语言)???

提前致谢

4 个答案:

答案 0 :(得分:11)

创建方法,设置基本的Locale.Lets说

public static void setDefaultLocale(Context context,String locale) {
        Locale locJa = new Locale(locale);
        Locale.setDefault(locJa);

        Configuration config = new Configuration();
        config.locale = locJa;

        context.getResources().updateConfiguration(config, context.getResources()
                .getDisplayMetrics());

        locJa = null;
        config = null;
    }

现在检查用户选择Locale的时间。(这里基本上我使用菜单进行语言选择)。

Configuration config = new Configuration();
String newLocale = config.locale.getLanguage().substring(0, 2)
    .toLowerCase();
if ("ja".equalsIgnoreCase(newLocale)) {
// Call above method with context & newLocale
} 
// Sequentially you check for Locale & change that.

答案 1 :(得分:5)

查看这篇文章......基本上是一样的。

Changing Locale within the app itself

Locale appLoc = new Locale("en");
Locale.setDefault(appLoc);
Configuration appConfig = new Configuration();
appConfig.locale = appLoc;
getBaseContext().getResources().updateConfiguration(appConfig,
    getBaseContext().getResources().getDisplayMetrics());

答案 2 :(得分:1)

如果你想根据各自的语言获取图片,你应该像这样创建下面的布局文件夹。首先我以自定义本地化为例。

Locale appLoc = new Locale("xx");
Locale.setDefault(appLoc);
Configuration appConfig = new Configuration();
appConfig.locale = appLoc;
getBaseContext().getResources().updateConfiguration(appConfig,
    getBaseContext().getResources().getDisplayMetrics()); 

你的布局文件夹应该是layout-xx,你的drawable文件夹也应该是drawable-xx.But有一件事,当你改变语言时,你必须刷新布局。我在我的应用程序中使用,按一下按钮并设置背景图片。但有时图像没有改变,所以我这样做了。

btn.setBackgroundDrawable(null);
btn.setBackgroundResource(R.drwable.yourimage);

答案 3 :(得分:0)

It is very easy just follow this link

    public static class Extensions
    {

        public static IDisposable SubscribeDisposable (this IObservable<IDisposable> o )
        {
            var d = new SerialDisposable();

            var s = o.Subscribe(v =>
            {
                d.Disposable = v;
            });

            return new CompositeDisposable(s, d);

        }


    }

}

- 详情请见:http://www.theappguruz.com/blog/multi-language-support-to-android-app#sthash.eGmzq57K.dpuf