mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	Generated by pyupgrade --py36-plus --keep-percent-format, but with the
NamedTuple changes reverted (see commit
ba7906a3c6, #15132).
Signed-off-by: Anders Kaseorg <anders@zulip.com>
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import operator
 | |
| 
 | |
| from django.conf import settings
 | |
| from django.utils import translation
 | |
| from django.utils.translation import ugettext as _
 | |
| from django.utils.lru_cache import lru_cache
 | |
| 
 | |
| from itertools import zip_longest
 | |
| from typing import Any, List, Dict
 | |
| 
 | |
| import os
 | |
| import ujson
 | |
| import logging
 | |
| 
 | |
| def with_language(string: str, language: str) -> str:
 | |
|     """
 | |
|     This is an expensive function. If you are using it in a loop, it will
 | |
|     make your code slow.
 | |
|     """
 | |
|     old_language = translation.get_language()
 | |
|     translation.activate(language)
 | |
|     result = _(string)
 | |
|     translation.activate(old_language)
 | |
|     return result
 | |
| 
 | |
| @lru_cache()
 | |
| def get_language_list() -> List[Dict[str, Any]]:
 | |
|     path = os.path.join(settings.DEPLOY_ROOT, 'locale', 'language_name_map.json')
 | |
|     with open(path) as reader:
 | |
|         languages = ujson.load(reader)
 | |
|         return languages['name_map']
 | |
| 
 | |
| def get_language_list_for_templates(default_language: str) -> List[Dict[str, Dict[str, str]]]:
 | |
|     language_list = [lang for lang in get_language_list()
 | |
|                      if 'percent_translated' not in lang or
 | |
|                         lang['percent_translated'] >= 5.]
 | |
| 
 | |
|     formatted_list = []
 | |
|     lang_len = len(language_list)
 | |
|     firsts_end = (lang_len // 2) + operator.mod(lang_len, 2)
 | |
|     firsts = list(range(0, firsts_end))
 | |
|     seconds = list(range(firsts_end, lang_len))
 | |
|     assert len(firsts) + len(seconds) == lang_len
 | |
|     for row in zip_longest(firsts, seconds):
 | |
|         item = {}
 | |
|         for position, ind in zip(['first', 'second'], row):
 | |
|             if ind is None:
 | |
|                 continue
 | |
| 
 | |
|             lang = language_list[ind]
 | |
|             percent = name = lang['name']
 | |
|             if 'percent_translated' in lang:
 | |
|                 percent = "{} ({}%)".format(name, lang['percent_translated'])
 | |
| 
 | |
|             selected = False
 | |
|             if default_language in (lang['code'], lang['locale']):
 | |
|                 selected = True
 | |
| 
 | |
|             item[position] = {
 | |
|                 'name': name,
 | |
|                 'code': lang['code'],
 | |
|                 'percent': percent,
 | |
|                 'selected': selected
 | |
|             }
 | |
| 
 | |
|         formatted_list.append(item)
 | |
| 
 | |
|     return formatted_list
 | |
| 
 | |
| def get_language_name(code: str) -> str:
 | |
|     for lang in get_language_list():
 | |
|         if code in (lang['code'], lang['locale']):
 | |
|             return lang['name']
 | |
|     # Log problem, but still return a name
 | |
|     logging.error("Unknown language code '%s'", code)
 | |
|     return "Unknown"
 | |
| 
 | |
| def get_available_language_codes() -> List[str]:
 | |
|     language_list = get_language_list()
 | |
|     codes = [language['code'] for language in language_list]
 | |
|     return codes
 | |
| 
 | |
| def get_language_translation_data(language: str) -> Dict[str, str]:
 | |
|     if language == 'zh-hans':
 | |
|         language = 'zh_Hans'
 | |
|     elif language == 'zh-hant':
 | |
|         language = 'zh_Hant'
 | |
|     elif language == 'id-id':
 | |
|         language = 'id_ID'
 | |
|     path = os.path.join(settings.DEPLOY_ROOT, 'locale', language, 'translations.json')
 | |
|     try:
 | |
|         with open(path) as reader:
 | |
|             return ujson.load(reader)
 | |
|     except FileNotFoundError:
 | |
|         print(f'Translation for {language} not found at {path}')
 | |
|         return {}
 |