LogoSkills

i18n

Slang-based internationalization (i18n) translation management

ํ•ญ๋ชฉ๋‚ด์šฉ
Invoke/i18n
Aliases/i18n:add, /translate, /locale
Categorykobic-development
Complexitymoderate
MCP Serversserena, context7

/i18n โ€” ๋‹ค๊ตญ์–ด ๋ฒˆ์—ญ ๋„์šฐ๋ฏธ#

ํ•œ๋งˆ๋””๋กœ#

ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ชจ๋“  ๋ฌธ๊ตฌ(๋ฒ„ํŠผ, ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€ ๋“ฑ)๋ฅผ ์—ฌ๋Ÿฌ ๋‚˜๋ผ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•ด ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ•œ๊ตญ์–ด๋กœ ์ ์€ ๋ฌธ์žฅ์— "์˜์–ด๋กœ๋Š” ์ด๋ ‡๊ฒŒ"๋ผ๊ณ  ์ง์„ ์ง€์–ด์ฃผ๋ฉด, ์•ฑ์ด ์‚ฌ์šฉ์ž์˜ ์–ธ์–ด์— ๋งž์ถฐ ์•Œ์•„์„œ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‹จ์–ด์žฅ์— ์ƒˆ ๋‹จ์–ด์™€ ๋œป์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ด์š”.

๋ˆ„๊ฐ€ยท์–ธ์ œ ์“ฐ๋‚˜์š”#

  • ํ™”๋ฉด์— ์ƒˆ๋กœ์šด ๋ฌธ๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ํ•œ๊ตญ์–ดยท์˜์–ด ๋ฒˆ์—ญ์„ ํ•จ๊ป˜ ๋“ฑ๋กํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ์—ฌ๋Ÿฌ ๋‚˜๋ผ ์–ธ์–ด๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋‹ค๊ตญ์–ด ํ…์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ
  • ์ฝ”๋“œ์—์„œ context.i10n.* ๊ฐ™์€ ๋ฒˆ์—ญ ๋ฌธ๊ตฌ ํ˜ธ์ถœ ๋ฐฉ์‹์„ ๋‹ค๋ฃฐ ๋•Œ

๋ฌด์—‡์„ ํ•ด์ฃผ๋‚˜์š”#

  • ๋ฒˆ์—ญ ๋ฌธ๊ตฌ๋ฅผ ์ •๋ฆฌํ•ด ๋‘๋Š” ํŒŒ์ผ(shared/i10n/lib/src/json/ko.i18n.json, en.i18n.json ๋“ฑ ํ•œ๊ตญ์–ดยท์˜์–ด๋ฅผ ํฌํ•จํ•œ 11๊ฐœ ์–ธ์–ด ํŒŒ์ผ)์— ์ƒˆ ๋ฌธ๊ตฌ๋ฅผ ์ถ”๊ฐ€ยท์ •๋ฆฌํ•ด ์ค๋‹ˆ๋‹ค.
  • "1๊ฐœ", "2๊ฐœ"์ฒ˜๋Ÿผ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๋ง์ด ๋‹ฌ๋ผ์ง€๋Š” ๋ณต์ˆ˜ํ˜• ์ฒ˜๋ฆฌ๋‚˜ {name}๋‹˜ ๊ฐ™์€ ์ž๋ฆฌํ‘œ์‹œ์ž(์ด๋ฆ„ยท์ˆซ์ž ๋“ฑ ๋ฐ”๋€Œ๋Š” ๊ฐ’) ์ฒ˜๋ฆฌ๋ฅผ ํ‘œ์ค€ ๋ฐฉ์‹์œผ๋กœ ๋งž์ถฐ ์ค๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ ๊ฒฐ๊ณผ๋ฌผ(translations.g.dart)์„ ๋งŒ๋“ค๊ณ , ๋น ์ง„ ๋ฒˆ์—ญ์ด ์—†๋Š”์ง€ ์ ๊ฒ€ํ•ด ์ค๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜์š”#

