trmnl-i18n 0.1.0 → 0.3.0

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 (70) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.adoc +8 -10
  4. data/lib/trmnl/i18n/locales/custom_plugins/da.yml +46 -36
  5. data/lib/trmnl/i18n/locales/custom_plugins/de-AT.yml +46 -36
  6. data/lib/trmnl/i18n/locales/custom_plugins/de.yml +46 -36
  7. data/lib/trmnl/i18n/locales/custom_plugins/en.yml +46 -36
  8. data/lib/trmnl/i18n/locales/custom_plugins/es-ES.yml +46 -36
  9. data/lib/trmnl/i18n/locales/custom_plugins/fr.yml +46 -36
  10. data/lib/trmnl/i18n/locales/custom_plugins/he.yml +46 -36
  11. data/lib/trmnl/i18n/locales/custom_plugins/id.yml +46 -36
  12. data/lib/trmnl/i18n/locales/custom_plugins/it.yml +48 -38
  13. data/lib/trmnl/i18n/locales/custom_plugins/ja.yml +45 -35
  14. data/lib/trmnl/i18n/locales/custom_plugins/ko.yml +46 -36
  15. data/lib/trmnl/i18n/locales/custom_plugins/nl.yml +46 -36
  16. data/lib/trmnl/i18n/locales/custom_plugins/pl.yml +188 -0
  17. data/lib/trmnl/i18n/locales/custom_plugins/pt-BR.yml +46 -36
  18. data/lib/trmnl/i18n/locales/custom_plugins/raw.yml +46 -36
  19. data/lib/trmnl/i18n/locales/custom_plugins/sv.yml +188 -0
  20. data/lib/trmnl/i18n/locales/custom_plugins/uk.yml +46 -36
  21. data/lib/trmnl/i18n/locales/custom_plugins/zh-CN.yml +15 -5
  22. data/lib/trmnl/i18n/locales/custom_plugins/zh-HK.yml +15 -5
  23. data/lib/trmnl/i18n/locales/plugin_renders/da.yml +201 -5
  24. data/lib/trmnl/i18n/locales/plugin_renders/de-AT.yml +206 -10
  25. data/lib/trmnl/i18n/locales/plugin_renders/de.yml +206 -10
  26. data/lib/trmnl/i18n/locales/plugin_renders/en.yml +200 -4
  27. data/lib/trmnl/i18n/locales/plugin_renders/es-ES.yml +200 -3
  28. data/lib/trmnl/i18n/locales/plugin_renders/fr.yml +200 -4
  29. data/lib/trmnl/i18n/locales/plugin_renders/he.yml +201 -5
  30. data/lib/trmnl/i18n/locales/plugin_renders/id.yml +200 -4
  31. data/lib/trmnl/i18n/locales/plugin_renders/it.yml +212 -16
  32. data/lib/trmnl/i18n/locales/plugin_renders/ja.yml +200 -4
  33. data/lib/trmnl/i18n/locales/plugin_renders/ko.yml +200 -4
  34. data/lib/trmnl/i18n/locales/plugin_renders/nl.yml +200 -4
  35. data/lib/trmnl/i18n/locales/plugin_renders/no.yml +201 -5
  36. data/lib/trmnl/i18n/locales/plugin_renders/pl.yml +399 -0
  37. data/lib/trmnl/i18n/locales/plugin_renders/pt-BR.yml +200 -4
  38. data/lib/trmnl/i18n/locales/plugin_renders/raw.yml +200 -4
  39. data/lib/trmnl/i18n/locales/plugin_renders/sv.yml +217 -0
  40. data/lib/trmnl/i18n/locales/plugin_renders/uk.yml +200 -4
  41. data/lib/trmnl/i18n/locales/plugin_renders/zh-CN.yml +200 -4
  42. data/lib/trmnl/i18n/locales/plugin_renders/zh-HK.yml +200 -4
  43. data/lib/trmnl/i18n/locales/web_ui/da.yml +116 -33
  44. data/lib/trmnl/i18n/locales/web_ui/de-AT.yml +224 -142
  45. data/lib/trmnl/i18n/locales/web_ui/de.yml +224 -142
  46. data/lib/trmnl/i18n/locales/web_ui/en-GB.yml +479 -0
  47. data/lib/trmnl/i18n/locales/web_ui/en.yml +133 -53
  48. data/lib/trmnl/i18n/locales/web_ui/es-ES.yml +200 -118
  49. data/lib/trmnl/i18n/locales/web_ui/fr.yml +128 -46
  50. data/lib/trmnl/i18n/locales/web_ui/he.yml +132 -50
  51. data/lib/trmnl/i18n/locales/web_ui/id.yml +129 -47
  52. data/lib/trmnl/i18n/locales/web_ui/it.yml +177 -95
  53. data/lib/trmnl/i18n/locales/web_ui/ja.yml +133 -51
  54. data/lib/trmnl/i18n/locales/web_ui/ko.yml +204 -122
  55. data/lib/trmnl/i18n/locales/web_ui/nl.yml +129 -47
  56. data/lib/trmnl/i18n/locales/web_ui/no.yml +114 -35
  57. data/lib/trmnl/i18n/locales/web_ui/pl.yml +661 -0
  58. data/lib/trmnl/i18n/locales/web_ui/pt-BR.yml +132 -50
  59. data/lib/trmnl/i18n/locales/web_ui/raw.yml +109 -29
  60. data/lib/trmnl/i18n/locales/web_ui/sv.yml +479 -0
  61. data/lib/trmnl/i18n/locales/web_ui/uk.yml +135 -53
  62. data/lib/trmnl/i18n/locales/web_ui/zh-CN.yml +130 -48
  63. data/lib/trmnl/i18n/locales/web_ui/zh-HK.yml +152 -70
  64. data/lib/trmnl/i18n/synchronization/processor.rb +56 -0
  65. data/lib/trmnl/i18n/synchronization/repo.rb +43 -0
  66. data/lib/trmnl/i18n/synchronization/value_reducer.rb +23 -0
  67. data/trmnl-i18n.gemspec +3 -3
  68. data.tar.gz.sig +0 -0
  69. metadata +28 -19
  70. metadata.gz.sig +0 -0
