t9n-cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dictionaries/ar.json +244 -0
  2. package/dictionaries/de.json +244 -0
  3. package/dictionaries/el.json +244 -0
  4. package/dictionaries/en.json +244 -0
  5. package/dictionaries/es.json +244 -0
  6. package/dictionaries/fr.json +244 -0
  7. package/dictionaries/hi.json +244 -0
  8. package/dictionaries/id.json +244 -0
  9. package/dictionaries/it.json +244 -0
  10. package/dictionaries/ja.json +244 -0
  11. package/dictionaries/ko.json +244 -0
  12. package/dictionaries/ms.json +244 -0
  13. package/dictionaries/nl.json +244 -0
  14. package/dictionaries/pl.json +244 -0
  15. package/dictionaries/pt.json +244 -0
  16. package/dictionaries/ru.json +244 -0
  17. package/dictionaries/sv.json +244 -0
  18. package/dictionaries/th.json +244 -0
  19. package/dictionaries/tr.json +244 -0
  20. package/dictionaries/vi.json +244 -0
  21. package/dictionaries/yue.json +244 -0
  22. package/dictionaries/zh-CN.json +244 -0
  23. package/dictionaries/zh-TW.json +244 -0
  24. package/dist/api.d.ts +1 -0
  25. package/dist/api.js +52 -0
  26. package/dist/commands/auth.d.ts +1 -0
  27. package/dist/commands/auth.js +41 -0
  28. package/dist/commands/diff.d.ts +1 -0
  29. package/dist/commands/diff.js +96 -0
  30. package/dist/commands/init.d.ts +1 -0
  31. package/dist/commands/init.js +32 -0
  32. package/dist/commands/scan.d.ts +1 -0
  33. package/dist/commands/scan.js +151 -0
  34. package/dist/commands/status.d.ts +1 -0
  35. package/dist/commands/status.js +42 -0
  36. package/dist/commands/translate.d.ts +1 -0
  37. package/dist/commands/translate.js +76 -0
  38. package/dist/config.d.ts +19 -0
  39. package/dist/config.js +60 -0
  40. package/dist/i18n.d.ts +7 -0
  41. package/dist/i18n.js +52 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.js +58 -0
  44. package/dist/lib/jsonUtils.d.ts +12 -0
  45. package/dist/lib/jsonUtils.js +151 -0
  46. package/dist/tsconfig.tsbuildinfo +1 -0
  47. package/package.json +2 -2
