-------------------
更新时间:
15:52 2016-09-28 星期三 增加模型名翻译
17:26 2016-05-20 星期五
17:58 2016-05-17 星期二
12:14 2016-02-24 星期三
-------------------
* 翻译概述:
    每个模块都可以提供自己的翻译文件,存放在i18n(其来源是英文单词 internationalization的首末字符i和n,
    18为中间的字符数)目录下,文件名为LANG.po LANG为语言,如中文简体 zh_CN.po
   
  │- stock #模块
  │    │- i18n #翻译目录
  │    │    │- stock.pot #翻译模板
  │    │    │- zh_CN.po  #中文简体
  │    │    │- (..).po  #其它语言翻译文件
 
 
* 翻译支持的类型
    /openerp/addons/base/ir/ir_translation.py
   
    ('field', 'Field'),  字段
    ('model', 'Object'),  模型
    ('rml', 'RML  (deprecated - use Report)'), # Pending deprecation - to be replaced by report! 以前的报表
    ('report', 'Report/Template'), 报表
    ('selection', 'Selection'), 选择项
    ('view', 'View'), 视图
    ('wizard_button', 'Wizard Button'), 向导按钮
    ('wizard_field', 'Wizard Field'), 向导字段
    ('wizard_view', 'Wizard View'), 向导视图
    ('xsl', 'XSL'), 表格
    ('help', 'Help'), 帮助
    ('code', 'Code'), 代码
    ('constraint', 'Constraint'), 自定义约束
    ('sql_constraint', 'SQL Constraint')   sql约束
   
*  /addons/web/i18n
    这里要把 zh_CN.po 复制一份 命名为zh.po
    这样这个目录下 有 zh_CN.po  zh.po  这两个文件
    主要解决了数据库管理界面不能翻译的bug   


* 翻译方法
=================================代码类开始===================================
    @python代码片段中的翻译
        #. module: stock
        #: code:addons/stock/stock.py:1677
        #, python-format
        msgid " (%s reserved)"
        msgstr " (%s 被保留)"
       ------
       addons/stock/stock.py
       info += _(' (%s reserved)') % str(reserved_available)
       -------
        第一行  #. module: stock   格式为 #. module: 模块的目录名
        第二行  #: code:addons/stock/stock.py:1677
                格式为 #: code:python代码相对根目录的文件名:第几行(相差几行没关系)  
                注意一下code:addons... 一般第三方代码不会放在addons下
                一般新建一个目录 addonscustom ,这时这里要相应的更改
        第三行     #, python-format  是python代码,这个照写就可以
        可以看到代码中可以翻译的字符,都用 _()引起来了
        注:对应的python 要导出翻译模块:
        from openerp.tools.translate import _

    @ 弹出窗体提醒翻译
        #. module: stock
        #: code:addons/stock/stock.py:3922
        #, python-format
        msgid "Warning: wrong UoM!"
        msgstr "警告!错误的计量单位!"   
        -----------
        if selected_uom.category_id.id != product.uom_id.category_id.id:
                res['warning'] = {
                    'title': _('Warning: wrong UoM!'),
                    'message': _('The selected UoM for product %s is not compatible with the UoM set
                      on the product form. \nPlease choose an UoM within the same UoM category.') % (product.name)
                }
        -----------           
       
    @js代码片段的翻译   
        #. module: web
        #. openerp-web
        #: code:addons/web/static/src/js/chrome.js:279
        #, python-format
        msgid "Ok"
        msgstr "确定"
        ------
        addons/web/static/js/chrome.js/chrome
       
       {text: _t("Ok"), click: function() { this.parents('.modal').modal('hide'); }}
        -------
        第一行  #. module: web   格式为 #. module: 模块的目录名
        第二行  #. openerp-web   这个固定的页面模块
        第三行  #: code:addons/web/static/src/js/chrome.js:279
                格式为 #: code:js代码相对根目录的文件名:第几行(相差几行没关系)  
                注意一下code:addons... 一般第三方代码不会放在addons下
                一般新建一个目录 addonscustom ,这时这里要相应的更改
        第四行     #, python-format   这个照写就可以
        可以看到代码中可以翻译的字符,都用 _t()引起来了
       
    @xml代码中的翻译,这里指 /static/下面的
        #. module: web_graph
        #. openerp-web
        #: code:addons/web_graph/static/src/xml/web_graph.xml:23
        #, python-format
        msgid "Heat Map"
        msgstr "热图"   
        ----
        addons/web_graph/static/src/xml/web_graph.xml:
       
          <label class="btn btn-default" data-mode="both" title="Heat Map">
        ----
        第一行  #. module: web_graph   格式为 #. module: 模块的目录名
        第二行  #. openerp-web   这个固定的页面模块
        第三行  #: code:addons/web_graph/static/src/xml/web_graph.xml:23
                格式为 #: code:js代码相对根目录的文件名:第几行(相差几行没关系)  
                注意一下code:addons... 一般第三方代码不会放在addons下
                一般新建一个目录 addonscustom ,这时这里要相应的更改
        第四行     #, python-format   这个照写就可以
        可以看到代码中可以翻译的字符,这里是title的值 ,也可以是<p>...</p>中的内容
       

=================================代码类结束===================================   

=================================字段名类开始=================================       
       
    @字段翻译
        #. module: stock
        #: field:stock.warehouse,partner_id:0
        msgid "Address"
        msgstr "地址"
        ------
        addons/stock/stock.py
       
        class stock_warehouse(osv.osv):
        _name = "stock.warehouse" #模型名
        _description = "Warehouse"

        _columns = {
            ...
            'partner_id': fields.many2one('res.partner', 'Address'),
            ...
        }
       --------
       stock_view.xml 对应的视图显示
        <record        
=================================模型记录类结束===============================
       
翻译表很容易出问题,特别在添加翻译时,会导致系统启动不来,
日志报错如下:
InternalError: current transaction is aborted, commands ignored until end of transaction block

这时,就要针对 ir_translate 这个表,重建索引就可以。       

   


注:总是翻译无效时,可以搜索旁边的 翻译,从而参照 写翻译条
    关键的标点符号要全英文,不能中文的
    注意我们中文的翻译文件名是 zh_CN.po 不要写错了     

   # create_uid  Created by   创建人
   # create_date  Created on   创建时间
   # write_uid   Last Updated by  最后更新人  
   # write_date  Last Updated on  最后更新时间   
  
消息主菜碟里的英文,像 Whole Compnay Company News 等要通过更改菜单项来解决

财务相关翻译
  # journal entry  会计凭证
  # journal items  会计分录
  # Account Move  会计凭证
  # Reconciled  核销
  # Group By 分组
  # Validate 审核
  # Approve 审批
  # Confirm 确认

相关文章:

  • 2021-10-08
  • 2022-03-02
  • 2021-11-18
  • 2021-11-14
  • 2021-12-01
  • 2021-10-06
  • 2021-09-03
  • 2022-02-15
猜你喜欢
  • 2021-11-27
  • 2021-07-03
  • 2022-12-23
  • 2022-12-23
  • 2019-03-14
  • 2022-03-06
  • 2021-12-04
相关资源
相似解决方案