Remove HIDDEN_LANGUAGES, sync with .po files and product-details. (#6536)

* Remove HIDDEN_LANGUAGES, sync with .po files and product-details.

Fixes #6534, Fixes #6535 

* Remove test referencing cy language, imho it doesn't make sense to have languages lying around in the code that aren't in product-details anyway, just adds another layer of writing things down needlessly

* Add comment about bidi languages

* Add test

* Remove fa-IR from languages, we never supported it in the past.

* Remove custom locales from test settings.
This commit is contained in:
Christopher Grebs 2017-10-04 08:35:31 +02:00 коммит произвёл GitHub
Родитель 2b9693e42e
Коммит aa1fcbd435
10 изменённых файлов: 66 добавлений и 46 удалений

Просмотреть файл

Просмотреть файл

@ -80,20 +80,6 @@ ALLOW_SELF_REVIEWS = True
# Make sure the debug toolbar isn't used during the tests. # Make sure the debug toolbar isn't used during the tests.
INSTALLED_APPS = [app for app in INSTALLED_APPS if app != 'debug_toolbar'] INSTALLED_APPS = [app for app in INSTALLED_APPS if app != 'debug_toolbar']
# These are the default languages. If you want a constrainted set for your
# tests, you should add those in the tests.
AMO_LANGUAGES = (
'af', 'ar', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'en-US', 'en-GB', 'es',
'eu', 'fa', 'fi', 'fr', 'ga-IE', 'he', 'hu', 'id', 'it', 'ja', 'ko', 'mn',
'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sl', 'sq', 'sv-SE', 'uk',
'vi', 'zh-CN', 'zh-TW',
)
# Make sure we run our tests with debug languages.
AMO_LANGUAGES = AMO_LANGUAGES + DEBUG_LANGUAGES
LANGUAGES = lazy(lazy_langs, dict)(AMO_LANGUAGES)
LANGUAGE_URL_MAP = dict([(i.lower(), i) for i in AMO_LANGUAGES])
TASK_USER_ID = 1337 TASK_USER_ID = 1337
ES_DEFAULT_NUM_REPLICAS = 0 ES_DEFAULT_NUM_REPLICAS = 0

Просмотреть файл

@ -547,9 +547,7 @@ class Addon(OnChangeMixin, ModelBase):
addon.status = amo.STATUS_NULL addon.status = amo.STATUS_NULL
locale_is_set = (addon.default_locale and locale_is_set = (addon.default_locale and
addon.default_locale in ( addon.default_locale in settings.AMO_LANGUAGES and
settings.AMO_LANGUAGES +
settings.HIDDEN_LANGUAGES) and
data.get('default_locale') == addon.default_locale) data.get('default_locale') == addon.default_locale)
if not locale_is_set: if not locale_is_set:
addon.default_locale = to_language(trans_real.get_language()) addon.default_locale = to_language(trans_real.get_language())

Просмотреть файл

@ -110,7 +110,6 @@ def test_to_language(test_input, expected):
('en-us', 'en-US'), ('en-us', 'en-US'),
('en_US', 'en-US'), ('en_US', 'en-US'),
('en', 'en-US'), ('en', 'en-US'),
('cy', 'cy'), # A hidden language.
('FR', 'fr'), ('FR', 'fr'),
('es-ES', None), # We don't go from specific to generic. ('es-ES', None), # We don't go from specific to generic.
('xxx', None), ('xxx', None),

Просмотреть файл

@ -184,7 +184,11 @@ def test_get_locale_from_lang(lang):
locale = get_locale_from_lang(lang) locale = get_locale_from_lang(lang)
debug_languages = ('dbg', 'dbr', 'dbl') debug_languages = ('dbg', 'dbr', 'dbl')
expected_language = lang[:2] if lang not in debug_languages else 'en' long_languages = ('hsb', 'dsb', 'kab')
expected_language = (
lang[:3] if lang in long_languages else (
lang[:2] if lang not in debug_languages else 'en'
))
assert isinstance(locale, Locale) assert isinstance(locale, Locale)
assert locale.language == expected_language assert locale.language == expected_language
@ -194,3 +198,9 @@ def test_get_locale_from_lang(lang):
if separator: if separator:
territory = lang.split(separator)[1] territory = lang.split(separator)[1]
assert locale.territory == territory assert locale.territory == territory
@pytest.mark.parametrize('lang', settings.LANGUAGES_BIDI)
def test_bidi_language_in_amo_languages(lang):
"""Make sure all bidi marked locales are in AMO_LANGUAGES too."""
assert lang in settings.AMO_LANGUAGES or lang in settings.DEBUG_LANGUAGES

Просмотреть файл

@ -827,9 +827,7 @@ def find_language(locale):
if not locale: if not locale:
return None return None
LANGS = settings.AMO_LANGUAGES + settings.HIDDEN_LANGUAGES if locale in settings.AMO_LANGUAGES:
if locale in LANGS:
return locale return locale
# Check if locale has a short equivalent. # Check if locale has a short equivalent.
@ -839,7 +837,7 @@ def find_language(locale):
# Check if locale is something like en_US that needs to be converted. # Check if locale is something like en_US that needs to be converted.
locale = to_language(locale) locale = to_language(locale)
if locale in LANGS: if locale in settings.AMO_LANGUAGES:
return locale return locale
return None return None

Просмотреть файл

@ -153,21 +153,62 @@ LANGUAGE_CODE = 'en-US'
# Note: If you update this list, don't forget to also update the locale # Note: If you update this list, don't forget to also update the locale
# permissions in the database. # permissions in the database.
AMO_LANGUAGES = ( AMO_LANGUAGES = (
'af', 'ar', 'bg', 'bn-BD', 'ca', 'cs', 'da', 'de', 'dsb', 'af', # Afrikaans
'el', 'en-GB', 'en-US', 'es', 'eu', 'fa', 'fi', 'fr', 'ga-IE', 'he', 'hu', 'ar', # Arabic
'hsb', 'id', 'it', 'ja', 'ka', 'kab', 'ko', 'nn-NO', 'mk', 'mn', 'nl', 'bg', # Bulgarian
'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sl', 'sq', 'sv-SE', 'uk', 'ur', 'bn-BD', # Bengali (Bangladesh)
'vi', 'zh-CN', 'zh-TW', 'ca', # Catalan
'cs', # Czech
'da', # Danish
'de', # German
'dsb', # Lower Sorbian
'el', # Greek
'en-GB', # English (British)
'en-US', # English (US)
'es', # Spanish
'eu', # Basque
'fa', # Persian
'fi', # Finnish
'fr', # French
'ga-IE', # Irish
'he', # Hebrew
'hsb', # Upper Sorbian
'hu', # Hungarian
'id', # Indonesian
'it', # Italian
'ja', # Japanese
'ka', # Georgian
'kab', # Kabyle
'ko', # Korean
'mk', # Macedonian
'mn', # Mongolian
'nl', # Dutch
'nn-NO', # Norwegian (Nynorsk)
'pl', # Polish
'pt-BR', # Portuguese (Brazilian)
'pt-PT', # Portuguese (Portugal)
'ro', # Romanian
'ru', # Russian
'sk', # Slovak
'sl', # Slovenian
'sq', # Albanian
'sv-SE', # Swedish
'uk', # Ukrainian
'ur', # Urdu
'vi', # Vietnamese
'zh-CN', # Chinese (Simplified)
'zh-TW', # Chinese (Traditional)
) )
# Bidirectional languages.
# Locales in here *must* be in `AMO_LANGUAGES` too.
LANGUAGES_BIDI = ('ar', 'fa', 'he', 'dbr', 'ur')
# Explicit conversion of a shorter language code into a more specific one. # Explicit conversion of a shorter language code into a more specific one.
SHORTER_LANGUAGES = { SHORTER_LANGUAGES = {
'en': 'en-US', 'ga': 'ga-IE', 'pt': 'pt-PT', 'sv': 'sv-SE', 'zh': 'zh-CN' 'en': 'en-US', 'ga': 'ga-IE', 'pt': 'pt-PT', 'sv': 'sv-SE', 'zh': 'zh-CN'
} }
# Not shown on the site, but .po files exist and these are available on the
# L10n dashboard. Generally languages start here and move into AMO_LANGUAGES.
HIDDEN_LANGUAGES = ('cy', 'hr', 'sr', 'sr-Latn', 'tr')
DEBUG_LANGUAGES = ('dbr', 'dbl') DEBUG_LANGUAGES = ('dbr', 'dbl')
@ -198,7 +239,6 @@ PROD_DETAILS_STORAGE = 'olympia.lib.product_details_backend.NoCachePDFileStorage
# Override Django's built-in with our native names # Override Django's built-in with our native names
LANGUAGES = lazy(lazy_langs, dict)(AMO_LANGUAGES) LANGUAGES = lazy(lazy_langs, dict)(AMO_LANGUAGES)
LANGUAGES_BIDI = ('ar', 'fa', 'fa-IR', 'he', 'dbr', 'ur')
LANGUAGE_URL_MAP = dict([(i.lower(), i) for i in AMO_LANGUAGES]) LANGUAGE_URL_MAP = dict([(i.lower(), i) for i in AMO_LANGUAGES])

Просмотреть файл

@ -29,9 +29,7 @@ def credits(request):
.order_by('display_name') .order_by('display_name')
.distinct()) .distinct())
languages = sorted(list( languages = sorted(list(set(settings.AMO_LANGUAGES) - set(['en-US'])))
set(settings.AMO_LANGUAGES + settings.HIDDEN_LANGUAGES) -
set(['en-US'])))
localizers = [] localizers = []
for lang in languages: for lang in languages:

