美文网首页Android开发经验总结篇
国际化(多语言切换)

国际化(多语言切换)

作者: zhengLH | 来源:发表于2018-04-26 18:39 被阅读4次

    【效果图】
    (A)国家化(多语言选择)

    国际化.png

    (1)切换到中文

    中文.png

    (2)切换到英文

    英文.png

    【总结】做N套xml, 切换不同xml来实现N多语言切换。(注意:命名规则)
    【步骤】
    (1) 右击res目录,打开对应的对话框:

    目录1.png

    (2) 选择local选项,然后点击右推的按钮,创建和选择新的语言资源文件,注意以下这几个地方需要正确填写:

    图片2.png 图片3.png

    此时,你会发现在开发项目目录中多了一个文件夹和文件:

    图片4.png

    (3) 接着把默认的values/strings.xml中的内容全部复制到values-en/strings.xml中,然后把内容中的文字顺便翻译成对应的语言:(百度翻译,谷歌翻译都行)

    中文翻译.png
    英文翻译.png

    【注】来到这里,资源文件就配置好了,以下是更改系统的语言设置。

    Resources resources = context.getResources();
    Configuration configuration = resources.getConfiguration();
    configuration.locale = newLocale;
    resources.updateConfiguration(configuration,                                                                                                                       
    resources.getDisplayMetrics());//更新配置
    

    【注】
    一般的更改语言的选项都在App的设置里面,改变系统的Locale以后并不会马上生效,需要重启App以后才会有效。如果要及时生效,就需要重启MainActivity,方法如下:

     //重启MainActivity
    Intent intent = new Intent(SettingActivity.this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK |           
       Intent.FLAG_ACTIVITY_NEW_TASK);                           
    startActivity(intent);
    

    【完整源代码】

    【1】 使用

      /**
      * @Author Lee
      * @Time 2018/4/26
      * @Theme   多语言切换(国际化)
      */
    
    public class MultilingualSwitchActivity extends AppCompatActivity implements View.OnClickListener {
    
    private Dialog mDialod;
    private Window window;
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activit_multilingual);
        initView();
    
    }
    
    private void initView() {
    
        findViewById(R.id.tv_language).setOnClickListener(this);
    }
    
    private void showDialogLanguage() {
    
                mDialod = new Dialog(MultilingualSwitchActivity.this, R.style.dialog);
                mDialod.requestWindowFeature(Window.FEATURE_NO_TITLE);
                window = mDialod.getWindow();
                window.setGravity(Gravity.TOP | Gravity.RIGHT);
                window.setContentView(R.layout.dialog_language);
    
                TextView tvSingle = window.findViewById(R.id.tv_simple);
                TextView tvTradition = window.findViewById(R.id.tv_tradition);
    
    
                tvSingle.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
    
                        mDialod.dismiss();
                        switchLanguage("zh");
    
                        Intent i = MultilingualSwitchActivity.this.getPackageManager().getLaunchIntentForPackage(MultilingualSwitchActivity.
                                     this.getPackageName());
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
                        MultilingualSwitchActivity.this.overridePendingTransition(0, 0);
                    }
                });
    
                tvTradition.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
    
                        mDialod.dismiss();
                        switchLanguage("hk");
    
                        Intent i = MultilingualSwitchActivity.this.getPackageManager().getLaunchIntentForPackage(MultilingualSwitchActivity.this.getPackageName());
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
                        MultilingualSwitchActivity.this.overridePendingTransition(0, 0);
                    }
                });
                      mDialod.show();
    
            }
    
    
    //核心设置的代码
    protected void switchLanguage(String language) {
    
        Resources resources = getResources();
        Configuration config = resources.getConfiguration();
        DisplayMetrics dm = resources.getDisplayMetrics();
        switch (language) {
            case "zh":
                config.locale = Locale.CHINESE;
                resources.updateConfiguration(config, dm);
                break;
            case "hk":
                config.locale = Locale.ENGLISH;
                resources.updateConfiguration(config, dm);
                break;
            default:
                config.locale = Locale.US;
                resources.updateConfiguration(config, dm);
                break;
        }
    }
    
    @Override
    public void onClick(View view) {
    
        showDialogLanguage();
        }
     }
    

    【2】activit_multilingual 布局文件
    【注意】 text 里面的文本 要用软引用 @string/... 这种格式,方能实现多语言切换。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="@dimen/margin_10dp">
    
    <TextView
        android:id="@+id/tv_language"
        android:background="@color/colorOrange"
        android:layout_marginRight="8dp"
        android:layout_alignParentRight="true"
        android:padding="@dimen/padding_10dp"
        android:layout_gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/change_language"
        android:textColor="@color/black"
        android:drawableRight="@mipmap/down"/>
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_centerInParent="true"
        android:text="@string/content"/>
    
     </RelativeLayout>
    

    【3】dialog_language 对话框布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/select_frame"
    android:layout_marginTop="40dp"
    android:layout_marginRight="@dimen/margin_10dp"
    android:orientation="vertical">
    
    <TextView
        android:id="@+id/tv_tradition"
        android:layout_width="wrap_content"
        android:paddingTop="@dimen/padding_10dp"
        android:paddingRight="@dimen/padding_20dp"
        android:paddingLeft="@dimen/padding_20dp"
        android:paddingBottom="@dimen/padding_10dp"
        android:layout_height="wrap_content"
        android:textColor="@color/main_color"
        android:text="繁体中文"/>
    
    <View
        android:layout_width="match_parent"
        android:layout_height="0.5dp"
        android:paddingLeft="@dimen/padding_5dp"
        android:paddingRight="@dimen/padding_5dp"
        android:background="@color/colorD5D5D5"/>
    
    <TextView
        android:id="@+id/tv_simple"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="@dimen/padding_20dp"
        android:paddingLeft="@dimen/padding_20dp"
        android:textColor="@color/main_color"
        android:paddingBottom="@dimen/padding_10dp"
        android:paddingTop="@dimen/padding_10dp"
        android:text="简体中文"/>
    

    </LinearLayout>

    【4】 style 文件 对话框样式

     <style name="dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:backgroundDimAmount">0.6</item>
    </style>
    

    【参考】
    (1) https://blog.csdn.net/qq_21983189/article/details/73735278
    (2) https://blog.csdn.net/myth13141314/article/details/6203719

    相关文章

      网友评论

        本文标题:国际化(多语言切换)

        本文链接:https://www.haomeiwen.com/subject/tqmmlftx.html