worldwide 0.13.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +20 -0
  3. data/.github/workflows/ci-typescript.yml +32 -0
  4. data/.github/workflows/npm-release.yml +38 -0
  5. data/.vscode/settings.json +8 -0
  6. data/CHANGELOG.md +12 -2
  7. data/Gemfile.lock +1 -1
  8. data/db/data/regions/AE/bg.yml +1 -3
  9. data/db/data/regions/AE/cs.yml +1 -3
  10. data/db/data/regions/AE/da.yml +1 -3
  11. data/db/data/regions/AE/de.yml +1 -3
  12. data/db/data/regions/AE/el.yml +1 -3
  13. data/db/data/regions/AE/en.yml +1 -3
  14. data/db/data/regions/AE/es.yml +1 -3
  15. data/db/data/regions/AE/fi.yml +1 -3
  16. data/db/data/regions/AE/fr.yml +1 -3
  17. data/db/data/regions/AE/hi.yml +1 -3
  18. data/db/data/regions/AE/hr.yml +1 -3
  19. data/db/data/regions/AE/hu.yml +1 -3
  20. data/db/data/regions/AE/id.yml +1 -3
  21. data/db/data/regions/AE/it.yml +1 -3
  22. data/db/data/regions/AE/ja.yml +1 -3
  23. data/db/data/regions/AE/ko.yml +1 -3
  24. data/db/data/regions/AE/lt.yml +1 -3
  25. data/db/data/regions/AE/ms.yml +1 -2
  26. data/db/data/regions/AE/nb.yml +1 -3
  27. data/db/data/regions/AE/nl.yml +1 -3
  28. data/db/data/regions/AE/pl.yml +1 -3
  29. data/db/data/regions/AE/pt-BR.yml +1 -3
  30. data/db/data/regions/AE/pt-PT.yml +1 -3
  31. data/db/data/regions/AE/ro.yml +1 -3
  32. data/db/data/regions/AE/ru.yml +1 -3
  33. data/db/data/regions/AE/sk.yml +1 -3
  34. data/db/data/regions/AE/sl.yml +1 -3
  35. data/db/data/regions/AE/sv.yml +1 -3
  36. data/db/data/regions/AE/th.yml +1 -3
  37. data/db/data/regions/AE/tr.yml +1 -3
  38. data/db/data/regions/AE/vi.yml +1 -3
  39. data/db/data/regions/AE/zh-CN.yml +1 -3
  40. data/db/data/regions/AE/zh-TW.yml +1 -3
  41. data/db/data/regions/AE.yml +2 -3
  42. data/db/data/regions/BE.yml +5 -2
  43. data/db/data/regions/BR.yml +9 -6
  44. data/db/data/regions/CL.yml +9 -6
  45. data/db/data/regions/CO.yml +5 -4
  46. data/db/data/regions/ES.yml +5 -2
  47. data/db/data/regions/ID.yml +5 -4
  48. data/db/data/regions/IL.yml +11 -0
  49. data/db/data/regions/MX.yml +9 -6
  50. data/db/data/regions/NL.yml +5 -2
  51. data/db/data/regions/PH.yml +6 -4
  52. data/db/data/regions/TR.yml +6 -4
  53. data/db/data/regions/TW.yml +9 -1
  54. data/db/data/regions/VN.yml +6 -4
  55. data/db/data/regions/_default/cs.yml +27 -2
  56. data/db/data/regions/_default/da.yml +25 -1
  57. data/db/data/regions/_default/el.yml +28 -1
  58. data/db/data/regions/_default/en.yml +23 -1
  59. data/db/data/regions/_default/es.yml +29 -1
  60. data/db/data/regions/_default/fi.yml +25 -1
  61. data/db/data/regions/_default/fr.yml +28 -1
  62. data/db/data/regions/_default/hi.yml +25 -1
  63. data/db/data/regions/_default/hu.yml +28 -2
  64. data/db/data/regions/_default/id.yml +26 -1
  65. data/db/data/regions/_default/ja.yml +20 -1
  66. data/db/data/regions/_default/lt.yml +28 -1
  67. data/db/data/regions/_default/ms.yml +26 -1
  68. data/db/data/regions/_default/pl.yml +1 -1
  69. data/db/data/regions/_default/pt-BR.yml +26 -1
  70. data/db/data/regions/_default/ro.yml +26 -1
  71. data/db/data/regions/_default/ru.yml +25 -1
  72. data/db/data/regions/_default/sk.yml +25 -1
  73. data/db/data/regions/_default/sl.yml +27 -1
  74. data/db/data/regions/_default/sv.yml +25 -1
  75. data/db/data/regions/_default/th.yml +24 -1
  76. data/db/data/regions/_default/tr.yml +24 -1
  77. data/db/data/regions/_default/vi.yml +24 -1
  78. data/db/data/regions/_default/zh-CN.yml +20 -1
  79. data/db/data/regions/_default/zh-TW.yml +20 -1
  80. data/lib/worldwide/address.rb +7 -4
  81. data/lib/worldwide/field.rb +1 -0
  82. data/lib/worldwide/region.rb +27 -2
  83. data/lib/worldwide/regions_loader.rb +2 -1
  84. data/lib/worldwide/version.rb +1 -1
  85. data/worldwide.gemspec +1 -1
  86. metadata +6 -2
