Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(364)

Side by Side Diff: grit/tool/android2grd.py

Issue 1291173002: Remove support for product attributes in Android xml files. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk
Patch Set: s/outputted/output Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """The 'grit android2grd' tool.""" 6 """The 'grit android2grd' tool."""
7 7
8 8
9 import getopt 9 import getopt
10 import os.path 10 import os.path
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 for child in resources.childNodes: 236 for child in resources.childNodes:
237 if child.nodeType == Node.COMMENT_NODE: 237 if child.nodeType == Node.COMMENT_NODE:
238 # Remove leading/trailing whitespace; collapse consecutive whitespaces. 238 # Remove leading/trailing whitespace; collapse consecutive whitespaces.
239 description = ' '.join(child.data.split()) 239 description = ' '.join(child.data.split())
240 elif child.nodeType == Node.ELEMENT_NODE: 240 elif child.nodeType == Node.ELEMENT_NODE:
241 if child.tagName != 'string': 241 if child.tagName != 'string':
242 print 'Warning: ignoring unknown tag <%s>' % child.tagName 242 print 'Warning: ignoring unknown tag <%s>' % child.tagName
243 else: 243 else:
244 translatable = self.IsTranslatable(child) 244 translatable = self.IsTranslatable(child)
245 raw_name = child.getAttribute('name') 245 raw_name = child.getAttribute('name')
246 product = child.getAttribute('product') or None 246 if not _STRING_NAME.match(raw_name):
247 grd_name = self.__FormatName(raw_name, product) 247 print 'Error: string name contains illegal characters: %s' % raw_nam e
Nico 2015/08/13 22:45:51 > 80 cols
newt (away) 2015/08/13 23:10:52 Done.
248 grd_name = 'IDS_' + raw_name.upper()
248 # Transform the <string> node contents into a tclib.Message, taking 249 # Transform the <string> node contents into a tclib.Message, taking
249 # care to handle whitespace transformations and escaped characters, 250 # care to handle whitespace transformations and escaped characters,
250 # and coverting <xliff:g> placeholders into <ph> placeholders. 251 # and coverting <xliff:g> placeholders into <ph> placeholders.
251 msg = self.CreateTclibMessage(child) 252 msg = self.CreateTclibMessage(child)
252 msg_node = self.__CreateMessageNode(messages, grd_name, description, 253 msg_node = self.__CreateMessageNode(messages, grd_name, description,
253 msg, translatable) 254 msg, translatable)
254 messages.AddChild(msg_node) 255 messages.AddChild(msg_node)
255 # Reset the description once a message has been parsed. 256 # Reset the description once a message has been parsed.
256 description = '' 257 description = ''
257 258
258 def __FormatName(self, name, product=None):
259 """Formats the message name.
260
261 Names in the strings.xml files should be lowercase with underscores. In grd
262 files message names should be mostly uppercase with a IDS prefix. We also
263 will annotate names with product information (lowercase) where appropriate.
264
265 Args:
266 name: The message name as found in the string.xml file.
267 product: An optional product annotation.
268
269 Returns:
270 String containing the grd style name that will be used in the translation
271 console.
272 """
273 if not _STRING_NAME.match(name):
274 print 'Error: string name contains illegal characters: %s' % name
275 grd_name = 'IDS_%s' % name.upper()
276 product_suffix = ('_product_%s' % product.lower()) if product else ''
277 return grd_name + product_suffix
278
279 def CreateTclibMessage(self, android_string): 259 def CreateTclibMessage(self, android_string):
280 """Transforms a <string/> element from strings.xml into a tclib.Message. 260 """Transforms a <string/> element from strings.xml into a tclib.Message.
281 261
282 Interprets whitespace, quotes, and escaped characters in the android_string 262 Interprets whitespace, quotes, and escaped characters in the android_string
283 according to Android's formatting and styling rules for strings. Also 263 according to Android's formatting and styling rules for strings. Also
284 converts <xliff:g> placeholders into <ph> placeholders, e.g.: 264 converts <xliff:g> placeholders into <ph> placeholders, e.g.:
285 265
286 <xliff:g id="website" example="google.com">%s</xliff:g> 266 <xliff:g id="website" example="google.com">%s</xliff:g>
287 becomes 267 becomes
288 <ph name="website"><ex>google.com</ex>%s</ph> 268 <ph name="website"><ex>google.com</ex>%s</ph>
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 A <string> element is by default translatable unless otherwise marked. 470 A <string> element is by default translatable unless otherwise marked.
491 """ 471 """
492 if android_string.hasAttribute('translatable'): 472 if android_string.hasAttribute('translatable'):
493 value = android_string.getAttribute('translatable').lower() 473 value = android_string.getAttribute('translatable').lower()
494 if value not in ('true', 'false'): 474 if value not in ('true', 'false'):
495 print 'Warning: translatable attribute has invalid value: %s' % value 475 print 'Warning: translatable attribute has invalid value: %s' % value
496 return value == 'true' 476 return value == 'true'
497 else: 477 else:
498 return True 478 return True
499 479
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698