[options/utils] Add --default-language

This commit is contained in:
Yen Chi Hsuan 2015-12-13 05:00:26 +08:00
parent 7969009f00
commit 7da2b9e3bc
3 changed files with 42 additions and 20 deletions

View File

@ -27,6 +27,7 @@ from .utils import (
decodeOption, decodeOption,
DEFAULT_OUTTMPL, DEFAULT_OUTTMPL,
DownloadError, DownloadError,
i18n_service,
match_filter_func, match_filter_func,
MaxDownloadsReached, MaxDownloadsReached,
preferredencoding, preferredencoding,
@ -56,6 +57,9 @@ def _real_main(argv=None):
parser, opts, args = parseOpts(argv) parser, opts, args = parseOpts(argv)
if opts.default_language is not None:
i18n_service.set_default_language(opts.default_language)
# Set user agent # Set user agent
if opts.user_agent is not None: if opts.user_agent is not None:
std_headers['User-Agent'] = opts.user_agent std_headers['User-Agent'] = opts.user_agent

View File

@ -175,6 +175,10 @@ def parseOpts(overrideArguments=None):
action='store_true', dest='no_color', action='store_true', dest='no_color',
default=False, default=False,
help='Do not emit color codes in output') help='Do not emit color codes in output')
general.add_option(
'--default-language',
dest='default_language', metavar='LANG_CODE',
help='Specify the default user interface language. Language codes should correspond to RFC 1766 standard, such as en_US or zh_TW.UTF-8. Default is en_US.')
network = optparse.OptionGroup(parser, 'Network Options') network = optparse.OptionGroup(parser, 'Network Options')
network.add_option( network.add_option(

View File

@ -2527,29 +2527,43 @@ def _load_exe_resource(res_type, res_name):
return res_arr return res_arr
def tr(s): class I18N(object):
DOMAIN = 'youtube_dl' def __init__(self):
lang, _ = locale.getdefaultlocale() self.default_lang = None
try: self.domain = 'youtube_dl'
t = gettext.translation(DOMAIN, find_file_in_root('share/locale/'), [lang])
except (OSError, IOError): # OSError for 3.3+ and IOError otherwise
t = None
if t is None and sys.platform == 'win32' and hasattr(sys, 'frozen'): def translate(self, s):
locale_data_zip = _load_exe_resource('LOCALE_DATA', 'LOCALE_DATA.ZIP') if self.default_lang is not None:
f = io.BytesIO(locale_data_zip) lang = self.default_lang
zipf = zipfile.ZipFile(f) else:
with zipf.open('share/locale/%s/LC_MESSAGES/%s.mo' % (lang, DOMAIN)) as mo_file: lang, _ = locale.getdefaultlocale()
t = gettext.GNUTranslations(mo_file)
zipf.close()
if t is None: try:
return s t = gettext.translation(self.domain, find_file_in_root('share/locale/'), [lang])
except (OSError, IOError): # OSError for 3.3+ and IOError otherwise
t = None
ret = t.gettext(s) if t is None and sys.platform == 'win32' and hasattr(sys, 'frozen'):
if isinstance(ret, bytes): locale_data_zip = _load_exe_resource('LOCALE_DATA', 'LOCALE_DATA.ZIP')
ret = ret.decode('utf-8') f = io.BytesIO(locale_data_zip)
return ret zipf = zipfile.ZipFile(f)
with zipf.open('share/locale/%s/LC_MESSAGES/%s.mo' % (lang, self.domain)) as mo_file:
t = gettext.GNUTranslations(mo_file)
zipf.close()
if t is None:
return s
ret = t.gettext(s)
if isinstance(ret, bytes):
ret = ret.decode('utf-8')
return ret
def set_default_language(self, default_lang):
self.default_lang = default_lang
i18n_service = I18N()
tr = i18n_service.translate
def get_root_dirs(): def get_root_dirs():