如何让Android翻译布尔值?

时间:2016-10-15 21:55:18

标签: android boolean android-resources translate xliff

在Android Studio中,我尝试使用xliff(一种接收布尔值的字符串)本地化为西班牙语。

在英语中,我的字符串资源如下:

<string name="true_false_test">True/False?      <xliff:g example="true" id="true_false">%b</xliff:g></string>

用西班牙语,像这样:

<string name="true_false_test">Verdadero/Falso? <xliff:g id="true_false" example="true">%b</xliff:g></string>

当应用程序以英语运行时,会出现以下情况之一:

  • 真/假?真
  • 真/假?假

但在西班牙语中,实际的布尔值似乎没有得到翻译:

  • Verdadero / FALSO?真
  • Verdadero / FALSO?假

如何让Android翻译布尔值?

3 个答案:

答案 0 :(得分:0)

我没有找到“简单”的解决方案,但可以像这样绕过这个任务。 在Android Studio和6.0.1 Android上进行测试。

首先,在res / strings.xml中:在'resources'标记内,指定您的本地化true / false值,如下所示:

<string name="TRUE">Ja</string>
<string name="FALSE">Nein</string>

使用xliff标签定义字符串%s (NOT%b!),如下所示:

<string name="does_mary_have_a_little_lamb">Does Mary have a little lamb? <xliff:g name="trueFalse" example="true">%s</xliff:g>

**以下示例位于mainActivity.java类中。您的申请可能有所不同请注意命名空间。 **

在你的java代码中创建一个将布尔值转换为本地化字符串表示的函数:

/**
 * function to convert boolean values to localized true / false strings
 * @param b boolean to be translated
 * @return String containing localized true / false message
 */
private String translateBoolean(boolean b) {
    String trueFalse = Boolean.toString(b).toUpperCase(); // true / false is a reserved keyword, so convert to TRUE / FALSE
    String packageName = getPackageName();
    int resId = getResources().getIdentifier(trueFalse, "string", packageName);

    // this is to make sure that we got a valid resId else getString() will force close
    if (resId > 0) {
        return getString(resId);
    }
    else
    {
        return trueFalse; // provide a fallback 'true/false' if translation is not available
    }
}

然后在你的字符串函数中使用它:

String output = getString(R.string.does_mary_have_a_little_lamb,translateBoolean(hasLittleLamb)) + "\n";

您可以轻松扩展上述示例,以考虑是/否,上/下等翻译。由于这种方法非常昂贵,因此如果大量使用它,可以考虑缓存结果。

答案 1 :(得分:0)

我也在android类中..我认为布尔的打印格式化程序是&#34;%B&#34; 它有一个资本&#34; B&#34;不是小写&#34; b&#34;。看你松弛..

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="whip">whip?<xliff:g id="whip">%B</xliff:g></string>
</resources>

private String createOrderSummary(int price) {
    String mess = "Name: "+ getName() +"\n";
    mess += getString(R.string.add_whipped_cream, whip);///whip IS A BOOL VAL.
    return  mess;
}

答案 2 :(得分:0)

我刚才遇到了同样的问题。然后我走来走去,弄清楚了。尽管这个问题是2年前发布的,但我认为我的解决方案可能会有所帮助。

我们可以为资源文件中的不同语言的truefalse创建字符串:

对于英语:

<string name="boolean_true">true</string>
<string name="boolean_false">false</string>

对于中文:

<string name="boolean_true">是</string>
<string name="boolean_false">否</string>

然后,我们可以将boolean值转换为所需的任何语言:

boolean isActive = false;
String  strIsActive = isActive
                      ? getString(R.string.boolean_true)
                      : getString(R.string.boolean_false);