猿问

支持多国语言

我正在尝试在我的应用程序中实现多语言(英语和希伯来语)。我已经创建了 2 个字符串文件并实现了应该支持多语言功能的所有方法。但是,当我运行该应用程序并在对话框中选择“希伯来语”时,布局从左到右变为从右到左(希伯来语应该如此),但语言没有改变。谁能帮我解决这个问题?


    import android.app.Activity;

    import android.content.Context;

    import android.content.DialogInterface;

    import android.content.Intent;

    import android.content.SharedPreferences;

    import android.content.res.Configuration;

    import android.os.Bundle;

    import android.os.Vibrator;

    import android.support.v7.app.AlertDialog;

    import android.support.v7.app.AppCompatActivity;

    import android.view.View;

    import android.widget.Button;

    import java.util.Locale;


    public class MainActivity extends AppCompatActivity {


        private Button btn_chooseBoard;

        private Button btn_store;

        private Button btn_language;


        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            loadLocale();


            setContentView(R.layout.lay_main);


            Constants instance = Constants.getInstance();


            instance.getAllPlayers();

            instance.getAllBoards();


            btn_chooseBoard = (Button) findViewById(R.id.btn_startGame);

            btn_store = (Button) findViewById(R.id.btn_popup_store);

            btn_language = (Button) findViewById(R.id.btn_language);


            btn_chooseBoard.setOnClickListener(new View.OnClickListener() {

                @Override

                public void onClick(View view) {


                    Intent intent = new Intent(MainActivity.this, ChooseBoard.class);

                    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

                    startActivity(intent);


                    ((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).vibrate(20);

                }

            });



慕斯王
浏览 145回答 3
3回答

梵蒂冈之花

Android 有自己的 API 来处理不同的语言环境。用户在 Android 系统设置中设置他的语言环境。您不需要向用户询问他的语言环境。只需将英文字符串放入 res/values/strings.xml,将希伯来语字符串放入 res/values-iw/strings.xml。也可以通过使用开始/结束而不是左/右来处理布局 xml 中的 ltr/rtl。编辑:我不知道是否可以像在 setLocale() 中那样更改应用程序的语言环境。您应该关闭您的应用程序并将其从应用程序堆栈中删除。然后在 Android 设置中将语言更改为希伯来语并重新打开您的应用程序。如果您现在拥有在布局 .xml 中定义的 rtl 布局,但没有希伯来语字符串,那么您的 strings.xml 可能有问题。您的 strings.xml 可能没有正确的路径 (res/values-iw/strings.xml)。或者 strings.xml 的内容可能是错误的。可能与您的英文 strings.xml 中的字符串 ID 不同。您还可以打印出您当前的语言环境,看看它是否设置为“iw”

白衣非少年

本地化步骤:1)从您拥有的每个文本中创建一个字符串。快捷方式是转到文本,单击文本,左侧会出现一个黄色灯泡。单击它并单击Extract Resource,它将为您的文本生成一个名称以添加到 Strings.xml。对每个文本都这样做。2)转到 Res > Values 文件夹中的 Strings.xml 文件。右上角应该有蓝色文字,你可以点击Open Editor点击它。3)单击左上角的小世界图标。找到希伯来语。选择它。点击确定。现在您已经成功地为希伯来语语言创建了一个单独的 Strings.xml。4)返回到您的英文 Strings.xml 文件,Open Editor再次单击,您将看到所有已存储为字符串的文本。单击一个字符串,在底部你会看到“Key”,它是字符串的 id 名称,Default Value 是英文版本,以及 Translation,你必须手动输入要翻译的英文单词的希伯来语翻译。为您想要翻译的所有内容执行此操作。请注意,无论您在翻译字段中输入什么,都会自动添加到 strings.xml(iw) 文件中。5)第 4 步的替代方法是转到希伯来文 Strings.xml 并在那里手动输入信息,但您必须确保“密钥”(字符串的 ID 名称)与英文相同。因此,根据我的经验,第 4 步使它变得更容易。6)您可以打开 Hebrew Strings.XML 手动编辑您放入其中的翻译,以防您想要更改已经放入的较长文本。所以它看起来像这样:字符串.xml<resources> &nbsp;&nbsp;&nbsp;&nbsp;<string&nbsp;name="app_name">KotlinKennyGame</string> &nbsp;&nbsp;&nbsp;&nbsp;<string&nbsp;name="test">This&nbsp;is&nbsp;a&nbsp;test.</string> </resources>activity_main.xml<TextView&nbsp;android:layout_width="wrap_content"&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height="wrap_content" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:text="@string/test" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/>字符串.xml(iw)<resources> &nbsp;&nbsp;&nbsp;&nbsp;<string&nbsp;name="app_name">KotlinKennyGame</string> &nbsp;&nbsp;&nbsp;&nbsp;<string&nbsp;name="test">זה&nbsp;מבחן</string> </resources>

繁花如伊

尝试改变Configuration&nbsp;configuration&nbsp;=&nbsp;new&nbsp;Configuration();到Configuration&nbsp;configuration&nbsp;=&nbsp;getBaseContext().getResources().getConfiguration();
随时随地看视频慕课网APP

相关分类

Java
我要回答