translatomatic 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +19 -0
  3. data/.gitignore +0 -0
  4. data/.travis.yml +7 -7
  5. data/.yardopts +9 -0
  6. data/Gemfile +4 -4
  7. data/Guardfile +0 -0
  8. data/README.de.md +61 -16
  9. data/README.es.md +60 -15
  10. data/README.fr.md +61 -16
  11. data/README.it.md +60 -15
  12. data/README.ja.md +59 -14
  13. data/README.ko.md +137 -0
  14. data/README.md +58 -13
  15. data/README.ms.md +137 -0
  16. data/README.pt.md +137 -0
  17. data/README.ru.md +137 -0
  18. data/README.sv.md +137 -0
  19. data/README.zh.md +137 -0
  20. data/bin/setup +8 -8
  21. data/bin/translatomatic +6 -6
  22. data/bin/travis +1 -1
  23. data/config/locales/translatomatic/de.yml +104 -0
  24. data/config/locales/translatomatic/en.yml +101 -0
  25. data/config/locales/translatomatic/es.yml +105 -0
  26. data/config/locales/translatomatic/fr.yml +105 -0
  27. data/config/locales/translatomatic/it.yml +103 -0
  28. data/config/locales/translatomatic/ja.yml +102 -0
  29. data/config/locales/translatomatic/ko.yml +101 -0
  30. data/config/locales/translatomatic/ms.yml +103 -0
  31. data/config/locales/translatomatic/pt.yml +105 -0
  32. data/config/locales/translatomatic/ru.yml +103 -0
  33. data/config/locales/translatomatic/sv.yml +103 -0
  34. data/config/locales/translatomatic/zh.yml +102 -0
  35. data/db/migrate/201712170000_initial.rb +2 -1
  36. data/lib/translatomatic/cli/base.rb +73 -0
  37. data/lib/translatomatic/cli/common_options.rb +14 -0
  38. data/lib/translatomatic/cli/config.rb +81 -0
  39. data/lib/translatomatic/cli/database.rb +29 -0
  40. data/lib/translatomatic/cli/main.rb +112 -0
  41. data/lib/translatomatic/cli/translate.rb +146 -0
  42. data/lib/translatomatic/cli.rb +8 -216
  43. data/lib/translatomatic/config.rb +143 -0
  44. data/lib/translatomatic/converter.rb +196 -149
  45. data/lib/translatomatic/converter_stats.rb +18 -14
  46. data/lib/translatomatic/database.rb +35 -37
  47. data/lib/translatomatic/escaped_unicode.rb +1 -1
  48. data/lib/translatomatic/extractor/base.rb +2 -0
  49. data/lib/translatomatic/extractor/ruby.rb +1 -0
  50. data/lib/translatomatic/extractor.rb +1 -0
  51. data/lib/translatomatic/http_request.rb +43 -14
  52. data/lib/translatomatic/locale.rb +28 -4
  53. data/lib/translatomatic/logger.rb +21 -13
  54. data/lib/translatomatic/model/locale.rb +5 -1
  55. data/lib/translatomatic/model/text.rb +2 -0
  56. data/lib/translatomatic/model.rb +1 -0
  57. data/lib/translatomatic/option.rb +75 -10
  58. data/lib/translatomatic/progress_updater.rb +7 -3
  59. data/lib/translatomatic/resource_file/base.rb +41 -18
  60. data/lib/translatomatic/resource_file/html.rb +11 -14
  61. data/lib/translatomatic/resource_file/markdown.rb +13 -12
  62. data/lib/translatomatic/resource_file/plist.rb +3 -14
  63. data/lib/translatomatic/resource_file/properties.rb +21 -3
  64. data/lib/translatomatic/resource_file/resw.rb +1 -0
  65. data/lib/translatomatic/resource_file/text.rb +1 -0
  66. data/lib/translatomatic/resource_file/xcode_strings.rb +23 -14
  67. data/lib/translatomatic/resource_file/xml.rb +34 -22
  68. data/lib/translatomatic/resource_file/yaml.rb +39 -5
  69. data/lib/translatomatic/resource_file.rb +7 -5
  70. data/lib/translatomatic/string.rb +40 -12
  71. data/lib/translatomatic/tmx/document.rb +11 -12
  72. data/lib/translatomatic/tmx/translation_unit.rb +5 -1
  73. data/lib/translatomatic/tmx.rb +2 -0
  74. data/lib/translatomatic/translation.rb +30 -0
  75. data/lib/translatomatic/translation_result.rb +45 -45
  76. data/lib/translatomatic/translator/base.rb +128 -83
  77. data/lib/translatomatic/translator/frengly.rb +62 -57
  78. data/lib/translatomatic/translator/google.rb +35 -31
  79. data/lib/translatomatic/translator/microsoft.rb +41 -33
  80. data/lib/translatomatic/translator/my_memory.rb +68 -64
  81. data/lib/translatomatic/translator/yandex.rb +56 -39
  82. data/lib/translatomatic/translator.rb +99 -63
  83. data/lib/translatomatic/util.rb +31 -1
  84. data/lib/translatomatic/version.rb +4 -1
  85. data/lib/translatomatic.rb +17 -0
  86. data/translatomatic.gemspec +5 -4
  87. metadata +56 -16
