[options/utils] Add --default-language
This commit is contained in:
parent
7969009f00
commit
7da2b9e3bc
@ -27,6 +27,7 @@ from .utils import (
|
||||
decodeOption,
|
||||
DEFAULT_OUTTMPL,
|
||||
DownloadError,
|
||||
i18n_service,
|
||||
match_filter_func,
|
||||
MaxDownloadsReached,
|
||||
preferredencoding,
|
||||
@ -56,6 +57,9 @@ def _real_main(argv=None):
|
||||
|
||||
parser, opts, args = parseOpts(argv)
|
||||
|
||||
if opts.default_language is not None:
|
||||
i18n_service.set_default_language(opts.default_language)
|
||||
|
||||
# Set user agent
|
||||
if opts.user_agent is not None:
|
||||
std_headers['User-Agent'] = opts.user_agent
|
||||
|
@ -175,6 +175,10 @@ def parseOpts(overrideArguments=None):
|
||||
action='store_true', dest='no_color',
|
||||
default=False,
|
||||
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.add_option(
|
||||
|
@ -2527,29 +2527,43 @@ def _load_exe_resource(res_type, res_name):
|
||||
return res_arr
|
||||
|
||||
|
||||
def tr(s):
|
||||
DOMAIN = 'youtube_dl'
|
||||
lang, _ = locale.getdefaultlocale()
|
||||
try:
|
||||
t = gettext.translation(DOMAIN, find_file_in_root('share/locale/'), [lang])
|
||||
except (OSError, IOError): # OSError for 3.3+ and IOError otherwise
|
||||
t = None
|
||||
class I18N(object):
|
||||
def __init__(self):
|
||||
self.default_lang = None
|
||||
self.domain = 'youtube_dl'
|
||||
|
||||
if t is None and sys.platform == 'win32' and hasattr(sys, 'frozen'):
|
||||
locale_data_zip = _load_exe_resource('LOCALE_DATA', 'LOCALE_DATA.ZIP')
|
||||
f = io.BytesIO(locale_data_zip)
|
||||
zipf = zipfile.ZipFile(f)
|
||||
with zipf.open('share/locale/%s/LC_MESSAGES/%s.mo' % (lang, DOMAIN)) as mo_file:
|
||||
t = gettext.GNUTranslations(mo_file)
|
||||
zipf.close()
|
||||
def translate(self, s):
|
||||
if self.default_lang is not None:
|
||||
lang = self.default_lang
|
||||
else:
|
||||
lang, _ = locale.getdefaultlocale()
|
||||
|
||||
if t is None:
|
||||
return s
|
||||
try:
|
||||
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 isinstance(ret, bytes):
|
||||
ret = ret.decode('utf-8')
|
||||
return ret
|
||||
if t is None and sys.platform == 'win32' and hasattr(sys, 'frozen'):
|
||||
locale_data_zip = _load_exe_resource('LOCALE_DATA', 'LOCALE_DATA.ZIP')
|
||||
f = io.BytesIO(locale_data_zip)
|
||||
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():
|
||||
|
Loading…
x
Reference in New Issue
Block a user