@@ -0,0 +1,244 @@
1
+ {
2
+ "home": {
3
+ "badge": "t9n - MVP",
4
+ "title": "Tradução i18n que respeita seu código.",
5
+ "subtitle": "Zero Erros de Sintaxe. Proteção de Variáveis. Ciente do Contexto.",
6
+ "button": "Começar Tradução"
7
+ },
8
+ "editor": {
9
+ "run": "EXECUTAR TRADUÇÃO",
10
+ "translating": "TRADUZINDO",
11
+ "source": {
12
+ "label": "Idioma de Origem",
13
+ "upload": "Enviar JSON",
14
+ "upload_multiple": "Clique para enviar arquivos JSON",
15
+ "context": "Contexto",
16
+ "context_placeholder": "Adicione contexto para melhorar a tradução...",
17
+ "pro_feature": "RECURSO PRO",
18
+ "pro_context_msg": "Atualize para fornecer contexto e obter maior precisão.",
19
+ "info": "ORIGEM",
20
+ "lines": "Linhas",
21
+ "clear_context": "Limpar",
22
+ "large_file_title": "Arquivo grande carregado ({size})",
23
+ "large_file_desc": "A visualização está desativada por desempenho. O conteúdo total será enviado para tradução."
24
+ },
25
+ "diff_dialog": {
26
+ "title": "Atualização Incremental (Diff)",
27
+ "files_preview": "Visualização de Arquivos",
28
+ "base_tag": "BASE",
29
+ "start_diff": "Iniciar Diff"
30
+ },
31
+ "target": {
32
+ "label": "Idioma de Destino",
33
+ "copy": "Copiar",
34
+ "download": "Baixar",
35
+ "no_selection": "Nenhum idioma selecionado",
36
+ "placeholder": "Selecione o idioma e execute a tradução para ver os resultados aqui",
37
+ "stale_warning": "Origem alterada - Tradução desatualizada",
38
+ "max_select": "MÁX {n}",
39
+ "more_suffix": "(+{n})"
40
+ },
41
+ "mobile": {
42
+ "view_result": "Ver Resultado",
43
+ "back_to_code": "Voltar ao Código"
44
+ },
45
+ "features": {
46
+ "diff_title": "Diff Incremental",
47
+ "diff_msg": "O recurso de Diff / Atualização Incremental estará disponível em breve!",
48
+ "soon": "EM BREVE"
49
+ },
50
+ "messages": {
51
+ "pro_feature_title": "Recurso Pro (Em Breve)",
52
+ "upload_pro_msg": "Upload é um recurso Pro.\n\nEstamos construindo os recursos premium. Fique atento!\n\nPrecisa de ajuda? Contato: {email}",
53
+ "download_pro_msg": "Download é um recurso Pro.\n\nEstamos construindo os recursos premium. Fique atento!\n\nPrecisa de ajuda? Contato: {email}",
54
+ "diff_upload_hint": "Envie todos os seus arquivos de tradução. O mais completo será usado como base.",
55
+ "file_too_large_title": "Arquivo Muito Grande",
56
+ "file_too_large_msg": "O arquivo é muito grande ({size}). O limite máximo é {limit}.\n\nO recurso de divisão de arquivos estará disponível em breve!",
57
+ "copied": "Copiado para a área de transferência!",
58
+ "copy_failed": "Falha ao copiar",
59
+ "invalid_json": "JSON de Origem Inválido",
60
+ "translation_complete": "Tradução concluída!",
61
+ "translation_failed": "Falha na tradução",
62
+ "daily_limit_reached": "LIMITE DIÁRIO ATINGIDO",
63
+ "daily_limit_desc": "Você atingiu seu limite de traduções gratuitas por hoje.",
64
+ "pro_plan_coming_soon": "PLANO PRO E ACESSO ILIMITADO EM BREVE!",
65
+ "building_premium": "Estamos construindo os recursos premium. Fique atento!",
66
+ "contact_us": "Precisa de mais? Contate-nos: {email}",
67
+ "error_details": "Detalhes do erro:",
68
+ "limit_exceeded": "Limite Excedido",
69
+ "limit_exceeded_desc": "O plano {tier} permite até {max} chaves por solicitação. Seu arquivo possui {keys} chaves.",
70
+ "insufficient_credits": "Créditos Insuficientes",
71
+ "insufficient_credits_desc": "Esta tradução requer {cost} créditos, mas você possui {available} restantes.",
72
+ "free_plan_limit_exceeded": "LIMITE DO PLANO GRATUITO EXCEDIDO",
73
+ "upgrade_to_pro": "UPGRADE PARA PRO (Em Breve)",
74
+ "pro_benefits_1": "Chaves ilimitadas por arquivo",
75
+ "pro_benefits_2": "Comprimento de contexto ilimitado",
76
+ "pro_benefits_3": "Tradução em Lote",
77
+ "reduce_size": "Por enquanto, reduza o tamanho do arquivo ou o contexto.",
78
+ "select_target_lang": "Selecione pelo menos um idioma de destino.",
79
+ "up_to_date": "Todos os idiomas selecionados estão atualizados.",
80
+ "translating_placeholder": "// Traduzindo...",
81
+ "error_no_data": "// Erro: Nenhum dado retornado.",
82
+ "error_failed_generic": "// Erro: Falha ao traduzir. Tente novamente.",
83
+ "max_langs_reached": "Máximo de {n} idiomas de destino permitidos no plano gratuito.",
84
+ "credits_needed": "Créditos necessários",
85
+ "credits_remaining": "Restantes",
86
+ "invalid_base_json": "JSON Base Inválido",
87
+ "invalid_base_content": "Conteúdo do Arquivo Base Inválido"
88
+ }
89
+ },
90
+ "common": {
91
+ "contact": "Contato",
92
+ "email": "z17682341097@gmail.com",
93
+ "pro": "PRO",
94
+ "coming_soon": "Em Breve",
95
+ "pricing": "Preços",
96
+ "docs": "Docs e CLI",
97
+ "cli": "CLI",
98
+ "i18n_note": "Todas as traduções deste site foram geradas usando t9n.",
99
+ "upgrade": "Upgrade",
100
+ "auto_detect": "Auto-detectar",
101
+ "soon": "EM BREVE",
102
+ "pro_only": "(Apenas {pro})",
103
+ "contact_support": "Contatar Suporte",
104
+ "pricing_limits": "Preços e Limites",
105
+ "back_to_home": "VOLTAR PARA HOME",
106
+ "back_to_editor": "Voltar ao Editor",
107
+ "mail_to": "Enviar e-mail para",
108
+ "cancel": "CANCELAR",
109
+ "close": "FECHAR",
110
+ "confirm": "CONFIRMAR",
111
+ "notification": "Notificação"
112
+ },
113
+ "auth": {
114
+ "login": "Login",
115
+ "logout": "Sair",
116
+ "welcome_back": "Bem-vindo de volta",
117
+ "login_desc": "Entre para acessar recursos Pro e limites maiores",
118
+ "cli_login_required": "Faça login primeiro usando: t9n auth <sua-chave-api>",
119
+ "continue_google": "Continuar com Google",
120
+ "continue_github": "Continuar com GitHub",
121
+ "terms": "Ao continuar, você concorda com nossos Termos de Serviço e Política de Privacidade."
122
+ },
123
+ "settings": {
124
+ "title": "Configurações",
125
+ "apikeys": {
126
+ "title": "Chaves de API",
127
+ "desc": "Gerencie suas chaves de API para uso com ferramentas CLI ou em pipelines de CI/CD.",
128
+ "create": "Criar Nova Chave",
129
+ "name_label": "Nome da Chave",
130
+ "name_placeholder": "ex: CLI do Meu Laptop",
131
+ "key_secret_warning": "Copie sua chave de API agora. Por segurança, ela não será exibida novamente.",
132
+ "copy_key": "Copiar Chave",
133
+ "list_empty": "Nenhuma chave de API criada ainda.",
134
+ "revoke": "Revogar",
135
+ "revoke_confirm": "Tem certeza que deseja revogar esta chave? Ferramentas que a utilizam pararão de funcionar.",
136
+ "last_used": "Último Uso",
137
+ "never_used": "Nunca",
138
+ "created": "Criada"
139
+ }
140
+ },
141
+ "pricing": {
142
+ "title": "Preços Simples e Transparentes",
143
+ "subtitle": "Escolha o plano que melhor atende suas necessidades de tradução.",
144
+ "monthly": "mensal",
145
+ "daily": "diário",
146
+ "per_request": "por solicitação",
147
+ "get_started": "Começar",
148
+ "upgrade": "Fazer Upgrade",
149
+ "contact_sales": "Contatar Vendas",
150
+ "features": {
151
+ "credits": "{n} Créditos",
152
+ "keys": "Até {n} chaves",
153
+ "langs": "Até {n} idiomas",
154
+ "upload_download": "Upload / Download",
155
+ "diff": "Atualização Incremental (Diff)",
156
+ "context": "Consciência de Contexto"
157
+ },
158
+ "most_popular": "Mais Popular",
159
+ "custom": "Personalizado"
160
+ },
161
+ "metadata": {
162
+ "title": "t9n - Tradutor JSON para Desenvolvedores | Tradutor AI i18n",
163
+ "description": "Tradutor de IA para arquivos JSON i18n focado em desenvolvedores. Zero erros de sintaxe, proteção de variáveis (React Intl, i18next) e contexto inteligente. Traduza software, não apenas palavras.",
164
+ "og_title": "t9n - Tradutor JSON para Desenvolvedores",
165
+ "og_description": "Traduza arquivos JSON i18n sem quebrar variáveis de código. Suporta React Intl, i18next e mais."
166
+ },
167
+ "docs": {
168
+ "title": "Documentação",
169
+ "subtitle": "Explore os recursos do t9n, desde o uso básico até atualizações incrementais avançadas e otimização de contexto por IA.",
170
+ "sections": {
171
+ "basic": {
172
+ "title": "Recurso Básico: Tradução em Tempo Real",
173
+ "content": "t9n foi projetado para o formato JSON i18n. Otimizamos a estratégia de Prompt para garantir que todas as variáveis de código (como {name} ou {{count}}) sejam rigorosamente protegidas.",
174
+ "item1": "Suporte para seleção em lote de idiomas de destino, gerando múltiplas traduções de uma vez.",
175
+ "item2": "Visualização em tempo real: conteúdo de origem e destino comparados lado a lado."
176
+ },
177
+ "context": {
178
+ "title": "Consciência de Contexto",
179
+ "content": "Tradução é mais do que palavra por palavra. Ao fornecer o contexto da aplicação, a IA pode escolher o vocabulário com mais precisão.",
180
+ "example": "Por exemplo, a palavra \"Menu\" pode ser um cardápio em um app de restaurante ou uma lista de funções em um software de design. O Contexto elimina a ambiguidade."
181
+ },
182
+ "diff": {
183
+ "title": "Atualização Incremental Inteligente (Modo Diff)",
184
+ "content": "Quando seu arquivo de origem (ex: en.json) tem novo conteúdo, você não precisa traduzir o arquivo inteiro novamente. O modo incremental do t9n agora suporta automação total.",
185
+ "new_feature": "Novo: Reconhecimento Multi-arquivo Totalmente Automático",
186
+ "step1_title": "1. Upload Multi-seleção",
187
+ "step1_desc": "Selecione o inglês (base) e os arquivos de tradução existentes (ex: chinês, japonês) simultaneamente. Sem comparações manuais.",
188
+ "step2_title": "2. Detecção Inteligente de Base",
189
+ "step2_desc": "O sistema conta automaticamente as chaves em cada arquivo e trata o mais completo como a 'base de tradução', preenchendo o que falta nos outros.",
190
+ "step3_title": "3. Tradução de Precisão",
191
+ "step3_desc": "As chaves ausentes são marcadas como 🚧 [MISSING]. A IA traduz apenas esses marcadores, economizando mais de 90% em créditos.",
192
+ "quote": "\"Mantenha 100% das traduções existentes, trate apenas os novos requisitos.\""
193
+ },
194
+ "cli": {
195
+ "tag": "Disponível Agora",
196
+ "title": "t9n CLI",
197
+ "content": "Gestão profissional de i18n pelo terminal. Automatize seu fluxo de trabalho de tradução com nossa interface de linha de comando.",
198
+ "install": "npm install -g @t9n/cli",
199
+ "command_auth": "t9n auth <key>",
200
+ "command_init": "t9n init",
201
+ "command_scan": "t9n scan ./src",
202
+ "command_translate": "t9n translate ./en.json -t pt-BR,ja",
203
+ "command_diff": "t9n diff ./dictionaries",
204
+ "desc_auth": "Vincule seu ambiente local com sua conta t9n.",
205
+ "desc_init": "Crie o t9n.config.json para salvar as preferências do seu projeto.",
206
+ "desc_scan": "Encontre chaves faltando no seu código que ainda não estão no seu JSON.",
207
+ "desc_translate": "Traduza arquivos locais diretamente e salve os resultados automaticamente.",
208
+ "desc_diff": "Atualizações incrementais inteligentes para todos os idiomas em uma pasta.",
209
+ "progress": "Pronto para Produção"
210
+ }
211
+ },
212
+ "example_correct": "Portfolio\" → \"Carteira de Investimentos\"",
213
+ "example_incorrect": "Portfolio\" → \"Coleção de Arte\""
214
+ },
215
+ "cli": {
216
+ "diff": {
217
+ "title": "🛰️ T9N CLI - Atualização Incremental",
218
+ "analyzing": "🔍 Analisando diferenças...",
219
+ "comparing": "Comparando com arquivo existente...",
220
+ "new_lang": "Novo idioma detectado.",
221
+ "success": "Tradução recebida com sucesso!",
222
+ "updated": "Atualizado:",
223
+ "all_up_to_date": "✨ Todas as traduções estão atualizadas!"
224
+ },
225
+ "scan": {
226
+ "title": "🔍 T9N CLI - Scanner de Código",
227
+ "scanning": "Escaneando arquivos...",
228
+ "scanned": "Escaneados {n} arquivos.",
229
+ "missing_found": "Encontradas {n} chaves ausentes (no código mas NÃO no dicionário):",
230
+ "all_present": "✨ Todas as chaves do código estão presentes no dicionário.",
231
+ "orphaned": "Encontradas {n} chaves potencialmente não utilizadas (no dict mas NÃO no código):"
232
+ },
233
+ "auth": {
234
+ "verifying": "Verificando Chave de API...",
235
+ "success": "Autenticação bem-sucedida! (config {target})",
236
+ "key_missing": "Forneça uma Chave de API. Uso: t9n auth <key>"
237
+ },
238
+ "init": {
239
+ "title": "🎬 T9N - Inicialização de Projeto",
240
+ "created": "Configuração de projeto criada: {path}",
241
+ "already_exists": "Arquivo de configuração já existe em: {path}"
242
+ }
243
+ }
244
+ }
@@ -0,0 +1,244 @@
1
+ {
2
+ "home": {
3
+ "badge": "t9n - MVP",
4
+ "title": "i18n перевод, сохраняющий структуру кода.",
5
+ "subtitle": "Без ошибок синтаксиса. Защита переменных. Учет контекста.",
6
+ "button": "Начать перевод"
7
+ },
8
+ "editor": {
9
+ "run": "ЗАПУСТИТЬ ПЕРЕВОД",
10
+ "translating": "ПЕРЕВОД...",
11
+ "source": {
12
+ "label": "Исходный язык",
13
+ "upload": "Загрузить JSON",
14
+ "upload_multiple": "Нажмите для загрузки JSON-файлов",
15
+ "context": "Контекст",
16
+ "context_placeholder": "Добавьте контекст для точности...",
17
+ "pro_feature": "PRO-ФУНКЦИЯ",
18
+ "pro_context_msg": "Обновитесь для передачи контекста AI.",
19
+ "info": "ИСТОЧНИК",
20
+ "lines": "Строки",
21
+ "clear_context": "Очистить",
22
+ "large_file_title": "Файл загружен ({size})",
23
+ "large_file_desc": "Предпросмотр отключен для скорости. Весь файл будет отправлен на перевод."
24
+ },
25
+ "diff_dialog": {
26
+ "title": "Обновление (Diff)",
27
+ "files_preview": "Предпросмотр",
28
+ "base_tag": "БАЗА",
29
+ "start_diff": "Начать Diff"
30
+ },
31
+ "target": {
32
+ "label": "Целевой язык",
33
+ "copy": "Копировать",
34
+ "download": "Скачать",
35
+ "no_selection": "Языки не выбраны",
36
+ "placeholder": "Выберите язык и запустите перевод",
37
+ "stale_warning": "Источник изменен — перевод устарел",
38
+ "max_select": "МАКС {n}",
39
+ "more_suffix": "(+{n})"
40
+ },
41
+ "mobile": {
42
+ "view_result": "Результат",
43
+ "back_to_code": "К коду"
44
+ },
45
+ "features": {
46
+ "diff_title": "Инкрементальный Diff",
47
+ "diff_msg": "Функция инкрементального обновления скоро появится!",
48
+ "soon": "СКОРО"
49
+ },
50
+ "messages": {
51
+ "pro_feature_title": "Pro-функция (Скоро)",
52
+ "upload_pro_msg": "Загрузка — это Pro-функция. Премиум-возможности в разработке. Оставайтесь с нами! Нужна помощь? {email}",
53
+ "download_pro_msg": "Скачивание — это Pro-функция. Премиум-возможности в разработке. Оставайтесь с нами! Нужна помощь? {email}",
54
+ "diff_upload_hint": "Загрузите все файлы. Самый полный будет использован как база.",
55
+ "file_too_large_title": "Файл слишком большой",
56
+ "file_too_large_msg": "Файл слишком велик ({size}). Лимит {limit}. Разделение файлов скоро появится!",
57
+ "copied": "Скопировано!",
58
+ "copy_failed": "Ошибка копирования",
59
+ "invalid_json": "Некорректный JSON",
60
+ "translation_complete": "Перевод завершен!",
61
+ "translation_failed": "Ошибка перевода",
62
+ "daily_limit_reached": "ЛИМИТ ИСЧЕРПАН",
63
+ "daily_limit_desc": "Бесплатные переводы на сегодня закончились.",
64
+ "pro_plan_coming_soon": "PRO-ПЛАН И БЕЗЛИМИТ СКОРО!",
65
+ "building_premium": "Мы работаем над премиум-функциями.",
66
+ "contact_us": "Нужно больше? Напишите нам: {email}",
67
+ "error_details": "Детали ошибки:",
68
+ "limit_exceeded": "Лимит превышен",
69
+ "limit_exceeded_desc": "Тариф {tier} позволяет {max} ключей. В вашем файле {keys}.",
70
+ "insufficient_credits": "Недостаточно кредитов",
71
+ "insufficient_credits_desc": "Нужно {cost} кредитов, у вас осталось {available}.",
72
+ "free_plan_limit_exceeded": "ЛИМИТ ТАРИФА ПРЕВЫШЕН",
73
+ "upgrade_to_pro": "ПЕРЕЙТИ НА PRO (Скоро)",
74
+ "pro_benefits_1": "Безлимитные ключи в файле",
75
+ "pro_benefits_2": "Безлимитный контекст",
76
+ "pro_benefits_3": "Пакетный перевод",
77
+ "reduce_size": "Уменьшите размер файла или контекста.",
78
+ "select_target_lang": "Выберите хотя бы один язык.",
79
+ "up_to_date": "Все языки актуальны.",
80
+ "translating_placeholder": "// Перевод...",
81
+ "error_no_data": "// Ошибка: данные не получены.",
82
+ "error_failed_generic": "// Ошибка: перевод не удался. Попробуйте снова.",
83
+ "max_langs_reached": "Максимум {n} языка в бесплатном тарифе.",
84
+ "credits_needed": "Нужно кредитов",
85
+ "credits_remaining": "Осталось",
86
+ "invalid_base_json": "Некорректный базовый JSON",
87
+ "invalid_base_content": "Некорректная база данных"
88
+ }
89
+ },
90
+ "common": {
91
+ "contact": "Контакт",
92
+ "email": "z17682341097@gmail.com",
93
+ "pro": "PRO",
94
+ "coming_soon": "Скоро",
95
+ "pricing": "Цены",
96
+ "docs": "Доки и CLI",
97
+ "cli": "CLI",
98
+ "i18n_note": "Все переводы сайта выполнены через t9n.",
99
+ "upgrade": "Обновить",
100
+ "auto_detect": "Автоопределение",
101
+ "soon": "СКОРО",
102
+ "pro_only": "(Только {pro})",
103
+ "contact_support": "Поддержка",
104
+ "pricing_limits": "Цены и лимиты",
105
+ "back_to_home": "НА ГЛАВНУЮ",
106
+ "back_to_editor": "В редактор",
107
+ "mail_to": "Написать",
108
+ "cancel": "ОТМЕНА",
109
+ "close": "ЗАКРЫТЬ",
110
+ "confirm": "ПОДТВЕРДИТЬ",
111
+ "notification": "Уведомление"
112
+ },
113
+ "auth": {
114
+ "login": "Войти",
115
+ "logout": "Выйти",
116
+ "welcome_back": "С возвращением",
117
+ "login_desc": "Войдите для доступа к Pro-функциям",
118
+ "cli_login_required": "Сначала авторизуйтесь: t9n auth <key>",
119
+ "continue_google": "Войти через Google",
120
+ "continue_github": "Войти через GitHub",
121
+ "terms": "Продолжая, вы соглашаетесь с условиями и политикой конфиденциальности."
122
+ },
123
+ "settings": {
124
+ "title": "Настройки",
125
+ "apikeys": {
126
+ "title": "API-ключи",
127
+ "desc": "Управление ключами для CLI и CI/CD.",
128
+ "create": "Создать ключ",
129
+ "name_label": "Имя ключа",
130
+ "name_placeholder": "напр. Мой ноутбук",
131
+ "key_secret_warning": "Скопируйте ключ сейчас. Он не будет показан снова.",
132
+ "copy_key": "Копировать ключ",
133
+ "list_empty": "Ключей пока нет.",
134
+ "revoke": "Отозвать",
135
+ "revoke_confirm": "Удалить ключ? Связанные инструменты перестанут работать.",
136
+ "last_used": "Использован",
137
+ "never_used": "Никогда",
138
+ "created": "Создан"
139
+ }
140
+ },
141
+ "pricing": {
142
+ "title": "Простые цены",
143
+ "subtitle": "Выберите подходящий тариф.",
144
+ "monthly": "в месяц",
145
+ "daily": "в день",
146
+ "per_request": "за запрос",
147
+ "get_started": "Начать",
148
+ "upgrade": "Обновить",
149
+ "contact_sales": "Связаться с нами",
150
+ "features": {
151
+ "credits": "{n} кредитов",
152
+ "keys": "До {n} ключей",
153
+ "langs": "До {n} языков",
154
+ "upload_download": "Загрузка / Скачивание",
155
+ "diff": "Обновление (Diff)",
156
+ "context": "Контекстный перевод"
157
+ },
158
+ "most_popular": "Популярный",
159
+ "custom": "Индивидуальный"
160
+ },
161
+ "metadata": {
162
+ "title": "t9n — AI Переводчик JSON для разработчиков",
163
+ "description": "AI-переводчик i18n JSON без ошибок синтаксиса и с защитой переменных (React Intl, i18next). Умный контекст.",
164
+ "og_title": "t9n — JSON перевод для разработчиков",
165
+ "og_description": "Перевод i18n JSON файлов без повреждения кода. Поддержка React Intl, i18next и других."
166
+ },
167
+ "docs": {
168
+ "title": "Документация",
169
+ "subtitle": "Изучите функции t9n: от основ до инкрементальных обновлений и контекста.",
170
+ "sections": {
171
+ "basic": {
172
+ "title": "Базовая функция: Перевод",
173
+ "content": "t9n оптимизирован для i18n JSON. Переменные (например, {name} или {{count}}) строго защищены.",
174
+ "item1": "Массовый выбор языков для одновременного перевода.",
175
+ "item2": "Сравнение оригинала и перевода в реальном времени."
176
+ },
177
+ "context": {
178
+ "title": "Учет контекста",
179
+ "content": "Контекст помогает AI точнее выбирать термины в зависимости от типа приложения.",
180
+ "example": "Например, 'Menu' — это 'Меню' в ресторане или 'Список функций' в ПО."
181
+ },
182
+ "diff": {
183
+ "title": "Умное обновление (Diff)",
184
+ "content": "При добавлении строк не нужно переводить файл целиком. t9n поддерживает полную автоматизацию.",
185
+ "new_feature": "Новое: Автоматическое распознавание файлов",
186
+ "step1_title": "1. Массовая загрузка",
187
+ "step1_desc": "Выберите базу и переводы одновременно. Больше никаких ручных правок.",
188
+ "step2_title": "2. Определение базы",
189
+ "step2_desc": "Система определит основной файл и заполнит пропуски в остальных.",
190
+ "step3_title": "3. Точный перевод",
191
+ "step3_desc": "Пропуски 🚧 [MISSING] переводятся отдельно, экономя до 90% кредитов.",
192
+ "quote": "\"Сохраняйте 100% старых переводов, добавляя только новое.\""
193
+ },
194
+ "cli": {
195
+ "tag": "Доступно",
196
+ "title": "t9n CLI",
197
+ "content": "Управление i18n через терминал. Автоматизируйте ваш workflow.",
198
+ "install": "npm install -g @t9n/cli",
199
+ "command_auth": "t9n auth <key>",
200
+ "command_init": "t9n init",
201
+ "command_scan": "t9n scan ./src",
202
+ "command_translate": "t9n translate ./en.json -t ru,zh",
203
+ "command_diff": "t9n diff ./dictionaries",
204
+ "desc_auth": "Привязка локальной среды к аккаунту t9n.",
205
+ "desc_init": "Создание t9n.config.json для настроек проекта.",
206
+ "desc_scan": "Поиск отсутствующих в словаре ключей в коде.",
207
+ "desc_translate": "Перевод локальных файлов с автосохранением.",
208
+ "desc_diff": "Умное обновление всех языков в папке.",
209
+ "progress": "Готово к работе"
210
+ }
211
+ },
212
+ "example_correct": "Portfolio\" → \"Инвестиционный портфель\"",
213
+ "example_incorrect": "Portfolio\" → \"Коллекция работ\""
214
+ },
215
+ "cli": {
216
+ "diff": {
217
+ "title": "🛰️ T9N CLI - Обновление",
218
+ "analyzing": "🔍 Анализ различий...",
219
+ "comparing": "Сравнение с файлом...",
220
+ "new_lang": "Обнаружен новый язык.",
221
+ "success": "Перевод получен успешно!",
222
+ "updated": "Обновлено:",
223
+ "all_up_to_date": "✨ Все переводы актуальны!"
224
+ },
225
+ "scan": {
226
+ "title": "🔍 T9N CLI - Сканер кода",
227
+ "scanning": "Сканирование файлов...",
228
+ "scanned": "Просканировано {n} файлов.",
229
+ "missing_found": "Найдено {n} новых ключей в коде:",
230
+ "all_present": "✨ Все ключи из кода есть в словаре.",
231
+ "orphaned": "Найдено {n} потенциально лишних ключей:"
232
+ },
233
+ "auth": {
234
+ "verifying": "Проверка API-ключа...",
235
+ "success": "Авторизация успешна! ({target})",
236
+ "key_missing": "Введите API-ключ: t9n auth <key>"
237
+ },
238
+ "init": {
239
+ "title": "🎬 T9N - Инициализация",
240
+ "created": "Конфиг создан: {path}",
241
+ "already_exists": "Конфиг уже существует: {path}"
242
+ }
243
+ }
244
+ }