java - Robolectric String.format() 格式化数字时的无效行为
问题描述
在应用程序中有一个简单的代码:
String.format(Locale.getDefault(), "%d", count)
一切都很好,但是当用户在电话上选择阿拉伯语时,数字将以阿拉伯语文字格式显示(很明显)。
那么问题出在哪里?
我想用 Locale.US 替换 Locale.getDefault() 以获得“正常”数字,但也想为此编写测试。
还有一个问题。测试中的 Robolectric 显示前的数字。“3”而不是“٢”。
我的测试代码:
public class SideMenuMainContentViewTest {
private static final String ARABIC_LANGUAGE_LOCALE_CODE = "ar-rEG";
private SideMenuMainContentView sideMenuMainContentView;
private AttributeSet attributeSet;
@Before
public void setup() {
attributeSet = Robolectric.buildAttributeSet().build();
sideMenuMainContentView = new SideMenuMainContentView(ApplicationProvider.getApplicationContext(), attributeSet);
}
@Test
public void test_getBookedRidesCountText() {
assertEquals("3", sideMenuMainContentView.getBookedRidesCountText(3));
}
@Test
@Config(qualifiers = ARABIC_LANGUAGE_LOCALE_CODE)
public void test_getBookedRidesCountText_notSupportedLanguage() {
assertEquals("3", sideMenuMainContentView.getBookedRidesCountText(3));
}
}
知道如何改变这种行为并在应用程序运行时获得测试中的文字数字吗?
解决方案
要使像 ٢ 这样的东方阿拉伯数字出现在单元测试中,您可以将语言环境设置为Locale.forLanguageTag("ar-u-nu-arab")
- 使用工厂方法forLanguageTag
和 BCP 47 语言标记字符串“ar-u-nu-arab”,它明确指定了阿拉伯编号系统。new Locale("ar-u-nu-arab")
不起作用,因为构造函数不解析编号系统。
有关 Java 8 语言环境中编号系统的更多信息,请参阅此链接:https ://www.oracle.com/technetwork/java/javase/java8locales-2095355.html#num-systems
推荐阅读
- google-data-studio - 架构对象中的 Google Data Studio 自定义字段
- vue.js - Can't find module in vuejs error, but still builds fine
- neural-network - 具有反向传播的 FF 神经网络的参考工作
- python - Fabric2 获取文件引发 IsADirectoryError
- python - 设置 debug = False 会使 Django 应用程序崩溃并出现以下错误,如何解决?
- gradle - Gradle 每次刷新都会再次下载所有依赖项
- vba - 如何创建一个名称在字符串中的新表单实例?
- jquery - 如何在表格的每一行上插入一个countif列?
- android - 当文本很大并且正在滚动时,TextView Shape 背景不显示
- android - 在 Spinner 中处理冗长的数据加载