From 12fdc277f8603720e845719069e07991c3a63ce1 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Tue, 26 Mar 2024 23:09:29 +0100 Subject: [PATCH 1/5] chore: drop unused method --- frappe/core/doctype/language/language.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/frappe/core/doctype/language/language.py b/frappe/core/doctype/language/language.py index 9856573740..6d73795f0b 100644 --- a/frappe/core/doctype/language/language.py +++ b/frappe/core/doctype/language/language.py @@ -47,17 +47,6 @@ def validate_with_regex(name, label): ) -def export_languages_json(): - """Export list of all languages""" - languages = frappe.get_all("Language", fields=["name", "language_name"]) - languages = [{"name": d.language_name, "code": d.name} for d in languages] - - languages.sort(key=lambda a: a["code"]) - - with open(frappe.get_app_path("frappe", "geo", "languages.json"), "w") as f: - f.write(frappe.as_json(languages)) - - def sync_languages(): """Sync frappe/geo/languages.json with Language""" with open(frappe.get_app_path("frappe", "geo", "languages.json")) as f: From 9fe11241eee1c56118a6cfda5f4e1839292ffc4e Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Tue, 26 Mar 2024 23:53:25 +0100 Subject: [PATCH 2/5] chore: remove old patch No longer needed, has been there since v8. Removed so we don't have to maintain it. --- frappe/core/doctype/language/language.py | 9 --------- frappe/patches.txt | 1 - 2 files changed, 10 deletions(-) diff --git a/frappe/core/doctype/language/language.py b/frappe/core/doctype/language/language.py index 6d73795f0b..df08c97425 100644 --- a/frappe/core/doctype/language/language.py +++ b/frappe/core/doctype/language/language.py @@ -62,12 +62,3 @@ def sync_languages(): "enabled": 1, } ).insert() - - -def update_language_names(): - """Update frappe/geo/languages.json names (for use via patch)""" - with open(frappe.get_app_path("frappe", "geo", "languages.json")) as f: - data = json.loads(f.read()) - - for l in data: - frappe.db.set_value("Language", l["code"], "language_name", l["name"]) diff --git a/frappe/patches.txt b/frappe/patches.txt index 36dc85102b..1507a00fa5 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -43,7 +43,6 @@ execute:frappe.db.sql("delete from tabSessions where user is null") execute:frappe.delete_doc("DocType", "Backup Manager") execute:frappe.permissions.reset_perms("Web Page") execute:frappe.db.sql("delete from `tabWeb Page` where ifnull(template_path, '')!=''") -execute:frappe.core.doctype.language.language.update_language_names() # 2017-04-12 execute:frappe.db.set_value("Print Settings", "Print Settings", "add_draft_heading", 1) execute:frappe.db.set_default('language', '') execute:frappe.db.sql("update tabCommunication set communication_date = creation where time(communication_date) = 0") From 0e573fc77ea5e8f8197886001349172b9e75fe9a Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Wed, 27 Mar 2024 00:18:36 +0100 Subject: [PATCH 3/5] feat: move languages to CSV file, add enabled property Only enable supported laguages. --- frappe/commands/translate.py | 2 +- frappe/core/doctype/language/language.py | 23 +- frappe/geo/languages.csv | 80 ++++++ frappe/geo/languages.json | 330 ----------------------- frappe/gettext/translate.py | 2 +- 5 files changed, 91 insertions(+), 346 deletions(-) create mode 100644 frappe/geo/languages.csv delete mode 100644 frappe/geo/languages.json diff --git a/frappe/commands/translate.py b/frappe/commands/translate.py index 361a19aee2..fde4a3939e 100644 --- a/frappe/commands/translate.py +++ b/frappe/commands/translate.py @@ -39,7 +39,7 @@ def new_language(context, lang_code, app): frappe.translate.write_translations_file(app, lang_code) print(f"File created at ./apps/{app}/{app}/translations/{lang_code}.csv") - print("You will need to add the language in frappe/geo/languages.json, if you haven't done it already.") + print("You will need to add the language in frappe/geo/languages.csv, if you haven't done it already.") @click.command("get-untranslated") diff --git a/frappe/core/doctype/language/language.py b/frappe/core/doctype/language/language.py index df08c97425..57a2ccf690 100644 --- a/frappe/core/doctype/language/language.py +++ b/frappe/core/doctype/language/language.py @@ -1,7 +1,6 @@ # Copyright (c) 2015, Frappe Technologies and contributors # License: MIT. See LICENSE -import json import re import frappe @@ -48,17 +47,13 @@ def validate_with_regex(name, label): def sync_languages(): - """Sync frappe/geo/languages.json with Language""" - with open(frappe.get_app_path("frappe", "geo", "languages.json")) as f: - data = json.loads(f.read()) + """Create Language records from frappe/geo/languages.csv""" + from csv import DictReader - for l in data: - if not frappe.db.exists("Language", l["code"]): - frappe.get_doc( - { - "doctype": "Language", - "language_code": l["code"], - "language_name": l["name"], - "enabled": 1, - } - ).insert() + with open(frappe.get_app_path("frappe", "geo", "languages.csv")) as f: + reader = DictReader(f) + for row in reader: + if not frappe.db.exists("Language", row["language_code"]): + doc = frappe.new_doc("Language") + doc.update(row) + doc.insert() diff --git a/frappe/geo/languages.csv b/frappe/geo/languages.csv new file mode 100644 index 0000000000..b3cfa5178f --- /dev/null +++ b/frappe/geo/languages.csv @@ -0,0 +1,80 @@ +language_code,language_name,enabled +af,Afrikaans,0 +am,አማርኛ,0 +ar,العربية,1 +bg,Български,0 +bn,বাংলা,0 +bo,བོད་སྐད་,0 +bs,Bosanski,0 +ca,Català,0 +cs,Čeština,0 +da,Dansk,0 +de,Deutsch,1 +el,Ελληνικά,0 +en,English,0 +en-GB,English (United Kingdom),0 +en-US,English (United States),0 +es,Español,1 +es-AR,Español (Argentina),0 +es-BO,Español (Bolivia),0 +es-CL,Español (Chile),0 +es-CO,Español (Colombia),0 +es-DO,Español (República Dominicana),0 +es-EC,Español (Ecuador),0 +es-GT,Español (Guatemala),0 +es-MX,Español (México),0 +es-NI,Español (Nicaragua),0 +es-PE,Español (Perú),0 +et,Eesti,0 +fa,فارسی,1 +fi,Suomi,0 +fil,Filipino,0 +fr,Français,1 +gu,ગુજરાતી,0 +he,עברית,0 +hi,हिन्दी,0 +hr,Hrvatski,0 +hu,Magyar,0 +id,Indonesia,0 +is,Íslenska,0 +it,Italiano,0 +ja,日本語,0 +km,ខ្មែរ,0 +kn,ಕನ್ನಡ,0 +ko,한국어,0 +ku,Kurdî,0 +lo,ລາວ,0 +lt,Lietuvių,0 +lv,Latviešu,0 +mk,Македонски,0 +ml,മലയാളം,0 +mn,Монгол,0 +mr,मराठी,0 +ms,Melayu,0 +my,မြန်မာ,0 +nl,Nederlands,0 +no,Norsk,0 +pl,Polski,0 +ps,پښتو,0 +pt,Português,0 +ro,Română,0 +ru,Русский,0 +rw,Kinyarwanda,0 +si,සිංහල,0 +sk,Slovenčina,0 +sl,Slovenščina,0 +sq,Shqip,0 +sr,Српски,0 +sr-BA,Srpski,0 +sv,Svenska,0 +sw,Kiswahili,0 +ta,தமிழ்,0 +te,తెలుగు,0 +th,ไทย,0 +tr,Türkçe,0 +uk,Українська,0 +ur,اردو,0 +uz,O‘Zbek,0 +vi,Tiếng Việt,0 +zh,中文,0 +zh-TW,繁體中文,0 diff --git a/frappe/geo/languages.json b/frappe/geo/languages.json deleted file mode 100644 index 33092a2c4b..0000000000 --- a/frappe/geo/languages.json +++ /dev/null @@ -1,330 +0,0 @@ -[ - { - "code": "af", - "name": "Afrikaans" - }, - { - "code": "am", - "name": "\u12a0\u121b\u122d\u129b" - }, - { - "code": "ar", - "name": "\u0627\u0644\u0639\u0631\u0628\u064a\u0629" - }, - { - "code": "bg", - "name": "B\u01celgarski" - }, - { - "code": "bn", - "name": "\u09ac\u09be\u0999\u09be\u09b2\u09bf" - }, - { - "code": "bo", - "name": "\u0f63\u0fb7\u0f0b\u0f66\u0f60\u0f72\u0f0b\u0f66\u0f90\u0f51\u0f0b" - }, - { - "code": "bs", - "name": "Bosanski" - }, - { - "code": "ca", - "name": "Catal\u00e0" - }, - { - "code": "cs", - "name": "\u010desky" - }, - { - "code": "da", - "name": "Dansk" - }, - { - "code": "da-DK", - "name": "Dansk (Danmark)" - }, - { - "code": "de", - "name": "Deutsch" - }, - { - "code": "el", - "name": "\u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac" - }, - { - "code": "en", - "name": "English" - }, - { - "code": "en-GB", - "name": "English (United Kingdom)" - }, - { - "code": "en-US", - "name": "English (United States)" - }, - { - "code": "es", - "name": "Espa\u00f1ol" - }, - { - "code": "es-AR", - "name": "Espa\u00f1ol (Argentina)" - }, - { - "code": "es-BO", - "name": "Espa\u00f1ol (Bolivia)" - }, - { - "code": "es-CL", - "name": "Espa\u00f1ol (Chile)" - }, - { - "code": "es-CO", - "name": "Espa\u00f1ol (Colombia)" - }, - { - "code": "es-DO", - "name": "Espa\u00f1ol (Rep\u00fablica Dominicana)" - }, - { - "code": "es-EC", - "name": "Espa\u00f1ol (Ecuador)" - }, - { - "code": "es-GT", - "name": "Espa\u00f1ol (Guatemala)" - }, - { - "code": "es-MX", - "name": "Espa\u00f1ol (M\u00e9xico)" - }, - { - "code": "es-NI", - "name": "Espa\u00f1ol (Nicaragua)" - }, - { - "code": "es-PE", - "name": "Espa\u00f1ol (Per\u00fa)" - }, - { - "code": "et", - "name": "Eesti" - }, - { - "code": "fa", - "name": "\u067e\u0627\u0631\u0633\u06cc" - }, - { - "code": "fi", - "name": "Suomi" - }, - { - "code": "fil", - "name": "Filipino" - }, - { - "code": "fr", - "name": "Fran\u00e7ais" - }, - { - "code": "fr-CA", - "name": "Fran\u00e7ais Canadien" - }, - { - "code": "gu", - "name": "\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0" - }, - { - "code": "he", - "name": "\u05e2\u05d1\u05e8\u05d9\u05ea" - }, - { - "code": "hi", - "name": "\u0939\u093f\u0902\u0926\u0940" - }, - { - "code": "hr", - "name": "Hrvatski" - }, - { - "code": "hu", - "name": "Magyar" - }, - { - "code": "id", - "name": "Indonesia" - }, - { - "code": "is", - "name": "\u00edslenska" - }, - { - "code": "it", - "name": "Italiano" - }, - { - "code": "ja", - "name": "\u65e5\u672c\u8a9e" - }, - { - "code": "km", - "name": "\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a" - }, - { - "code": "kn", - "name": "\u0c95\u0ca8\u0ccd\u0ca8\u0ca1" - }, - { - "code": "ko", - "name": "\ud55c\uad6d\uc758" - }, - { - "code": "ku", - "name": "\u06a9\u0648\u0631\u062f\u06cc" - }, - { - "code": "lo", - "name": "\u0ea5\u0eb2\u0ea7" - }, - { - "code": "lt", - "name": "Lietuvi\u0173 kalba" - }, - { - "code": "lv", - "name": "Latvie\u0161u valoda" - }, - { - "code": "mk", - "name": "\u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438" - }, - { - "code": "ml", - "name": "\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02" - }, - { - "code": "mn", - "name": "\u041c\u043e\u043d\u0433\u043e\u043b (Mongolian)" - }, - { - "code": "mr", - "name": "\u092e\u0930\u093e\u0920\u0940" - }, - { - "code": "ms", - "name": "Melayu" - }, - { - "code": "my", - "name": "\u1019\u103c\u1014\u103a\u1019\u102c" - }, - { - "code": "nl", - "name": "Nederlands" - }, - { - "code": "no", - "name": "Norsk" - }, - { - "code": "pl", - "name": "Polski" - }, - { - "code": "ps", - "name": "\u067e\u069a\u062a\u0648" - }, - { - "code": "pt", - "name": "Portugu\u00eas" - }, - { - "code": "pt-BR", - "name": "Portugu\u00eas Brasileiro" - }, - { - "code": "ro", - "name": "Rom\u00e2n" - }, - { - "code": "ru", - "name": "\u0440\u0443\u0441\u0441\u043a\u0438\u0439" - }, - { - "code": "rw", - "name": "Kinyarwanda" - }, - { - "code": "si", - "name": "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd" - }, - { - "code": "sk", - "name": "Sloven\u010dina (Slovak)" - }, - { - "code": "sl", - "name": "Sloven\u0161\u010dina (Slovene)" - }, - { - "code": "sq", - "name": "Shqiptar" - }, - { - "code": "sr", - "name": "\u0441\u0440\u043f\u0441\u043a\u0438" - }, - { - "code": "sr-BA", - "name": "Srpski" - }, - { - "code": "sv", - "name": "Svenska" - }, - { - "code": "sw", - "name": "Swahili" - }, - { - "code": "ta", - "name": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" - }, - { - "code": "te", - "name": "\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41" - }, - { - "code": "th", - "name": "\u0e44\u0e17\u0e22" - }, - { - "code": "tr", - "name": "Türkçe" - }, - { - "code": "uk", - "name": "\u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430" - }, - { - "code": "ur", - "name": "\u0627\u0631\u062f\u0648" - }, - { - "code": "uz", - "name": "\u040e\u0437\u0431\u0435\u043a" - }, - { - "code": "vi", - "name": "Vi\u1ec7t" - }, - { - "code": "zh", - "name": "\u7b80\u4f53\u4e2d\u6587" - }, - { - "code": "zh-TW", - "name": "\u7e41\u9ad4\u4e2d\u6587" - } -] diff --git a/frappe/gettext/translate.py b/frappe/gettext/translate.py index 2919277dc4..a7a3ddf607 100644 --- a/frappe/gettext/translate.py +++ b/frappe/gettext/translate.py @@ -167,7 +167,7 @@ def new_po(locale, target_app: str | None = None): print(f"PO file created_at {po_path}") print( - "You will need to add the language in frappe/geo/languages.json, if you haven't done it already." + "You will need to add the language in frappe/geo/languages.csv, if you haven't done it already." ) From 3561f502d14695b02cbd192a790eba062652f8db Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Wed, 27 Mar 2024 00:40:21 +0100 Subject: [PATCH 4/5] test: search relevance --- frappe/tests/test_search.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frappe/tests/test_search.py b/frappe/tests/test_search.py index eefe59f9bc..8190dbafdf 100644 --- a/frappe/tests/test_search.py +++ b/frappe/tests/test_search.py @@ -165,6 +165,8 @@ class TestSearch(FrappeTestCase): self.assertListEqual(results, []) def test_search_relevance(self): + frappe.db.set_value("Language", {"name": ("like", "e%")}, "enabled", 1) + search = partial(search_link, doctype="Language", filters=None, page_length=10) for row in search(txt="e"): self.assertTrue(row["value"].startswith("e")) From 09845dac674324cce23e440332bc816a1f4b94c2 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Wed, 27 Mar 2024 00:43:55 +0100 Subject: [PATCH 5/5] test: translate (use only enabled langs) --- frappe/tests/test_translate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/tests/test_translate.py b/frappe/tests/test_translate.py index da8bc91d74..d1f152b72c 100644 --- a/frappe/tests/test_translate.py +++ b/frappe/tests/test_translate.py @@ -26,7 +26,7 @@ dirname = os.path.dirname(__file__) translation_string_file = os.path.abspath(os.path.join(dirname, "translation_test_file.txt")) first_lang, second_lang, third_lang, fourth_lang, fifth_lang = choices( # skip "en*" since it is a default language - frappe.get_all("Language", pluck="name", filters=[["name", "not like", "en%"]]), + frappe.get_all("Language", pluck="name", filters=[["name", "not like", "en%"], ["enabled", "=", 1]]), k=5, )