Advertisement
Guest User

i18n.py

a guest
Apr 28th, 2015
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.97 KB | None | 0 0
  1. #Embedded file name: scripts/client/helpers/i18n.py
  2. import types
  3. import json
  4. import gettext
  5. import BigWorld
  6. from collections import defaultdict
  7. from encodings import utf_8
  8. from debug_utils import LOG_WARNING, LOG_CURRENT_EXCEPTION, LOG_DEBUG
  9.  
  10. def _getTranslator(domain):
  11.     path = convert(BigWorld.wg_resolveFileName('text')[:-5])
  12.     return gettext.translation(domain, path, languages=['text'])
  13.  
  14.  
  15. class _TranslatorsCache(defaultdict):
  16.  
  17.     def __missing__(self, key):
  18.         self[key] = value = _getTranslator(key)
  19.         return value
  20.  
  21.  
  22. g_translators = _TranslatorsCache()
  23.  
  24. def convert(utf8String):
  25.     try:
  26.         return utf_8.decode(utf8String)[0]
  27.     except Exception:
  28.         LOG_CURRENT_EXCEPTION()
  29.         LOG_WARNING('Wrong UTF8 string', utf8String)
  30.         return utf_8.decode('----')[0]
  31.  
  32.  
  33. def isValidKey(key):
  34.     return key and key[0] == '#'
  35.  
  36.  
  37. def doesTextExist(key):
  38.     if not isValidKey(key):
  39.         return False
  40.     moName, subkey = key[1:].split(':', 1)
  41.     if not moName or not subkey:
  42.         return False
  43.     translator = g_translators[moName]
  44.     text = translator.gettext(subkey)
  45.     return text != subkey
  46.  
  47.  
  48. def makeString(key, *args, **kwargs):
  49.     try:
  50.         if not key or key[0] != '#':
  51.             return key
  52.         moName, subkey = key[1:].split(':', 1)
  53.         if not moName or not subkey:
  54.             return key
  55.         translator = g_translators[moName]
  56.         text = translator.gettext(subkey)
  57.         if text == '?empty?':
  58.             text = ''
  59.         if args:
  60.             try:
  61.                 text = text % args
  62.             except TypeError:
  63.                 LOG_WARNING("Arguments do not match string read by key '%s': %s", (key, args))
  64.                 return key
  65.  
  66.         elif kwargs:
  67.             try:
  68.                 text = text % kwargs
  69.             except TypeError:
  70.                 LOG_WARNING("Arguments do not match string read by key '%s': %s", (key, kwargs))
  71.                 return key
  72.  
  73.         return text
  74.     except Exception:
  75.         LOG_CURRENT_EXCEPTION()
  76.         LOG_WARNING('Key string incompatible with args', key, args, kwargs)
  77.         return key
  78.  
  79.  
  80. def makeStringJSON(key, argsStr):
  81.     try:
  82.         args = json.loads(argsStr)
  83.         if isinstance(args, dict):
  84.             utf8args = {}
  85.             for k, v in args.iteritems():
  86.                 utf8args[k.encode('utf-8')] = v.encode('utf-8')
  87.  
  88.             return makeString(key, **utf8args)
  89.         utf8args = []
  90.         for v in args:
  91.             if isinstance(v, str):
  92.                 utf8args.append(v.encode('utf-8'))
  93.             else:
  94.                 utf8args.append(v)
  95.  
  96.         return makeString(key, *tuple(utf8args))
  97.     except Exception:
  98.         LOG_CURRENT_EXCEPTION()
  99.         LOG_WARNING('Failed to translate JSON-encoded string to dict or list', key, argsStr)
  100.         return key
  101.  
  102.  
  103. def encodeUtf8(string):
  104.     if isinstance(string, types.UnicodeType):
  105.         return string.encode('utf-8', 'ignore')
  106.     return string
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement