[IMP] base: remove hard-coded list of languages, read them from database or csv
Also add helper methods on `res.lang` to retrieve the list of installed languages and the list of available languages.
This commit is contained in:
@@ -44,8 +44,7 @@ class AccountChartTemplate(models.Model):
|
||||
|
||||
@api.multi
|
||||
def process_coa_translations(self):
|
||||
installed_lang_ids = self.env['res.lang'].search([])
|
||||
installed_langs = [x.code for x in installed_lang_ids]
|
||||
installed_langs = dict(self.env['res.lang'].get_installed())
|
||||
company_obj = self.env['res.company']
|
||||
for chart_template_id in self:
|
||||
langs = []
|
||||
|
||||
@@ -305,9 +305,7 @@ class PaymentTransaction(osv.Model):
|
||||
_rec_name = 'reference'
|
||||
|
||||
def _lang_get(self, cr, uid, context=None):
|
||||
lang_ids = self.pool['res.lang'].search(cr, uid, [], context=context)
|
||||
languages = self.pool['res.lang'].browse(cr, uid, lang_ids, context=context)
|
||||
return [(language.code, language.name) for language in languages]
|
||||
return self.pool['res.lang'].get_installed(cr, uid, context=context)
|
||||
|
||||
def _default_partner_country_id(self, cr, uid, context=None):
|
||||
comp = self.pool['res.company'].browse(cr, uid, context.get('company_id', 1), context=context)
|
||||
|
||||
@@ -1,24 +1,31 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from operator import itemgetter
|
||||
|
||||
from openerp import tools
|
||||
from openerp.osv import osv, fields
|
||||
from openerp.tools.translate import _
|
||||
|
||||
class base_language_install(osv.osv_memory):
|
||||
""" Install Language"""
|
||||
|
||||
_name = "base.language.install"
|
||||
_description = "Install Language"
|
||||
|
||||
def _languages(self, cr, uid, context=None):
|
||||
return self.pool['res.lang'].get_available(cr, uid, context=context)
|
||||
|
||||
_columns = {
|
||||
'lang': fields.selection(tools.scan_languages(),'Language', required=True),
|
||||
'lang': fields.selection(_languages, 'Language', required=True),
|
||||
'overwrite': fields.boolean('Overwrite Existing Terms', help="If you check this box, your customized translations will be overwritten and replaced by the official ones."),
|
||||
'state':fields.selection([('init','init'),('done','done')], 'Status', readonly=True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'state': 'init',
|
||||
'overwrite': False
|
||||
}
|
||||
|
||||
def lang_install(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import locale
|
||||
from locale import localeconv
|
||||
import logging
|
||||
from operator import itemgetter
|
||||
import re
|
||||
|
||||
from openerp import tools
|
||||
@@ -67,7 +68,7 @@ class lang(osv.osv):
|
||||
_logger.warning(msg, lang, lc)
|
||||
|
||||
if not lang_name:
|
||||
lang_name = tools.ALL_LANGUAGES.get(lang, lang)
|
||||
lang_name = lang
|
||||
|
||||
def fix_xa0(s):
|
||||
"""Fix badly-encoded non-breaking space Unicode character from locale.localeconv(),
|
||||
@@ -181,6 +182,22 @@ class lang(osv.osv):
|
||||
grouping = lang_obj.grouping
|
||||
return grouping, thousands_sep, decimal_point
|
||||
|
||||
@tools.ormcache()
|
||||
def get_available(self, cr, uid, context=None):
|
||||
""" Return the available languages as a list of (code, name) sorted by name. """
|
||||
langs = self.browse(cr, uid, self.search(cr, uid, [], context={'active_test': False}))
|
||||
return sorted([(lang.code, lang.name) for lang in langs], key=itemgetter(1))
|
||||
|
||||
@tools.ormcache()
|
||||
def get_installed(self, cr, uid, context=None):
|
||||
""" Return the installed languages as a list of (code, name) sorted by name. """
|
||||
langs = self.browse(cr, uid, self.search(cr, uid, []))
|
||||
return sorted([(lang.code, lang.name) for lang in langs], key=itemgetter(1))
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
self.clear_caches()
|
||||
return super(lang, self).create(cr, uid, vals, context=context)
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
@@ -195,8 +212,7 @@ class lang(osv.osv):
|
||||
if users.search(cr, uid, [('lang', '=', current_language.code)], context=context):
|
||||
raise UserError(_("Cannot unactivate a language that is currently used by users."))
|
||||
|
||||
self._lang_get.clear_cache(self)
|
||||
self._lang_data_get.clear_cache(self)
|
||||
self.clear_caches()
|
||||
return super(lang, self).write(cr, uid, ids, vals, context)
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
@@ -214,8 +230,7 @@ class lang(osv.osv):
|
||||
trans_obj = self.pool.get('ir.translation')
|
||||
trans_ids = trans_obj.search(cr, uid, [('lang','=',language['code'])], context=context)
|
||||
trans_obj.unlink(cr, uid, trans_ids, context=context)
|
||||
self._lang_get.clear_cache(self)
|
||||
self._lang_data_get.clear_cache(self)
|
||||
self.clear_caches()
|
||||
return super(lang, self).unlink(cr, uid, ids, context=context)
|
||||
|
||||
#
|
||||
|
||||
@@ -143,8 +143,7 @@ class res_partner_title(osv.osv):
|
||||
|
||||
@api.model
|
||||
def _lang_get(self):
|
||||
languages = self.env['res.lang'].search([])
|
||||
return [(language.code, language.name) for language in languages]
|
||||
return self.env['res.lang'].get_installed()
|
||||
|
||||
ADDRESS_FIELDS = ('street', 'street2', 'zip', 'city', 'state_id', 'country_id')
|
||||
|
||||
|
||||
@@ -212,8 +212,7 @@ class MixedModel(models.Model):
|
||||
|
||||
@api.model
|
||||
def _get_lang(self):
|
||||
langs = self.env['res.lang'].search([])
|
||||
return [(lang.code, lang.name) for lang in langs]
|
||||
return self.env['res.lang'].get_installed()
|
||||
|
||||
@api.model
|
||||
def _reference_models(self):
|
||||
|
||||
+18
-81
@@ -25,6 +25,8 @@ from lxml import etree
|
||||
from which import which
|
||||
from threading import local
|
||||
import traceback
|
||||
import csv
|
||||
from operator import itemgetter
|
||||
|
||||
try:
|
||||
from html2text import html2text
|
||||
@@ -443,93 +445,28 @@ def get_iso_codes(lang):
|
||||
lang = lang.split('_')[0]
|
||||
return lang
|
||||
|
||||
ALL_LANGUAGES = {
|
||||
'am_ET': u'Amharic / አምሃርኛ',
|
||||
'ar_SY': u'Arabic / الْعَرَبيّة',
|
||||
'bg_BG': u'Bulgarian / български език',
|
||||
'bs_BA': u'Bosnian / bosanski jezik',
|
||||
'ca_ES': u'Catalan / Català',
|
||||
'cs_CZ': u'Czech / Čeština',
|
||||
'da_DK': u'Danish / Dansk',
|
||||
'de_DE': u'German / Deutsch',
|
||||
'el_GR': u'Greek / Ελληνικά',
|
||||
'en_AU': u'English (AU)',
|
||||
'en_GB': u'English (UK)',
|
||||
'en_US': u'English (US)',
|
||||
'es_AR': u'Spanish (AR) / Español (AR)',
|
||||
'es_BO': u'Spanish (BO) / Español (BO)',
|
||||
'es_CL': u'Spanish (CL) / Español (CL)',
|
||||
'es_CO': u'Spanish (CO) / Español (CO)',
|
||||
'es_CR': u'Spanish (CR) / Español (CR)',
|
||||
'es_DO': u'Spanish (DO) / Español (DO)',
|
||||
'es_EC': u'Spanish (EC) / Español (EC)',
|
||||
'es_ES': u'Spanish / Español',
|
||||
'es_GT': u'Spanish (GT) / Español (GT)',
|
||||
'es_MX': u'Spanish (MX) / Español (MX)',
|
||||
'es_PA': u'Spanish (PA) / Español (PA)',
|
||||
'es_PE': u'Spanish (PE) / Español (PE)',
|
||||
'es_PY': u'Spanish (PY) / Español (PY)',
|
||||
'es_UY': u'Spanish (UY) / Español (UY)',
|
||||
'es_VE': u'Spanish (VE) / Español (VE)',
|
||||
'et_EE': u'Estonian / Eesti keel',
|
||||
'eu_ES': u'Basque / Euskara',
|
||||
'fa_IR': u'Persian / فارس',
|
||||
'fi_FI': u'Finnish / Suomi',
|
||||
'fr_BE': u'French (BE) / Français (BE)',
|
||||
'fr_CA': u'French (CA) / Français (CA)',
|
||||
'fr_CH': u'French (CH) / Français (CH)',
|
||||
'fr_CA': u'French (CA) / Français (CA)',
|
||||
'fr_FR': u'French / Français',
|
||||
'gl_ES': u'Galician / Galego',
|
||||
'gu_IN': u'Gujarati / ગુજરાતી',
|
||||
'he_IL': u'Hebrew / עִבְרִי',
|
||||
'hi_IN': u'Hindi / हिंदी',
|
||||
'hr_HR': u'Croatian / hrvatski jezik',
|
||||
'hu_HU': u'Hungarian / Magyar',
|
||||
'id_ID': u'Indonesian / Bahasa Indonesia',
|
||||
'it_IT': u'Italian / Italiano',
|
||||
'ja_JP': u'Japanese / 日本語',
|
||||
'ka_GE': u'Georgian / ქართული ენა',
|
||||
'kab_DZ': u'Kabyle / Taqbaylit',
|
||||
'ko_KP': u'Korean (KP) / 한국어 (KP)',
|
||||
'ko_KR': u'Korean (KR) / 한국어 (KR)',
|
||||
'lo_LA': u'Lao / ພາສາລາວ',
|
||||
'lt_LT': u'Lithuanian / Lietuvių kalba',
|
||||
'lv_LV': u'Latvian / latviešu valoda',
|
||||
'mk_MK': u'Macedonian / македонски јазик',
|
||||
'mn_MN': u'Mongolian / монгол',
|
||||
'nb_NO': u'Norwegian Bokmål / Norsk bokmål',
|
||||
'nl_NL': u'Dutch / Nederlands',
|
||||
'nl_BE': u'Dutch (BE) / Nederlands (BE)',
|
||||
'pl_PL': u'Polish / Język polski',
|
||||
'pt_BR': u'Portuguese (BR) / Português (BR)',
|
||||
'pt_PT': u'Portuguese / Português',
|
||||
'ro_RO': u'Romanian / română',
|
||||
'ru_RU': u'Russian / русский язык',
|
||||
'sl_SI': u'Slovenian / slovenščina',
|
||||
'sk_SK': u'Slovak / Slovenský jazyk',
|
||||
'sq_AL': u'Albanian / Shqip',
|
||||
'sr_RS': u'Serbian (Cyrillic) / српски',
|
||||
'sr@latin': u'Serbian (Latin) / srpski',
|
||||
'sv_SE': u'Swedish / svenska',
|
||||
'te_IN': u'Telugu / తెలుగు',
|
||||
'tr_TR': u'Turkish / Türkçe',
|
||||
'vi_VN': u'Vietnamese / Tiếng Việt',
|
||||
'uk_UA': u'Ukrainian / українська',
|
||||
'zh_CN': u'Chinese (CN) / 简体中文',
|
||||
'zh_HK': u'Chinese (HK)',
|
||||
'zh_TW': u'Chinese (TW) / 正體字',
|
||||
'th_TH': u'Thai / ภาษาไทย',
|
||||
}
|
||||
|
||||
def scan_languages():
|
||||
""" Returns all languages supported by OpenERP for translation
|
||||
|
||||
:returns: a list of (lang_code, lang_name) pairs
|
||||
:rtype: [(str, unicode)]
|
||||
"""
|
||||
_logger.warning("scan_languages is deprecated")
|
||||
return sorted(ALL_LANGUAGES.iteritems(), key=lambda k: k[1])
|
||||
csvpath = openerp.modules.module.get_resource_path('base', 'res', 'res.lang.csv')
|
||||
try:
|
||||
# read (code, name) from languages in base/res/res.lang.csv
|
||||
result = []
|
||||
with open(csvpath) as csvfile:
|
||||
reader = csv.reader(csvfile, delimiter=',', quotechar='"')
|
||||
fields = reader.next()
|
||||
code_index = fields.index("code")
|
||||
name_index = fields.index("name")
|
||||
for row in reader:
|
||||
result.append((ustr(row[code_index]), ustr(row[name_index])))
|
||||
except Exception:
|
||||
_logger.error("Could not read %s", csvpath)
|
||||
result = []
|
||||
|
||||
return sorted(result or [('en_US', u'English')], key=itemgetter(1))
|
||||
|
||||
def get_user_companies(cr, user):
|
||||
def _get_company_children(cr, ids):
|
||||
|
||||
Reference in New Issue
Block a user