@@ -1,9 +1,10 @@
1
+ ---
1
2
  zh-HK:
2
- # global, logged out, and auth-related
3
+ locale_name: Chinese (Hong Kong)
3
4
  add: 加入
4
5
  add_new: 新增
5
- ago: 前 # example: "Created 5 mins ago"
6
- already_have_account: 我已經有帳戶 # signup form cta
6
+ ago: 前
7
+ already_have_account: 我已經有帳戶
7
8
  back: 返回
8
9
  back_to_all_blog_posts: 返回所有貼文
9
10
  blog: 網誌
@@ -11,15 +12,15 @@ zh-HK:
11
12
  cancel: 取消
12
13
  change_password: 更改密碼
13
14
  charge_level: 充電狀態
14
- charged: 已充電
15
+ charged: 電量
15
16
  close: 關閉
16
17
  confirm_change_password: 更改密碼
17
18
  confirm_password: 確認新密碼
18
19
  copy: 複製
19
20
  copied_to_clipboard: 已複製!
20
21
  copy_to_clipboard: 複製至剪貼簿
21
- created: 新增於 # example: "Created 5 mins ago"
22
- create_an_account: 新增帳戶 # login form cta
22
+ created: 新增於
23
+ create_an_account: 新增帳戶
23
24
  current_device: 現時裝置
24
25
  days: 日
25
26
  delete: 刪除
@@ -28,10 +29,10 @@ zh-HK:
28
29
  edit: 設定
29
30
  email_address: 電郵地址
30
31
  export: 匯出
31
- fetching: 載入中 # for asynchronous content requests; this message may appear as a placeholder text for 0-2 seconds
32
+ fetching: 載入中
32
33
  first_name: 名字
33
- forgot_password: 忘記密碼 # login form link
34
- forgot_password_title: 再次輸入 # heading on /password/new (hint: https://www.google.com/search?q=here+we+go+again+meme)
34
+ forgot_password: 忘記密碼
35
+ forgot_password_title: 再次輸入
35
36
  get_started: 讓我們開始吧!
36
37
  identify: 識別
37
38
  import: 匯入
@@ -40,37 +41,45 @@ zh-HK:
40
41
  keep_me_signed_in: 保持登入狀態
41
42
  knowledge_base: 知識庫
42
43
  last_name: 姓氏
44
+ learn_more: Learn more
43
45
  loading: 載入中
44
46
  login: 登入
45
47
  log_out: 登出
