Skip to main content

i18n Skills

Lệnh AI để kiểm tra và bọc chuỗi i18n

Vấn đề

Mã nguồn của bạn có 500 chuỗi được viết cứng nằm rải rác trong các thành phần, mẫu và khung nhìn. Việc bọc thủ công đòi hỏi nhiều ngày tìm kiếm và thay thế đầy nhàm chán. Ngay cả sau khi bọc, bạn vẫn có thể bỏ sót những câu bị chia tách làm sai cấu trúc tiếng Đức, logic số nhiều không hoạt động trong tiếng Ả Rập và các khóa mồ côi khiến tệp bản địa hóa trở nên cồng kềnh.

Việc bọc i18n thủ công rất dễ gây lỗi: lập trình viên bỏ sót câu bị chia tách, làm hỏng dạng số nhiều bằng toán tử ba ngôi và để lại chuỗi được viết cứng trong các trường hợp ít gặp. Những lỗi này chỉ xuất hiện sau khi dịch, lúc đó chi phí sửa lỗi cao gấp 10 lần.

Giải pháp

Hai lệnh dấu gạch chéo ứng dụng AI xử lý toàn bộ quy trình i18n. Chạy /i18n-review để kiểm tra mã ở chế độ chỉ đọc, sau đó chạy /i18n-wrap để tự động sửa mọi vấn đề. Cả hai lệnh đều phát hiện framework, hiểu định dạng tệp bản địa hóa và xác thực thay đổi trước khi commit.

/i18n-review

Kiểm tra ở chế độ chỉ đọc để tìm câu bị chia tách, dạng số nhiều bị hỏng, chuỗi chưa được bọc và khóa không dùng đến. Không bao giờ sửa đổi mã của bạn.

/i18n-wrap

Tự động bọc chuỗi được viết cứng bằng hàm dịch phù hợp, tạo khóa có ý nghĩa, cập nhật tệp bản địa hóa và xác thực bản build.

Lệnh /i18n-review

Lệnh review kiểm tra mã nguồn của bạn ở chế độ chỉ đọc. Lệnh này quét mọi tệp để tìm vấn đề i18n và tạo báo cáo theo thứ tự ưu tiên, kèm vị trí tệp chính xác cùng đề xuất sửa lỗi. Mã của bạn không bao giờ bị sửa đổi.

Terminal
/i18n-review src/
/i18n-review src/ --framework=next-intl

Nội dung kiểm tra

  • Câu bị chia tách: các lệnh gọi t() nối với nhau làm sai trật tự từ trong ngôn ngữ khác
  • Bọc quá mức: chuỗi kỹ thuật, lớp CSS, URLs và giá trị enum bị bọc nhầm bằng t()
  • Bọc chưa đủ: chuỗi hiển thị trên giao diện như nhãn nút, tiêu đề và thông báo lỗi vẫn được viết cứng
  • Vấn đề về số nhiều: dùng toán tử ba ngôi hoặc phép kiểm tra === 1 thay cho cú pháp số nhiều ICU phù hợp
  • Khóa không dùng đến: khóa dịch được định nghĩa trong tệp bản địa hóa nhưng không được tham chiếu trong mã
  • Giá trị định dạng được viết cứng: ngày tháng, tiền tệ và số không sử dụng bộ định dạng Intl
Lệnh review hoàn toàn chỉ đọc. Bạn có thể chạy lệnh này bao nhiêu lần tùy ý trong quá trình phát triển hoặc trong quy trình CI/CD mà không lo phát sinh thay đổi ngoài ý muốn.

Lệnh /i18n-wrap

Lệnh wrap tự động bọc chuỗi được viết cứng bằng hàm dịch phù hợp với framework của bạn. Lệnh này phát hiện thư viện i18n, tạo các khóa có ý nghĩa được nhóm theo thành phần hoặc tính năng, cập nhật tệp bản địa hóa và xác thực rằng bản build vẫn thành công.

Terminal
/i18n-wrap src/components/
/i18n-wrap src/ --framework=react-i18next

Chức năng

  • Phát hiện framework: xác định thư viện i18n và hàm dịch của bạn (t, $t, $_, gettext, v.v.)
  • Tạo khóa có ý nghĩa: tạo các khóa dễ hiểu như nav.signIn và errors.notFound thay cho nhãn chung chung
  • Cập nhật tệp bản địa hóa: thêm khóa mới vào tệp ngôn ngữ nguồn theo đúng định dạng (JSON, YAML, PO, v.v.)
  • Xác thực bản build: chạy các lệnh build, lint và test sau khi bọc để phát hiện mọi lỗi hồi quy
Lệnh wrap xác thực mọi thay đổi bằng cách chạy bản build và bộ kiểm thử của bạn. Nếu có lỗi, lệnh sẽ tự động hoàn tác.

Framework được hỗ trợ

Cả hai lệnh đều tự động phát hiện framework từ các phần phụ thuộc của dự án. Bạn cũng có thể chỉ định rõ framework bằng cờ --framework. Dưới đây là 10 framework được hỗ trợ cùng hàm dịch và định dạng số nhiều tương ứng.

FrameworkHàm dịchĐịnh dạng số nhiều
react-i18nextt()key_one / key_other
next-intlt()ICU {count, plural, ...}
vue-i18n$t()Pipe syntax | singular | plural
angular i18n$localizeICU {count, plural, ...}
svelte-i18n$_()ICU {count, plural, ...}
flutter intlS.of(context)Intl.plural()
djangogettext / _()ngettext()
rails i18nt()count key
laravel__() / @langtrans_choice()
swiftNSLocalizedString.stringsdict

Cài đặt

Sao chép các tệp lệnh vào thư mục .claude/commands/. Chỉ vậy thôi — không cần phần phụ thuộc hay cấu hình. Các lệnh là tệp Markdown thuần túy mà mọi trợ lý lập trình AI đều có thể thực thi.

Terminal
mkdir -p .claude/commands
cp commands/i18n-review.md .claude/commands/
cp commands/i18n-wrap.md .claude/commands/
Đây là các tệp lệnh dấu gạch chéo tiêu chuẩn. Chúng hoạt động ngay trong Claude Code và có thể được điều chỉnh cho các trợ lý lập trình AI khác hỗ trợ lệnh tùy chỉnh.

Ví dụ sử dụng

Dự án React

Kiểm tra ứng dụng React sử dụng react-i18next, sau đó bọc tất cả chuỗi được viết cứng. Các lệnh phát hiện react-i18next từ package.json rồi sử dụng đúng hàm t() và định dạng số nhiều key_one/key_other.

React Project
# Review a React project for i18n issues
/i18n-review src/ --framework=react-i18next

# Wrap all hardcoded strings automatically
/i18n-wrap src/components/ --framework=react-i18next

# Result: t() calls inserted, keys added to en/translation.json

Dự án Django

Kiểm tra các mẫu và khung nhìn Django để tìm vấn đề i18n, sau đó bọc chuỗi bằng gettext. Các lệnh phát hiện Django từ settings.py rồi sử dụng _() cho chuỗi đơn giản và ngettext() cho dạng số nhiều.

Django Project
# Review Django templates and views
/i18n-review myapp/ --framework=django

# Wrap hardcoded strings with gettext
/i18n-wrap myapp/templates/ --framework=django

# Result: _() calls inserted, .po file updated

Dùng thử i18n Agent ngay

Thả tệp bản dịch của bạn vào đây

JSON, YAML, PO, XML, CSV, Markdown, Properties

hoặc nhấp để duyệt

Ngôn ngữ đích

Không cần đăng kýBáo giá tức thì

Câu hỏi thường gặp