i18n không đau đớn, mở rộng đến chân trời của bạn mà không tốn hàng nghìn đô la.
Hoàn toàn miễn phí. Dự án không giới hạn, tất cả 48 ngôn ngữ, không hết hạn, không cần khóa cấp phép.
Dự án không giới hạn. Tất cả 48 ngôn ngữ. Không hết hạn.
- Tất cả 48 ngôn ngữ, bản dịch không giới hạn
- Bảng điều khiển, máy chủ MCP, mọi SDK
- Không có gì để mua, không có gì để nhập ngoại trừ khóa AI của bạn
i18n giờ đây không còn khó khăn, bạn có thể trải nghiệm nó. Tôi không ngại nhận tiền boa cho việc này.
- Khi bạn cảm thấy nó
- Nếu bạn cảm thấy thích
- Từ 1 đến 1 triệu đô la, không hơn
Thanh toán an toàn qua Stripe. Một khóa cấp phép sẽ đến hộp thư của bạn — nó tắt lời nhắc quyên góp trong bảng điều khiển.
Những gì bạn nhận được
- Dự án không giới hạn, tất cả 48 ngôn ngữ, không hết hạn
- Bản dịch không giới hạn, không giới hạn sử dụng
- Bảng điều khiển, máy chủ MCP cho các tác nhân của bạn, mọi SDK
- Một container, một tệp SQLite để sao lưu
- Một giấy phép đã được kiểm tra ngoại tuyến: máy chủ của bạn không bao giờ gọi về nhà
- Mỗi lần cập nhật, cho suốt đời: docker compose pull
Những gì bạn mang theo
- Một máy với Docker: một VPS 4 € là đủ rồi
- Một khóa API AI (Mistral, OpenAI, Anthropic, Google hoặc bất kỳ nhà cung cấp tương thích OpenAI nào). Bản dịch chạy trên tài khoản của bạn, với vài xu cho mỗi ứng dụng
- Năm phút
Hỗ trợ thông qua email, với nỗ lực tốt nhất. Cần ai đó trực điện thoại? Các gói lưu trữ là dành cho bạn.
Nó hoạt động như thế nào
Cài đặt, tạo quản trị viên, dán khóa AI của bạn. Mọi dự án đều miễn phí, mãi mãi.
Với ONCE — một máy chủ mới, một tên miền, năm phút
curl -fsSL https://get.once.com | sh once # add an app: ghcr.io/ambroselli-io/i18n-keyless:latest, pick a host name # then open it: create the admin, paste your AI key on Settings # fully free, unlimited projects — donate if you want # ONCE does the domain, the TLS, the updates and the backups
Với Docker Compose — bất kỳ máy nào chạy Docker
mkdir i18n-keyless && cd i18n-keyless curl -fsSL https://i18n-keyless.com/self-hosted/docker-compose.yml -o docker-compose.yml docker compose up -d # → http://localhost:1800: create the admin, paste your AI key on Settings # fully free, unlimited projects — donate if you want
Sau đó, trỏ SDK của bạn tới máy chủ của bạn:
I18nKeyless.init({
API_KEY: "your-project-key",
API_URL: "https://i18n.example.com",
// …
});Hướng dẫn đầy đủ: https://docs.i18n-keyless.com/docs/guides/self-hosting
Tại sao lại quyên góp?
Bởi vì bạn tự quản lý VPS và khóa API AI. Không có lý do gì để tôi tính phí đăng ký cho bạn. Bản thân tôi cũng ghét đăng ký. Vì vậy, thay vào đó: bạn quyết định phần mềm đáng giá bao nhiêu đối với bạn, và tôi sẽ tiếp tục phát triển nó.
Hình ảnh được cài đặt miễn phí và chạy các dự án không giới hạn, với mọi ngôn ngữ và không có ngày hết hạn.
Câu hỏi trước khi bạn mua? Viết cho chúng tôi
Thiết lập i18n, giữ cho cơ sở mã của bạn sạch sẽ và giao hàng nhanh chóng
Có nhiều PITA với các giải pháp i18n hiện tại. Những khó khăn quá lớn khiến bạn trì hoãn i18n càng lâu càng tốt.
Nó lãng phí thời gian bạn đáng lẽ nên dành trên bãi biển
Thiết lập hệ thống khóa: ít nhất 1 giờ thời gian của nhà phát triển cấp cao
Lui tới lui lui cho mỗi khóa mới: 1 phút mỗi khóa, x500 khóa, x2 ngôn ngữ = 17 giờ
Với i18n-keyless, bạn không cần quan tâm đến hệ thống i18n chút nào. Bạn có thể ra bãi biển và gọi một ly mojito.
Ngày nay hầu hết các hệ thống sử dụng khóa để dịch văn bản
Việc tạo ra điều này thật đau đớn. Việc duy trì điều này thật đau đớn.
Khi bạn nhìn thấy một văn bản trong ứng dụng và muốn cập nhật nó, bạn cần tìm khóa tương ứng.
Với i18n-keyless, bạn không cần phải quan tâm đến hệ thống i18n chút nào. Hãy sử dụng trí não của mình cho những thứ thú vị hơn.
Hãy để AI xử lý phần dịch
Với hệ thống khóa, bạn cần quản lý các bản dịch trong ứng dụng.
Nếu không, người dùng của bạn sẽ thấy someheader.welcome.title trong ứng dụng của họ.
Với i18n-keyless, trong kịch bản ngoại tuyến tồi tệ nhất, bạn sẽ thấy những từ thực không được dịch. Ở tốc độ bình thường, bạn không quan tâm gì đến hệ thống i18n. Chỉ cần viết những tiêu đề hay, tập trung vào marketing và đạt doanh số bán hàng.
Các codebase thật đẹp... cho đến khi các khóa i18n bị nhiễm
Với hệ thống khóa, khi bạn đọc mã và nội dung, bạn phải đọc các khóa, không phải ngôn ngữ tự nhiên.
Đôi khi bạn nên thực hiện một sửa đổi vì một câu không đúng ngữ pháp. Nhưng bạn không biết điều đó vì bạn đang đọc các khóa.
Với i18n-keyless, bạn không cần quan tâm đến hệ thống i18n chút nào. Cơ sở mã vẫn đẹp.
Máy chủ MCP để đáp ứng tất cả nhu cầu i18n của bạn
Sáu lý do khác giải thích tại sao hệ thống được tối ưu hóa cho lập trình tác nhân.
Không có tên để sáng chế
Một khóa là một quyết định đặt tên không có câu trả lời đúng. Hai tác nhân viết login.submit và auth.button.send cho cùng một nút. Không có khóa, không có quyết định nào để đưa ra.
Một tập tin để chỉnh sửa, không phải hai mươi
Một thay đổi dựa trên khóa ảnh hưởng đến thành phần và mọi tệp JSON định vị, và các tác nhân quên các tệp. Ở đây, một thay đổi bản sao là chỉnh sửa một tệp đơn.
Không có xung đột hợp nhất trong các hạm đội tác nhân
Năm tác nhân trên năm nhánh đều chỉnh sửa en.json: một xung đột được đảm bảo. Không có tệp chia sẻ, vì vậy các worktrees và tác nhân nền không bao giờ va chạm.
Rẻ tiền trong token
Để tái sử dụng một khóa, một tác nhân phải tải các tệp cục bộ vào ngữ cảnh ở mỗi lần chỉnh sửa. Việc tải không có khóa không làm gì cả: văn bản đã có sẵn trong thành phần.
Sự khác biệt có thể đọc được
Yêu cầu pull hiển thị các câu thực tế. Con người hoặc tác nhân xem xét có thể đánh giá bản sao mà không cần phải tìm hiểu khóa đại diện cho điều gì.
Một quy tắc trong CLAUDE.md của bạn
Mỗi quy tắc i18n bạn viết ra đều là quy tắc mà tác nhân có thể vi phạm. Quy tắc này chỉ cần một dòng — và bản dự phòng là văn bản thực tế, nên lỗi sẽ không hiển thị a.b.c trên màn hình.
Quy tắc i18n duy nhất mà tác nhân của bạn cần
# CLAUDE.md Write the UI copy in English and wrap it in <T>…</T> from i18n-keyless-react. That is the whole i18n setup.
Tác nhân của bạn có thể vận hành nó, không chỉ viết nó
Thông qua máy chủ MCP, tác nhân liệt kê các bản dịch bị thiếu, đọc một bản, ghi đè một bản xấu hoặc nhập khẩu bản sao bạn đã có — với đăng nhập OAuth riêng, không cần dán bất kỳ khóa nào.
Đọc hướng dẫn MCPRa mắt toàn cầu ngay từ ngày đầu tiên
Đừng trì hoãn i18n vì độ phức tạp. Triển khai trong 5 phút, không phải ngày. Duy trì tốc độ phát triển của bạn như thể i18n chưa được triển khai.
- Triển khai trong 5 phút. Không đùa đâu.
Một đối tượng cấu hình đơn giản và bạn đã xong.
- Duy trì tốc độ phát triển
Viết mã như thể i18n chưa từng được triển khai chút nào.
- Gửi tới thị trường toàn cầu
Không cần tái cấu trúc khi bạn mở rộng sang các ngôn ngữ mới.
- SSR & SEO đã sẵn sàng
Hoạt động với Next.js, Remix, TanStack Start và Astro. Render phía máy chủ bất kỳ ngôn ngữ nào cho công cụ tìm kiếm — cùng thiết lập 5 phút.
Truyền thống i18n
i18n-không-chìa-khóa
Việc thiết lập nó chẳng có gì khó khăn
Chỉ cần đối tượng cấu hình đơn giản nhất và bạn đã sẵn sàng để toàn cầu.
Và thậm chí nhiều hơn nữa, tác nhân của bạn sẽ thiết lập nó cho bạn.
1. Thiết lập cơ bản
import * as I18nKeyless from "i18n-keyless-react";
I18nKeyless.init({
API_KEY: "YOUR_API_KEY",
storage: window.localStorage,
languages: {
primary: "en",
supported: ["en", "fr"],
},
});2. Sử dụng Component (Ở đây là React; tương tự trong Vue, Angular, Flutter, Swift và Kotlin)
import { I18nKeylessText } from "i18n-keyless-react";
// import { T } from "i18n-keyless-react"; // also works
// Just write in your primary language
<I18nKeylessText>
Welcome to our website
</I18nKeylessText>3. Sử dụng phía máy chủ (ở đây Node.js; cùng một cuộc gọi trong Laravel, Rails, Python và Go)
import { awaitForTranslationOrFallbackToOriginal, type Lang } from 'i18n-keyless-node';
const title = await awaitForTranslationOrFallbackToOriginal('Come see my app!', user.lang as Lang);
const body = await awaitForTranslationOrFallbackToOriginal('So many new stuff!', user.lang as Lang);
await sendExpoPushNotification({ user, title, body });4. Cho văn bản bên ngoài các thành phần
import { getTranslation } from "i18n-keyless-react";
export default function Navigation() {
return (
<HomeTabs.Navigator>
<HomeTabs.Screen
options={{ tabBarLabel: getTranslation("Welcome") }}
name="WELCOME"
/>
</HomeTabs.Navigator>
);
}5. Chọn SDK của bạn: một dòng cài đặt, cùng một API ở mọi nơi
- React, React Native, Expo, Next.js, Remix, TanStack Start, Astronpm install i18n-keyless-react
- Vue, Nuxtnpm install i18n-keyless-vue
- Angularnpm install i18n-keyless-angular
- Plain HTML, Svelte, Alpine, htmx, one script tagnpm install i18n-keyless-browser
- Node.jsnpm install i18n-keyless-node
- Laravel, PHPcomposer require i18n-keyless/laravel
- Rails, Rubybundle add i18n-keyless-rails
- Flutter, Dartflutter pub add i18n_keyless
- Swift, iOS, macOS, VaporSwiftPM: arnaudambro/i18n-keyless-swift
- Kotlin, Android, Ktorio.github.arnaudambro:i18n-keyless-kotlin
- Python, Django, Flask, FastAPIpip install i18n-keyless
- Gogo get github.com/arnaudambro/i18n-keyless/ports/go/v3
Cách thức hoạt động của bản dịch
i18n-keyless là một thư viện, kết hợp với dịch vụ API, cho phép bạn dịch văn bản của mình mà không cần sử dụng khóa.
Nếu không tìm thấy bản dịch, sẽ có một yêu cầu bất đồng bộ tới API của I18nKeyless để lấy bản dịch thông qua cuộc gọi API AI.
Thao tác này thường được thực hiện trong chế độ phát triển, khi bạn đang viết code. Nếu bạn bỏ sót một bản dịch, trong môi trường sản xuất, chỉ người dùng đầu tiên thiếu bản dịch sẽ thấy lỗi, sau đó nó sẽ ngay lập tức khả dụng cho người dùng trên toàn thế giới.
Danh sách cửa hàng của bạn bằng mọi ngôn ngữ, trong mọi bản phát hành
Mỗi bản cập nhật đều có nghĩa là ghi chú phát hành mới, mô tả và từ khóa — cho mỗi ngôn ngữ trên cả hai cửa hàng. Đó là điều ngăn bạn thêm ngôn ngữ. Không phải ứng dụng.
- Ghi chú phát hành cho mọi ngôn ngữ, trong một cuộc gọi
Viết bản cập nhật một lần. awaitForTranslation trả về nó trong mỗi ngôn ngữ bạn bán, và cấu hình cửa hàng của bạn cung cấp nó cho EAS hoặc fastlane.
- 48 ngôn ngữ, được ánh xạ tới các vị trí của App Store
pt-BR và pt-PT là hai danh sách; en-GB, en-AU và en-CA là ba. toAppStoreLocale đặt mỗi bản dịch vào đúng vị trí.
- Sửa một bản dịch tồi mà không cần phát hành
Trong ứng dụng, một override trong bảng điều khiển hoạt động lần lượt — không có bản build hotfix, không có đánh giá cửa hàng. Trong danh sách, hãy chạy lại push.
- Không định giá theo từ
Một dịch giả tính khoảng 0,10 € mỗi từ. 2.000 chuỗi nhân với 10 ngôn ngữ là một khoản ngân sách mà một nhà phát triển đơn lẻ không thể chi trả. Ở đây, từ không được đếm.
Toàn bộ công thức cho một ứng dụng Expo
// store.config.js — EAS Metadata awaits an async config
const { init, awaitForTranslation, toAppStoreLocale } = require("i18n-keyless-node");
const LANGS = ["en", "fr", "de", "ja", "pt-BR"];
const DESCRIPTION = "Bibi translates your app while you sleep…";
module.exports = async () => {
init({ API_KEY: process.env.I18N_KEYLESS_KEY, languages: { primary: "en", supported: LANGS } });
const info = {};
for (const lang of LANGS) {
info[toAppStoreLocale(lang)] = {
title: await awaitForTranslation("Bibi", lang, { context: "App Store app name, 30 characters max" }),
subtitle: await awaitForTranslation("Keyless i18n", lang, { context: "App Store subtitle, 30 characters max" }),
description: await awaitForTranslation(DESCRIPTION, lang, { context: "App Store description" }),
};
}
return { configVersion: 0, apple: { info } };
};Cuộc gọi tương tự ghi các tệp siêu dữ liệu fastlane cho Google Play. Việc viết hoa chỉ mang tính chất tham khảo: hãy đặt giới hạn trong ngữ cảnh và kiểm tra độ dài trước khi đẩy.
Hộp Cát Tương Tác
Xem cách i18n-keyless hoạt động theo thời gian thực
Mở một dự án StackBlitz trực tiếp và có thể chỉnh sửa để xem các bản dịch được giải quyết khi bạn gõ.
Tại sao tôi xây dựng cái này
Tôi luôn trì hoãn việc quốc tế hóa cho đến khi khách hàng của tôi muốn nó đến mức tôi không còn sự lựa chọn nào khác. Tôi ghét đọc mã có chứa các khóa quốc tế hóa bên trong, và tôi cũng ghét phải duy trì các tệp JSON cũng như nhìn thấy mức giá đắt đỏ của các nhà cung cấp dịch thuật quốc tế hóa. Vì vậy, tôi đã phải tự xây dựng, và tôi YÊU THÍCH NÓ. Tất cả ứng dụng của tôi giờ đều được quốc tế hóa theo mặc định.
Arnaud Ambroselli
Người sáng lập i18n-keyless
Bạn có muốn thêm của bạn không?
Một lời chứng chống lại một đăng ký miễn phí. Yêu cầu của bạn!
Gửi lời chứng của tôiCâu hỏi thường gặp
Tôi có cần quản lý các tệp tin dịch thuật không?
Không. Không có tệp JSON, không có bước trích xuất khóa, và không có plugin thời gian build. Bạn viết các câu của mình bằng ngôn ngữ nguồn, SDK gửi chúng đến API trong yêu cầu đầu tiên, API dịch chúng bằng AI, và mọi yêu cầu tiếp theo được phục vụ từ bộ nhớ đệm. Mã của bạn là nguồn duy nhất của sự thật.
Điều gì xảy ra khi tôi thay đổi văn bản nguồn?
Văn bản nguồn là khóa. Thay đổi nó và bạn sẽ nhận được một khóa mới với bản dịch AI mới. Khóa cũ đơn giản không còn được yêu cầu nữa, và bảng điều khiển sẽ dọn dẹp nó sau 30 ngày không sử dụng. Sửa lỗi đánh máy cũng tương tự: sửa nó trong mã, triển khai, và văn bản mới sẽ được dịch trong lần yêu cầu đầu tiên.
Nó giá bao nhiêu?
Tự lưu trữ: hoàn toàn miễn phí, không giới hạn dự án, không thuê bao và không giới hạn sử dụng — cài đặt hình ảnh Docker, sử dụng khóa AI của riêng bạn. Bạn thích nó chứ? Cho tôi một lời nhắn! Được lưu trữ: một mức giá cố định cho mỗi dự án mỗi tháng, dựa trên người dùng hoạt động hàng tháng — 4 € cho đến 1.000, 9 € cho đến 5.000, 29 € cho đến 50.000, 99 € cho đến 500.000 — thanh toán hàng tháng, hủy bất cứ lúc nào. Không có định giá theo chỗ ngồi, theo từ hoặc theo chuỗi trong cả hai trường hợp.
Tôi có thể xuất bản dịch của mình không?
Có. Bảng điều khiển có nút "Xuất JSON" tải xuống mọi bản dịch trong dự án của bạn dưới dạng một tệp JSON duy nhất. Việc xuất bao gồm tất cả các hàng, không chỉ những hàng được sử dụng trong 30 ngày qua, vì vậy đây là bản sao lưu đầy đủ. Không có ràng buộc: dữ liệu của bạn luôn chỉ cách một cú nhấp chuột.
Một người bảo trì: chuyện gì xảy ra nếu dự án dừng lại?
Các SDK được cấp phép theo MIT và vẫn có sẵn trên npm, PyPI, RubyGems và các sổ đăng ký khác. Máy chủ được công khai theo giấy phép Elastic 2.0 và giao thức giữa chúng đã được ghi chép, vì vậy bất kỳ ai cũng có thể chạy nó, fork nó hoặc viết một máy chủ chống lại nó. Bản dịch của bạn luôn nằm trong một tệp xuất JSON duy nhất vào bất kỳ thời điểm nào. Nếu dịch vụ được lưu trữ ngừng hoạt động: các ứng dụng đã cài đặt tiếp tục cung cấp các bản dịch đã lưu trong bộ nhớ cache, một máy khách mới quay trở lại ngôn ngữ nguồn, và khi bạn trỏ SDK tới phiên bản của riêng mình với API_URL, mọi thứ sẽ được khôi phục. Điều bạn sẽ mất là bản dịch AI các chuỗi mới trên i18n-keyless.com — không phải dữ liệu hay ứng dụng của bạn.
Đọc câu trả lời đầy đủ, kèm theo mãXem Demo
Xem video ngắn này để xem i18n-keyless đang hoạt động