46
- minimum_characters: 字元(最少) # ex: 8 characters minimum
47
- mins: 分鐘 # 'minutes' abbreviation
48
- my_playlist: 我的播放清單 # default name for a new playlist group
48
+ minimum_characters: 字元(最少)
49
+ mins: 分鐘
50
+ my_playlist: 我的播放清單
49
51
  new_password: 新密碼
50
52
  password: 密碼
51
- please_wait: 請稍候⋯ # similar to "Fetching", but shown after a long process button click vs on page-load
53
+ please_wait: 請稍候⋯
52
54
  plugin_not_found: 找不到外掛
53
- refresh_rates_hint: "__按此__了解重新整理頻率如何運作。"
55
+ refresh_rates_hint: __按此__了解重新整理頻率如何運作。
54
56
  reset_password: 重設密碼
55
57
  save: 儲存
56
58
  section: 章節
57
- sign_in: 登入 # login form cta
58
- sign_up: 註冊 # logged out navigation
59
+ sign_in: 登入
60
+ sign_up: 註冊
59
61
  something_went_wrong: 發生錯誤
60
- support: 支援 # bottom navigation tab, links to help center
62
+ tech_support: 支援
61
63
  update: 更新
62
64
  view: 查看
63
- welcome: 歡迎 # login form heading
64
-
65
- # views by resource (device, plugins, playlists, account, etc)
65
+ welcome: 歡迎
66
+ time:
67
+ formats:
68
+ shorter: "%-I:%M %p"
69
+ start_of_week: 0
66
70
  account:
67
71
  index:
68
72
  title: 帳戶
69
73
  tagline: 管理帳戶設定
74
+ api_key_confirm: Are you sure you want to regenerate your API Key? The old key will be invalidated.
75
+ api_key_hint: See __the docs__ to learn how to configure your local environment.
76
+ api_key_label: The credential for authenticating local development tools
77
+ api_key_reset: Regenerate
78
+ api_key: API Key
70
79
  email_address: 電郵地址
71
80
  refer_and_earn: 推薦回贈計劃
72
81
  refer_and_earn_hint: 使用專屬優惠券與分享TRMNL。每次使用都可賺取收入,按月支付。
73
- refer_and_earn_redemptions: 兌換次數 # how many times this coupon has been used
82
+ refer_and_earn_redemptions: 兌換次數
74
83
  refer_and_earn_request_code: 索取推薦碼
75
84
  device_invoice: 裝置發票
76
85
  device_invoice_label: 下載商業文件以作會計用途。
@@ -80,7 +89,7 @@ zh-HK:
80
89
  last_name_hint: 可讓TRMNL介面更舒適。
81
90
  password_hint: 用於保護你的TRMNL帳戶。
82
91
  enable_2fa: 啟用雙重驗證(2FA)?
83
- enable_2fa_hint: "__按此__啟用OTP。"
92
+ enable_2fa_hint: __按此__啟用OTP。
84
93
  disable_2fa: 停用雙重驗證(2FA)
85
94
  disable_2fa_hint: 如要停用,請提供有效的單次密碼(OTP),並在上方輸入現時密碼。
86
95
  session: 登入狀態
@@ -89,78 +98,91 @@ zh-HK:
89
98
  time_zone_hint: 用於判斷重新整理頻率及裝置睡眠時間。
90
99
  locale: 地區設定
91
100
  locale_hint: 你希望使用哪一種語言? __按此了解更多__。
92
-
93
- # toast messages
94
101
  update:
95
102
  success: 成功更新個人資料
103
+ reset_api_key:
104
+ success: API key was regenerated successfully
96
105
  dashboard:
97
106
  index:
98
107
  title: 儀表板
99
- morning_salutation: 早晨
100
- afternoon_salutation: 午安
101
- evening_salutation: 晚安
102
108
  last_7_days: 過去7日
103
109
  last_30_days: 過去30日
104
110
  last_90_days: 過去90日
105
111
  today: 今日
106
112
  yesterday: 昨日
107
- health: # partial (widget)
113
+ health:
108
114
  bad: 外掛出現問題
109
115
  good: 外掛運作正常
110
116
  next_steps: 當有變更時,我們會通知你
111
- news: # partial (widget)
117
+ news:
112
118
  title: 新聞
113
119
  cta: 查看所有
114
- playlists: # partial (widget)
120
+ playlist_items:
115
121
  title: 播放清單