@@ -211,7 +211,7 @@ pt-BR:
211
211
  optional: Bairro (opcional)
212
212
  errors:
213
213
  blank: Insira um bairro
214
- too_long: O bairro é muito longo (máximo de 255 caracteres)
214
+ too_long: O bairro é muito longo (máximo de %{limit} caracteres)
215
215
  contains_emojis: O bairro não pode conter emojis
216
216
  contains_mathematical_symbols: O bairro não pode conter símbolos matemáticos
217
217
  contains_restricted_characters: O bairro pode conter apenas letras, números,
@@ -225,3 +225,28 @@ pt-BR:
225
225
  warnings:
226
226
  contains_too_many_words: É recomendável que o bairro tenha menos de %{word_count}
227
227
  palavras
228
+ line2:
229
+ label:
230
+ default: Apartamento, bloco etc.
231
+ optional: Casa, apto. etc. (opcional)
232
+ errors:
233
+ blank: Insira apartamento, bloco etc.
234
+ too_long: A segunda linha do endereço é longa demais (máximo é %{limit}
235
+ caracteres)
236
+ contains_emojis: A segunda linha do endereço não pode conter emojis
237
+ contains_mathematical_symbols: A segunda linha do endereço não pode conter
238
+ símbolos matemáticos
239
+ contains_restricted_characters: A segunda linha do endereço pode conter
240
+ apenas letras, números, caracteres locais e caracteres especiais
241
+ contains_too_many_words: A segunda linha do endereço não pode ter mais
242
+ do que %{word_count} palavras
243
+ contains_html_tags: A segunda linha do endereço não pode conter tags HTML
244
+ contains_url: A segunda linha do endereço não pode conter URLs
245
+ missing_building_number: Adicione o número do prédio, se houver.
246
+ street_unknown_for_zip: Insira um nome de rua válido para %{zip}.
247
+ building_number_invalid: Não foi possível localizar o número do prédio
248
+ em %{street}, %{zip}.
249
+ unknown_for_address: A segunda linha do endereço pode estar incorreta.
250
+ warnings:
251
+ contains_too_many_words: É recomendável que a segunda linha do endereço
252
+ tenha menos que %{word_count} palavras
@@ -230,7 +230,7 @@ ro:
230
230
  optional: Cartier (opțional)
231
231
  errors:
232
232
  blank: Introdu un nume de cartier
233
- too_long: Numele cartierului este prea lung (lungimea maximă este de 255
233
+ too_long: Numele cartierului este prea lung (lungimea maximă este de %{limit}
234
234
  caractere)
235
235
  contains_emojis: Numele cartierului nu poate conține emoji-uri
236
236
  contains_mathematical_symbols: Numele cartierului nu poate conține simboluri
@@ -247,3 +247,28 @@ ro:
247
247
  warnings:
248
248
  contains_too_many_words: Se recomandă ca numele cartierului să nu aibă
249
249
  mai mult de %{word_count} cuvinte
250
+ line2:
251
+ label:
252
+ default: Apartament, cameră etc.
253
+ optional: Apartament, cameră etc. (opțional)
254
+ errors:
255
+ blank: Introdu un apartament, o cameră etc.
256
+ too_long: A doua linie a adresei este prea lungă (lungimea maximă este
257
+ de %{limit} caractere)
258
+ contains_emojis: A doua linie de adresă nu poate conține emoji-uri
259
+ contains_mathematical_symbols: A doua linie de adresă nu poate conține
260
+ simboluri matematice
261
+ contains_restricted_characters: A doua linie de adresă poate conține numai
262
+ litere, cifre, caractere locale și caractere speciale
263
+ contains_too_many_words: A doua linie de adresă nu poate conține mai mult
264
+ de %{word_count} cuvinte
265
+ contains_html_tags: A doua linie de adresă nu poate conține etichete HTML.
266
+ contains_url: A doua linie de adresă nu poate conține adrese URL.
267
+ missing_building_number: Adaugă un număr de clădire, dacă ai unul.
268
+ street_unknown_for_zip: Introdu o denumire de stradă validă pentru %{zip}.
269
+ building_number_invalid: Numărul clădirii nu a putut fi găsit pentru %{street},
270
+ %{zip}.
271
+ unknown_for_address: Este posibil ca a doua linie de adresă să fie incorectă.
272
+ warnings:
273
+ contains_too_many_words: Se recomandă ca pentru a doua linie de adresă
274
+ să nu introduci mai mult de %{word_count} cuvinte
@@ -225,7 +225,7 @@ ru:
225
225
  errors:
226
226
  blank: Укажите район
227
227
  too_long: Название района слишком длинное (должно содержать не больше
228
- 255 символов)
228
+ %{limit} симв.)
229
229
  contains_emojis: Название района не может содержать емодзи