@@ -0,0 +1,105 @@
1
+ # Criado por Translatomatic 0.1.1 Mon, 01 Jan 2018 21:36:43 +1030
2
+
3
+ pt:
4
+ translatomatic:
5
+ cli:
6
+ config:
7
+ subcommand: Comandos de configuração
8
+ configuration: Configuração
9
+ set: Alterar uma definição de configuração
10
+ remove: Remover uma definição de configuração
11
+ list: Lista as definições de configuração atuais
12
+ describe: Descrever as configurações disponíveis
13
+ name: Nome
14
+ type: Tipo
15
+ value: Valor
16
+ desc: Descrição
17
+ translate:
18
+ subcommand: Traduzir arquivos ou cadeias de caracteres
19
+ file: Traduzir um arquivo para locais de destino
20
+ string: Definição da palavra uma sequência de caracteres para localidades
21
+ de destino
22
+ source_locale: A localidade do arquivo de origem
23
+ target_locales: Localidades de tradução para o
24
+ debug: Habilitar a depuração de saída
25
+ wank: Ativar a barra de progresso de tradução
26
+ share: Compartilhar traduções com tradutores que oferecem suporte a carregamento
27
+ dry_run: 'Dry run: arquivos não irão ser traduzidos ou escritos'
28
+ locales_required: Uma ou mais localidades necessárias
29
+ file_not_found: 'Arquivo não encontrado: %{file}'
30
+ file_unsupported: 'Sem suporte de tipo de arquivo: %{file}'
31
+ using_translator: 'Usando o Tradutor: %{name}'
32
+ locales_properties: 'Localidades: %{locales}, propriedades: %{properties}'
33
+ display_values: Valores de exibição de um pacote de recursos
34
+ locales_to_display: Locales para exibir
35
+ display_sentences: Exibir as frases
36
+ extract_strings: Extrair as strings de arquivos não-recurso
37
+ list_backends: Lista de serviços de tradução disponíveis
38
+ display_version: Versão de visualização
39
+ uploading_tmx: Upload TMX %{name}
40
+ translating: Tradução em andamento
41
+ aborted: Abortada
42
+ file_source: 'Arquivo: %{file}'
43
+ sentences: 'Frases:'
44
+ database:
45
+ subcommand: Comandos de banco de dados
46
+ search: Pesquisar banco de dados para correspondência determinada sequência
47
+ de caracteres de texto.
48
+ resource:
49
+ unknown_locale: Não é possível determinar a localidade
50
+ created_by: Criado por %{app} %{version} %{date}
51
+ error: 'Erro: %{message}'
52
+ loading: Tentar carregar %{file} usando %{name}
53
+ tmx:
54
+ multiple_origins: Múltiplas origens nos textos.
55
+ multiple_locales: Várias localidades de origem nos textos.
56
+ translator:
57
+ email_required: Endereço de email.
58
+ password_required: Senha necessária.
59
+ google_key_required: Chave da API do Google exigido.
60
+ google_api_key: Chave da API do Google
61
+ frengly_api_key: Chave da API Frengly
62
+ microsoft_api_key: Chave da API do Microsoft
63
+ microsoft_key_required: Chave da API do Microsoft necessário.
64
+ mymemory_api_key: Chave da API do MyMemory
65
+ email_address: Endereço de e-mail
66
+ share_response: 'Compartilhar a resposta: %{response}'
67
+ yandex_api_key: Chave da API Yandex
68
+ yandex_key_required: Chave da API Yandex exigido.
69
+ required_option: "(obrigatório)"
70
+ translators: 'Todos os tradutores:'
71
+ configured: 'Tradutores configurados:'
72
+ unavailable: Tradutor %{name} não está disponível.
73
+ no_translators: Não há tradutores são configurados.
74
+ password: Senha
75
+ converter:
76
+ total_translations: 'Total de traduções: %{total} (%{from_db} de banco de dados,
77
+ %{from_translator} de tradutor, %{untranslated} não traduzida)'
78
+ untranslated: 'Untranslated sequências de caracteres:'
79
+ translator: Implementações de tradutor para usar
80
+ dry_run: Imprima ações sem realizar traduções ou gravação de arquivos.
81
+ use_database: Armazenar e recuperar as traduções do banco.
82
+ database_disabled: Banco de dados é desabilitado.
83
+ translator_required: Tradutor exigido.
84
+ file_unsupported: 'Sem suporte de tipo de arquivo: %{file}'
85
+ translating: Traduzindo %{source} %{target}
86
+ stats: 'Traduções de banco de dados: %{from_db}, Tradutor: %{from_translator},
87
+ sem tradução: %{untranslated}'
88
+ database:
89
+ no_environment: Nenhum ambiente '%{env}' em %{file}
90
+ migrated: Banco de dados migrados.
91
+ created: Banco de dados criado.
92
+ deleted: Banco de dados excluído.
93
+ could_not_create: Banco de dados não pôde ser criado.
94
+ config_file: Caminho para o arquivo de configuração de banco de dados
95
+ env: Ambiente de banco de dados
96
+ unicode:
97
+ invalid_byte: 'Byte de UTF8 inválido: ''%{byte}'''
98
+ config:
99
+ invalid_key: 'Chave de configuração não reconhecida: ''%{key}'''
100
+ types:
101
+ string: Sequência de caracteres
102
+ hash: Hash
103
+ array: Matriz
104
+ numeric: Numérico
105
+ boolean: Boolean
@@ -0,0 +1,103 @@
1
+ # Созданная Translatomatic 0.1.1 Mon, 01 Jan 2018 21:36:44 +1030
2
+
3
+ ru:
4
+ translatomatic:
5
+ cli:
6
+ config:
7
+ subcommand: Команды конфигурации
8
+ configuration: Конфигурация
9
+ set: Изменение параметра конфигурации
10
+ remove: Удаление параметра конфигурации
11
+ list: Список текущих параметров конфигурации
12
+ describe: Описать имеющиеся настройки
13
+ name: Имя
14
+ type: Тип
15
+ value: Значение
16
+ desc: Описание
17
+ translate:
18
+ subcommand: Перевод файлов или строк
19
+ file: Перевести файл в целевой локали
20
+ string: Перевод строки к целевой локали
21
+ source_locale: Языковой стандарт исходного файла
22
+ target_locales: Языки для перевода
23
+ debug: Включение отладки вывода
24
+ wank: Включить индикатор выполнения перевода
25
+ share: Доля переводов с переводчиками, которые поддерживают загрузку
26
+ dry_run: 'Пробный прогон: файлы не будут переведены или письменные'
27
+ locales_required: Требуется один или несколько языков
28
+ file_not_found: 'Файл не найден: %{file}'
29
+ file_unsupported: 'Неподдерживаемый тип файла: %{file}'
30
+ using_translator: 'С помощью переводчика: %{name}'
31
+ locales_properties: 'Языки: %{locales}, свойства: %{properties}'
32
+ display_values: Отображение значения из набора ресурсов
33
+ locales_to_display: Языки для отображения
34
+ display_sentences: Показать предложения
35
+ extract_strings: Извлечение строк из файлов-ресурсов
36
+ list_backends: Список доступных переводческих услуг
37
+ display_version: Отображение версии
38
+ uploading_tmx: Загрузка TMX %{name}
39
+ translating: Выполняется перевод
40
+ aborted: Прервана
41
+ file_source: 'Файл: %{file}'
42
+ sentences: 'Предложения:'
43
+ database:
44
+ subcommand: Команды базы данных
45
+ search: База данных поиска для соответствия заданной строки текста.
46
+ resource:
47
+ unknown_locale: Не удается определить язык
48
+ created_by: Созданная %{app} %{version} %{date}
49
+ error: 'Ошибка: %{message}'
50
+ loading: Попытка загрузить %{file}, используя %{name}
51
+ tmx:
52
+ multiple_origins: Несколько происхождение в текстах.
53
+ multiple_locales: Несколько исходных языков в текстах.
54
+ translator:
55
+ email_required: Требуется адрес электронной почты.
56
+ password_required: Требуется пароль.
57
+ google_key_required: Требуется ключ Google API.
58
+ google_api_key: Ключ Google API
59
+ frengly_api_key: Frengly API ключ
60
+ microsoft_api_key: Microsoft API ключ
61
+ microsoft_key_required: Требуется ключ Microsoft API.
62
+ mymemory_api_key: MyMemory API ключ
63
+ email_address: Адрес электронной почты
64
+ share_response: 'Доля ответов: %{response}'
65
+ yandex_api_key: Ключ API Яндекс
66
+ yandex_key_required: Яндекс API ключа требуется.
67
+ required_option: "(обязательно)"
68
+ translators: 'Все переводчики:'
69
+ configured: 'Настроенные переводчики:'
70
+ unavailable: Переводчик %{name} недоступна.
71
+ no_translators: Переводчики не настроены.
72
+ password: Пароль
73
+ converter:
74
+ total_translations: 'Всего переводы: %{total} (%{from_db} из базы данных, %{from_translator}
75
+ с переводчиком, %{untranslated} untranslated)'
76
+ untranslated: 'Непереведенные строки:'
77
+ translator: Чтобы использовать переводчик реализации
78
+ dry_run: Печать действия без выполнения переводов или записи файлов.
79
+ use_database: Хранить и извлекать переводы из базы данных.
80
+ database_disabled: База данных отключена.
81
+ translator_required: Требуется переводчик.
82
+ file_unsupported: 'Неподдерживаемый тип файла: %{file}'
83
+ translating: Перевод %{source} %{target}
84
+ stats: 'Переводы из базы данных: %{from_db}, переводчик: %{from_translator},
85
+ untranslated: %{untranslated}'
86
+ database:
87
+ no_environment: Не окружающей среды «%{env}» %{file}
88
+ migrated: База данных миграции.
89
+ created: База данных, созданная.
90
+ deleted: База данных удалена.
91
+ could_not_create: База данных не может быть создан.
92
+ config_file: Путь к файлу конфигурации базы данных
93
+ env: Базы данных окружающей среды
94
+ unicode:
95
+ invalid_byte: 'Недопустимый UTF8 байт: «%{byte}»'
96
+ config:
97
+ invalid_key: 'Непризнанных конфигурационный ключ: «%{key}»'
98
+ types:
99
+ string: Строка
100
+ hash: Хэш
101
+ array: Массив
102
+ numeric: Цифровой
103
+ boolean: Логическое значение
@@ -0,0 +1,103 @@
1
+ # Skapad av Translatomatic 0.1.1 Mon, 01 Jan 2018 21:36:44 +1030
2
+
3
+ sv:
4
+ translatomatic:
5
+ cli:
6
+ config:
7
+ subcommand: Konfigurationskommandon
8
+ configuration: Konfiguration
9
+ set: Ändra en konfigurationsinställning
10
+ remove: Ta bort en konfigurationsinställning
11
+ list: Förteckning aktuella konfigurationsinställningar
12
+ describe: Beskriv tillgängliga konfigurationsinställningarna
13
+ name: Namn
14
+ type: Typ
15
+ value: Värde
16
+ desc: Beskrivning
17
+ translate:
18
+ subcommand: Översätta filer eller strängar
19
+ file: Översätta en fil till målet locales
20
+ string: Översätta en sträng till målet locales
21
+ source_locale: Lokalen på källfilen
22
+ target_locales: Språk att översätta till
23
+ debug: Aktivera felsökning utdata
24
+ wank: Aktivera översättning förloppsindikatorn
25
+ share: Dela översättningar med översättare som stöder uppladdning
26
+ dry_run: 'Torr kör: filer kommer inte att översättas eller skrivit'
27
+ locales_required: En eller flera lokaler krävs
28
+ file_not_found: 'Filen hittades inte: %{file}'
29
+ file_unsupported: 'Unsupported filtypen: %{file}'
30
+ using_translator: 'Med hjälp av översättare: %{name}'
31
+ locales_properties: 'Språk: %{locales}, egenskaper: %{properties}'
32
+ display_values: Visa värden från en resurssamling
33
+ locales_to_display: Locales att Visa
34
+ display_sentences: Visa meningar
35
+ extract_strings: Extrahera strängar från icke-resursfiler
36
+ list_backends: Listan tillgängliga översättningstjänster
37
+ display_version: Display-version
38
+ uploading_tmx: Ladda upp TMX %{name}
39
+ translating: Att översätta
40
+ aborted: Avbröts
41
+ file_source: 'Fil: %{file}'
42
+ sentences: 'Meningar:'
43
+ database:
44
+ subcommand: Databas-kommandon
45
+ search: Sökdatabas för text på en given sträng.
46
+ resource:
47
+ unknown_locale: Det går inte att avgöra locale
48
+ created_by: Skapad av %{app} %{version} %{date}
49
+ error: 'Fel: %{message}'
50
+ loading: Försöker läsa in %{file} med %{name}
51
+ tmx:
52
+ multiple_origins: Flera ursprung i texter.
53
+ multiple_locales: Flera källa lokalanpassningar i texter.
54
+ translator:
55
+ email_required: E-postadress krävs.
56
+ password_required: Lösenord krävs.
57
+ google_key_required: Google API-nyckel krävs.
58
+ google_api_key: Google API-nyckel
59
+ frengly_api_key: Frengly API-nyckel
60
+ microsoft_api_key: Microsoft API nyckel
61
+ microsoft_key_required: Microsoft API nyckeln som krävs.
62
+ mymemory_api_key: MyMemory API-nyckel
63
+ email_address: E-postadress
64
+ share_response: 'Dela svar: %{response}'
65
+ yandex_api_key: Yandex API-nyckel
66
+ yandex_key_required: Yandex API-nyckel krävs.
67
+ required_option: "(krävs)"
68
+ translators: 'Alla översättare:'
69
+ configured: 'Konfigurerade översättare:'
70
+ unavailable: Översättare %{name} är inte tillgänglig.
71
+ no_translators: Ingen översättare är konfigurerade.
72
+ password: Lösenord
73
+ converter:
74
+ total_translations: 'Summa översättningar: %{total} (%{from_db} från databas,
75
+ %{from_translator} från översättare, %{untranslated} translaterade)'
76
+ untranslated: 'Oöversatta strängar:'
77
+ translator: Översättare-implementeringar använda
78
+ dry_run: Skriva ut åtgärder utan utför översättningar eller skriva filer.
79
+ use_database: Lagra och hämta översättningar från databasen.
80
+ database_disabled: Databasen är inaktiverad.
81
+ translator_required: Översättare som krävs.
82
+ file_unsupported: 'Unsupported filtypen: %{file}'
83
+ translating: Att översätta %{source} %{target}
84
+ stats: 'Översättningar från databas: %{from_db}, översättare: %{from_translator},
85
+ translaterade: %{untranslated}'
86
+ database:
87
+ no_environment: Ingen miljö '%{env}' i %{file}
88
+ migrated: Databasen migrerad.
89
+ created: Databas som har skapats.
90
+ deleted: Databas raderas.
91
+ could_not_create: Databasen kunde inte skapas.
92
+ config_file: Sökvägen till databasen konfigurationsfilen
93
+ env: Databasmiljö
94
+ unicode:
95
+ invalid_byte: 'Ogiltigt UTF8 byte: ''%{byte}'''
96
+ config:
97
+ invalid_key: 'Konfigurationsnyckel för oredovisade: ''%{key}'''
98
+ types:
99
+ string: Sträng
100
+ hash: Hash
101
+ array: Array
102
+ numeric: Numeriska
103
+ boolean: Boolean
@@ -0,0 +1,102 @@
1
+ # 由Translatomatic0.1.1Mon, 01 Jan 2018 21:36:45 +1030 创建
2
+
3
+ zh:
4
+ translatomatic:
5
+ cli:
6
+ config:
7
+ subcommand: 配置命令
8
+ configuration: 配置
9
+ set: 更改配置设置
10
+ remove: 删除配置设置
11
+ list: 列出当前配置设置
12
+ describe: 描述可用的配置设置
13
+ name: 名称
14
+ type: 类型
15
+ value: 值
16
+ desc: 描述
17
+ translate:
18
+ subcommand: 翻译文件或字符串
19
+ file: 将文件转换为目标区域设置
20
+ string: 将字符串转换为目标区域设置
21
+ source_locale: 源文件的区域设置
22
+ target_locales: 要转换为的区域设置
23
+ debug: 启用调试输出
24
+ wank: 启用翻译进度栏
25
+ share: 与支持上载的翻译人员共享翻译
26
+ dry_run: '干运行: 文件不会被翻译或写入'
27
+ locales_required: 需要一个或多个区域设置
28
+ file_not_found: 找不到文件:%{file}
29
+ file_unsupported: 不支持的文件类型:%{file}
30
+ using_translator: 使用转换器:%{name}
31
+ locales_properties: 区域设置:%{locales}, 属性:%{properties}
32
+ display_values: 显示资源包中的值
33
+ locales_to_display: 要显示的区域设置
34
+ display_sentences: 显示句子
35
+ extract_strings: 从资源文件中提取字符串
36
+ list_backends: 列出可用的翻译服务
37
+ display_version: 显示版本
38
+ uploading_tmx: 正在将 TMX 上载到%{name}
39
+ translating: 正在翻译
40
+ aborted: 中止
41
+ file_source: 文件:%{file}
42
+ sentences: '句子:'
43
+ database:
44
+ subcommand: 数据库命令
45
+ search: 搜索与给定字符串匹配的文本的数据库。
46
+ resource:
47
+ unknown_locale: 无法确定区域设置
48
+ created_by: 由%{app}%{version}%{date} 创建
49
+ error: 错误:%{message}
50
+ loading: 尝试使用%{file} 加载%{name}
51
+ tmx:
52
+ multiple_origins: 文本中的多个来源。
53
+ multiple_locales: 文本中的多个源区域设置。
54
+ translator:
55
+ email_required: 需要的电子邮件地址。
56
+ password_required: 需要密码。
57
+ google_key_required: 需要 Google API 密钥。
58
+ google_api_key: 谷歌 API 密钥
59
+ frengly_api_key: Frengly API 密钥
60
+ microsoft_api_key: 微软 API 密钥
61
+ microsoft_key_required: 需要使用 Microsoft API 密钥。
62
+ mymemory_api_key: MyMemory API 密钥
63
+ email_address: 电子邮件地址
64
+ share_response: 共享响应:%{response}
65
+ yandex_api_key: Yandex API 密钥
66
+ yandex_key_required: 需要 Yandex API 密钥。
67
+ required_option: 需要)
68
+ translators: '所有翻译人员:'
69
+ configured: '已配置的翻译人员:'
70
+ unavailable: 转换器%{name} 不可用。
71
+ no_translators: 未配置任何翻译器。
72
+ password: 密码
73
+ converter:
74
+ total_translations: 总翻译:%{total} (%{from_db} 来自数据库,%{from_translator} 来自翻译器,%{untranslated}
75
+ 未翻译)
76
+ untranslated: '未翻译的字符串:'
77
+ translator: 要使用的转换器实现
78
+ dry_run: 在不执行翻译或写入文件的情况下打印操作。
79
+ use_database: 存储和检索数据库中的翻译。
80
+ database_disabled: 数据库被禁用。
81
+ translator_required: 需要翻译。
82
+ file_unsupported: 不支持的文件类型:%{file}
83
+ translating: 将%{source} 转换为%{target}
84
+ stats: 数据库翻译:%{from_db}, 转换器:%{from_translator}, 未翻译:%{untranslated}
85
+ database:
86
+ no_environment: '%{env} 中没有环境 "%{file}"'
87
+ migrated: 数据库已迁移。
88
+ created: 数据库已创建。
89
+ deleted: 数据库已删除。
90
+ could_not_create: 无法创建数据库。
91
+ config_file: 数据库配置文件的路径
92
+ env: 数据库环境
93
+ unicode:
94
+ invalid_byte: '无效的 UTF8 字节: "%{byte}"'
95
+ config:
96
+ invalid_key: '未配置键: "%{key}"'
97
+ types:
98
+ string: 字符串
99
+ hash: 哈希
100
+ array: 数组
101
+ numeric: 数值
102
+ boolean: 布尔
@@ -8,7 +8,7 @@ class Initial < ActiveRecord::Migration[4.2] # :nodoc:
8
8
  t.timestamps
9
9
  end
10
10
 
11
- add_index :locales, [:language, :script, :region]
11
+ add_index :locales, [:language, :script, :region], unique: true
12
12
 
13
13
  create_table :texts do |t|
14
14
  t.belongs_to :locale, index: true, null: false
@@ -20,5 +20,6 @@ class Initial < ActiveRecord::Migration[4.2] # :nodoc:
20
20
  t.string :translator
21
21
  t.timestamps
22
22
  end
23
+
23
24
  end
24
25
  end
@@ -0,0 +1,73 @@
1
+ require 'thor'
2
+
3
+ module Translatomatic::CLI
4
+ # Base class for command line interface classes
5
+ class Base < Thor
6
+
7
+ private
8
+
9
+ include Translatomatic::Util
10
+ include Translatomatic::DefineOptions
11
+
12
+ # creates thor options
13
+ def self.thor_options(klass, object)
14
+ Translatomatic::Option.options_from_object(object).each do |option|
15
+ next if option.hidden
16
+ data = option.to_hash
17
+ # use internal ',' splitting for array types
18
+ data[:type] = :string if data[:type] == :array
19
+ klass.method_option option.name, data
20
+ end
21
+ end
22
+
23
+ def parse_list(list, default = [])
24
+ # use the default list if the list is empty
25
+ list = default if list.nil? || list.empty?
26
+ list = [list] unless list.kind_of?(Array)
27
+ # split list entries on ','
28
+ list.collect { |i| i.split(/[, ]/) }.flatten.compact
29
+ end
30
+
31
+ # run the give code block, display exceptions.
32
+ # return true if the code ran without exceptions
33
+ def run
34
+ begin
35
+ yield
36
+ true
37
+ rescue Interrupt
38
+ puts "\n" + t("cli.aborted")
39
+ false
40
+ rescue Exception => e
41
+ finish_log
42
+ log.error(e.message)
43
+ log.debug(e.backtrace.join("\n"))
44
+ raise e if ENV["TEST"] # reraise exceptions in test
45
+ false
46
+ end
47
+ end
48
+
49
+ def finish_log
50
+ conf.logger.finish if conf.logger.respond_to?(:finish)
51
+ end
52
+
53
+ def conf
54
+ Translatomatic::Config.instance
55
+ end
56
+
57
+ # get an option value
58
+ # use options specified on the command line first.
59
+ # falls back to configuration values.
60
+ def cli_option(key)
61
+ if options[key] && !empty_array?(options[key])
62
+ options[key]
63
+ else
64
+ conf.get(key)
65
+ end
66
+ end
67
+
68
+ def empty_array?(value)
69
+ value.kind_of?(Array) && value.empty?
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,14 @@
1
+ module Translatomatic::CLI
2
+ # Defines options common to all command line methods
3
+ class CommonOptions
4
+ private
5
+ include Translatomatic::DefineOptions
6
+ include Translatomatic::Util
7
+
8
+ define_options(
9
+ { name: :debug, type: :boolean, default: false, desc: t("cli.debug") },
10
+ { name: :wank, type: :boolean, default: true, desc: t("cli.wank") },
11
+ )
12
+
13
+ end
14
+ end
@@ -0,0 +1,81 @@
1
+ module Translatomatic::CLI
2
+ # Configuration functions for the command line interface
3
+ class Config < Base
4
+
5
+ desc "set key value", t("cli.config.set")
6
+ thor_options(self, Translatomatic::CLI::CommonOptions)
7
+ # Change a configuration setting
8
+ # @param key [String] configuration key
9
+ # @param value [String] new value for the configuration
10
+ # @return [String] the new value
11
+ def set(key, value)
12
+ run { conf.set(key, value) }
13
+ end
14
+
15
+ desc "remove key", t("cli.config.remove")
16
+ thor_options(self, Translatomatic::CLI::CommonOptions)
17
+ # Remove a configuration setting
18
+ # @param key [String] configuration key to remove
19
+ # @return [void]
20
+ def remove(key)
21
+ run { conf.remove(key) }
22
+ end
23
+
24
+ desc "list", t("cli.config.list")
25
+ thor_options(self, Translatomatic::CLI::CommonOptions)
26
+ # List current configuration settings
27
+ def list
28
+ run do
29
+ puts t("cli.config.configuration")
30
+ print_config_table(:key, :value)
31
+ end
32
+ end
33
+
34
+ desc "describe", t("cli.config.describe")
35
+ thor_options(self, Translatomatic::CLI::CommonOptions)
36
+ # Describe available configuration settings
37
+ def describe
38
+ run do
39
+ puts t("cli.config.configuration")
40
+ print_config_table(:key, :type, :desc)
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ TABLE_HEADING_MAP = {
47
+ key: t("cli.config.name"),
48
+ type: t("cli.config.type"),
49
+ value: t("cli.config.value"),
50
+ desc: t("cli.config.desc"),
51
+ }
52
+
53
+ def print_config_table(*columns)
54
+ puts
55
+ rows = []
56
+ rows << columns.collect { |i| TABLE_HEADING_MAP[i] }
57
+ rows << rows[0].collect { |i| i.gsub(/\w/, '=') }
58
+ Translatomatic::Config.options.each do |option|
59
+ key = option.name.to_s
60
+ data = []
61
+ columns.each do |column|
62
+ data << case column
63
+ when :key
64
+ key
65
+ when :value
66
+ value = conf.get(key)
67
+ value.nil? ? "-" : value
68
+ when :type
69
+ t("config.types.#{option.type}")
70
+ when :desc
71
+ option.description
72
+ end
73
+ end
74
+ rows << data
75
+ end
76
+ rows.sort_by { |i| i[0] }
77
+ print_table(rows, indent: 2)
78
+ puts
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,29 @@
1
+ module Translatomatic::CLI
2
+ # Database functions for the command line interface
3
+ class Database < Base
4
+
5
+ desc "search string [locale]", t("cli.database.search")
6
+ thor_options(self, Translatomatic::CLI::CommonOptions)
7
+ thor_options(self, Translatomatic::Database)
8
+ # Search database for the given string
9
+ # @param string [String] String to search for
10
+ # @param locale [String] Optional locale, by default search all locales
11
+ # @return [void]
12
+ def search(string, locale = nil)
13
+ Translatomatic::Database.new(options)
14
+ texts = Translatomatic::Model::Text.where('value LIKE ?', "%#{string}%")
15
+ if locale
16
+ db_locale = Translatomatic::Model::Locale.from_tag(locale)
17
+ texts = texts.where(locale: db_locale)
18
+ end
19
+ texts.find_each do |text|
20
+ puts "(%s) %s" % [text.locale, text.value]
21
+ text.translations.each do |translation|
22
+ puts " -> (%s) %s" % [translation.locale, translation.value]
23
+ end
24
+ puts
25
+ end
26
+ end
27
+
28
+ end
29
+ end