116
122
  cta: 編輯播放清單
117
123
  pieces_of_content_displayed: 顯示畫面數量
118
- plugins: # partial (widget)
124
+ plugins:
119
125
  title: 外掛功能
120
126
  cta: 前往外掛列表
121
127
  connected: 已連接外掛
122
128
  new_and_popular: 最新及熱門項目
123
129
  shop:
124
130
  title: 商店
125
- time_saved: # partial (widget)
131
+ time_saved:
126
132
  title: 已節省時間
127
133
  cta: 詳情
134
+ welcome_message:
135
+ morning_salutation: 早晨
136
+ afternoon_salutation: 午安
137
+ evening_salutation: 晚安
128
138
  devices:
129
139
  edit:
130
- accepts_beta_firmware: 韌體搶先發佈 # true/false toggle to receive new device updates before regular users
140
+ accepts_beta_firmware: 韌體搶先發佈
131
141
  accepts_beta_firmware_hint: 啟用設定後,你會在其他用戶之前取得最新的硬件韌體改進。
132
142
  back_to_devices: 返回裝置
133
143
  battery_consumption: 電池消耗
134
144
  battery_consumption_hint: 啟用「睡眠模式」可節省電量,並延長電池續航時間。
135
- developer_perks: 開發者福利 # heading; below this is a list of options for devices with (paid) Developer edition add-on
145
+ developer_perks: 開發者福利
136
146
  developer_perks_hint: 以下選項需要購買「__開發者版本__」。.
137
147
  device_credentials: 裝置認證
138
- device_credentials_hint: "__按此__了解如何使用裝置認證"
148
+ device_credentials_hint: __按此__了解如何使用裝置認證
139
149
  device_name: 裝置名稱
140
150
  device_name_hint: 此名稱可讓TRMNL介面更舒適
151
+ device_model: Device Model
152
+ device_model_hint: Your hardware Model
153
+ device_model_switch_warning: This is a dangerous operation, learn more __here__
141
154
  edit_device: 編輯裝置
155
+ guest_mode: Guest Mode
156
+ guest_mode_hint: Choose what to display (and for how long) whenever guest mode is enabled.
157
+ guest_mode_item_placeholder: Choose an item
158
+ guest_mode_duration_placeholder: Choose a duration
142
159
  identify: 識別
143
160
  identify_device: 識別裝置
144
161
  identify_device_hint: 按下按鈕後,裝置會顯示識別畫面。
145
162
  logs: 除錯記錄
146
163
  logs_hint: 提供即時串流的原始錯誤記錄,以偵錯你的裝置或外掛。
164
+ low_battery_email_notification: Low Battery Email Notification
147
165
  mirror: 鏡像共享
148
166
  mirror_device: 鏡像共享另一部裝置
149
167
  mirror_device_hint: 輸入可共享(shareable)裝置的ID,以鏡像共享其播放清單。你的播放清單仍然會顯示。
150
- ota_enabled: 已啟用自動更新
168
+ mirror_stop: Disconnect Mirroring
169
+ mirror_sync: Sync Screens
170
+ ota_enabled: 啟用自動更新
151
171
  ota_enabled_hint: 自動安裝新的韌體。如要使用自訂韌體,請關閉此設定。
152
172
  sleep_mode: 睡眠模式
153
173
  sleep_mode_hint: 調整重新整理頻率,以提升專注度及電池續航時間。
154
174
  sleep_screen: 睡眠畫面
155
175
  special_function: 特別功能
156
176
  special_function_hint: 按兩下裝置背面的按鈕時,會執行特別功能。
157
- special_function_learn_more: "__按此__了解特別功能。"
177
+ special_function_learn_more: __按此__了解特別功能。
158
178
  unlink: 取消連結
179
+ unlink_confirm: Are you sure? This will delete all underlying plugin settings and playlist items, so the device can be added to another account.
159
180
  unlink_device: 取消連結裝置
160
181
  unlink_device_hint: 如要安全地轉售或轉讓TRMNL裝置,請先取消連結。
182
+ unlink_device_learn_more: Follow the full guide __here__.
161
183
  visibility: 共享狀態
162
184
  visibility_hint: 讓其他TRMNL裝置可鏡像共享此裝置的內容。
163
- your_device: 你的TRMNL裝置
185
+ your_device: 你的TRMNL
164
186
  index:
