使用复数形式以ResourcesNotFoundException结尾

20

我正在尝试在我的最新Android项目(SDK9)中使用复数。但总是以ResourcesNotFoundException结束。但是资源肯定存在:

这是我的strings.xml的一部分:

<plurals name="count_files">
  <item quantity="one">%d file</item>
  <item quantity="other">%d files</item>
  <item quantity="zero">%d files</item>
</plurals>

<plurals name="count_folders">
  <item quantity="one">%d folder</item>
  <item quantity="other">%d folders</item>
  <item quantity="zero">%d folders</item>
</plurals>

这里是使用它的部分:

textView.setText(
    getResources().getQuantityString(R.plurals.count_folders, countfolders, countfolders) 
    + ", " 
    + getResources().getQuantityString(R.plurals.count_files, countfiles, countfiles));

以下是异常信息:

android.content.res.Resources$NotFoundException: 复数资源 ID #0x7f050001 数量=0 项=other

我需要维护最多15种不同的语言,因此需要文本和复数形式的本地化。

请问我的代码有什么问题吗?

非常感谢您提前的帮助。


你想通过这个链接告诉我什么?我没有看到我的代码和这个网站上的代码有任何区别。我确实遇到了一个错误... - Harald Wilhelm
10
我找到了它。在字符串资源中,您可以在翻译文件(values-fr等)中省略相同的字符串。这些缺失的字符串将从默认语言中提取。但是在使用复数时会出现问题。在某个特定语言的strings.xml文件中,我省略了一些复数 <item></item> ,因为它们与默认语言相同。在添加这些缺失的复数后,它就正常工作了。 - Harald Wilhelm
1
我必须告诉你,在SDK9上至少存在一个错误。如果您在不同的语言文件中使用复数形式,并且用户使用不同的语言,即使默认语言(values文件夹)已定义了复数形式,应用程序也会崩溃。例如:您在values、values-pt和values-fr文件夹中使用复数形式。当用户使用values-es时,您的应用程序将崩溃。 - Harald Wilhelm
12
请回答您自己的问题并接受您的答案,这样该问题就不会出现在“未回答”列表中。 - David Wasser
请查看此帖子中的评论:https://dev59.com/1GQm5IYBdhLWcg3w4CPA - voghDev
显示剩余2条评论
2个回答

1
Android 实现复数形式的方式是需要考虑每个翻译中的每个复数项必须一致。例如,如果您在 'es' 中声明了 'zero' 的复数形式,并且您还有一个 'fr' 文件,那么您还需要在 'fr' 文件中定义 'zero' 的复数形式。

4
另一个导致相同错误的例子是:忘记了“另一个”数量。 - HannahMitt

1
在我的情况下,我错过了other值并收到异常:android.content.res.Resources $ NotFoundException:复数资源ID#0x7f050001数量=9项=其他(英语环境)。

<plurals>包含此组属性,您可以使用任何属性(不同的语言使用不同的值):

<plurals name="some_plurals">
    <item quantity="zero">%1$d = zero</item>
    <item quantity="one">%1$d = one</item>
    <item quantity="two">%1$d = two</item>
    <item quantity="few">%1$d = few</item>
    <item quantity="many">%1$d = many</item>
    <item quantity="other">%1$d = other</item>
</plurals>

另请参阅如何使用Android数量字符串(复数)以获取不同语言的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接