[IMP] translate: export empty translations for empty ones

Instead of use the original string by default.

Currently odoo export a PO translation file using the logic:
"If there is not a translation then use the source."

This generate a false 100% of file translated for tools based on PO
files.

This commit change this logic to:
"If there is not a translation then use empty string."

Odoo import a PO translation file supporting empty string because
if a item is empty string odoo use the original source.

Closes #17925
This commit is contained in:
Moises Lopez - https://www.vauxoo.com/
2017-11-21 17:56:28 +01:00
committed by Martin Trigaux
parent 2c0ad82d5a
commit eb90eb42ce
3 changed files with 36 additions and 4 deletions
-3
View File
@@ -55,9 +55,6 @@ class IrTranslationImport(object):
def push(self, trans_dict):
""" Feed a translation, as a dictionary, into the cursor """
if not trans_dict['value']:
return
params = dict(trans_dict, state="translated")
if params['type'] == 'view':
@@ -1,8 +1,16 @@
# -*- coding: utf-8 -*-
from contextlib import closing
import odoo
from odoo.tests import common
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
class TestTermCount(common.TransactionCase):
def test_count_term(self):
@@ -30,3 +38,30 @@ class TestTermCount(common.TransactionCase):
menu.refresh()
self.assertEqual(menu.name, "New Name")
self.assertEqual(menu.with_context(lang='fr_FR').name, "Nouveau nom")
def test_export_empty_string(self):
"""When the string and the translation is equal the translation is empty"""
# Export the translations
def update_translations():
with closing(StringIO()) as bufferobj:
odoo.tools.trans_export('fr_FR', ['test_translation_import'], bufferobj, 'po', self.cr)
bufferobj.name = 'test_translation_import/i18n/fr.po'
odoo.tools.trans_load_data(self.cr, bufferobj, 'po', 'fr_FR', verbose=False, context={'overwrite': True})
# Check if the not translated key is empty string
update_translations()
translation = self.env['ir.translation'].search_count([('src', '=', 'Efgh'), ('value', '=', '')])
self.assertTrue(translation, 'The translation of "Efgh" should be empty')
# Modify the value translated for the equal value of the key
menu = self.env.ref('test_translation_import.menu_test_translation_import')
menu.name = "New Name"
menu.with_context(lang='fr_FR').name = "New Name"
update_translations()
self.assertEqual(menu.with_context(lang='fr_FR').name, "New Name", 'The translation of "New Name" should be "New Name"')
# Modify the value translated for another different value
menu.name = "New Name"
menu.with_context(lang='fr_FR').name = "Nouveau nom"
update_translations()
self.assertEqual(menu.with_context(lang='fr_FR').name, "Nouveau nom", 'The translation of "New Name" should be "Nouveau nom"')
+1 -1
View File
@@ -683,7 +683,7 @@ def trans_export(lang, modules, buffer, format, cr):
# translation template, so no translation value
row['translation'] = ''
elif not row.get('translation'):
row['translation'] = src
row['translation'] = ''
writer.write(row['modules'], row['tnrs'], src, row['translation'], row['comments'])
elif format == 'tgz':