165
187
  title: 裝置
166
188
  tagline: 你的TRMNL裝置
@@ -170,8 +192,6 @@ zh-HK:
170
192
  title: 新增裝置
171
193
  description: 輸入裝置ID以新增TRMNL裝置到你的帳戶。
172
194
  add_device: 新增裝置
173
-
174
- # toast messages
175
195
  associate:
176
196
  error: 連結裝置時發生錯誤
177
197
  success: 成功連結裝置
@@ -201,12 +221,14 @@ zh-HK:
201
221
  title: 除錯記錄
202
222
  all: 所有
203
223
  device: 裝置
204
- dump: 內容 # content
224
+ dump: 內容
205
225
  id: ID
206
226
  private_plugins: 客製外掛
207
227
  source: 來源
208
228
  time: 時間
209
229
  markups:
230
+ console_logs:
231
+ js_logs: JS Logs
210
232
  form:
211
233
  back_to_plugin_settings: 返回外掛設定
212
234
  design_system: 活用我們的原生設計系統
@@ -218,14 +240,17 @@ zh-HK:
218
240
  edit_markup_without_preview: 編輯標記碼(略過預覽)
219
241
  error_rendering_markup: 轉譯標記碼時發生錯誤
220
242
  fix_indentation: 修復縮排
243
+ go_to_preview: Go To Preview
221
244
  live_preview: 即時預覽
222
245
  no_changes_to_save: 沒有變更可儲存
246
+ pop_out_preview: Pop Out Preview
223
247
  quickstart_examples: 快速入門範例
224
248
  quickstart_example_applied: 已套用!
225
249
  quickstart_use_this_example: 套用此範例
226
250
  revert: 還原
227
251
  revert_confirm: 確定要還原嗎?所有未儲存的變更將會消失。
228
252
  save_changes: 儲存變更 (⌘﹢S)
253
+ separate_preview: Preview is open in a separate window
229
254
  merge_variables:
230
255
  your_variables: 變數
231
256
  no_merge_variables:
@@ -246,36 +271,53 @@ zh-HK:
246
271
  error: OTP錯誤
247
272
  verify_otp:
248
273
  verify: 驗證
274
+ reset: Reset MFA
275
+ reset_instructions: Click the button on the back of your TRMNL to generate a reset code
249
276
  success: 雙重驗證成功
250
277
  error: OTP錯誤
251
- playlists:
278
+ playlist_items:
252
279
  index:
253
280
  title: 播放清單
254
281
  tagline: 選擇此裝置上顯示的畫面
255
- add_a_group: 加入群組
282
+ add_a_group: 新增群組
256
283
  add_a_plugin: 加入外掛
257
284
  add_first_device_cta: 請先__新增__TRMNL裝置!
258
285
  add_to_playlist: 加入至播放清單
259
286
  create_first_playlist_cta: 請先__連接__第一個外掛功能,方可新增播放清單!
260
- custom: Custom
261
- device_default: Device default
287
+ custom: 自訂
288
+ device_default: 裝置預設
262
289
  display_period_from: 顯示時間
263
290
  display_period_to: 至
264
- display_period_validation: Start time must be before end time. Create another group to span overnight hours.
265
- every: every
266
- playlist: # partial (single item)
291
+ display_period_validation: 開始時間必須早於結束時間。如要跨越午夜,請新增另一個群組。
292
+ every: 頻率
293
+ never_skip: Never skip screens
294
+ smart_playlist: Smart Playlist
295
+ smart_playlist_hint: Automatically skip screens whose contents haven't changed in a while.
296
+ skip_after:
297
+ one: Skip stale screens after 1 day
298
+ other: Skip stale screens after %{count} days
299
+ playlist_item:
300
+ adjust_schedule: Adjust schedule
267
301
  delete: 確定要移除此項目嗎?外掛會保持連接,只是不會在裝置上顯示。
268
302
  displayed_now: 正在顯示
269
303
  not_displayed_yet: 待處理
270
304
  remove_from_playlist: 從播放清單中移除
271
-
272
- # toast messages
305
+ hide_playlist: Hide this item
306
+ show_playlist: Show this item
273
307
  create:
274
308
  error: 更新播放清單時發生錯誤
275
309
  success: 已更新播放清單
276
310
  destroy:
277
311
  error: 移除外掛時發生錯誤
