fix:增加巴西葡萄牙语

This commit is contained in:
liyi 2025-08-07 10:47:08 +08:00
parent 395e967abe
commit a5dcaae5a8
46 changed files with 1581 additions and 2 deletions

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف الأوردة المشطية للقفل. هل أنت متأكد أنك تريد إعادة الضبط ؟",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "След нулиране, метакарпалните вени на ключалката ще бъдат изтрити. Сигурен ли сте, че искате да се възстанови?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "ব্যান্ডোটারআইসেট, হাসিপাল রিরিইনস্ফথেলকবইল্ডজেডড।?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po resetování budou metakarpální žíly zámku odstraněny. Jste si jistý, že chcete resetovat?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Efter nulstilling, de metacarpal vener i låsen vil blive slettet. Er du sikker på at du vil nulstille?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Mittelhand adern des Schlosses gelöscht. Sind Sie sicher, dass Sie zurücksetzen wollen?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, οι μετακάρπιες φλέβες της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να επαναφέρετε;",

View File

@ -1084,6 +1084,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "After reset, the metacarpal veins of the lock will be deleted. Are you sure you want to reset?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminarán las venas metacarpiales de la cerradura. ¿Está seguro de que desea restablecer?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku metakarpaalveenid. Kas tõesti soovid lähtestada?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Kun lukko on nollattu, metakarppinen suoneet poistetaan. Haluatko varmasti palauttaa?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Après réinitialisation, les veines métacarpiennes de la serrure seront supprimées. Êtes-vous sûr de vouloir réinitialiser?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "לאחר איפוס, הורידים של המנעול יימחקו. אתה בטוח שברצונך לאפס?",

View File

@ -1084,6 +1084,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "रीसेट के बाद, लॉक के मेटाकार्पल नसों को हटा दिया जाएगा। क्या आप निश्चित रूप से रीसेट करना चाहते हैं?",

View File

@ -1083,6 +1083,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 你確定要重置啊?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Nakon resetiranja, metakarpalne vene brave će biti izbrisane. Jeste li sigurni da želite resetiranje?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "A reset után a zár metakarpális erei törlődnek. Biztos vagy benne, hogy vissza akarsz állítani?",

View File

@ -1084,6 +1084,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Վերագործարկումից հետո կողպեքի մետակարպալ երակները կջնջվեն: Իրո՞ք ցանկանում եք վերակայել:",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Setelah mengulang, pembuluh darah metakarpal dari kunci akan dihapus. Yakin ingin mengatur ulang?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Dopo il reset, le vene metacarpali della serratura verranno cancellate. Sei sicuro di voler reimpostare?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "リセット後、ロックの中手骨静脈が削除されます。リセットしてもよろしいですか。",

View File

@ -1084,6 +1084,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "გადატვირთვის შემდეგ, საკეტის მეტაკარპალური ვენები წაიშლება. დარწმუნებული ხართ, რომ გსურთ გადატვირთვა?",

View File

@ -1085,6 +1085,7 @@
"乌尔都语": "乌尔都语",
"亚美尼亚语": "亚美尼亚语",
"格鲁吉亚语": "格鲁吉亚语",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Қайта ысырып тастағаннан соң бұғаттағы метакарпалар өшіріледі. Шынымен ысырып тастауды қалайсыз ба?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 중수골 정맥이 삭제됩니다. 당신은 당신이 재설정 하시겠습니까?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po reset užrakto metakarpinės venos bus ištrintos. Ar tikrai norite atstatyti?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, urat metacarpal kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Na reset worden de middenhandsbeenaders van het slot verwijderd. Weet je zeker dat je wilt resetten?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po zresetowaniu żyły śródręcza zamka zostaną usunięte. Czy na pewno chcesz zresetować?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Após a reinicialização, as veias do metacarpo do bloqueio serão excluídas. Tens a certeza que queres reiniciar?",

1170
lan/lan_pt_br.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "După resetare, venele metacarpale ale încuietorii vor fi şterse. Sigur doriți să resetați?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "После сброса пястные вены замка будут удалены. Вы уверены, что хотите сбросить?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po resetovaní budú metakarpálne žily zámku vymazané. Ste si istí, že chcete obnoviť?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Након ресетовања, метакарпалне вене браве ће бити избрисане. Да ли сте сигурни да желите да ресетујете?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Efter återställd, de metakarpal venerna i låset tas bort. Är du säker på att du vill återställa?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วหลอดเลือดดำ metacarpal ของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin metacarpal damarları silinecektir. Sıfırlamak istediğine emin misin?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 是否確實要重置?",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Після скидання п'ясткові вени замку будуть видалені. Ви впевнені, що хочете скинути налаштування?",

