Index: grit/format/android_xml.py |
diff --git a/grit/format/android_xml.py b/grit/format/android_xml.py |
index a04f35e18818bb28fbbcf31dfcc163f5ca2081fa..be9d79546d973fb0d6a0e7c15655f15f9ab9f254 100644 |
--- a/grit/format/android_xml.py |
+++ b/grit/format/android_xml.py |
@@ -42,19 +42,22 @@ ANDROID_JAVA_TAGGED_ONLY to "true" when building the grd file. For example: |
<message name="IDS_HELLO" formatter_data="android_java">Hello</message> |
-To specify the product attribute to be added to a <string> element, add |
-"android_java_product" to formatter_data. "android_java_name" can be used to |
-override the name in the <string> element. For example, |
- |
- <message name="IDS_FOO_NOSDCARD" formatter_data="android_java_product=nosdcard |
- android_java_name=foo">no card</message> |
- <message name="IDS_FOO_DEFAULT" formatter_data="android_java_product=default |
- android_java_name=foo">has card</message> |
- |
-would generate |
- |
- <string name="foo" product="nosdcard">"no card"</string> |
- <string name="foo" product="default">"has card"</string> |
+To generate Android plurals (aka "quantity strings"), use the ICU plural syntax |
+in the grd file. This will automatically be transformed into a <purals> element |
+in the output xml file. For example: |
+ |
+ <message name="IDS_CATS"> |
+ {NUM_CATS, plural, |
+ =1 {1 cat} |
+ other {# cats}} |
+ </message> |
+ |
+ will produce |
+ |
+ <plurals name="cats"> |
+ <item quantity="one">1 Katze</item> |
+ <item quantity="other">%d Katzen</item> |
+ </plurals> |
""" |
import os |
@@ -74,30 +77,13 @@ _TAGGED_ONLY_DEFAULT = False |
# In tagged-only mode, only messages with this tag will be ouputted. |
_EMIT_TAG = 'android_java' |
-# This tag controls the product attribute of the generated <string> element. |
-_PRODUCT_TAG = 'android_java_product' |
- |
-# This tag controls the name attribute of the generated <string> element. |
-_NAME_TAG = 'android_java_name' |
- |
-# The Android resource name and optional product information are placed |
-# in the grd string name because grd doesn't know about Android product |
-# information. |
-# TODO(newt): Don't allow product information in mangled names, since it can now |
-# be specified using "android_java_product" in formatter_data. |
-_NAME_PATTERN = lazy_re.compile( |
- 'IDS_(?P<name>[A-Z0-9_]+)(_product_(?P<product>[a-z]+))?\Z') |
+_NAME_PATTERN = lazy_re.compile('IDS_(?P<name>[A-Z0-9_]+)\Z') |
+# Most strings are output as a <string> element. Note the double quotes |
+# around the value to preserve whitespace. |
+_STRING_TEMPLATE = u'<string name="%s">"%s"</string>\n' |
-# In most cases we only need a name attribute and string value. |
-_SIMPLE_TEMPLATE = u'<string name="%s">%s</string>\n' |
- |
- |
-# In a few cases a product attribute is needed. |
-_PRODUCT_TEMPLATE = u'<string name="%s" product="%s">%s</string>\n' |
- |
- |
-# Some strings have a plural equivalent |
+# Some strings are output as a <plurals> element. |
_PLURALS_TEMPLATE = '<plurals name="%s">\n%s</plurals>\n' |
_PLURALS_ITEM_TEMPLATE = ' <item quantity="%s">%s</item>\n' |
_PLURALS_PATTERN = lazy_re.compile(r'\{[A-Z_]+,\s*plural,(?P<items>.*)\}$', flags=re.S) |
@@ -196,28 +182,19 @@ def _FormatPluralMessage(message): |
def _FormatMessage(item, lang): |
"""Writes out a single string as a <resource/> element.""" |
- value = item.ws_at_start + item.Translate(lang) + item.ws_at_end |
- # Replace < > & with < > & to ensure we generate valid XML and |
- # replace ' " with \' \" to conform to Android's string formatting rules. |
- value = xml.sax.saxutils.escape(value, {"'": "\\'", '"': '\\"'}) |
- plurals = _FormatPluralMessage(value) |
- # Wrap the string in double quotes to preserve whitespace. |
- value = '"' + value + '"' |
- |
mangled_name = item.GetTextualIds()[0] |
match = _NAME_PATTERN.match(mangled_name) |
if not match: |
raise Exception('Unexpected resource name: %s' % mangled_name) |
name = match.group('name').lower() |
- product = match.group('product') |
- # Override product or name with values in formatter_data, if any. |
- product = item.formatter_data.get(_PRODUCT_TAG, product) |
- name = item.formatter_data.get(_NAME_TAG, name) |
+ value = item.ws_at_start + item.Translate(lang) + item.ws_at_end |
+ # Replace < > & with < > & to ensure we generate valid XML and |
+ # replace ' " with \' \" to conform to Android's string formatting rules. |
+ value = xml.sax.saxutils.escape(value, {"'": "\\'", '"': '\\"'}) |
+ plurals = _FormatPluralMessage(value) |
if plurals: |
return _PLURALS_TEMPLATE % (name, plurals) |
- elif product: |
- return _PRODUCT_TEMPLATE % (name, product, value) |
else: |
- return _SIMPLE_TEMPLATE % (name, value) |
+ return _STRING_TEMPLATE % (name, value) |