278
312
  success: 已從播放清單移除外掛
313
+ toggle_visibility:
314
+ success: Playlist item %{change}
315
+ duplicate:
316
+ success: Playlist duplicated
317
+ sort:
318
+ success: Playlist order updated
319
+ set_preferences:
320
+ success: Smart playlist preference updated
279
321
  update:
280
322
  success: 已更新播放清單順序
281
323
  plugins:
@@ -284,9 +326,9 @@ zh-HK:
284
326
  tagline: 你會在TRMNL上顯示什麼?
285
327
  available: 可使用
286
328
  connected: 已連接
287
- recipes: 模板(Recipe) # recipe doesn't tranlate well in zh-HK, using 'template' instead
329
+ recipes: 模板(Recipe)
288
330
  recipes_hint: 社群用戶開發的客製外掛,一鍵即可安裝。 __了解更多__
289
- search: # partial (search box)
331
+ search:
290
332
  placeholder: 搜尋外掛
291
333
  my:
292
334
  index:
@@ -302,18 +344,23 @@ zh-HK:
302
344
  tagline: 其他用戶將可以安裝此外掛。
303
345
  name: 名稱
304
346
  category: 類別
347
+ category_hint: Hold cmd or ctrl to choose up to 3
348
+ refresh_every: Supported Refresh Interval
349
+ refresh_every_hint: The fastest refresh interval your plugin can support.
305
350
  description: 描述
306
351
  description_hint: 最多50個字元
307
352
  icon: 圖示
308
- icon_hint: 建議使用40×40像素
353
+ icon_hint: 建議使用512x512像素
309
354
  installation_url: 安裝網址
310
- installation_url_hint: "__按此__了解安裝流程。"
355
+ installation_url_hint: __按此__了解安裝流程。
311
356
  installation_success_webhook_url: 安裝成功Webhook網址
312
357
  knowledge_base_url: 知識庫網址
313
358
  management_url: 管理網址
314
- management_url_hint: "__按此__了解管理流程。"
359
+ management_url_hint: __按此__了解管理流程。
315
360
  markup_url: 標記碼(Markup)網址
316
- markup_url_hint: "__按此__了解畫面生成方式。"
361
+ markup_url_hint: __按此__了解畫面生成方式。
362
+ no_screen_padding: No Screen Padding
363
+ no_screen_padding_hint: Removes the outermost padding in fullscreen mode.
317
364
  uninstallation_webhook_url: 解除安裝Webhook網址
318
365
  edit:
319
366
  title: 編輯外掛
@@ -321,7 +368,13 @@ zh-HK:
321
368
  name: 名稱
322
369
  description: 描述
323
370
  plugin_recipes:
324
- connected: Recipe connected
371
+ connected: 已連接模板
372
+ connections:
373
+ one: Connection
374
+ other: Connections
375
+ forks:
376
+ one: Fork
377
+ other: Forks
325
378
  new:
326
379
  error: 找不到模板
327
380
  plugin_settings:
@@ -330,14 +383,20 @@ zh-HK:
330
383
  delete_are_you_sure: 確定要刪除此設定嗎?
331
384
  delete: 這樣會完全移除此外掛的設定。如要只從你的裝置隱藏此外掛,請從播放清單將其移除。
332
385
  inactive: 停用
333
- no_plugin_settings_found: 找不到外掛設定。 # empty state - should not appear
386
+ no_plugin_settings_found: 找不到外掛設定。
334
387
  refreshing_now_please_wait: 正在重新整理,請在幾秒鐘後重新載入此頁面。
335
388
  reset_credentials: 成功重設「%{plugin_name}」帳戶
336
389
  form:
337
390
  active_hint: 在你的裝置上顯示或隱藏此外掛
391
+ advanced_settings: Advanced Settings
338
392
  back_to_plugin: 返回%{plugin}
339
393
  back_to_plugins: 返回外掛列表
340
394
  connect_with: 連接%{plugin}
395
+ debug_logs: Debug Logs
396
+ debug_logs_click_here: Click here
397
+ debug_logs_click_here_hint: to enable debug logs for this plugin instance.
398
+ debug_logs_enabled: Debug logs enabled for %{hours} hours.
399
+ debug_logs_enabled_link: View logs
341
400
  disconnect_account: 中斷連接帳戶
342
401
  manage_plugin: 設定%{plugin}
