支持多国语言

时间:2019-07-31 18:49:29

标签: java android sharedpreferences

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

public class SubscriptionsController : ApiController
{
    private MyDatabaseContext _db = new MyDatabaseContext();

    // POST: api/Subscriptions
    [HttpPost]
    [ResponseType(typeof(Subscription))]
    [Route("~/api/Subscriptions")] // This shouldn't be needed
    public async Task<IHttpActionResult> PostSubscriptionAsync(Subscription subscription)
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        _db.Subscriptions.Add(subscription);
        await _db.SaveChangesAsync();

        // Should I be required to specify the controller?
        var routeValues = new { controller = "Subscriptions", id = subscription.ID };

        return CreatedAtRoute("DefaultApi", routeValues, subscription);
    }
}

3 个答案:

答案 0 :(得分:2)

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的内容可能是错误的。可能与您的英语string.xml中的字符串ID不同。

您还可以打印出您当前的语言环境,以查看是否将其设置为“ iw”,如此处所述: 14389349

答案 1 :(得分:1)

尝试更改

Configuration configuration = new Configuration(); 

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

答案 2 :(得分:1)

本地化步骤:

1)从您拥有的每个文本中创建一个字符串。快捷方式是转到文本,单击文本,然后在左侧应出现一个黄色灯泡。单击它,然后单击Extract Resource,它将为您的文本生成一个名称,以添加到Strings.xml中。对每个文本都执行此操作。

2)转到“ Res”>“ Values”文件夹中的Strings.xml文件。右上角应该有蓝色文本,您可以单击Open Editor单击它。

3)单击左上方的小世界图标。找到希伯来语。选择它。单击确定。现在,您已经为希伯来语语言成功创建了一个单独的Strings.xml。

4)返回英文Strings.xml文件,再次单击Open Editor,您将看到所有存储为字符串的文本。单击一个字符串,在底部,您将看到“密钥”(它是字符串的ID名称),“默认值”(是英语版本)和“翻译”,您必须手动输入要翻译的英语单词的希伯来语翻译。对您要翻译的所有内容执行此操作。请注意,您在Translation字段中输入的任何内容都会自动添加到strings.xml(iw)文件中。

5)第4步还有另一种方法,即转到希伯来语Strings.xml并在此处手动输入信息,但是您必须确保“ Key”(字符串)与英语相同。因此,根据我的经验,第4步使其变得更容易。

6)您可以打开希伯来语Strings.XML来手动编辑您在其中输入的翻译,以防您想更改已经输入的较长文本。

所以它看起来像这样:

strings.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"
            />

strings.xml(iw)

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