diff options
author | Narayan Kamath <narayan@google.com> | 2013-12-10 09:49:59 +0000 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2013-12-10 13:37:32 +0000 |
commit | 7e1b8ff3e15b35b92978e572ccbfbc47cedce242 (patch) | |
tree | 4393ea93637c97d20808c49f197e5ead561a645a /tools/aapt/ResourceTable.cpp | |
parent | 6e2d0c1d91f644ab50e0c0b7cae4306262a4ca41 (diff) |
Don't pseudolocalize untranslatable strings.
bug: https://code.google.com/p/android/issues/detail?id=63004
Change-Id: I8e47a53d887144dc867111e42313d0e113b83ea1
Diffstat (limited to 'tools/aapt/ResourceTable.cpp')
-rw-r--r-- | tools/aapt/ResourceTable.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp index f2e525481399..6ced8b3f915a 100644 --- a/tools/aapt/ResourceTable.cpp +++ b/tools/aapt/ResourceTable.cpp @@ -1342,7 +1342,7 @@ status_t compileResourceFile(Bundle* bundle, curType = string16; curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_STRING; curIsStyled = true; - curIsPseudolocalizable = true; + curIsPseudolocalizable = (translatable != false16); } else if (strcmp16(block.getElementName(&len), drawable16.string()) == 0) { curTag = &drawable16; curType = drawable16; @@ -1408,15 +1408,24 @@ status_t compileResourceFile(Bundle* bundle, // Check whether these strings need valid formats. // (simplified form of what string16 does above) size_t n = block.getAttributeCount(); + + // Pseudolocalizable by default, unless this string array isn't + // translatable. + curIsPseudolocalizable = true; for (size_t i = 0; i < n; i++) { size_t length; const uint16_t* attr = block.getAttributeName(i, &length); - if (strcmp16(attr, translatable16.string()) == 0 - || strcmp16(attr, formatted16.string()) == 0) { + if (strcmp16(attr, translatable16.string()) == 0) { + const uint16_t* value = block.getAttributeStringValue(i, &length); + if (strcmp16(value, false16.string()) == 0) { + curIsPseudolocalizable = false; + } + } + + if (strcmp16(attr, formatted16.string()) == 0) { const uint16_t* value = block.getAttributeStringValue(i, &length); if (strcmp16(value, false16.string()) == 0) { curIsFormatted = false; - break; } } } @@ -1426,7 +1435,6 @@ status_t compileResourceFile(Bundle* bundle, curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_STRING; curIsBag = true; curIsBagReplaceOnOverwrite = true; - curIsPseudolocalizable = true; } else if (strcmp16(block.getElementName(&len), integer_array16.string()) == 0) { curTag = &integer_array16; curType = array16; |