Token导航 LogoToken导航

Agent Skill · 研究检索

odoo-i18n(odoo i18n 搜索)

odoo-i18n 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

odoo-i18n 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为只读;许可证信息还不明确,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 42,645。

总安装 1,053周安装 43GitHub Stars 51下载 337核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:odoo-i18n(odoo i18n 搜索)
来源仓库:https://github.com/ahmed-lakosha/odoo-upgrade-skill
仓库路径:skills/odoo-i18n
安装命令:
npx skills add https://github.com/ahmed-lakosha/odoo-upgrade-skill --skill odoo-i18n
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/ahmed-lakosha/odoo-upgrade-skill --skill odoo-i18n

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

odoo-i18n 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。适用于 Odoo 国际化(i18n)相关信息的检索,可结合来源仓库和原始 README 核验具体用法。

通过 npx skills add 命令从指定 GitHub 仓库安装,需确认权限范围和维护状态。安装前建议检查是否会触发联网、命令执行或文件读写,确保符合实际使用需求。odoo-i18n 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/odoo-i18n

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/ahmed-lakosha/odoo-upgrade-skill --skill odoo-…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它标注为只读,先用只读任务试一次,确认行为符合预期再扩大使用范围。

常见问题

6 条

odoo-i18n 怎么安装?

在终端执行 npx skills add https://github.com/ahmed-lakosha/odoo-upgrade-skill --skill odoo-i18n。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

odoo-i18n 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

odoo-i18n 需要什么权限?

权限级别是只读。该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

odoo-i18n 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

odoo-i18n 用的人多吗?

公开数据是累计安装 1,053 次,近一周安装 43 次,下载 337 次,GitHub 51 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

odoo-i18n 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。
  • 标注为只读权限,试用阶段不容易误改本地文件。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。
  • 只想先试试效果、不希望它改动本地文件的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
odoo-i18n

odoo i18n 搜索 · 本页

1,05351只读未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Odoo i18n Skill

Provides deep expertise in Odoo internationalization (i18n) and localization (l10n) across Odoo 14-19.

Critical Translation Rules

  1. NEVER use f-strings inside _() -- use % formatting: _('Record %s') % name
  2. NEVER concatenate strings inside _() -- give the translator the full sentence
  3. Use _lt() for class-level strings (selection values, class attributes)
  4. NEVER wrap string= field attributes in _() -- they are auto-translated by Odoo
  5. Save .po files as UTF-8 without BOM
  6. Arabic .po files must have nplurals=6 in Plural-Forms header
  7. Always update the module after editing .po files: -u module --stop-after-init

Workflow 1: Extract Translatable Strings

Scans an Odoo module for all translatable strings and generates .pot (template) and .po (language) files.

Usage

python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_extractor.py --module <path> --lang <code> [--output <dir>] [--no-pot] [--verbose]
ArgumentRequiredDescription
--moduleYesPath to the Odoo module directory
--langYesTarget language code (e.g., ar, fr, tr)
--outputNoCustom output directory (default: module/i18n/)
--no-potNoSkip generating.pot template
--verboseNoShow all extracted strings

What Gets Extracted

**Python (*.py)** -- _('...') and _lt('...'):

# Extracted:
raise UserError(_('Record %s not found') % name)
state = fields.Selection([('draft', _lt('Draft'))])
# NOT extracted: _(variable), _(f'Hello {name}')

**XML (*.xml)** -- string=, help=, placeholder= attributes; name= on menus/actions; HTML text:

<field name="state" string="Status"/>      <!-- extracted -->
<h1>Welcome to our website</h1>            <!-- extracted -->
<record id="view_my_form" model="ir.ui.view">  <!-- NOT extracted -->

**JavaScript (*.js)** -- _t('...') and _lt('...'):

const msg = _t("Save Changes");   // extracted
const msg = _t(someVariable);     // NOT extracted

Generated File Structure

# Translation template for my_module
msgid ""
msgstr ""
"Project-Id-Version: Odoo Module my_module\n"
"Content-Type: text/plain; charset=UTF-8\n"

#: models/my_model.py:45
#, python-format
msgid "Record %s not found"
msgstr ""

Alternative: Odoo's Built-in Extractor

python odoo-bin -c conf/myproject.conf -d mydb \
    --i18n-export --modules=my_module --language=ar \
    --output=my_module/i18n/ar.po --stop-after-init

The Odoo CLI extractor includes database strings (model names, action names) that the plugin extractor does not. For production, the built-in extractor is more complete.

After Extraction

  1. Open the .po file in a translation editor (Poedit, Virtaal, or text editor)
  2. Fill in all msgstr entries
  3. Validate: run i18n_validator.py --po-file path/to/ar.po
  4. Check coverage: run i18n_reporter.py --module path/ --lang ar
  5. Load into Odoo: update module or use export/import workflow

