patch_apple_pdf_localizations.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #!/usr/bin/env python3
  2. """Patch Apple and PDF strings so brand/format terms are localized (not left in English)."""
  3. import os
  4. import re
  5. base = os.path.join(os.path.dirname(__file__), "..", "App for Indeed")
  6. KEYS = [
  7. "There was nothing to restore for this Apple ID.",
  8. "CV Maker, profiles & PDF export",
  9. "Export PDF…",
  10. "Layout matches the CV Maker thumbnail for this template. Export a PDF that matches what you see here (fonts, columns, colours, and rules).",
  11. "The résumé could not be rendered to PDF (empty output). Try scrolling the preview so it lays out, then export again.",
  12. "Couldn’t save PDF",
  13. "We couldn't save the PDF. Try again or choose a different folder.",
  14. "This disk is read-only. Choose another folder to save your PDF.",
  15. ]
  16. # Values per locale (same key order as KEYS)
  17. LOCALE_VALUES = {
  18. "ar": [
  19. "لا يوجد شيء لاستعادته لمعرّف أبل هذا.",
  20. "صانع السيرة الذاتية، الملفات الشخصية وتصدير بي دي إف",
  21. "تصدير بي دي إف…",
  22. "يتطابق التخطيط مع الصورة المصغرة لصانع السيرة الذاتية لهذا القالب. قم بتصدير ملف بي دي إف يطابق ما تراه هنا (الخطوط، الأعمدة، الألوان، والقواعد).",
  23. "تعذر تحويل السيرة الذاتية إلى بي دي إف (مخرجات فارغة). حاول تمرير المعاينة حتى يتم ترتيبها، ثم قم بالتصدير مرة أخرى.",
  24. "تعذر حفظ ملف بي دي إف",
  25. "تعذر حفظ ملف بي دي إف. حاول مرة أخرى أو اختر مجلداً مختلفاً.",
  26. "هذا القرص للقراءة فقط. اختر مجلداً آخر لحفظ ملف بي دي إف.",
  27. ],
  28. "de": [
  29. "Für diese Apple-ID gab es nichts wiederherzustellen.",
  30. "Lebenslauf-Ersteller, Profile und Export portabler Dokumente",
  31. "Portables Dokument exportieren…",
  32. "Das Layout entspricht der Miniaturansicht des Lebenslauf-Erstellers für diese Vorlage. Exportieren Sie ein portables Dokument, das dem hier Gesehenen entspricht (Schriften, Spalten, Farben und Regeln).",
  33. "Der Lebenslauf konnte nicht als portables Dokument gerendert werden (leere Ausgabe). Versuchen Sie, in der Vorschau zu scrollen, damit sie sich richtig anordnet, und exportieren Sie dann erneut.",
  34. "Portables Dokument konnte nicht gespeichert werden",
  35. "Das portable Dokument konnte nicht gespeichert werden. Versuchen Sie es erneut oder wählen Sie einen anderen Ordner.",
  36. "Dieses Laufwerk ist schreibgeschützt. Wählen Sie einen anderen Ordner für Ihr portables Dokument.",
  37. ],
  38. "el": [
  39. "Δεν υπήρχε τίποτα για επαναφορά για αυτό το αναγνωριστικό Απόλ.",
  40. "Δημιουργός Βιογραφικού, προφίλ και εξαγωγή φορητού εγγράφου",
  41. "Εξαγωγή φορητού εγγράφου…",
  42. "Η διάταξη ταιριάζει με τη μικρογραφία του Δημιουργού Βιογραφικού για αυτό το πρότυπο. Εξάγετε ένα φορητό έγγραφο που ταιριάζει με αυτό που βλέπετε εδώ (γραμματοσειρές, στήλες, χρώματα και γραμμές).",
  43. "Δεν ήταν δυνατή η απόδοση του βιογραφικού ως φορητό έγγραφο (κενή έξοδος). Δοκιμάστε να κυλίσετε την προεπισκόπηση για να διαμορφωθεί και στη συνέχεια εξάγετε ξανά.",
  44. "Αδυναμία αποθήκευσης φορητού εγγράφου",
  45. "Δεν ήταν δυνατή η αποθήκευση του φορητού εγγράφου. Δοκιμάστε ξανά ή επιλέξτε διαφορετικό φάκελο.",
  46. "Αυτός ο δίσκος είναι μόνο για ανάγνωση. Επιλέξτε άλλο φάκελο για να αποθηκεύσετε το φορητό σας έγγραφο.",
  47. ],
  48. "es": [
  49. "No había nada que restaurar para este identificador de Apple.",
  50. "Creador de CV, perfiles y exportación de documentos portátiles",
  51. "Exportar documento portátil…",
  52. "El diseño coincide con la miniatura del Creador de CV para esta plantilla. Exporta un documento portátil que coincida con lo que ves aquí (fuentes, columnas, colores y líneas).",
  53. "No se pudo renderizar el CV como documento portátil (salida vacía). Intenta desplazar la vista previa para que se organice y luego exporta de nuevo.",
  54. "No se pudo guardar el documento portátil",
  55. "No se pudo guardar el documento portátil. Inténtalo de nuevo o elige una carpeta diferente.",
  56. "Este disco es de solo lectura. Elige otra carpeta para guardar tu documento portátil.",
  57. ],
  58. "es-MX": [
  59. "No había nada que restaurar para este identificador de Apple.",
  60. "Creador de CV, perfiles y exportación de documentos portátiles",
  61. "Exportar documento portátil…",
  62. "El diseño coincide con la miniatura del Creador de CV para esta plantilla. Exporta un documento portátil que coincida con lo que ves aquí (fuentes, columnas, colores y líneas).",
  63. "No se pudo convertir el CV a documento portátil (salida vacía). Intenta desplazar la vista previa para que se organice y luego exporta de nuevo.",
  64. "No se pudo guardar el documento portátil",
  65. "No se pudo guardar el documento portátil. Inténtalo de nuevo o elige una carpeta diferente.",
  66. "Este disco es de solo lectura. Elige otra carpeta para guardar tu documento portátil.",
  67. ],
  68. "fi": [
  69. "Tälle Apple-tunnukselle ei ollut mitään palautettavaa.",
  70. "CV-tekijä, profiilit ja siirrettävän asiakirjan vienti",
  71. "Vie siirrettävä asiakirja…",
  72. "Asettelu vastaa CV-tekijän pikkukuvaa tälle mallille. Vie siirrettävä asiakirja, joka vastaa sitä, mitä näet tässä (fontit, sarakkeet, värit ja viivat).",
  73. "Ansioluetteloa ei voitu muuntaa siirrettäväksi asiakirjaksi (tyhjä tulos). Yritä vierittää esikatselua, jotta se asettuu, ja vie sitten uudelleen.",
  74. "Siirrettävää asiakirjaa ei voitu tallentaa",
  75. "Siirrettävää asiakirjaa ei voitu tallentaa. Yritä uudelleen tai valitse toinen kansio.",
  76. "Tämä levy on kirjoitussuojattu. Valitse toinen kansio tallentaaksesi siirrettävän asiakirjasi.",
  77. ],
  78. "fr": [
  79. "Il n'y avait rien à restaurer pour cet identifiant Apple.",
  80. "Créateur de CV, profils et export de documents portables",
  81. "Exporter en document portable…",
  82. "La mise en page correspond à la miniature du Créateur de CV pour ce modèle. Exportez un document portable qui correspond à ce que vous voyez ici (polices, colonnes, couleurs et règles).",
  83. "Le CV n'a pas pu être converti en document portable (sortie vide). Essayez de faire défiler l'aperçu pour qu'il se mette en page, puis exportez à nouveau.",
  84. "Impossible d'enregistrer le document portable",
  85. "Impossible d'enregistrer le document portable. Réessayez ou choisissez un autre dossier.",
  86. "Ce disque est en lecture seule. Choisissez un autre dossier pour enregistrer votre document portable.",
  87. ],
  88. "fr-CA": [
  89. "Il n'y avait rien à restaurer pour cet identifiant Apple.",
  90. "Créateur de CV, profils et export de documents portables",
  91. "Exporter en document portable…",
  92. "La mise en page correspond à la vignette du Créateur de CV pour ce modèle. Exportez un document portable qui correspond à ce que vous voyez ici (polices, colonnes, couleurs et règles).",
  93. "Le CV n'a pas pu être converti en document portable (sortie vide). Essayez de faire défiler l'aperçu pour qu'il se mette en page, puis exportez à nouveau.",
  94. "Impossible d'enregistrer le document portable",
  95. "Impossible d'enregistrer le document portable. Réessayez ou choisissez un autre dossier.",
  96. "Ce disque est en lecture seule. Choisissez un autre dossier pour enregistrer votre document portable.",
  97. ],
  98. "he": [
  99. "לא היה מה לשחזר עבור מזהה אפל זה.",
  100. "יוצר קורות חיים, פרופילים וייצוא פי־די־אף",
  101. "ייצוא פי־די־אף…",
  102. "הפריסה תואמת את התמונה הממוזערת של יוצר קורות חיים עבור תבנית זו. ייצא קובץ פי־די־אף שתואם את מה שאתה רואה כאן (גופנים, עמודות, צבעים וקווים).",
  103. "לא ניתן היה לעבד את קורות החיים לפי־די־אף (פלט ריק). נסה לגלול בתצוגה המקדימה כדי שתפרוס, ולאחר מכן ייצא שוב.",
  104. "לא ניתן לשמור קובץ פי־די־אף",
  105. "לא הצלחנו לשמור את קובץ הפי־די־אף. נסה שוב או בחר תיקיה אחרת.",
  106. "דיסק זה לקריאה בלבד. בחר תיקיה אחרת כדי לשמור את קובץ הפי־די־אף שלך.",
  107. ],
  108. "it": [
  109. "Non c'era nulla da ripristinare per questo ID Apple.",
  110. "Creatore CV, profili ed esportazione di documenti portatili",
  111. "Esporta documento portatile…",
  112. "Il layout corrisponde alla miniatura del Creatore CV per questo modello. Esporta un documento portatile che corrisponde a ciò che vedi qui (font, colonne, colori e linee).",
  113. "Impossibile renderizzare il CV come documento portatile (output vuoto). Prova a scorrere l'anteprima per farlo impaginare, quindi esporta di nuovo.",
  114. "Impossibile salvare il documento portatile",
  115. "Impossibile salvare il documento portatile. Riprova o scegli una cartella diversa.",
  116. "Questo disco è di sola lettura. Scegli un'altra cartella per salvare il tuo documento portatile.",
  117. ],
  118. "ko": [
  119. "이 애플 계정에 복원할 구독이 없습니다.",
  120. "이력서 제작기, 프로필 및 피디에프보내기",
  121. "피디에프보내기…",
  122. "레이아웃이 이 템플릿의 이력서 제작기 썸네일과 일치합니다. 여기에서 보는 내용(글꼴, 열, 색상 및 선)과 일치하는 피디에프를보냅니다.",
  123. "이력서를 피디에프로 렌더링할 수 없습니다(빈 출력). 미리보기를 스크롤하여 레이아웃을 잡은 후 다시보내세요.",
  124. "피디에프를 저장할 수 없음",
  125. "피디에프를 저장할 수 없습니다. 다시 시도하거나 다른 폴더를 선택하세요.",
  126. "이 디스크는 읽기 전용입니다. 피디에프를 저장할 다른 폴더를 선택하세요.",
  127. ],
  128. "nb": [
  129. "Det var ingenting å gjenopprette for denne Apple-kontoen.",
  130. "CV-maker, profiler og eksport av bærbare dokumenter",
  131. "Eksporter bærbart dokument…",
  132. "Oppsettet samsvarer med CV-makerens miniatyrbilde for denne malen. Eksporter et bærbart dokument som samsvarer med det du ser her (fonter, kolonner, farger og linjer).",
  133. "CV-et kunne ikke gjengis som bærbart dokument (tom utgang). Prøv å rulle gjennom forhåndsvisningen slik at den legger seg, og eksporter deretter på nytt.",
  134. "Kunne ikke lagre bærbart dokument",
  135. "Vi kunne ikke lagre det bærbare dokumentet. Prøv igjen eller velg en annen mappe.",
  136. "Denne disken er skrivebeskyttet. Velg en annen mappe for å lagre ditt bærbare dokument.",
  137. ],
  138. "nl": [
  139. "Er was niets te herstellen voor deze Apple-ID.",
  140. "CV-maker, profielen en export van draagbare documenten",
  141. "Draagbaar document exporteren…",
  142. "Lay-out komt overeen met de miniatuur van de CV-maker voor dit sjabloon. Exporteer een draagbaar document dat overeenkomt met wat u hier ziet (lettertypen, kolommen, kleuren en lijnen).",
  143. "Het CV kon niet worden weergegeven als draagbaar document (lege uitvoer). Probeer door de preview te scrollen zodat het wordt opgemaakt en exporteer opnieuw.",
  144. "Kon draagbaar document niet opslaan",
  145. "We konden het draagbare document niet opslaan. Probeer het opnieuw of kies een andere map.",
  146. "Deze schijf is alleen-lezen. Kies een andere map om uw draagbare document op te slaan.",
  147. ],
  148. "pl": [
  149. "Nie było nic do przywrócenia dla tego konta Apple.",
  150. "Kreator CV, profile i eksport przenośnych dokumentów",
  151. "Eksportuj przenośny dokument…",
  152. "Układ odpowiada miniaturowi Kreatora CV dla tego szablonu. Eksportuj przenośny dokument, który odpowiada temu, co widzisz tutaj (czcionki, kolumny, kolory i linie).",
  153. "Nie można wyrenderować CV jako przenośnego dokumentu (puste wyjście). Spróbuj przewinąć podgląd, aby się ułożył, a następnie wyeksportuj ponownie.",
  154. "Nie można zapisać przenośnego dokumentu",
  155. "Nie można zapisać przenośnego dokumentu. Spróbuj ponownie lub wybierz inny folder.",
  156. "Ten dysk jest tylko do odczytu. Wybierz inny folder, aby zapisać swój przenośny dokument.",
  157. ],
  158. "pt-BR": [
  159. "Não havia nada para restaurar para este ID Apple.",
  160. "Criador de Currículo, perfis e exportação de documentos portáteis",
  161. "Exportar documento portátil…",
  162. "O layout corresponde à miniatura do Criador de Currículo para este modelo. Exporte um documento portátil que corresponda ao que você vê aqui (fontes, colunas, cores e linhas).",
  163. "O currículo não pôde ser convertido em documento portátil (saída vazia). Tente rolar a prévia para que ele se organize e exporte novamente.",
  164. "Não foi possível salvar o documento portátil",
  165. "Não foi possível salvar o documento portátil. Tente novamente ou escolha uma pasta diferente.",
  166. "Este disco é somente leitura. Escolha outra pasta para salvar seu documento portátil.",
  167. ],
  168. "ru": [
  169. "Нечего восстанавливать для этой учётной записи Эпл.",
  170. "Создание резюме, профили и экспорт в формате ПДФ",
  171. "Экспорт ПДФ…",
  172. "Макет соответствует миниатюре Создания резюме для этого шаблона. Экспортируйте файл ПДФ, соответствующий тому, что вы видите здесь (шрифты, колонки, цвета и линии).",
  173. "Не удалось преобразовать резюме в ПДФ (пустой вывод). Попробуйте прокрутить предпросмотр, чтобы оно выстроилось, затем экспортируйте снова.",
  174. "Не удалось сохранить ПДФ",
  175. "Не удалось сохранить ПДФ. Повторите попытку или выберите другую папку.",
  176. "Этот диск доступен только для чтения. Выберите другую папку для сохранения ПДФ.",
  177. ],
  178. "sv": [
  179. "Det fanns inget att återställa för detta Apple-ID.",
  180. "CV-skapare, profiler och export av bärbara dokument",
  181. "Exportera bärbart dokument…",
  182. "Layouten matchar CV-skaparens miniatyrbild för den här mallen. Exportera ett bärbart dokument som matchar det du ser här (typsnitt, kolumner, färger och regler).",
  183. "CV:t kunde inte renderas som bärbart dokument (tom utdata). Försök rulla förhandsvisningen så att den lägger ut sig, exportera sedan igen.",
  184. "Kunde inte spara bärbart dokument",
  185. "Vi kunde inte spara det bärbara dokumentet. Försök igen eller välj en annan mapp.",
  186. "Disken är skrivskyddad. Välj en annan mapp för ditt bärbare dokument.",
  187. ],
  188. "uk": [
  189. "Немає нічого для відновлення для цього облікового запису Епл.",
  190. "Створення резюме, профілі та експорт у форматі ПДФ",
  191. "Експортувати ПДФ…",
  192. "Макет відповідає мініатюрі Створення резюме для цього шаблону. Експортуйте файл ПДФ, який відповідає тому, що ви бачите тут (шрифти, колонки, кольори та лінії).",
  193. "Не вдалося перетворити резюме на ПДФ (порожній вихід). Спробуйте прокрутити попередній перегляд, щоб воно вибудувалося, а потім експортуйте знову.",
  194. "Не вдалося зберегти ПДФ",
  195. "Не вдалося зберегти ПДФ. Спробуйте ще раз або виберіть іншу теку.",
  196. "Цей диск доступний лише для читання. Виберіть іншу теку, щоб зберегти ПДФ.",
  197. ],
  198. "vi": [
  199. "Không có gì để khôi phục cho mã định danh Áp-pồ này.",
  200. "Tạo CV, hồ sơ và xuất tài liệu di động",
  201. "Xuất tài liệu di động…",
  202. "Bố cục khớp với hình thu nhỏ của Trình tạo CV cho mẫu này. Xuất tài liệu di động khớp với những gì bạn thấy ở đây (phông chữ, cột, màu sắc và đường kẻ).",
  203. "Không thể kết xuất CV thành tài liệu di động (đầu ra trống). Thử cuộn trong phần xem trước để bố cục hiển thị, sau đó xuất lại.",
  204. "Không thể lưu tài liệu di động",
  205. "Không thể lưu tài liệu di động. Hãy thử lại hoặc chọn một thư mục khác.",
  206. "Ổ đĩa này chỉ đọc. Hãy chọn thư mục khác để lưu tài liệu di động của bạn.",
  207. ],
  208. "zh-Hans": [
  209. "此苹果账户没有可恢复的内容。",
  210. "简历制作器、个人资料和便携式文档导出",
  211. "导出便携式文档…",
  212. "布局与此模板的简历制作器缩略图匹配。导出与您在此处看到的内容匹配的便携式文档(字体、列、颜色和规则)。",
  213. "无法将简历渲染为便携式文档(输出为空)。尝试滚动预览使其布局完整,然后再次导出。",
  214. "无法保存便携式文档",
  215. "无法保存便携式文档。请重试或选择其他文件夹。",
  216. "此磁盘为只读。请选择其他文件夹保存便携式文档。",
  217. ],
  218. "zh-Hant": [
  219. "此蘋果帳號沒有可回復的內容。",
  220. "履歷製作器、個人資料和可攜式文件匯出",
  221. "匯出可攜式文件…",
  222. "佈局與此範本的履歷製作器縮圖匹配。匯出與您在此處看到的內容匹配的可攜式文件(字型、欄、顏色和規則)。",
  223. "無法將履歷轉譯為可攜式文件(輸出為空)。嘗試捲動預覽使其佈局完整,然後再次匯出。",
  224. "無法儲存可攜式文件",
  225. "無法儲存可攜式文件。請再試一次或選擇其他資料夾。",
  226. "此磁碟為唯讀。請選擇其他資料夾儲存可攜式文件。",
  227. ],
  228. }
  229. def set_key(content: str, key: str, value: str) -> str:
  230. esc_key = key.replace("\\", "\\\\").replace('"', '\\"').replace("\n", "\\n")
  231. esc_val = value.replace("\\", "\\\\").replace('"', '\\"').replace("\n", "\\n")
  232. pattern = re.compile(r'"' + re.escape(esc_key) + r'"\s*=\s*"(?:\\.|[^"\\])*"\s*;')
  233. repl = f'"{esc_key}" = "{esc_val}";'
  234. if pattern.search(content):
  235. return pattern.sub(repl, content, count=1)
  236. return content.rstrip() + f'\n"{esc_key}" = "{esc_val}";\n'
  237. def main():
  238. for loc, values in LOCALE_VALUES.items():
  239. if len(values) != len(KEYS):
  240. raise ValueError(f"{loc}: expected {len(KEYS)} values, got {len(values)}")
  241. path = os.path.join(base, f"{loc}.lproj", "Localizable.strings")
  242. with open(path, encoding="utf-8") as f:
  243. content = f.read()
  244. for key, val in zip(KEYS, values):
  245. content = set_key(content, key, val)
  246. with open(path, "w", encoding="utf-8") as f:
  247. f.write(content)
  248. print(f"Patched {loc}: {len(KEYS)} Apple/PDF keys")
  249. if __name__ == "__main__":
  250. main()