Index: packagerChrome.py |
=================================================================== |
--- a/packagerChrome.py |
+++ b/packagerChrome.py |
@@ -283,32 +283,48 @@ def importGeckoLocales(params, files): |
for chromeLocale, operaLocale in operaMapping.iteritems(): |
chromeFile = '_locales/%s/messages.json' % chromeLocale |
operaFile = '_locales/%s/messages.json' % operaLocale if operaLocale != None else None |
if chromeFile in files: |
if operaFile != None: |
files[operaFile] = files[chromeFile] |
del files[chromeFile] |
-def fixMissingTranslations(files): |
- # Chrome requires messages used in manifest.json to be given in all languages |
+def truncate(text, length_limit): |
+ if len(text) <= length_limit: |
+ return text |
+ return text[:length_limit - 1].rstrip() + u"\u2026" |
Sebastian Noack
2014/09/03 18:53:37
I think we should at least generate a warning when
Wladimir Palant
2014/09/03 19:05:22
I considered doing that. However, the main effect
Sebastian Noack
2014/09/03 19:13:03
Perfect. Even better would be to have proper monit
Wladimir Palant
2014/09/03 21:21:31
Not at all. It should spam you because you are the
Sebastian Noack
2014/09/04 10:40:02
So I feel this is the wrong place to address that
Wladimir Palant
2014/09/04 13:27:03
That's what you did originally. But that means tha
Sebastian Noack
2014/09/04 13:29:55
I agree, but that isn't what I meant to suggest. g
Wladimir Palant
2014/09/04 13:47:43
Take care how exactly? Do you speak Telugu? I don'
Sebastian Noack
2014/09/04 14:00:58
In the worst case one can still decide to truncate
|
+ |
+def fixTranslationsForCWS(files): |
+ # Chrome Web Store requires messages used in manifest.json to be present in |
+ # all languages. It also enforces length limits for extension names and |
+ # descriptions. |
defaults = {} |
data = json.loads(files['_locales/%s/messages.json' % defaultLocale]) |
for match in re.finditer(r'__MSG_(\S+)__', files['manifest.json']): |
name = match.group(1) |
defaults[name] = data[name] |
+ limits = {} |
+ manifest = json.loads(files['manifest.json']) |
+ for key, limit in (('name', 45), ('description', 132), ('short_name', 12)): |
+ match = re.search(r'__MSG_(\S+)__', manifest.get(key, "")) |
+ if match: |
+ limits[match.group(1)] = limit |
+ |
for filename in files: |
if not filename.startswith('_locales/') or not filename.endswith('/messages.json'): |
continue |
data = json.loads(files[filename]) |
for name, info in defaults.iteritems(): |
data.setdefault(name, info) |
- |
+ for name, limit in limits.iteritems(): |
+ if name in data: |
+ data[name]['message'] = truncate(data[name]['message'], limit) |
files[filename] = toJson(data) |
def signBinary(zipdata, keyFile): |
import M2Crypto |
if not os.path.exists(keyFile): |
M2Crypto.RSA.gen_key(1024, 65537, callback=lambda x: None).save_key(keyFile, cipher=None) |
key = M2Crypto.EVP.load_key(keyFile) |
key.sign_init() |
@@ -366,17 +382,18 @@ def createBuild(baseDir, type='chrome', |
[f for f, _ in metadata.items('preprocess')], |
{'needsExt': True} |
) |
if metadata.has_section('import_locales'): |
importGeckoLocales(params, files) |
files['manifest.json'] = createManifest(params, files) |
- fixMissingTranslations(files) |
+ if type == 'chrome': |
+ fixTranslationsForCWS(files) |
if devenv: |
import buildtools |
import random |
files.read(os.path.join(buildtools.__path__[0], 'chromeDevenvPoller__.js'), relpath='devenvPoller__.js') |
files['devenvVersion__'] = str(random.random()) |
if (metadata.has_option('general', 'backgroundScripts') and |