View File

@ -1084,6 +1084,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "ری سیٹ کرنے کے بعد ، لاک کی میٹاکارپل رگیں حذف کردی جائیں گی۔ کیا آپ واقعی دوبارہ ترتیب دینا چاہتے ہیں؟",

View File

@ -1082,6 +1082,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
"繁体中文(中国香港)": "繁體中文(中國香港)",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Sau khi đặt lại, các tĩnh mạch metacarpal của khóa sẽ bị xóa. Bạn có chắc muốn thiết lập lại không?",

View File

@ -1087,6 +1087,7 @@
"乌尔都语": "اوردو",
"亚美尼亚语": "Հայերեն",
"格鲁吉亚语": "ქართული",
"巴西葡萄牙语": "Português do Brasil",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?",
"在线": "在线",
"离线": "离线",

348
langAzure.py Normal file
View File

@ -0,0 +1,348 @@
#!/usr/bin/python3
import datetime
import json
import os
import re
import sys
import time
from typing import Dict
import requests
# 运行格式方式一python langAzure.py
# 运行格式方式二python3 langAzure.py
# 语言文件路径
path = "./resources/lang/"
# 原语言
SOURCE_LANG = 'en_US'
# 过滤不翻译的语言
FILTER_LANG = ['zh_CN', 'en_US']
# Azure翻译语言映射基于: https://docs.azure.cn/zh-cn/ai-services/translator/text-translation/reference/v3/translate
# 语言代码https://api.translator.azure.cn/languages?api-version=3.0&scope=translation
AZURE_LANG_MAP = {
# 'zh_CN': {
# 'name': '简体中文',
# 'code': 'zh-Hans'
# },
# 'zh_TW': {
# 'name': '繁体中文',
# 'code': 'zh-Hant',
# },
# 'zh_HK': {
# 'name': '粤语(繁体)',
# 'code': 'yue',
# },
# 'en_US': {
# 'name': '英文',
# 'code': 'en',
# },
# 'fr_FR': {
# 'name': '法语',
# 'code': 'fr',
# },
# 'ru_RU': {
# 'name': '俄语',
# 'code': 'ru',
# },
# 'de_DE': {
# 'name': '德语',
# 'code': 'de',
# },
# 'ja_JP': {
# 'name': '日语',
# 'code': 'ja',
# },
# 'ko_KR': {
# 'name': '韩语',
# 'code': 'ko',
# },
# 'it_IT': {
# 'name': '意大利语',
# 'code': 'it',
# },
# 'pt_PT': {
# 'name': '葡萄牙语',
# 'code': 'pt-PT',
# },
# 'es_ES': {
# 'name': '西班牙语',
# 'code': 'es',
# },
# 'ar_SA': {
# 'name': '阿拉伯语',
# 'code': 'ar',
# },
# 'vi_VN': {
# 'name': '越南语',
# 'code': 'vi',
# },
# 'ms_MY': {
# 'name': '马来语',
# 'code': 'ms',
# },
# 'nl_NL': {
# 'name': '荷兰语',
# 'code': 'nl',
# },
# 'ro_RO': {
# 'name': '罗马尼亚语',
# 'code': 'ro',
# },
# 'lt_LT': {
# 'name': '立陶宛语',
# 'code': 'lt',
# },
# 'sv_SE': {
# 'name': '瑞典语',
# 'code': 'sv',
# },
# 'et_EE': {
# 'name': '爱沙尼亚语',
# 'code': 'et',
# },
# 'pl_PL': {
# 'name': '波兰语',
# 'code': 'pl',
# },
# 'sk_SK': {
# 'name': '斯洛伐克语',
# 'code': 'sk',
# },
# 'cs_CZ': {
# 'name': '捷克语',
# 'code': 'cs',
# },
# 'el_GR': {
# 'name': '希腊语',
# 'code': 'el',
# },
# 'he_IL': {
# 'name': '希伯来语',
# 'code': 'he',
# },
# 'tr_TR': {
# 'name': '土耳其语',
# 'code': 'tr',
# },
# 'hu_HU': {
# 'name': '匈牙利语',
# 'code': 'hu',
# },
# 'bg_BG': {
# 'name': '保加利亚语',
# 'code': 'bg',
# },
# 'kk_KZ': {
# 'name': '哈萨克语',
# 'code': 'kk',
# },
# 'bn_BD': {
# 'name': '孟加拉语',
# 'code': 'bn',
# },
# 'hr_HR': {
# 'name': '克罗地亚语',
# 'code': 'hr',
# },
# 'th_TH': {
# 'name': '泰语',
# 'code': 'th',
# },
# 'id_ID': {
# 'name': '印尼语',
# 'code': 'id',
# },
# 'fi_FI': {
# 'name': '芬兰语',
# 'code': 'fi',
# },
# 'da_DK': {
# 'name': '丹麦语',
# 'code': 'da',
# },
# 'uk_UA': {
# 'name': '乌克兰语',
# 'code': 'uk',
# },
# 'sr_RS': {
# 'name': '塞尔维亚语(西里尔)',
# 'code': 'sr-Cyrl',
# },
# 'hi_IN': {
# 'name': '印地语',
# 'code': 'hi',
# },
# 'ur_PK': {
# 'name': '乌尔都语',
# 'code': 'ur',
# },
# 'hy_AM': {
# 'name': '亚美尼亚语',
# 'code': 'hy',
# },
# 'ka_GE': {
# 'name': '格鲁吉亚语',
# 'code': 'ka',
# },
'pt_BR': {
'name': '葡萄牙语 (巴西)',
'code': 'pt',
},
}
# =============================== 以下为固定代码,非必要请勿修改 ===============================
# Azure配置
AZURE_CONFIG = {
'api_url': 'https://api.cognitive.microsofttranslator.com',
'subscription_key': '5UGFXbyyyIlwtvFbl5HUeWeHffW9aKLNIiZlqWsRZuLaFSmXfxfzJQQJ99BGAC3pKaRXJ3w3AAAbACOGpL8p', # 替换为您的订阅密钥
'region': 'eastasia', # 替换为您的区域,例如 'eastasia'
}
def main():
en_path = path + SOURCE_LANG + ".json"
# 判断文件是否存在
if not os.path.exists(en_path):
print('文件不存在:', en_path)
sys.exit(1)
# 读取文件内容
en_us_content = read_file(en_path)
# 把json转数组
en_us_data = json.loads(en_us_content)
# 遍历AZURE_LANG_MAP
for key in AZURE_LANG_MAP:
# 过滤掉不翻译的语言
if key in FILTER_LANG:
continue
lang_path = path + key + ".json"
# 验证文件是否存在,如果不存在即创建
if not os.path.exists(lang_path):
create_file(lang_path)
data_content = read_file(lang_path)
if data_content.strip(): # Check if the file is not empty
datas = json.loads(data_content)
else:
datas = {}
total = len(en_us_data) # 总数
current = 0 # 当前数
for en_us_key in en_us_data:
current += 1
# 检查key是否包含中文
has_chinese = bool(re.search(r'[\u4e00-\u9fff]', en_us_key))
text_to_translate = en_us_key if has_chinese else en_us_data[en_us_key]
print('语言:%s 正在翻译处理第%d/%d批数据 是否中文:%s' % (key, current, total, has_chinese))
# 过滤已存在的key
if en_us_key in datas:
continue
# 异常处理
try:
if has_chinese:
# 从中文翻译到目标语言
datas[en_us_key] = azure_translation('zh-Hans', AZURE_LANG_MAP[key]['code'], text_to_translate)
else:
# 从英文翻译到目标语言
datas[en_us_key] = azure_translation(AZURE_LANG_MAP[SOURCE_LANG]['code'], AZURE_LANG_MAP[key]['code'], text_to_translate)
# 延迟1秒避免API限制
#time.sleep(1)
except Exception as e:
print('翻译异常:', e.args, 'key:', en_us_key, 'content:', en_us_data[en_us_key])
continue
# 写入文件
with open(lang_path, 'w', encoding='utf-8') as file:
json.dump(datas, file, ensure_ascii=False, indent=4)
def azure_translation(source_language, target_language, text):
"""
使用Azure翻译API进行文本翻译
Args:
source_language: 源语言代码
target_language: 目标语言代码
text: 要翻译的文本
Returns:
翻译后的文本
"""
# 构建API端点
endpoint = f"{AZURE_CONFIG['api_url']}/translate"
# 设置参数
params = {
'api-version': '3.0',
'from': source_language,
'to': target_language
}
# 设置请求头
headers = {
'Ocp-Apim-Subscription-Key': AZURE_CONFIG['subscription_key'],
'Ocp-Apim-Subscription-Region': AZURE_CONFIG['region'],
'Content-type': 'application/json',
'X-ClientTraceId': str(datetime.datetime.now().timestamp())
}
# 构建请求体
body = [{'text': text}]
try:
# 发送请求
response = requests.post(endpoint, params=params, headers=headers, json=body)
# 检查响应状态
if response.status_code != 200:
raise Exception(f"Azure翻译API请求失败状态码{response.status_code},响应:{response.text}")
# 解析响应
result = response.json()
# 提取翻译结果
if result and len(result) > 0 and 'translations' in result[0]:
return result[0]['translations'][0]['text']
else:
raise Exception(f"Azure翻译API响应格式异常{result}")
except requests.exceptions.RequestException as e:
raise Exception(f"Azure翻译API网络请求异常{str(e)}")
except json.JSONDecodeError as e:
raise Exception(f"Azure翻译API响应JSON解析异常{str(e)}")
# 创建文件
def create_file(file_path):
with open(file_path, 'w') as file:
pass
# 读取文件内容
def read_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
return content
if __name__ == "__main__":
# 检查配置
if AZURE_CONFIG['subscription_key'] == 'YOUR_SUBSCRIPTION_KEY':
print("错误请先在脚本中配置您的Azure订阅密钥")
print("请修改AZURE_CONFIG中的subscription_key和region")
sys.exit(1)
main()