230
230
  contains_mathematical_symbols: Название района не может содержать математические
231
231
  символы
@@ -240,3 +240,27 @@ ru:
240
240
  warnings:
241
241
  contains_too_many_words: Рекомендуем указывать в поле названия района
242
242
  не более %{word_count} сл.
243
+ line2:
244
+ label:
245
+ default: Квартира, апартаменты и т. д.
246
+ optional: Квартира, апартаменты и т. д. (необязательно)
247
+ errors:
248
+ blank: Укажите номер квартиры, апартаментов и т. д.
249
+ too_long: Вторая строка адреса слишком длинная (должна содержать не больше
250
+ %{limit} симв.)
251
+ contains_emojis: Вторая строка адреса не может содержать емодзи
252
+ contains_mathematical_symbols: Вторая строка адреса не может содержать
253
+ математические символы
254
+ contains_restricted_characters: Поле «Вторая строка адреса» может содержать
255
+ только буквы, цифры, а также местные и специальные символы
256
+ contains_too_many_words: Вторая строка адреса не может превышать %{word_count} сл.
257
+ contains_html_tags: Вторая строка адреса не может содержать HTML-теги.
258
+ contains_url: Вторая строка адреса не может содержать URL-адреса.
259
+ missing_building_number: Укажите номер дома, если применимо.
260
+ street_unknown_for_zip: Укажите действительное название улицы для %{zip}.
261
+ building_number_invalid: 'Не удалось найти номер дома по этому адресу:
262
+ %{street}, %{zip}.'
263
+ unknown_for_address: Адрес во второй строке может быть указан неправильно.
264
+ warnings:
265
+ contains_too_many_words: Рекомендуем указывать во второй строке адреса
266
+ не более %{word_count} сл.
@@ -217,7 +217,7 @@ sk:
217
217
  optional: Sídlisko (voliteľné)
218
218
  errors:
219
219
  blank: Zadajte sídlisko
220
- too_long: Sídlisko je príliš dlhé (maximálne 255 znakov)
220
+ too_long: Sídlisko je príliš dlhé (maximálne %{limit} znakov)
221
221
  contains_emojis: Sídlisko nemôže obsahovať emotikony
222
222
  contains_mathematical_symbols: Sídlisko nemôže obsahovať matematické značky
223
223
  contains_restricted_characters: Sídlisko môže obsahovať len písmená, číslice,
@@ -232,3 +232,27 @@ sk:
232
232
  warnings:
233
233
  contains_too_many_words: 'Sídlisko by nemalo mať viac ako tento počet
234
234
  slov: %{word_count}'
235
+ line2:
236
+ label:
237
+ default: Apartmán, byt atď.
238
+ optional: Apartmán, byt atď. (voliteľné)
239
+ errors:
240
+ blank: Zadajte apartmán, byt atď.
241
+ too_long: Druhý riadok adresy je príliš dlhý (maximálne %{limit} znakov)
242
+ contains_emojis: Druhý riadok adresy nemôže obsahovať emotikony
243
+ contains_mathematical_symbols: Druhý riadok adresy nemôže obsahovať matematické
244
+ značky
245
+ contains_restricted_characters: Druhý riadok adresy môže obsahovať len
246
+ písmená, číslice, miestne znaky a špeciálne znaky
247
+ contains_too_many_words: 'Druhý riadok adresy nemôže mať viac ako tento
248
+ počet slov: %{word_count}'
249
+ contains_html_tags: Druhý riadok adresy nemôže obsahovať HTML značky.
250
+ contains_url: Druhý riadok adresy nemôže obsahovať URL adresy.
251
+ missing_building_number: Ak máte číslo budovy, pridajte ho.
252
+ street_unknown_for_zip: Zadajte platný názov ulice pre PSČ %{zip}.
253
+ building_number_invalid: Číslo budovy na ulici %{street} s PSČ %{zip}
254
+ sa nepodarilo nájsť.
255
+ unknown_for_address: Druhý riadok adresy môže byť nesprávny.
256
+ warnings:
257
+ contains_too_many_words: 'Druhý riadok adresy by nemal mať viac ako tento
258
+ počet slov: %{word_count}'
@@ -226,7 +226,7 @@ sl:
226
226
  optional: Soseska (izbirno)
227
227
  errors:
228
228
  blank: Vnesite sosesko
229
- too_long: Ime soseske je predolgo (največje dovoljeno št. znakov je 255)
229
+ too_long: Ime soseske je predolgo (največje dovoljeno št. znakov je %{limit})
230
230
  contains_emojis: Ime soseske ne sme vsebovati čustvenih simbolov
231
231
  contains_mathematical_symbols: Ime soseske ne sme vsebovati matematičnih
232
232
  simbolov
@@ -242,3 +242,29 @@ sl:
242
242
  warnings:
243
243
  contains_too_many_words: Ime soseske naj ne vsebuje več kot %{word_count}
244
244
  besed
245
+ line2:
246
+ label:
247
+ default: Št. stanovanja, apartmaja itd.
248
+ optional: Št. stanovanja, apartmaja itn. (izbirno)
249
+ errors:
250
+ blank: Vnesite št. stanovanja, apartmaja itn.
251
+ too_long: Naslov v drugi vrstici je predolg (največje dovoljeno št. znakov
252
+ je %{limit})
253
+ contains_emojis: Naslov v drugi vrstici ne sme vsebovati čustvenih simbolov
254
+ contains_mathematical_symbols: Naslov v drugi vrstici ne sme vsebovati
255
+ matematičnih simbolov
256
+ contains_restricted_characters: Naslov v drugi vrstici lahko vsebuje le
257
+ črke, številke, lokalne znake in posebne znake
258
+ contains_too_many_words: Naslov v drugi vrstici ne sme vsebovati več kot
259
+ %{word_count} besed
260
+ contains_html_tags: Naslov v drugi vrstici ne sme vsebovati oznak HTML.
261
+ contains_url: Naslov v drugi vrstici ne sme vsebovati naslovov URL.
262
+ missing_building_number: Dodajte hišno številko, če jo imate.
263
+ street_unknown_for_zip: Vnesite veljavno ime ulice za poštno številko
264
+ %{zip}.
265
+ building_number_invalid: Hišne številke ni bilo mogoče najti za ulico
266
+ %{street}, %{zip}.
267
+ unknown_for_address: Naslov v drugi vrstici morda ni pravilen.
268
+ warnings:
269
+ contains_too_many_words: Naslov v drugi vrstici naj ne vsebuje več kot
270
+ %{word_count} besed
@@ -218,7 +218,7 @@ sv:
218
218
  optional: Område (valfritt)
219
219
  errors:
220
220
  blank: Ange ett område
221
- too_long: Områdesnamnet är för långt (max. 255 tecken)
221
+ too_long: Områdesnamnet är för långt (max. %{limit} tecken)
222
222
  contains_emojis: Område får inte innehålla emojier
223
223
  contains_mathematical_symbols: Område får inte innehålla matematiska symboler
224
224
  contains_restricted_characters: Område får endast innehålla bokstäver,
@@ -233,3 +233,27 @@ sv:
233
233
  warnings:
234
234
  contains_too_many_words: Vi rekommenderar att området består av färre
235
235
  än %{word_count} ord
236
+ line2:
237
+ label:
238
+ default: Lägenhet, våning etc.
239
+ optional: Lägenhet, svit etc. (valfritt)
240
+ errors:
241
+ blank: Ange en lägenhet, våning etc.
242
+ too_long: Den andra adressraden är för lång (max. %{limit} tecken)
243
+ contains_emojis: Den andra adressraden får inte innehålla emojier
244
+ contains_mathematical_symbols: Den andra adressraden får inte innehålla
245
+ matematiska symboler
246
+ contains_restricted_characters: Den andra adressraden får endast innehålla
247
+ bokstäver, siffror, lokala tecken och specialtecken
248
+ contains_too_many_words: Den andra adressraden får inte innehålla fler
249
+ än %{word_count} ord
250
+ contains_html_tags: Den andra adressraden får inte innehålla HTML-taggar.
251
+ contains_url: Den andra adressraden får inte innehålla URL:er.
252
+ missing_building_number: Lägg till ett husnummer om du har ett.
253
+ street_unknown_for_zip: Ange ett giltigt gatunamn för %{zip}.
254
+ building_number_invalid: Vi kunde inte hitta husnumret för %{street},
255
+ %{zip}.
256
+ unknown_for_address: Den andra adressraden kan vara felaktig.
257
+ warnings:
258
+ contains_too_many_words: Vi rekommenderar att den andra adressraden består
259
+ av färre än %{word_count} ord
@@ -207,7 +207,7 @@ th:
207
207
  optional: สถานที่ใกล้เคียง (ไม่บังคับ)
208
208
  errors:
209
209
  blank: ป้อนชื่อสถานที่ใกล้เคียง
210
- too_long: ชื่อสถานที่ใกล้เคียงยาวเกินไป (สูงสุดคือ 255 อักขระ)
210
+ too_long: ชื่อสถานที่ใกล้เคียงยาวเกินไป (ต้องไม่เกิน %{limit} อักขระ)
211
211
  contains_emojis: ห้ามใส่อีโมจิในชื่อสถานที่ใกล้เคียง
212
212
  contains_mathematical_symbols: ห้ามใส่สัญลักษณ์ทางคณิตศาสตร์ในชื่อสถานที่ใกล้เคียง
213
213
  contains_restricted_characters: ชื่อสถานที่ใกล้เคียงต้องใช้เฉพาะตัวอักษร
@@ -222,3 +222,26 @@ th:
222
222
  warnings:
223
223
  contains_too_many_words: ชื่อสถานที่ใกล้เคียงควรมีความยาวน้อยกว่า %{word_count}
224
224
  คำ
225
+ line2:
226
+ label:
227
+ default: อะพาร์ตเมนต์ ห้องชุด เป็นต้น
228
+ optional: อพาร์ทเม้นท์ ห้องชุด เป็นต้น (ไม่บังคับ)
229
+ errors:
230
+ blank: ป้อนอะพาร์ตเมนต์ ห้องชุด ฯลฯ
231
+ too_long: ที่อยู่บรรทัดที่สองยาวเกินไป (สูงสุดคือ %{limit} อักขระ)
232
+ contains_emojis: สามารถใส่อิโมจิในที่อยู่บรรทัดที่สองได้
233
+ contains_mathematical_symbols: สามารถใส่สัญลักษณ์ทางคณิตศาสตร์ในที่อยู่บรรทัดที่สองได้
234
+ contains_restricted_characters: ที่อยู่บรรทัดที่สองสามารถประกอบด้วยตัวอักษร
235
+ ตัวเลข อักขระท้องถิ่น และอักขระพิเศษได้เท่านั้น
236
+ contains_too_many_words: ที่อยู่บรรทัดที่สองต้องมีไม่เกิน %{word_count}
237
+ คำ
238
+ contains_html_tags: สามารถใส่แท็ก HTML ในที่อยู่บรรทัดที่สองได้
239
+ contains_url: สามารถใส่ URL ในที่อยู่บรรทัดที่สองได้
240
+ missing_building_number: เพิ่มหมายเลขอาคาร หากมี
241
+ street_unknown_for_zip: ป้อนชื่อถนนที่ถูกต้องสำหรับ %{zip}
242
+ building_number_invalid: ไม่สามารถระบุตำแหน่งหมายเลขอาคารสำหรับ %{street},
243
+ %{zip} ได้
244
+ unknown_for_address: ที่อยู่บรรทัดที่สองอาจไม่ถูกต้อง
245
+ warnings:
246
+ contains_too_many_words: ที่อยู่บรรทัดที่สองไม่ควรมีความยาวเกิน %{word_count}
247
+ คำ
@@ -208,7 +208,7 @@ tr:
208
208
  optional: Mahalle (isteğe bağlı)
209
209
  errors:
210
210
  blank: Mahalle girin
211
- too_long: Mahalle adı çok uzun (maksimum 255 karakter)
211
+ too_long: Mahalle adı çok uzun (maksimum %{limit} karakter olmalıdır)
212
212
  contains_emojis: Mahalle adı emoji içeremez
213
213
  contains_mathematical_symbols: Mahalle adı matematiksel semboller içeremez
214
214
  contains_restricted_characters: Mahalle adı yalnızca harfler, sayılar,
@@ -222,3 +222,26 @@ tr:
222
222
  warnings:
223
223
  contains_too_many_words: Mahalle adında %{word_count} adetten az kelime
224
224
  olması önerilir
225
+ line2:
226
+ label:
227
+ default: Apartman, daire vb.
228
+ optional: Apartman, Daire vb. (isteğe bağlı)
229
+ errors:
230
+ blank: Apartman, daire vb. girin
231
+ too_long: İkinci adres satırı çok uzun (maksimum %{limit} karakter olmalıdır)
232
+ contains_emojis: İkinci adres satırı emoji içeremez
233
+ contains_mathematical_symbols: İkinci adres satırı matematiksel semboller
234
+ içeremez
235
+ contains_restricted_characters: İkinci adres satırı yalnızca harfler,
236
+ sayılar, yerel karakterler ve özel karakterler içerebilir
237
+ contains_too_many_words: İkinci adres satırı en fazla %{word_count} kelime
238
+ içerebilir
239
+ contains_html_tags: İkinci adres satırı HTML etiketleri içeremez.
240
+ contains_url: İkinci adres satırı URL içeremez.
241
+ missing_building_number: Varsa bina numaranızı ekleyin.
242
+ street_unknown_for_zip: "%{zip} için geçerli bir sokak adı girin."
243
+ building_number_invalid: "%{street} %{zip} için bina numarası bulunamadı."
244
+ unknown_for_address: İkinci adres satırı yanlış olabilir.
245
+ warnings:
246
+ contains_too_many_words: İkinci adres satırında %{word_count} adetten
247
+ az kelime olması önerilir
@@ -208,7 +208,7 @@ vi:
208
208
  optional: Khu phố (không bắt buộc)
209
209
  errors:
210
210
  blank: Nhập khu phố
211
- too_long: Khu phố quá dài (tối đa 255 ký tự)
211
+ too_long: Khu phố quá dài (tối đa %{limit} ký tự)
212
212
  contains_emojis: Khu phố không được chứa biểu tượng cảm xúc
213
213
  contains_mathematical_symbols: Khu phố không được chứa ký hiệu toán học
214
214
  contains_restricted_characters: Khu phố chỉ được chứa chữ cái, chữ số,
@@ -222,3 +222,26 @@ vi:
222
222
  unknown_for_address: Khu phố có thể không chính xác.
223
223
  warnings:
224
224
  contains_too_many_words: Khu phố nên có tối đa %{word_count} từ
225
+ line2:
226
+ label:
227
+ default: Căn hộ, dãy, v.v.
228
+ optional: Căn hộ, dãy, v.v. (không bắt buộc)
229
+ errors:
230
+ blank: Nhập căn hộ, dãy, v.v.
231
+ too_long: Dòng địa chỉ thứ hai quá dài (tối đa %{limit} ký tự)
232
+ contains_emojis: Dòng địa chỉ thứ hai không được chứa biểu tượng cảm xúc
233
+ contains_mathematical_symbols: Dòng địa chỉ thứ hai không được chứa ký
234
+ hiệu toán học
235
+ contains_restricted_characters: Dòng địa chỉ thứ hai chỉ được chứa chữ
236
+ cái, chữ số, ký tự địa phương và ký tự đặc biệt
237
+ contains_too_many_words: Dòng địa chỉ thứ hai chỉ được có tối đa %{word_count}
238
+ từ
239
+ contains_html_tags: Dòng địa chỉ thứ hai không được chứa thẻ HTML.
240
+ contains_url: Dòng địa chỉ thứ hai không được chứa URL.
241
+ missing_building_number: Thêm số tòa nhà nếu có.
242
+ street_unknown_for_zip: Nhập tên đường hợp lệ cho %{zip}.
243
+ building_number_invalid: Không thể định vị số tòa nhà cho %{street}, %{zip}.
244
+ unknown_for_address: Dòng địa chỉ thứ hai có thể không chính xác.
245
+ warnings:
246
+ contains_too_many_words: Dòng địa chỉ thứ hai nên có tối đa %{word_count}
247
+ từ
@@ -186,7 +186,7 @@ zh-CN:
186
186
  optional: 街区(选填)
187
187
  errors:
188
188
  blank: 输入街区
189
- too_long: 街区过长(最多包含 255 个字符)
189
+ too_long: 街区名过长(最多 %{limit} 个字符)
190
190
  contains_emojis: 街区名不能包含表情符号
191
191
  contains_mathematical_symbols: 街区名不能包含数学符号
192
192
  contains_restricted_characters: 街区名只能包含字母、数字、当地字符和特殊字符
@@ -198,3 +198,22 @@ zh-CN:
198
198
  unknown_for_address: 街区名可能不正确。
199
199
  warnings:
200
200
  contains_too_many_words: 建议街区名少于 %{word_count} 个字词
201
+ line2:
202
+ label:
203
+ default: 公寓、房间号等
204
+ optional: 公寓、房间号等(可选)
205
+ errors:
206
+ blank: 输入公寓、房间号等
207
+ too_long: 第二个地址行过长(最多 %{limit} 个字符)
208
+ contains_emojis: 第二个地址行不能包含表情符号
209
+ contains_mathematical_symbols: 第二个地址行不能包含数学符号
210
+ contains_restricted_characters: 第二个地址行只能包含字母、数字、当地字符和特殊字符
211
+ contains_too_many_words: 第二个地址行不能超过 %{word_count} 个字词
212
+ contains_html_tags: 第二个地址行不能包含 HTML 标记。
213
+ contains_url: 第二个地址行不能包含 URL。
214
+ missing_building_number: 添加大楼编号(如果有)。
215
+ street_unknown_for_zip: 输入 %{zip} 对应的有效街道名称。
216
+ building_number_invalid: 大楼编号与 %{street} 和 %{zip} 不匹配。
217
+ unknown_for_address: 第二个地址行可能不正确。
218
+ warnings:
219
+ contains_too_many_words: 建议第二个地址行少于 %{word_count} 个字词
@@ -186,7 +186,7 @@ zh-TW:
186
186
  optional: 鄰 (選填)
187
187
  errors:
188
188
  blank: 請輸入「鄰」
189
- too_long: "「鄰」過長 (最多 255 個字元)"
189
+ too_long: "「鄰」過長 (最多 %{limit} 個字元)"
190
190
  contains_emojis: "「鄰」不得包含表情符號"
191
191
  contains_mathematical_symbols: "「鄰」不得包含數學符號"
192
192
  contains_restricted_characters: "「鄰」僅可包含字母、數字、當地字元和特殊字元"
@@ -198,3 +198,22 @@ zh-TW:
198
198
  unknown_for_address: "「鄰」可能不正確。"
199
199
  warnings:
200
200
  contains_too_many_words: 建議「鄰」少於 %{word_count} 個字
201
+ line2:
202
+ label:
203
+ default: 公寓、套房等
204
+ optional: 公寓、套房等 (選填)
205
+ errors:
206
+ blank: 請輸入公寓、套房等
207
+ too_long: "「地址第二行」過長 (最多 %{limit} 個字元)"
208
+ contains_emojis: "「地址第二行」不得包含表情符號"
209
+ contains_mathematical_symbols: "「地址第二行」不得包含數學符號"
210
+ contains_restricted_characters: "「地址第二行」僅可包含字母、數字、當地字元和特殊字元"
211
+ contains_too_many_words: "「地址第二行」不得超過 %{word_count} 個字"
212
+ contains_html_tags: "「地址第二行」不得包含 HTML 標籤。"
213
+ contains_url: "「地址第二行」不得包含網址。"
214
+ missing_building_number: 如果您有建築物號碼,請新增建築物號碼。
215
+ street_unknown_for_zip: 請輸入 %{zip} 的有效街道名稱。
216
+ building_number_invalid: 在 %{zip},%{street} 找不到此建築物號碼。
217
+ unknown_for_address: "「地址第二行」可能並不正確。"
218
+ warnings:
219
+ contains_too_many_words: "「地址第二行」建議少於 %{word_count} 字"
@@ -14,6 +14,7 @@ module Worldwide
14
14
  :phone,
15
15
  :street_name,
16
16
  :street_number,
17
+ :line2,
17
18
  :neighborhood
18
19
 
19
20
  def initialize(
@@ -29,6 +30,7 @@ module Worldwide
29
30
  phone: nil,
30
31
  street_name: nil,
31
32
  street_number: nil,
33
+ line2: nil,
32
34
  neighborhood: nil
33
35
  )
34
36
  @first_name = first_name
@@ -43,6 +45,7 @@ module Worldwide
43
45
  @phone = phone
44
46
  @street_name = street_name
45
47
  @street_number = street_number
48
+ @line2 = line2
46
49
  @neighborhood = neighborhood
47
50
  end
48
51
 
@@ -146,23 +149,23 @@ module Worldwide
146
149
  def concatenated_address1
147
150
  return address1 if address1.present?
148
151
 
149
- additional_fields = region.additional_address_fields["address1"] || []
152
+ additional_fields = region.combined_address_format["address1"] || []
150
153
  concatenate_fields(additional_fields)
151
154
  end
152
155
 
153
156
  def concatenated_address2
154
- additional_fields = region.additional_address_fields["address2"] || []
157
+ additional_fields = region.combined_address_format["address2"] || []
155
158
  concatenate_fields(additional_fields)
156
159
  end
157
160
 
158
161
  def split_address1
159
- additional_fields = region.additional_address_fields["address1"] || []
162
+ additional_fields = region.combined_address_format["address1"] || []
160
163
  split_fields_arr = address1&.split(RESERVED_DELIMITER) || []
161
164
  split_fields(additional_fields, split_fields_arr)
162
165
  end
163
166
 
164
167
  def split_address2
165
- additional_fields = region.additional_address_fields["address2"] || []
168
+ additional_fields = region.combined_address_format["address2"] || []
166
169
  split_fields_arr = address2&.split(RESERVED_DELIMITER) || []
167
170
  split_fields(additional_fields, split_fields_arr)
168
171
  end
@@ -14,6 +14,7 @@ module Worldwide
14
14
  :street_name,