# ์ƒˆ ๋ฒˆ์—ญ ์ถ”๊ฐ€ (ํ•œ๊ตญ์–ดยท์˜์–ด ํ•จ๊ป˜)
/i18n add home.new_feature --ko  " ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ "   --en  " New Feature " 

 # ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๋ง์ด ๋‹ฌ๋ผ์ง€๋Š” ๋ณต์ˆ˜ํ˜• ๋ฒˆ์—ญ ์ถ”๊ฐ€
/i18n add cart.item_count --ko  " ์ƒํ’ˆ "   --en  " item "   --plural

# ๋น ์ง„ ๋ฒˆ์—ญ์ด ์—†๋Š”์ง€ ์ ๊ฒ€
/i18n check
  • add(์ถ”๊ฐ€)ยทupdate(์ˆ˜์ •)ยทcheck(์ ๊ฒ€) ์ค‘ ํ•  ์ผ์„ ๊ณ ๋ฅด๊ณ , home.welcome์ฒ˜๋Ÿผ ๋ฌธ๊ตฌ์˜ ์œ„์น˜(ํ‚ค ๊ฒฝ๋กœ)๋ฅผ ์ ์Šต๋‹ˆ๋‹ค.
  • --ko์—๋Š” ํ•œ๊ตญ์–ด, --en์—๋Š” ์˜์–ด ๋ฌธ์žฅ์„ ๋„ฃ๊ณ , ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ํ‘œํ˜„์ด ๋‹ฌ๋ผ์ง€๋ฉด --plural์„ ๋ง๋ถ™์ž…๋‹ˆ๋‹ค.

์•ˆ์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”#

  1. ๋ฌธ๊ตฌ ๋“ฑ๋ก โ€” ํ•œ๊ตญ์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒˆ์—ญ ํŒŒ์ผ์— ์ƒˆ ๋ฌธ๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์˜์–ด ๋“ฑ ๋‹ค๋ฅธ ์–ธ์–ด ์ง์„ ๋งž์ถฐ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. ์ž๋™ ๋ฒˆ์—ญยท์ฝ”๋“œ ์ƒ์„ฑ โ€” ์˜์–ด ์ž๋™ ๋ฒˆ์—ญ(GPT)์„ ๋Œ๋ฆฌ๊ฑฐ๋‚˜, ๋ฒˆ์—ญ ํŒŒ์ผ์„ ์•ฑ์ด ์“ธ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค(melos run generate:locale).
  3. ์ ๊ฒ€ โ€” ๋น ์ง„ ๋ฒˆ์—ญ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ณ (dart run slang analyze), ํ•˜๋“œ์ฝ”๋”ฉ๋œ(๋ฒˆ์—ญ ํ‚ค๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์€) ๋ฌธ๊ตฌ๊ฐ€ ์—†๋„๋ก ๊ทœ์น™์„ ์ง€ํ‚ต๋‹ˆ๋‹ค.

โš™๏ธ ์ƒ์„ธ ์˜ต์…˜ยท์‹คํ–‰ ๋ช…์„ธ (๊ฐœ๋ฐœ์ž / AI ์—์ด์ „ํŠธ์šฉ)

Triggers#

  • When adding new translation keys
  • When managing multilingual text
  • When using context.i10n.* patterns

Context Trigger Pattern#

/i18n {action} {key_path} [--options]

Parameters#

ParameterRequiredDescriptionExample
actionโœ…Action to performadd, update, check
key_pathโœ…Translation key pathhome.welcome, auth.login
--koโŒKorean text"ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค"
--enโŒEnglish text"Welcome"
--pluralโŒPluralization handlingtrue

File Structure#