Workflow 2: Validate.po Files

Validates a .po file for syntax errors, encoding issues, empty translations, fuzzy entries, format specifier mismatches, and Arabic/RTL-specific problems.

Usage

python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_validator.py --po-file <path> [--lang <code>] [--strict] [--output <file>]
ArgumentRequiredDescription
--po-fileYesPath to the .po file to validate
--langNoLanguage code for language-specific checks (auto-detected from filename)
--strictNoTreat untranslated strings as errors instead of warnings
--outputNoWrite report to a file instead of stdout

What is Validated

Syntax: UTF-8 encoding (no BOM/Latin-1), header with Content-Type/charset/Language/MIME-Version, properly quoted strings, no parse errors.

Translations: Empty msgstr (untranslated), fuzzy flags needing review, duplicate msgid, obsolete (#~) entries.

Format Specifiers: %s/%d/%f count must match; %(name)s named specifiers must all appear:

# WRONG - missing second %s:
msgid "Invoice %s due on %s"
msgstr "fatura %s"
# CORRECT:
msgid "Invoice %s due on %s"
msgstr "fatura %s vadesi %s"

Arabic-Specific (--lang ar): Arabic characters present, encoding artifacts from Latin-1, direction control chars, nplurals=6 required, BIDI overrides flagged.

Common Errors and Fixes

"Charset must be UTF-8":

python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_converter.py --action convert --po ar.po --output ar_fixed.po

"Fuzzy translation (needs review)" -- remove the fuzzy flag after verifying:

# Before:                          # After:
#, fuzzy, python-format            #, python-format
msgid "Record %s not found"        msgid "Record %s not found"
msgstr "record not found"          msgstr "record not found"

"Arabic should have nplurals=6":

"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"

CI/CD Integration

- name: Validate Arabic translations
  run: python odoo-i18n/scripts/i18n_validator.py --po-file my_module/i18n/ar.po --lang ar --strict

Exit code 0 = passed (may have warnings), 1 = failed (errors found).


Workflow 3: Find Missing Translations

Compares translatable strings from a module's source files against an existing .po file to report what is missing or incomplete.

Usage

python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_reporter.py --module <path> --lang <code> [--format text|json|csv] [--output <file>] [--min-pct <N>]
ArgumentRequiredDescription
--moduleYesPath to the Odoo module directory
--langYesLanguage code to check (e.g., ar, fr)
--formatNoOutput format: text (default), json, csv
--outputNoWrite report to a file instead of stdout
--min-pctNoExit code 1 if completion below threshold

Understanding the Report

  • Missing: String in source code but NO entry in .po
  • Empty in.po: Entry exists but msgstr is "" (not yet translated)
  • Fuzzy: Auto-matched, needs human review; NOT shown to users (Odoo falls back to source)
  • Completion % = Translated / Total Active Strings * 100 (non-empty, non-fuzzy, non-obsolete)

Workflow: Fixing Missing Translations

  1. Run i18n_reporter.py to identify gaps
  2. Open .po in Poedit, Virtaal, or text editor
  3. Fill in missing msgstr entries
  4. If strings are entirely absent from .po, run i18n_extractor.py first
  5. Validate with i18n_validator.py
  6. Re-run i18n_reporter.py to confirm coverage

Updating.po After Source Changes

# 1. Re-extract new strings
python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_extractor.py --module /path/ --lang ar --no-pot
# 2. Merge (preserves existing translations)
python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_converter.py \
    --action merge --base /path/i18n/ar.po --new /path/i18n/ar.po --output /path/i18n/ar_merged.po
# 3. Check remaining gaps
python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_reporter.py --module /path/ --lang ar

Workflow 4: Export/Import via Odoo CLI

Requires PostgreSQL and a valid database.

Exporting Translations

# Single module
python odoo-bin -c conf/myproject.conf -d mydb \
    --i18n-export --modules=my_module --language=ar \
    --output=my_module/i18n/ar.po --stop-after-init

# Export .pot template (no --language = empty msgstr)
python odoo-bin -c conf/myproject.conf -d mydb \
    --i18n-export --modules=my_module \
    --output=my_module/i18n/my_module.pot --stop-after-init

# Multiple modules / all installed
python odoo-bin -c conf/myproject.conf -d mydb \
    --i18n-export --modules=mod1,mod2 --language=ar --output=combined_ar.po --stop-after-init

Importing Translations

# Import .po
python odoo-bin -c conf/myproject.conf -d mydb \
    --i18n-import=my_module/i18n/ar.po --language=ar --modules=my_module --stop-after-init

# Import and overwrite existing
python odoo-bin -c conf/myproject.conf -d mydb \
    --i18n-import=my_module/i18n/ar.po --language=ar \
    --modules=my_module --i18n-overwrite --stop-after-init

# Multiple languages
for lang in ar fr tr; do
    python odoo-bin -c conf/myproject.conf -d mydb \
        --i18n-import=my_module/i18n/${lang}.po --language=${lang} \
        --modules=my_module --stop-after-init
done

Loading Languages

python odoo-bin -c conf/myproject.conf -d mydb --load-language=ar --stop-after-init
python odoo-bin -c conf/myproject.conf -d mydb --load-language=ar,fr,tr --stop-after-init

Check/activate via shell:

# python odoo-bin shell -d mydb
langs = self.env['res.lang'].with_context(active_test=False).search([])
for lang in langs:
    print(f"[{'ACTIVE' if lang.active else 'inactive'}] {lang.code}: {lang.name}")

# Activate
lang = self.env['res.lang'].with_context(active_test=False).search([('code', '=', 'ar')])
lang.active = True
self.env.cr.commit()

Module Update (Simplest Reload)

python -m odoo -c conf/myproject.conf -d mydb -u my_module --stop-after-init

Odoo 17+ Specifics

Translations stored as JSON terms internally; export format still .po. Clear cache:

# python odoo-bin shell -d mydb
self.env['ir.translation'].clear_caches()
self.env.cr.commit()

Website Translations

python odoo-bin -c conf/myproject.conf -d mydb \
    --i18n-export --modules=website,my_theme_module --language=ar \
    --output=website_ar.po --stop-after-init

Translation File Locations

module/i18n/
  module.pot    <- Template (not loaded by Odoo)
  ar.po         <- Arabic
  ar_SA.po      <- Saudi variant (overrides ar.po entries)
  fr.po         <- French
  tr.po         <- Turkish

Utility: Merge and Clean.po Files

python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_converter.py --action merge --base ar.po --new ar_new.po --output ar_merged.po
python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_converter.py --action clean --po ar.po
python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_converter.py --action stats --po ar.po
python ${CLAUDE_PLUGIN_ROOT}/odoo-i18n/scripts/i18n_converter.py --action convert --po ar.po --output ar_fixed.po

Supported Languages Quick Reference

CodeLanguageRTL?Plural Forms
ar / ar_SA / ar_AEArabic (variants)Yes6
en / en_USEnglishNo2
fr / fr_FRFrenchNo2
trTurkishNo2
deGermanNo2
esSpanishNo2

Odoo Version Differences

FeatureOdoo 14-15Odoo 16-17Odoo 18-19
JS translation importimport {_t} from "web.core"import {_t} from "@web/core/l10n/translation"Same as 16
Bootstrap version4.x5.1.3 (RTL built-in)5.1.3+
Translation storageir.translation tableJSON terms (internal)JSON terms
View type for lists<tree><tree><list> (19 only)
Controller typetype='json'type='json'type='jsonrpc' (19 only)
Visibility attrsattrs={'invisible':...}attrs={'invisible':...}Inline invisible="expr" (19 only)

Common Issues

Translations not showing: Update the module with -u module --stop-after-init, then clear browser cache.

Arabic text garbled (mojibake): File saved as Latin-1. Run i18n_converter.py --action convert to fix encoding.

Format specifier error: Ensure %s/%d/%(name)s count matches between msgid and msgstr.

Website shows English for Arabic users: Check (1) Arabic language installed, (2) user language set, (3) module updated after adding translations.

Fuzzy entries: Open.po, verify translation, remove #, fuzzy flag from approved entries.


Configurable Branding

Generated.pot/.po files use configurable author/email. Set environment variables:

export ODOO_I18N_COPYRIGHT="Your Company"
export ODOO_I18N_BUGS_EMAIL="you@example.com"

Detailed Reference (Memory Files)

For comprehensive patterns beyond this skill summary, the plugin includes memory files:

  • memories/translation_patterns.md -- Python _() / _lt() patterns, XML attribute translation, JS _t() patterns,.po file structure, email template translation
  • memories/rtl_patterns.md -- RTL activation, Bootstrap RTL, CSS logical properties, SCSS overrides, Flexbox in RTL, JS RTL detection, QWeb report RTL, common RTL fixes
  • memories/language_codes.md -- Language codes, date/time formats, number formats, currency display, Hijri calendar notes, timezone reference

平台分布

Codex

38.35%
按下载量换算129

Claude

31.25%
按下载量换算105

Cursor

18.75%
按下载量换算63

Gemini CLI

9.46%
按下载量换算32

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

只读

该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills