- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试使用 getQuantityString基于 Android 开发人员指南检索数量字符串(复数)的资源中的方法 Quantity string (plurals)
我得到的错误是
Error:(604) Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
Error:(604) Found tag where is expected
<plurals name="productCount">
<item quantity="one" formatted="true">%1$d of %2$d product</item>
<item quantity="other" formatted="true">%1$d of %2$d products</item>
</plurals>
并尝试阅读如下
最佳答案
您不需要为这些项目中的任何一个设置“格式化”属性。使用数量字符串时,只有三种可能:
%d
或您需要的任何格式 %1$d
getQuantityString
方法,有两种重载:一种只有资源 id 和数量,另一种是额外的
Object... formatArgs
参数。
getQuantityString(@PluralsRes int id, int quantity)
方法。
getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs)
重载。注意:
所有 参数都必须存在于参数数组中。这意味着,如果资源字符串显示数量,则数量变量将
两次 传递给函数。
quantity
参数。
<resources>
<plurals name="test0">
<item quantity="one">Test ok</item>
<item quantity="other">Tests ok</item>
</plurals>
<plurals name="test1">
<item quantity="one">%d test ok</item>
<item quantity="other">%d tests ok</item>
</plurals>
<plurals name="test2">
<item quantity="one">%2$s: %1$d test ok</item>
<item quantity="other">%2$s: %1$d tests ok</item>
</plurals>
<plurals name="test3">
<item quantity="one">%3$s: %1$d test out of %2$d ok</item>
<item quantity="other">%3$s: %1$d tests out of %2$d ok</item>
</plurals>
</resources>
那么对
getQuantityString
的适当调用是:
int success = 1;
int total = 10;
String group = "Group name";
getResources().getQuantityString(R.plurals.test0, success)
// Test ok
getResources().getQuantityString(R.plurals.test1, success, success)
// 1 test ok
getResources().getQuantityString(R.plurals.test2, success, success, group)
// Group name: 1 test ok
getResources().getQuantityString(R.plurals.test3, success, success, total, group)
// Group name: 1 test out of 10 ok
success = 5;
getResources().getQuantityString(R.plurals.test0, success)
// Tests ok
getResources().getQuantityString(R.plurals.test1, success, success)
// 5 tests ok
getResources().getQuantityString(R.plurals.test2, success, success, group)
// Group name: 5 tests ok
getResources().getQuantityString(R.plurals.test3, success, success, total, group)
// Group name: 5 tests out of 10 ok
quantity
参数
quantity
的
getQuantityString
参数不是用来替换
%d
或
%1$d
等占位符的。相反,它用于从
item
本身结合资源文件的区域设置确定适当的
plurals
。
zero
、
one
、
two
、
few
、
many
、 5 可能 67.144)相比,这是一个不太直接的映射例如,提供额外的
other
will not work (at least not in English) ,即使
<item quantity="zero">
参数的值为 0。
quantity
在 Android 中的工作方式是通过
数量类 的概念。数量类是在给定语言中具有相同语法规则的一组数量值。这至关重要的意味着
plurals
,因为在这些语言中,句子在语法上不会根据给定的数量而有所不同。 other
表示文字值 1,one
表示所有其他值,包括 0。other
, 2 映射到 one
, 3-6 是 two
, 7-10 是 few
, 0 和 4 + 10719 many
(1, 101, 3001, ...)。 2 和以 02 结尾的值映射到 other
(2, 302, 1002, ...)。 3, 4 和以 03 或 04 结尾的值被映射到 one
(3, 4, 6004, ...)。其他的都是 two
(0、11、48、312……)。 few
(5, 12, 216, 4711, ...)。以 2、3 或 4 结尾的值(包括 2-4 本身)映射到 other
(3、42、103、12035374,...)。然而,这尊重 12、13 和 14 是此规则的异常(exception),因为它们映射到 many
。 (旁注:是的,从语法上讲,5 多而 12035374 少。) few
,因为这就是他们的语法工作方式。你可以从这个例子中看到数量类 many
甚至不一定只代表一个数字。 one
已经根据
one
参数和资源文件的区域设置为您完成了这项工作。 Android(主要)播放的规则在
Language Plural Rules 的
Unicode Common Locale Data Repository 中定义。这也是数量类名称的来源。
getQuantityString
,英语需要
quantity
和
other
,爱尔兰需要除
one
之外的所有内容,等等)。然而,在一种语言中,所有
other
都应该具有相同数量的项目,涵盖该特定语言所需的所有数量类别。
zero
的调用可以这样理解:
int success = 5;
int total = 10;
String group = "Group name";
getResources().getQuantityString(R.plurals.test3, success, success, total, group)
// \_____________/ \_____/ \___________________/
// | | |
// id: used to get the plurals resource | |
// quantity: used to determine the appropriate quantity class |
// formatArgs: used to positionally replace the placeholders %1, %2 and %3
plurals
参数的值“5”将意味着使用的
getQuantityString
将是来自中文、韩语、英语、斯洛文尼亚语和亚美尼亚语资源文件的数量类为
quantity
的那个,爱尔兰语为
item
以及波兰语为 0x9145 的那个。
other
。 few
。 many
。 other
或
few
的现成方法。
other
,将其拆分为
三个 单独的资源:
float
(double
项)%d match(es) found in %d file(s).
(%d match(es)
项)plurals
(普通参数化%d file(s)
项)plurals
进行适当的调用,然后对
%1$s found in %2$s.
进行第三次调用,前两个容易本地化的字符串为
strings
。
getQuantityString
,则翻译器可以照常翻译复数,然后将第三个资源翻译为
getString
以说明交换顺序。
关于android - 如何使用Android数量字符串(复数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41950952/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!