如何让 Android 翻译布尔值?
How do I get Android to translate booleans?
在 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>
当应用程序以英语运行时,会给出以下之一:
- True/False?真
- True/False?假
但是在西班牙语中,实际的布尔值似乎没有得到翻译:
- Verdadero/Falso?真
- Verdadero/Falso?假
如何让 Android 转换布尔值?
我没有找到 "simple" 解决方案,但可以像这样解决此任务。
在 Android Studio 和 6.0.1 Android.
上测试
首先,在 res/strings.xml 中:在 'resources' 标签内,像这样指定本地化的 true / false 值:
<string name="TRUE">Ja</string>
<string name="FALSE">Nein</string>
使用 %s(不是 %b!)使用 xliff 标签定义字符串:
<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 class 内。您的应用程序可能会有所不同。请注意名称空间。 **
在您的 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";
您可以轻松地扩展上述示例以说明 yes/no、up/down 等翻译。由于此方法非常昂贵,如果您大量使用它,您可以考虑缓存结果。
我也在 android class 中。我认为布尔值的打印格式化程序是“%Bits with a capital "B" not a lower case "b"。闲暇见..
<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 年前发布的,但我认为我的解决方案可能会有所帮助。
我们可以在资源文件中为不同语言的 true
和 false
创建字符串:
对于英语:
<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);
在 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>
当应用程序以英语运行时,会给出以下之一:
- True/False?真
- True/False?假
但是在西班牙语中,实际的布尔值似乎没有得到翻译:
- Verdadero/Falso?真
- Verdadero/Falso?假
如何让 Android 转换布尔值?
我没有找到 "simple" 解决方案,但可以像这样解决此任务。 在 Android Studio 和 6.0.1 Android.
上测试首先,在 res/strings.xml 中:在 'resources' 标签内,像这样指定本地化的 true / false 值:
<string name="TRUE">Ja</string>
<string name="FALSE">Nein</string>
使用 %s(不是 %b!)使用 xliff 标签定义字符串:
<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 class 内。您的应用程序可能会有所不同。请注意名称空间。 **
在您的 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";
您可以轻松地扩展上述示例以说明 yes/no、up/down 等翻译。由于此方法非常昂贵,如果您大量使用它,您可以考虑缓存结果。
我也在 android class 中。我认为布尔值的打印格式化程序是“%Bits with a capital "B" not a lower case "b"。闲暇见..
<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 年前发布的,但我认为我的解决方案可能会有所帮助。
我们可以在资源文件中为不同语言的 true
和 false
创建字符串:
对于英语:
<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);