12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #!/usr/bin/env python
- import os
- import json
- import click
- from babel.messages.pofile import read_po
- MINIMUM = 80
- def is_translated(msg):
- if isinstance(msg.string, basestring):
- return bool(msg.string)
- for item in msg.string:
- if not item:
- return False
- return True
- @click.command()
- @click.argument('catalog_file', type=click.Path())
- def cli(catalog_file):
- # Read the old ones back. Once we are in, we will never go.
- with open(catalog_file) as f:
- rv = json.load(f)['supported_locales']
- base = 'src/sentry/locale'
- for locale in os.listdir(base):
- fn = os.path.join(base, locale, 'LC_MESSAGES', 'django.po')
- if not os.path.isfile(fn):
- continue
- total_count = 0
- translated_count = 0
- with open(fn) as f:
- catalog = read_po(f)
- for msg in catalog:
- total_count += 1
- if is_translated(msg):
- translated_count += 1
- pct = translated_count / float(total_count) * 100
- click.echo('% -7s % 2d%%' % (
- locale,
- pct,
- ), err=True)
- if pct >= MINIMUM and locale not in rv:
- rv.append(locale)
- with open(catalog_file, 'w') as f:
- json.dump({
- 'supported_locales': sorted(rv)
- }, f, indent=2)
- f.write('\n')
- if __name__ == '__main__':
- cli()
|