为了账号安全,请及时绑定邮箱和手机立即绑定

支持多国语言

支持多国语言

慕斯王 2023-05-10 15:16:04
我正在尝试在我的应用程序中实现多语言(英语和希伯来语)。我已经创建了 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);                }            });
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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”


查看完整回答
反对 回复 2023-05-10
?
白衣非少年

TA贡献1155条经验 获得超0个赞

本地化步骤:

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>
    <string name="app_name">KotlinKennyGame</string>
    <string name="test">This is a test.</string>
</resources>

activity_main.xml

<TextView android:layout_width="wrap_content" 
          android:layout_height="wrap_content"
          android:text="@string/test"
            />

字符串.xml(iw)

<resources>
    <string name="app_name">KotlinKennyGame</string>
    <string name="test">זה מבחן</string>
</resources>


查看完整回答
反对 回复 2023-05-10
?
繁花如伊

TA贡献2012条经验 获得超12个赞

尝试改变

Configuration configuration = new Configuration();

Configuration configuration = getBaseContext().getResources().getConfiguration();


查看完整回答
反对 回复 2023-05-10
  • 3 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信