shared/i10n/lib/src/
โ”œโ”€โ”€ json/
โ”‚   โ”œโ”€โ”€ ko.i18n.json          # Base (Korean)
โ”‚   โ”œโ”€โ”€ en.i18n.json          # English
โ”‚   โ””โ”€โ”€ ... (ja, zh-Hans, de, fr, es, it, pt, ru, ar)
โ””โ”€โ”€ translations/
    โ””โ”€โ”€ translations.g.dart    # Generated code

Translation File Format#

Basic Structure#

// shared/i10n/lib/src/json/ko.i18n.json
{
   " common " : {
     " app_name " :  " Unibook " ,
     " ok " :  " ํ™•์ธ " ,
     " cancel " :  " ์ทจ์†Œ " ,
     " save " :  " ์ €์žฅ " ,
     " loading " :  " ๋กœ๋”ฉ ์ค‘... " ,
     " error " :  " ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค " 
   },
   " auth " : {
     " login " :  " ๋กœ๊ทธ์ธ " ,
     " logout " :  " ๋กœ๊ทธ์•„์›ƒ " ,
     " sign_up " :  " ํšŒ์›๊ฐ€์ž… " ,
     " email " :  " ์ด๋ฉ”์ผ " ,
     " password " :  " ๋น„๋ฐ€๋ฒˆํ˜ธ " 
   }
}

Placeholders#

{
   " user " : {
     " greeting " :  " {name}๋‹˜, ์•ˆ๋…•ํ•˜์„ธ์š”! " ,
     " points " :  " {count} ํฌ์ธํŠธ ๋ณด์œ  " ,
     " join_date " :  " {date}์— ๊ฐ€์ž… " 
   }
}

Pluralization#

{
   " items " : {
     " count(param=n) " : {
       " zero " :  " ํ•ญ๋ชฉ ์—†์Œ " ,
       " one " :  " ํ•ญ๋ชฉ 1๊ฐœ " ,
       " other " :  " ํ•ญ๋ชฉ {n}๊ฐœ " 
     }
  },
   " messages " : {
     " unread(param=count) " : {
       " zero " :  " ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ์—†์Œ " ,
       " one " :  " ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ 1๊ฐœ " ,
       " other " :  " ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ {count}๊ฐœ " 
     }
  }
}

Context-Based#

{
   " pet " : {
     " type(context=PetType) " : {
       " dog " :  " ๊ฐ•์•„์ง€ " ,
       " cat " :  " ๊ณ ์–‘์ด " ,
       " bird " :  " ์ƒˆ " 
     }
  }
}

Code Usage#

Basic Usage#

// Using BuildContext extension (provided by package:core)
Text(context.i10n.common.app_name)
Text(context.i10n.auth.login)
Text(context.i10n.home.title)

Placeholders#

Text(context.i10n.user.greeting(name: user.name))
Text(context.i10n.user.points(count: user.points.toString()))

Pluralization#

Text(context.i10n.items.count(n: itemCount))
Text(context.i10n.messages.unread(count: unreadCount))

Commands#

# Generate translation code
melos run generate:locale

# GPT auto-translation (English)
melos run translate:slang

# Check for missing translations
dart run slang analyze

Core Rules#

Naming Conventions#

  • Use nested structures: user.profile.title
  • Use snake_case (key_case: snake)
  • Use meaningful key names

Translation Rules#

  • All UI text must use translation keys
  • Hard-coded strings are prohibited
  • Pluralization must always be handled

Code Generation#

  • Run melos run generate:locale after modifying translation files
  • Do not manually edit generated code

MCP Integration#

StepMCP ServerPurpose
Pattern analysisContext7slang documentation
Code searchSerenaReference existing translation patterns

Examples#

Add New Translation#

/i18n add home.new_feature --ko  " ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ "   --en  " New Feature "

Add Plural Translation#

/i18n add cart.item_count --ko  " ์ƒํ’ˆ "   --en  " item "   --plural

Check Missing Translations#

/i18n check

References#

  • Detailed implementation: .claude/agents/i18n.md
  • Translation files: shared/i10n/lib/src/json/