Skip to content

Commit 3f94342

Browse files
author
bram
committed
Added language translation
1 parent 076022d commit 3f94342

File tree

3 files changed

+40
-13
lines changed

3 files changed

+40
-13
lines changed

python_gpt_po/po_translator.py

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from dataclasses import dataclass
1111

1212
import polib
13+
import pycountry
1314
from dotenv import load_dotenv
1415
from openai import OpenAI
1516
from pkg_resources import DistributionNotFound, get_distribution
@@ -58,18 +59,43 @@ def disable_fuzzy_translations(po_file_path):
5859
@staticmethod
5960
def get_file_language(po_file_path, po_file, languages, folder_language):
6061
"""Determines the language for a .po file."""
61-
# Attempt to get language from the file metadata first
6262
file_lang = po_file.metadata.get('Language', '')
63+
normalized_lang = POFileHandler.normalize_language_code(file_lang)
6364

64-
# If the file's language is not valid, infer it from the folder structure
65-
if not file_lang or file_lang not in languages:
66-
if folder_language:
67-
inferred_lang = next((part for part in po_file_path.split(os.sep) if part in languages), None)
68-
if inferred_lang:
69-
logging.info("Inferred language for .po file: %s as %s", po_file_path, inferred_lang)
70-
return inferred_lang
71-
return None
72-
return file_lang
65+
if normalized_lang in languages:
66+
return normalized_lang
67+
68+
if folder_language:
69+
for part in po_file_path.split(os.sep):
70+
norm_part = POFileHandler.normalize_language_code(part)
71+
if norm_part in languages:
72+
logging.info("Inferred language for .po file: %s as %s", po_file_path, norm_part)
73+
return norm_part
74+
75+
return None
76+
77+
@staticmethod
78+
def normalize_language_code(lang):
79+
"""Convert language name or code to ISO 639-1 code."""
80+
# Try direct lookup
81+
if len(lang) == 2:
82+
try:
83+
return pycountry.languages.get(alpha_2=lang.lower()).alpha_2
84+
except AttributeError:
85+
pass
86+
87+
# Try by name
88+
try:
89+
return pycountry.languages.get(name=lang.title()).alpha_2
90+
except AttributeError:
91+
pass
92+
93+
# Try by native name
94+
for language in pycountry.languages:
95+
if hasattr(language, 'inverted_name') and language.inverted_name.lower() == lang.lower():
96+
return language.alpha_2
97+
98+
return None
7399

74100
@staticmethod
75101
def log_translation_status(po_file_path, original_texts, translations):

requirements.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
polib==1.2.0
2-
openai==v1.42.0
2+
openai==1.58.1
33
python-dotenv==1.0.0
44
pytest==8.2.2
55
tenacity==9.0.0
6-
setuptools-scm==8.1.0
6+
setuptools-scm==8.1.0
7+
pycountry==24.6.1

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
include_package_data=True,
2525
install_requires=[
2626
'polib==1.2.0',
27-
'openai==v1.42.0',
27+
'openai==1.58.1',
2828
'python-dotenv==1.0.0',
2929
'tenacity==9.0.0',
3030
],

0 commit comments

Comments
 (0)