如何在语言中显示字符串资源并将其存储在其他语言中?

时间:2016-01-27 16:17:01

标签: android

我有一个Spinner显示字符串数组的不同选项。所选字符串将存储到数据库中以供以后使用。 例如,微调器在英语(values-en)中显示此项目:

<string name="none">N - None</string>
<string name="month">M - Once a month or less</string>
<string name="oweek">W - Once a week</string>

用户选择一个,然后将字符串存储在数据库中。

问题是应用了不同的区域设置。例如,在西班牙语(values-es)中,我有以下选项:

<string name="none">N - Ninguno</string>
<string name="month">M - Una vez al mes o menos</string>
<string name="oweek">W - Una vez a la semana</string>

当用户选择一个字符串时,字符串将以以西班牙语存储到数据库中。我需要用英文存储它们。基本上,应用程序需要显示选项“N - Ninguno”并存储“N - None”。

有没有办法获取所选字符串的id并存储其他语言环境中的值?还是其他任何解决方案?

1 个答案:

答案 0 :(得分:4)

我认为你有两种选择。

  • 创建另一列以保存名称和实际字符串。

  • 在数据库中存储默认语言

我会选择第一个,但是如果你想在数据库中只使用英文字符串,然后用当前语言检查它们:

要从其他语言环境中获取字符串,您可以使用此功能。

private String getStringLocale(int resourceId, Locale newLocale){
    Resources res = getResources();
    Configuration conf = res.getConfiguration();

    //Saving Locale so we can restore it later
    Locale savedLocale = conf.locale;

    //Set new Locale depending on the parameters we are getting
    conf.locale = newLocale;
    res.updateConfiguration(conf, null);

    //Saving String
    String str = res.getString(resourceId);

    //Restoring original Locale
    conf.locale = savedLocale;
    res.updateConfiguration(conf, null);

    return str;
}

并像这样使用它:

Log.d("LocaleSpanish", getStringLocale(R.string.app_name, new Locale("es")));
Log.d("LocaleEnglish", getStringLocale(R.string.app_name, new Locale("en")));