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
相关产品推荐
相关产品推荐

