You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenERP 6.1按日期GROUP_BY时月份未翻译的解决咨询

解决OpenERP 6.1日期GROUP_BY分组时月份未翻译的问题

我之前在OpenERP 6.1里也踩过这个日期分组月份不翻译的坑,给你几个实用的解决思路,亲测有效:

方法一:重写底层分组格式化逻辑

OpenERP 6.1默认的日期分组处理没有调用翻译函数,直接输出英文月份。我们可以通过继承ir.ui.view模块,修改分组行的生成逻辑,对月份名称做翻译处理。

在自定义模块中创建ir_ui_view.py文件,代码示例如下:

from openerp.osv import osv
from openerp.tools.translate import _
import datetime

class ir_ui_view(osv.osv):
    _inherit = 'ir.ui.view'

    def _get_group_by_line(self, cr, uid, field, context=None):
        # 先调用原生方法获取分组行
        res = super(ir_ui_view, self)._get_group_by_line(cr, uid, field, context=context)
        
        # 针对create_date字段的分组做翻译处理
        if field == 'create_date':
            for line in res:
                # 假设分组格式是「YYYY-MM」或类似结构,拆分年份和月份
                if '-' in line['name']:
                    year_part, month_part = line['name'].split('-')[:2]
                    # 获取月份的英文全称,再翻译
                    month_en = datetime.date(1900, int(month_part), 1).strftime('%B')
                    translated_month = _(month_en)
                    # 替换分组显示文本
                    line['name'] = f"{year_part} {translated_month}"
        return res

注意:要根据实际分组后的格式调整字符串拆分逻辑,比如如果是按单独月份分组,处理方式会略有不同。

方法二:用自定义函数字段替代原生日期字段

如果不想修改底层模块,更稳妥的方式是在业务模型中定义一个函数字段,返回已经翻译好的日期分组字符串,然后在视图中按这个字段分组。

Python模型代码:

from openerp.osv import fields, osv
from openerp.tools.translate import _
import datetime

class your_model_name(osv.osv):
    _inherit = 'your.model.name'  # 替换成你的实际模型名称

    def _get_translated_create_date(self, cr, uid, ids, field_name, arg, context=None):
        result = {}
        for record in self.browse(cr, uid, ids, context=context):
            if not record.create_date:
                result[record.id] = ""
                continue
            # 解析原生create_date字段
            create_dt = datetime.datetime.strptime(record.create_date, '%Y-%m-%d %H:%M:%S')
            # 获取月份英文名称并翻译
            month_en = create_dt.strftime('%B')
            translated_month = _(month_en)
            # 组装成「年份+翻译后月份」的格式,可按需调整
            result[record.id] = f"{create_dt.year} {translated_month}"
        return result

    _columns = {
        'translated_create_date': fields.function(
            _get_translated_create_date, 
            type='char', 
            string='Translated Date', 
            store=False
        ),
        # 保留原生create_date字段
        'create_date': fields.datetime('Date'),
    }

视图代码修改:

将原有的filter字段替换为自定义的函数字段:

<filter string="Date" icon="terp-go-year" name="Date" context="{'group_by':'translated_create_date'}"/>

方法三:检查语言包完整性

有时候问题可能出在语言包本身——目标语言的翻译包没有包含月份名称的翻译。你可以按以下步骤排查:

  • 进入Settings > Translations > Load a Translation
  • 重新加载目标语言的翻译包
  • 检查Settings > Translations > Terms > Translated Terms中,是否存在月份英文名称(如"January")对应的翻译项

补充说明

OpenERP 6.1属于比较老旧的版本,这个日期分组翻译的问题在后续的Odoo版本中已经被官方修复了,如果有条件的话,升级到新版本会一劳永逸解决这类问题。

内容的提问来源于stack exchange,提问作者RiKr2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:53:46