[options/utils] Add --default-language
This commit is contained in:
parent
7969009f00
commit
7da2b9e3bc
@ -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
|
||||||
|
@ -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(
|
||||||
|
@ -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():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user