343
402
  force_refresh: 強制重新整理
@@ -345,6 +404,11 @@ zh-HK:
345
404
  force_refresh_click_here: 按此
346
405
  force_refresh_click_here_hint: 立即生成新的畫面
347
406
  learn_more: 前往知識庫以了解此外掛
407
+ learn_more_fork: This plugin was forked from a Recipe.
408
+ learn_more_fork_original: See Original
409
+ learn_more_recipe_author: Need help? Contact %{recipe_author} on Discord.
410
+ learn_more_recipe_long: This plugin is a community Recipe and is not maintained by TRMNL.
411
+ learn_more_recipe_short: 'Note: this plugin is a Recipe.'
348
412
  linked_account: 已連結帳戶
349
413
  linked_account_success: 成功連接%{plugin_name}
350
414
  link_oauth: 連接帳戶
@@ -355,24 +419,30 @@ zh-HK:
355
419
  plugin_uuid: 外掛UUID
356
420
  plugin_uuid_hint: 用於發送Webhook API請求。
357
421
  preview: 預覽圖(裝置會顯示實際資料)
422
+ recipe_cta_heading_published: This plugin is a Recipe
423
+ recipe_cta_heading_in_review: Recipe in review
424
+ recipe_cta_heading_not_published: Publish as a Recipe?
425
+ recipe_cta_body_published: Changes will be reflected on existing installs and future installs/forks.
426
+ recipe_cta_body_in_review: This plugin has been submitted to our team. Stand by.
427
+ recipe_cta_body_not_published: Submit this plugin for others to install. __Learn more__.
428
+ recipe_cta_confirm: Are you sure? Our team will review and get back to you within a couple days. You may continue making changes.
358
429
  refresh_rate: 重新整理頻率
359
430
  refresh_rate_hint: 設定此外掛每隔多久後擷取新資料。
360
431
  refreshed: 已重新整理
361
432
  remove_plugin: 移除外掛
362
433
  remove_plugin_hint: 移除外掛後,亦會從你的播放清單中移除
363
434
  synced: 已同步
364
- refresh_paused: Refresh Paused
365
- refresh_paused_hint: Auto-refresh is paused. Add to playlist to start again.
366
- refresh_paused_mashup: Refreshing Mashups
367
- refresh_paused_mashup_hint: Auto-refresh paused for fullscreen. Mashups are updating.
435
+ refresh_paused: 已暫停更新
436
+ refresh_paused_hint: 自動更新已暫停,請加入至播放清單以重新開始。
437
+ refresh_paused_mashup: 只更新混搭畫面
438
+ refresh_paused_mashup_hint: 已暫停全螢幕的自動更新,混搭畫面(Mashup)仍會更新。
439
+ refresh_stopped: Auto-refresh stopped. Please fix the plugin error to continue.
368
440
  visit_docs: 前往文件
369
441
  import:
370
442
  archive_too_large: ZIP檔案太大(最多%{max_mb} MB)
371
443
  missing_entry: ZIP檔案未包含「%{filename}」
372
- entry_too_large: 「%{filename}」太大
373
- malformed: 「%{filename}」格式不符
374
-
375
- # toast messages
444
+ entry_too_large: "「%{filename}」太大"
445
+ malformed: "「%{filename}」格式不符"
376
446
  create:
377
447
  success: 已新增外掛,並加入至你的
378
448
  playlist: 播放清單
@@ -383,17 +453,29 @@ zh-HK:
383
453
  success: 成功更新外掛設定
384
454
  add_to_playlist:
385
455
  success: 外掛已加入至播放清單
386
-
387
456
  referral_code:
388
457
  create:
389
458
  request_received: 已收到請求,請查看收件箱
459
+ recipes:
460
+ index:
461
+ newest_to_oldest: Newest to Oldest
462
+ oldest_to_newest: Oldest to Newest
463
+ most_popular: Most Popular
464
+ install: Install
465
+ fork: Fork
466
+ schedules:
467
+ form:
468
+ add: Add a custom schedule
469
+ append: And during…
470
+ no_schedule: This screen will be shown at all times.
471
+ some_schedule: Only show this screen during…
472
+ to: to
473
+ copy_prompt: Copy schedule from…
390
474
  upgrade:
391
475
  index:
392
476
  title: 升級裝置:
393
477
  tagline: 解鎖自訂外掛及__更多__功能。