View File

@ -60,6 +60,7 @@ extension ExtensionAppDept on AppDept {
const Locale hyL = Locale('hy', 'AM');
const Locale kaL = Locale('ka', 'GE');
const Locale srCyrillic = Locale('sr', 'RS');
const Locale ptBrL = Locale('pt', 'Br');
return [
enL,
@ -102,7 +103,8 @@ extension ExtensionAppDept on AppDept {
urL,
hyL,
kaL,
srCyrillic
srCyrillic,
ptBrL
];
}
}
@ -195,6 +197,8 @@ enum LanguageType {
armenian,
//
georgian,
// 西
brazilianPortuguese,
}
extension ExtensionLanguageType on LanguageType {
@ -324,6 +328,9 @@ extension ExtensionLanguageType on LanguageType {
case LanguageType.georgian:
str = '格鲁吉亚语'.tr;
break;
case LanguageType.brazilianPortuguese:
str = '巴西葡萄牙语'.tr;
break;
}
return str;
}
@ -364,7 +371,11 @@ extension ExtensionLanguageType on LanguageType {
languageType = LanguageType.italian;
break;
case 'pt':
languageType = LanguageType.portuguese;
if (countryCode.toLowerCase() == 'br') {
languageType = LanguageType.brazilianPortuguese;
} else {
languageType = LanguageType.portuguese;
}
break;
case 'es':
languageType = LanguageType.spanish;
@ -671,6 +682,11 @@ extension ExtensionLanguageType on LanguageType {
return locale;
}
break;
case LanguageType.brazilianPortuguese:
if (locale.languageCode == 'pt' && locale.countryCode == 'Br') {
return locale;
}
break;
case LanguageType.system:
// TODO: Handle this case.
break;

View File

@ -82,6 +82,7 @@ class TranslationLoader {
static Map<String, String> _urMap = <String, String>{};
static Map<String, String> _hyMap = <String, String>{};
static Map<String, String> _kaMap = <String, String>{};
static Map<String, String> _ptBrMap = <String, String>{};
static Map<String, String> get zhDic => _zhMap;
static Map<String, String> get enDic => _enMap;
@ -126,6 +127,7 @@ class TranslationLoader {
static Map<String, String> get urMap => _urMap;
static Map<String, String> get hyMap => _hyMap;
static Map<String, String> get kaMap => _kaMap;
static Map<String, String> get ptBrMap => _ptBrMap;
static Future<void> loadTranslation() async {
_zhMap = await _loadJsonFile('lan/lan_zh.json');
@ -171,6 +173,7 @@ class TranslationLoader {
_urMap = await _loadJsonFile('lan/lan_ur.json');
_hyMap = await _loadJsonFile('lan/lan_hy.json');
_kaMap = await _loadJsonFile('lan/lan_ka.json');
_ptBrMap = await _loadJsonFile('lan/lan_pt_br.json');
}
static Future<Map<String, String>> _loadJsonFile(String filePath) async =>