Просмотреть файл

@ -196,8 +196,9 @@ class TranslationDescriptor(related.ReverseSingleRelatedObjectDescriptor):
rv = None rv = None
for locale, string in dict_.items(): for locale, string in dict_.items():
loc = amo_to_language(locale) loc = amo_to_language(locale)
if loc not in settings.AMO_LANGUAGES + settings.HIDDEN_LANGUAGES: if loc not in settings.AMO_LANGUAGES:
continue continue
# The Translation is created and saved in here. # The Translation is created and saved in here.
trans = self.translation_from_string(instance, locale, string) trans = self.translation_from_string(instance, locale, string)

Просмотреть файл

@ -230,16 +230,6 @@ class TranslationTestCase(BaseTestCase):
translation.activate('fr') translation.activate('fr')
self.trans_eq(get_model().name, 'oui', 'fr') self.trans_eq(get_model().name, 'oui', 'fr')
def test_dict_with_hidden_locale(self):
with self.settings(HIDDEN_LANGUAGES=('xxx',)):
o = TranslatedModel.objects.get(id=1)
o.name = {'en-US': 'active language', 'xxx': 'hidden language',
'de': 'another language'}
o.save()
ts = Translation.objects.filter(id=o.name_id)
assert sorted(ts.values_list('locale', flat=True)) == (
['de', 'en-US', 'xxx'])
def test_dict_bad_locale(self): def test_dict_bad_locale(self):
m = TranslatedModel.objects.get(id=1) m = TranslatedModel.objects.get(id=1)
m.name = {'de': 'oof', 'xxx': 'bam', 'es': 'si'} m.name = {'de': 'oof', 'xxx': 'bam', 'es': 'si'}