15
15
  :street_number,
16
16
  :address2,
17
+ :line2,
17
18
  :neighborhood,
18
19
  :city,
19
20
  :province,
@@ -34,6 +34,7 @@ module Worldwide
34
34
  :zip_regex,
35
35
  :zip_requirement,
36
36
  :additional_address_fields,
37
+ :combined_address_format,
37
38
  ]
38
39
 
39
40
  # A region may have more than one parent.
@@ -197,9 +198,12 @@ module Worldwide
197
198
  # If true, then the province is optional for addresses in this region.
198
199
  attr_accessor :province_optional
199
200
 
200
- # A hash of additional address fields and the rules for concatening them into the standard fields
201
+ # An array of the additional address fields that are defined for this region
201
202
  attr_accessor :additional_address_fields
202
203
 
204
+ # A hash of the rules for concatening the additional address fields into the standard fields
205
+ attr_accessor :combined_address_format
206
+
203
207
  def initialize(
204
208
  alpha_three: nil,
205
209
  continent: false,
@@ -235,7 +239,8 @@ module Worldwide
235
239
  @tax_rate = tax_rate
236
240
  @use_zone_code_as_short_name = use_zone_code_as_short_name
237
241
 
238
- @additional_address_fields = {}
242
+ @additional_address_fields = []
243
+ @combined_address_format = {}
239
244
  @building_number_required = false
240
245
  @building_number_may_be_in_address2 = false
241
246
  @currency = nil
@@ -414,6 +419,21 @@ module Worldwide
414
419
  end
415
420
  end
416
421
 
422
+ # is a neighborhood required for this region?
423
+ def neighborhood_required?
424
+ additional_field_required?("neighborhood")
425
+ end
426
+
427
+ # is a street name required for this region?
428
+ def street_name_required?
429
+ additional_field_required?("streetName")
430
+ end
431
+
432
+ # is a street number required for this region?
433
+ def street_number_required?
434
+ additional_field_required?("streetNumber")
435
+ end
436
+
417
437
  # is the given postal code value valid for this region?
418
438
  def valid_zip?(zip, partial_match: false)
419
439
  normalized = Zip.normalize(
@@ -441,6 +461,11 @@ module Worldwide
441
461
  end
442
462
  end
443
463
 
464
+ def additional_field_required?(field_name)
465
+ field = additional_address_fields.find { |f| f["name"] == field_name }
466
+ field ? !!field["required"] : false
467
+ end
468
+
444
469
  def answers_to_cldr_code(search_code)
445
470
  return false if Util.blank?(search_code) || Util.blank?(cldr_code)
446
471
  return true if search_code.casecmp(cldr_code).zero?
@@ -95,7 +95,8 @@ module Worldwide
95
95
  end
96
96
 
97
97
  def apply_territory_attributes(region, spec)
98
- region.additional_address_fields = spec["additional_address_fields"] || {}
98
+ region.additional_address_fields = spec["additional_address_fields"] || []
99
+ region.combined_address_format = spec["combined_address_format"] || {}
99
100
  region.building_number_required = spec["building_number_required"] || false
100
101
  region.building_number_may_be_in_address2 = spec["building_number_may_be_in_address2"] || false
101
102
  currency_code = spec["currency"]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Worldwide
4
- VERSION = "0.13.0"
4
+ VERSION = "0.15.0"
5
5
  end
data/worldwide.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.metadata["changelog_uri"] = "https://github.com/Shopify/worldwide/blob/main/CHANGELOG.md"
19
19
 
20
20
  spec.files = %x(git ls-files -z).split("\x0").reject do |f|
21
- f.match(%r{^(rake|test|spec|features)/})
21
+ f.match(%r{^(rake|test|spec|features|lang/typescript)/})
22
22
  end
23
23
  spec.bindir = "exe"
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worldwide
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-27 00:00:00.000000000 Z
11
+ date: 2024-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -62,12 +62,16 @@ extra_rdoc_files: []
62
62
  files:
63
63
  - ".github/CODE_OF_CONDUCT.md"
64
64
  - ".github/CONTRIBUTING.md"
65
+ - ".github/dependabot.yml"
65
66
  - ".github/pull_request_template.md"
67
+ - ".github/workflows/ci-typescript.yml"
66
68
  - ".github/workflows/ci.yml"
67
69
  - ".github/workflows/cla.yml"
70
+ - ".github/workflows/npm-release.yml"
68
71
  - ".gitignore"
69
72
  - ".rubocop.yml"
70
73
  - ".ruby-version"
74
+ - ".vscode/settings.json"
71
75
  - CHANGELOG.md
72
76
  - Gemfile
73
77
  - Gemfile.lock