Unbreakable i18n for agents loved by humans
No key to name, no locale file to sync, no a.b.c on screen
The source text is the key, translations are unbreakable.
5åéã®ã»ããã¢ãã
ããªãã®å®å šãªi18nå®è£ ã5åã§ãåè«ãããªããã
ããŒã®ãªãã·ã¹ãã
ãããªæå³ã®ãªãäœæ¥ã«è³ã¯é¢äžãã¹ãã§ã¯ãããŸããã
æåã®æ¥ããã°ããŒãã«
åœéåžå Žãžã®åºè·ã¯è¿œå ã®åªåãªãã§ã
i18nãèšå®ããã³ãŒããã¯ãªãŒã³ã«ä¿ã¡ãè¿ éã«åºè·ãã
çŸåšã®i18nãœãªã¥ãŒã·ã§ã³ã«ã¯ãè€æ°ã®PITAãååšããŸããçã¿ã¯ãšãŠã倧ãããããi18nãã§ããã ãé ãããŸãã
ããŒãã§éããã¹ãæéãæ¶è²»ããŸã
ããŒãµã¹ãã ãèšå®ãã: å°ãªããšã1æéã®ã·ãã¢éçºè ã®æé
åæ°ããããŒããšã«åŸåŸ©ïŒ1åé/ããŒãx500ããŒãx2èšèª = 17æé
i18n-keylessã䜿ãã°ãi18nã·ã¹ãã ã®ããšãå šãæ°ã«ããå¿ èŠã¯ãããŸãããããŒãã«è¡ã£ãŠã¢ããŒããæ³šæããããšãã§ããŸãã
仿¥ãã»ãšãã©ã®ã·ã¹ãã ã¯ãããã¹ãã翻蚳ããããã«ããŒã䜿çšããŠããŸã
ããã¯çæããã®ãçãã§ããããã¯ç¶æããã®ãçãã§ãã
ã¢ããªã§ããã¹ããèŠããšãããããæŽæ°ãããå Žåã¯ã察å¿ããããŒãèŠã€ããå¿ èŠããããŸãã
i18n-keylessã䜿çšãããšãi18nã·ã¹ãã ãæ°ã«ããå¿ èŠããããŸããããã£ãšé¢çœãããšã«è³ã䜿ã£ãŠãã ããã
翻蚳ã¯AIã«ä»»ããŸããã
ããŒã·ã¹ãã ã§ã¯ãã¢ããªå ã§ç¿»èš³ã管çããå¿ èŠããããŸãã
ãããªããã°ããŠãŒã¶ãŒã¯ã¢ããªå ã§ someheader.welcome.title ã衚瀺ããŸãã
i18n-keylessã䜿çšãããšãi18nã·ã¹ãã ãå šãæ°ã«ããå¿ èŠããããŸãããè¯ãèŠåºããæžãã ãã§ãããŒã±ãã£ã³ã°ã«éäžãã売äžãåŸãŠãã ããã
ã³ãŒãããŒã¹ã¯çŸãã... i18nããŒã®ææãŸã§
ããŒã·ã¹ãã ã§ã¯ãã³ãŒããšã³ã³ãã³ããèªããšãã¯ãããŒãèªãŸãªããã°ãªããŸãããèªç¶èšèªã§ã¯ãããŸããã
æã ãææ³çã«æ£ãããªãæãä¿®æ£ããå¿ èŠããããŸããããããããªãã¯ãããç¥ããªãããªããªãããªããéµãèªãããã§ãã
i18n-keylessã䜿ãã°ãi18nã·ã¹ãã ã®ããšãå šãæ°ã«ããå¿ èŠããããŸãããã³ãŒãããŒã¹ã¯çŸããä¿ãããŸãã
MCPãµãŒããŒã§ãi18nã®ããŒãºããã¹ãŠã«ããŒ
ãšãŒãžã§ã³ãåã³ãŒãã£ã³ã°ã«æé©åãããã·ã¹ãã ã§ãããã®ä»6ã€ã®çç±ã
ååãèããå¿ èŠã¯ãããŸãã
ããŒã¯æ£è§£ã®ãªãåœåã®æ±ºå®ã§ãã2ã€ã®ãšãŒãžã§ã³ããåããã¿ã³ã«å¯Ÿã㊠login.submit ãš auth.button.send ãèšè¿°ããŸããããŒããªããã°ã決å®ããããšã¯ãããŸããã
ç·šéãããã¡ã€ã«ã¯1ã€ã ãã20åã§ã¯ãããŸãã
ããŒã«åºã¥ã倿Žã¯ãã³ã³ããŒãã³ããšãã¹ãŠã®ãã±ãŒã«JSONãã¡ã€ã«ã«åœ±é¿ãäžãããšãŒãžã§ã³ãã¯ãã¡ã€ã«ãå¿ããŸããããã§ãã³ããŒå€æŽã¯ã·ã³ã°ã«ãã¡ã€ã«ã®ç·šéã§ãã
ãšãŒãžã§ã³ãããªãŒãã«ãããããŒãžã³ã³ããªã¯ããªã
5ã€ã®ãã©ã³ãã«ãã5人ã®ãšãŒãžã§ã³ããå šå¡en.jsonãç·šéããŸãïŒç¢ºå®ãªç«¶åãå ±æãã¡ã€ã«ã¯ãªããããã¯ãŒã¯ããªãŒãšããã¯ã°ã©ãŠã³ããšãŒãžã§ã³ãã¯æ±ºããŠè¡çªããŸããã
ããŒã¯ã³ãå®ã
ããŒãåå©çšããã«ã¯ããšãŒãžã§ã³ããç·šéã®ãã³ã«ãã±ãŒã«ãã¡ã€ã«ãã³ã³ããã¹ãã«ããŒãããå¿ èŠããããŸããããŒãªãã®ããŒãã¯äœãè¡ããŸãããããã¹ãã¯ã³ã³ããŒãã³ãå ã«çŽæ¥ååšããŸãã
èªã¿ãããå·®å
ãã«ãªã¯ãšã¹ãã¯å®éã®æç« ã衚瀺ããŸãã人éãŸãã¯ã¬ãã¥ãŒæ åœè ã¯ãããŒãäœã衚ãããæãäžããããšãªããã³ããŒã倿ã§ããŸãã
ããªãã® CLAUDE.md ã«ãã1ã€ã®ã«ãŒã«
ããªããæžããã¹ãŠã® i18n ã«ãŒã«ã¯ããšãŒãžã§ã³ããç Žãå¯èœæ§ã®ããã«ãŒã«ã§ãããã®ã«ãŒã«ã¯ 1 è¡ã ãã§æžã¿ãŸã â ãããŠãã©ãŒã«ããã¯ã¯å®éã®ããã¹ããªã®ã§ããã¹ãç»é¢ã« a.b.c ã衚瀺ããããšã¯ãããŸããã
ãšãŒãžã§ã³ããå¿ èŠãšããå¯äžã®i18nã«ãŒã«
# CLAUDE.md Write the UI copy in English and wrap it in <T>âŠ</T> from i18n-keyless-react. That is the whole i18n setup.
ããªãã®ãšãŒãžã§ã³ãã¯ãããæäœã§ããŸããæžãã ãã§ã¯ãããŸãã
MCPãµãŒããŒãéããŠããšãŒãžã§ã³ãã¯äžè¶³ããŠãã翻蚳ããªã¹ãã¢ãããã1ã€ãèªã¿èŸŒã¿ãæªã翻蚳ãäžæžããããããã§ã«æã£ãŠããã³ããŒãã€ã³ããŒãããŸããç¬èªã®OAuthãã°ã€ã³ã§ãããŒã貌ãä»ããå¿ èŠã¯ãããŸããã
MCP ã¬ã€ããèªãæåã®æ¥ããã°ããŒãã«ã«ãªãªãŒã¹
è€éãã®ããã«i18nãé ãããã®ãæ¢ããŠãã ããã5åã§å®è£ ããæ¥ã§ãªããi18nãå®è£ ãããŠããªããã®ããã«éçºé床ãç¶æããŠãã ããã
- 5åã§å®è£ ãåè«ãããªããã
1ã€ã®ã·ã³ãã«ãªèšå®ãªããžã§ã¯ãã§å®äºã§ãã
- éçºé床ãç¶æãã
i18nãå šãå®è£ ãããŠããªããã®ããã«ã³ãŒããæžããŠãã ããã
- äžçåžå Žãžã®é é
æ°ããèšèªã«ã¹ã±ãŒãªã³ã°ããéã«ãªãã¡ã¯ã¿ãªã³ã°ã¯å¿ èŠãããŸããã
- SSR & SEO å¯Ÿå¿æžã¿
Next.jsãRemixãTanStack StartãAstroã«å¯Ÿå¿ãæ€çŽ¢ãšã³ãžã³åãã«ãµãŒããŒãµã€ãã§ä»»æã®èšèªãã¬ã³ããªã³ã° â ã»ããã¢ããã¯5åã§å®äºã
äŒçµ±çãªi18n
i18n-keyless
èšå®ã¯ç°¡åã§ã
æãã·ã³ãã«ãªèšå®ãªããžã§ã¯ãã ãã§ãã°ããŒãã«ã«è¡ãæºåãã§ããŠããŸãã
ãããŠããã«ãããªãã®ãšãŒãžã§ã³ãããããããªãã®ããã«ã»ããã¢ããããŸãã
1. åºæ¬èšå®
import * as I18nKeyless from "i18n-keyless-react";
I18nKeyless.init({
API_KEY: "YOUR_API_KEY",
storage: window.localStorage,
languages: {
primary: "en",
supported: ["en", "fr"],
},
});2. ã³ã³ããŒãã³ãã®äœ¿çš
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. ãµãŒããŒãµã€ãã®äœ¿çš (äŸ: Node.js)
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. ã³ã³ããŒãã³ãå€ã®ããã¹ã
import { getTranslation } from "i18n-keyless-react";
export default function Navigation() {
return (
<HomeTabs.Navigator>
<HomeTabs.Screen
options={{ tabBarLabel: getTranslation("Welcome") }}
name="WELCOME"
/>
</HomeTabs.Navigator>
);
}翻蚳ã®ä»çµã¿
i18n-keyless ã¯ãAPI ãµãŒãã¹ãšçµã¿åãããã©ã€ãã©ãªã§ãããŒã䜿çšããå¿ èŠãªãããã¹ãã翻蚳ããããšãã§ããŸãã
翻蚳ãèŠã€ãããªãå ŽåãI18nKeylessã®APIã«éåæã§ãã§ããããAI APIã³ãŒã«ã§ç¿»èš³ãååŸããŸãã
ãã®æäœã¯éåžžãéçºã¢ãŒãã§è¡ããŸããã³ãŒãã£ã³ã°äžã§ããããäžã€èŠéããå Žåãæ¬çªç°å¢ã§ã¯ç¿»èš³ãäžè¶³ããŠããæåã®ãŠãŒã¶ãŒã ããã°ãªãããèŠãŸãããã®åŸãäžçäžã®ãŠãŒã¶ãŒã«å³åº§ã«å©çšå¯èœã«ãªããŸãã
ãã¹ãŠã®èšèªããã¹ãŠã®ãªãªãŒã¹ã«ãããããªãã®ã¹ãã¢äžèЧ
åã¢ããããŒãã¯æ°ãããªãªãŒã¹ããŒãã説æãããã³ããŒã¯ãŒããæå³ããŸã â åèšèªãäž¡æ¹ã®ã¹ãã¢ã§ããããèšèªã远å ããã®ã劚ããçç±ã§ããã¢ããªèªäœã§ã¯ãããŸããã
- ãã¹ãŠã®èšèªã®ãªãªãŒã¹ããŒããã1åã®åŒã³åºãã§
æŽæ°ãäžåºŠæžããŠãã ãããawaitForTranslation ã¯è²©å£²ããŠããåèšèªã§ãããè¿ããã¹ãã¢ã®èšå®ã EAS ãŸã㯠fastlane ã«ãããéä¿¡ããŸãã
- 48èšèªãApp Storeã®ã¹ãããã«ãããã³ã°ãããŠããŸã
pt-BR ãš pt-PT ã¯2ã€ã®ãªã¹ãã§ããen-GBãen-AUãen-CA ã¯3ã€ã§ããtoAppStoreLocale ã¯åç¿»èš³ãæ£ããå Žæã«é 眮ããŸãã
- ãªãªãŒã¹ãªãã§æªã翻蚳ãä¿®æ£ãã
ã¢ããªå ã§ãããã·ã¥ããŒãã®1ã€ã®äžæžããäžåºŠã«ã©ã€ãã«ãªããŸããããããã£ãã¯ã¹ãã«ãã¯ãªããã¹ãã¢ã¬ãã¥ãŒããããŸããããªã¹ãã§ãããã·ã¥ãåå®è¡ããŸãã
- åèªããšã®äŸ¡æ Œã§ã¯ãããŸãã
翻蚳è ã¯1èªãããçŽ0.10ãŠãŒããè«æ±ããŸãã10èšèªã®2,000ã®æååã¯ãäžäººéçºè ã«ã¯äºç®çã«è² æ ã倧ããããŸããããã§ã¯åèªã¯ã«ãŠã³ããããŸããã
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 } };
};åãåŒã³åºãã Google Play ã® fastlane ã¡ã¿ããŒã¿ãã¡ã€ã«ãæžã蟌ã¿ãŸãã倧æåã¯åèæ å ±ã§ããå¶éãã³ã³ããã¹ãã«èšå®ããããã·ã¥ããåã«é·ãã確èªããŠãã ããã
ã€ã³ã¿ã©ã¯ãã£ããµã³ãããã¯ã¹
i18n-keylessããªã¢ã«ã¿ã€ã ã§åäœããæ¹æ³ã確èªããŠãã ãã
ã©ã€ãã§ç·šéå¯èœãªStackBlitzãããžã§ã¯ããéããŠãå ¥åããªãã翻蚳ã解決ãããã®ã確èªããŸãã
éçºè ã¯ã·ã³ãã«ãã奜ãã§ã
i18n-keylessã«ã€ããŠä»ã®äººãã©ãèšã£ãŠããããèŠãŠãã ãã
ç§ã¯5åã§i18nãMVPã«è¿œå ã§ããŸããã远å ã®éçºæéãªãã§7èšèªã§ãªãªãŒã¹ããŸãããã³ãŒãããŒã¹ã¯ã¯ãªãŒã³ã®ãŸãŸã§ã翻蚳ããŒã®ç®¡çã§ã¯ãªãæ©èœã®æ§ç¯ã«éäžã§ããŸããã
Jamie Smith
ã¯ãŒã«ãªã¹ã¿ãŒãã¢ããã®CTO
翻蚳ããŒã®ç®¡çã«ããã¡ã³ã¿ã«ãªãŒããŒããããçç£æ§ã殺ããŠãããi18n-keylessã䜿ãã°ãèªç¶èšèªãæžãã ãã§ãã¹ãŠãåäœããŸããã¯ãŒã¯ãããŒã«i18nãååšããªããã®ããã§ãã
Alex Lee
Another Cool Startupã®ãªãŒãéçºè
補åã®i18nããªãªãŒã¹åŸã«å»¶æãããšããã§ãããi18n-keylessã䜿çšããŠMVPãã§ãŒãºã§å®è£ ããæåã®æ¥ããã°ããŒãã«ã«ãªãªãŒã¹ããŸãããROIã¯é©ãã¹ããã®ã§ããã
Maria Rodriguez
GlobalAppã®åµèšè
ã·ã³ãã«ã§äºæž¬å¯èœãªäŸ¡æ Œèšå®
ããªãã®èŠæš¡ã«åãããäžã€ã®åºå®äŸ¡æ Œã
ãã¹ãŠã®ãã©ã³ã®ãã¹ãŠã®æ©èœã
1èªããšã®ææ°æãªããããŒã¯ã³èšç®ãªãã
æéã¢ã¯ãã£ããŠãŒã¶ãŒæå€§1,000人
ã€ã³ãã£ãŒã¢ããªãæ°è£œååã
æéã¢ã¯ãã£ããŠãŒã¶ãŒæå€§5,000人
èŽè¡ãèŠã€ããã¢ããªåã
æéã¢ã¯ãã£ããŠãŒã¶ãŒæå€§50,000人
å®çžŸã®ããã¢ããªåã
æå€§50äžã®æéã¢ã¯ãã£ããŠãŒã¶ãŒ
å€§èŠæš¡ãªè£œååã
ãã¹ãŠã®ãã©ã³ã«ã¯ä»¥äžãå«ãŸããŠããŸãïŒ
48èšèªãã¹ãŠãäžçå šäœã忥ãã
ç¡å¶éã®ç¿»èš³ãAIãå«ããæ°ããæååã¯æ¬çªç°å¢ã§èªåçã«ç¿»èš³ãããŸã
ãŠãŒã¶ãŒçæã³ã³ãã³ãïŒUGCïŒã®ãªã¢ã«ã¿ã€ã 翻蚳
ãã€ã§ãã¢ããã°ã¬ãŒããããŠã³ã°ã¬ãŒãããŸãã¯ãã£ã³ã»ã«ã§ããŸã
æéã¢ã¯ãã£ããŠãŒã¶ãŒ50äžäººä»¥äžã§ããïŒ ãåãåãã
åãã¢ããªãä»ã®ãšããã§ã¯ããããããã®ã
2ã€ã®ã¹ã©ã€ããŒãåãããŸããè«æ±æžã¯ã48èšèªãã¹ãŠã«å¯Ÿå¿ããããªãã®ã¢ããªã®ãã®ã§ãã
| 解決ç | ããªãã®æé¡è«æ±æž | æ¯æã㯠| 翻蚳 | èšèª |
|---|---|---|---|---|
| i18n-keylessç§ãã¡ | â¬4/ æ | æéã¢ã¯ãã£ããŠãŒã¶ãŒ åå©åå©ã | AIãç¡å¶éãå«ãŸããŠããŸã | å š48ã忥ãã |
| Crowdin | â¬88/ æ1 | ãã¹ããããåèª: ããªãã®åèª Ã 48 | Crowdin AIãå²ãåœãŠå | ããããã远å ããŸã |
| Intlayer | â¬27/ æ2 | 座åžãšãããžã§ã¯ã | AIçæãå²ãåœãŠå | ããããã远å ããŸã |
| Lingo.dev | â¬91/ æ3 | åºæ¬æéããã®åŸAIããŒã¯ã³ | AIã®è«æ±æžã¯çŽæ¥ããªãã«éãããŸã | ããããã远å ããŸã |
| Locize | â¬77/ æ4 | åèª Ã 48ãããã³ CDN ããŠã³ããŒã | ããªãã¯èªåèªèº«ã®AIããŒãæã£ãŠããŸã | å ¬éãããŠããæå€§ã®èšç»ã®10 |
| Lokalise | â¬132/ æ5 | ã·ãŒããæ¬¡ã«éµ | 翻蚳è ã¯å¥éè«æ±ãããŸã | ããããã远å ããŸã |
| Phrase | â¬483/ æ6 | ã·ãŒããæ¬¡ã«ç®¡çãããåèª | 1èªããã$0.06ãããå¥éè«æ±ãããŸã | ããããã远å ããŸã |
| Smartling | â¬552/ æ7 | ãã¹ãŠã®èšèããã¹ãŠã®èšèª | AI翻蚳ã1åèªããã$0.06ãã | ããããã远å ããŸã |
| Tolgee | â¬49/ æ8 | éµãšã·ãŒã | æ©æ¢°ç¿»èš³ã®ã¯ã¬ãžãã | ããªãã¯ãããããåããŸã |
| Weglot | â¬1,678/ æ9 | åèª Ã èšèªããŠã§ãããŒãžäž | æ©æ¢°ãå²ãåœãŠå | å ¬éãããæå€§ã®èšç»ã«ããã20 |
å ¬éãªã¹ãäŸ¡æ Œã2026幎8æã«èªã¿åãããã³ããŒã¯ãããã倿Žãããããã確èªãã ãããåè«æ±æžã¯å ¬éãããéæ®µã®ç§ãã¡ã®èªã¿åãã§ãããåžžã«ããªãã®ã¢ããªãç¶æããæãå®ãææãã©ã³ãåããŸãããã³ããŒãæåã®ç¿»èš³ãäžåºŠè«æ±ãããšãããã12ãæã§åæ£ããŸãã
1 Crowdinã¯ãProãã©ã³ã§å¹Žéè«æ±ã®60,000èªã®ãã¹ãã«æé¡44ãŠãŒããå ¬éããŸãããã¹ããããèªã¯ã察象èšèªã®1èªã§ãã60,000ãè¶ ãããšãã®ãããã¯äŸ¡æ Œãç¹°ãè¿ããŸãã
2 Intlayerã¯ãªãŒãã³ãœãŒã¹ã§ããæé¡29ãã«ã§CMSãšAIçæã®ã¯ã©ãŒã¿ãè³Œå ¥ã§ããŸããã¯ã©ãŒã¿ãè¶ ããå Žåã¯ç¬èªã®AIããŒã䜿çšã§ããããã100äžããŒã¯ã³ããšã«10ãã«ã®ã¢ãã«æéã远å ãã12ã¶æã«åæ£ããŸãã
3 Lingo.devã¯æé¡99ãã«ãå ¬éããŠãããã€ã³ãã©ã¹ãã©ã¯ãã£ã®100äžããŒã¯ã³ããšã«è¿œå ã§2ãã«ãè«æ±ããã¢ãã«ã®è«æ±æžãããªãã«è»¢å«ããŸãã1åèªããã1.4ããŒã¯ã³ãã¢ãã«ã³ã¹ãã®100äžããŒã¯ã³ããã10ãã«ãã«ãŠã³ãããŸããåºæ¬æéã¯ãã®éé¡ã®å€§éšåãå ããŠããŸãã
4 Locizeã¯ãæé¡â¬7ãâ¬19ãâ¬49ã§ããããã15,000èªã30,000èªã60,000èªã«å¯Ÿãã100äžã300äžã500äžã®CDNããŠã³ããŒããæäŸããŸãããã以äžã§ã¯ã1,000èªããšã«$0.50ã100äžããŠã³ããŒãããšã«$5ã远å ã§å ¬éããŸããæããšã«ãŠãŒã¶ãŒããšã«30åã®ããŠã³ããŒããã«ãŠã³ãããŸããå ¬éãããŠãããã©ã³ã§ã¯48èšèªããµããŒãããŠããŸããã
5 Lokaliseã¯æé¡$144ã$375ã$999ãå ¬éããŠãããããŒã®å¶éã¯ãããŸããã3ã€ã®ãã©ã³ã«ã¯ãããã5,000ã20,000ã100,000ã®ããŒãšãåããŒã«ã€ã12èªãå«ãŸãããšæ³å®ããŠããŸãã人éã«ãã翻蚳ã¯å¥éè«æ±ãããŸãã
6 ãã®ãã¬ãŒãºã¯ããœãããŠã§ã¢ãã©ã³ã§ç®¡çããã100äžèªã«å¯ŸããŠæé¡525ãã«ã300äžèªã«å¯ŸããŠ1,245ãã«ãå ¬éããŠããŸããåèšèªã®ååèªã«å¯ŸããŠ1ã€ã®ç®¡çãããåèªãã«ãŠã³ãããäžèšã®1,245ãã«ã®ãããã¯ã300äžèªã«å¯ŸããŠç¹°ãè¿ããŸãã
7 Smartlingã¯ãã©ãããã©ãŒã ã®äŸ¡æ Œãå ¬éããŠããŸãããå ¬éãããŠãã$0.06/ã¯ãŒãã®AI翻蚳ã®ã¿ãã«ãŠã³ãããŸãã12ã¶æã«ããã£ãŠåæ£ãããŸããå®éã®è«æ±é¡ã¯ããããé«ããªããŸãã
8 Tolgee ã¯åèªã§ã¯ãªãããŒã課éãããããåããŒã«ã€ã12èªãšã«ãŠã³ãããŸãã幎éè«æ±ã®2,000ããŒã§â¬49ã5,000ããŒã§â¬179ã20,000ããŒã§â¬499ãå ¬éããŸãããã以äžã®å Žåã¯â¬499ãããã¯ãç¹°ãè¿ããŸããæ©æ¢°ç¿»èš³ã®ã¯ã¬ãžããã¯å¥éã«ãŠã³ããããŸãã
9 Weglotã¯ã¢ããªã§ã¯ãªãããŠã§ãããŒãžã翻蚳ããŸããå ¬éãããŠããæå€§ã®ãã©ã³ã¯ã20èšèªã§æé¡699ãŠãŒãã§ãããã®ããããã®äŸ¡æ Œã48èšèªã«æ¡åŒµããŠããŸããããªãã®èšèã¯ãããããã¹ãŠã®ãã©ã³ã«åãŸããŸãã
åè¡ããšã«æé·ãã補åãšå ±ã«ãç§ãã¡ã®äŸ¡æ Œã¯äžå®ã§ãã
ãã¢ã芳ãŠãã ãã
ãã®çãåç»ãèŠãŠãi18n-keylessã®åäœã確èªããŠãã ãã
1ã€ã®ã¢ããªã®ããã®APIããŒãååŸ
5åã§å®äºããi18nã®å®è£ ãiykyk.