394
- pay: 付款 # button text; ex "Pay $20"
478
+ pay: 付款
395
479
  error: 裝置「%{device_name}」已經升級,請切換至另一部裝置
396
-
397
- # toast messages
398
480
  confirm:
399
481
  success: 已啟用開發者版本附加元件
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cogger"
4
+ require "refinements"
5
+ require "yaml"
6
+
7
+ require_relative "value_reducer"
8
+
9
+ module TRMNL
10
+ module I18n
11
+ module Synchronization
12
+ # Copies new key/value pairs from the source locale (typically 'en') to destination locales.
13
+ class Processor
14
+ using Refinements::Hash
15
+
16
+ def initialize repository, reducer: ValueReducer, logger: Cogger.new(id: "trmnl-i18n")
17
+ @repository = repository
18
+ @reducer = reducer
19
+ @logger = logger
20
+ end
21
+
22
+ def call source_locale = "en"
23
+ repository.locales.each do |destination_locale|
24
+ log_info "Syncing #{repository.name}/#{destination_locale}..."
25
+
26
+ destination_root = repository.load destination_locale
27
+ result = add_missing_contents source_locale, destination_locale, destination_root
28
+
29
+ repository.save destination_locale, result
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ attr_reader :repository, :reducer, :logger
36
+
37
+ def log_info(message) = logger.info { message }
38
+
39
+ # :reek:FeatureEnvy
40
+ def add_missing_contents source_locale, destination_locale, destination_root
41
+ destination_contents = destination_root[destination_locale]
42
+ contents_to_merge = reduce source_locale, destination_locale
43
+ destination_root[destination_locale] = contents_to_merge.deep_merge destination_contents
44
+ destination_root
45
+ end
46
+
47
+ # :reek:ControlParameter
48
+ def reduce source_locale, destination_locale
49
+ repository.load(source_locale)[source_locale].then do |contents|
50
+ destination_locale == "raw" ? reducer.call(contents) : contents
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "refinements"
4
+ require "yaml"
5
+
6
+ module TRMNL
7
+ module I18n
8
+ module Synchronization
9
+ # Represents a directory containing YAML files named "{locale}.yml"
10
+ class Repo
11
+ using Refinements::Pathname
12
+
13
+ def self.all
14
+ Pathname(__dir__).join("../locales")
15
+ .directories
16
+ .map { |directory| new directory }
17
+ end
18
+
19
+ def initialize directory
20
+ @directory = Pathname directory
21
+ end
22
+
23
+ def name = directory.name.to_s
24
+
25
+ def load(locale) = YAML.load_file locale_path(locale)
26
+
27
+ def save locale, data
28
+ locale_path(locale).open "w" do |file|
29
+ Psych.dump data, file, indentation: 2, line_width: -1
30
+ end
31
+ end
32
+
33
+ def locales = directory.files("*.yml").map { |path| path.name.to_s }
34
+
35
+ private
36
+
37
+ attr_reader :directory
38
+
39
+ def locale_path(locale) = directory.join "#{locale}.yml"
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TRMNL
4
+ module I18n
5
+ module Synchronization
6
+ # Reduces a nested structure into key/value pairs with flattened values.
7
+ ValueReducer = lambda do |initial_value, path = ""|
8
+ case initial_value
9
+ when Array
10
+ initial_value.map.with_index do |item, index|
11
+ ValueReducer.call item, "#{path}[#{index}]"
12
+ end
13
+ when Hash
14
+ initial_value.each.with_object({}) do |(key, value), result|
15
+ next_path = path.empty? ? key : "#{path}.#{key}"
16
+ result[key] = ValueReducer.call value, next_path
17
+ end
18
+ else path
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
data/trmnl-i18n.gemspec CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "trmnl-i18n"
5
- spec.version = "0.1.0"
6
- spec.authors = ["Brooke Kuhlmann"]
7
- spec.email = ["brooke@alchemists.io"]
5
+ spec.version = "0.3.0"
6
+ spec.authors = ["TRMNL"]
7
+ spec.email = ["engineering@usetrmnl.com"]
8
8
  spec.homepage = "https://github.com/usetrmnl/trmnl-i18n"
9
9
  spec.summary = "A collection of TRMNL locales."
10
10
  spec.license = "MIT"
data.tar.gz.sig CHANGED
Binary file