Skip to content

Commit

Permalink
Feature - Translate Missing Languages Option (#1)
Browse files Browse the repository at this point in the history
* feat: translate missing languages option

* chore: remove todo
  • Loading branch information
AmooAti authored Jan 8, 2024
1 parent 592125d commit cd1f2c1
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 11 deletions.
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ python main.py
## TODO
- [ ] Add Google Translate
- [ ] User can choose whether ID column should be in output file
- [ ] Translate missing languages features
- [ ] Main thread issue, use multithreading to prevent screen freeze during translation and show loader or progress bar
- [ ] Input validation
- [ ] Create Executables
Expand Down
15 changes: 12 additions & 3 deletions data.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,26 @@ def __init__(self, csv_file_path):
def get_headers(self):
return self.df.columns.tolist()

def translate_columns_with_open_ai(self, columns, source_language, destination_languages, openai_api_key, model):
def translate_columns_with_open_ai(self, columns, source_language, destination_languages, openai_api_key, model, only_missing_langs = False):
openai_client = OpenAI(
api_key=openai_api_key
)
for index, row in self.df.iterrows():
for column in columns:
column_translated = dict()
# first put the source language in the dictionary
column_translated[source_language] = row[column]
if only_missing_langs:
org_data = json.loads(row[column])
for s_lang in org_data:
column_translated[s_lang] = org_data[s_lang]
else:
column_translated[source_language] = row[column]
for lang in destination_languages:
try:
if only_missing_langs:
raw_text = json.loads(row[column])[source_language]
else:
raw_text = row[column]
translated_text = openai_client.chat.completions.create(
model=model,
messages=[
Expand All @@ -31,7 +40,7 @@ def translate_columns_with_open_ai(self, columns, source_language, destination_l
},
{
"role": "user",
"content": row[column]
"content": raw_text
}
],
temperature=0,
Expand Down
34 changes: 27 additions & 7 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ def __init__(self):
self.data = None
self.selected_headers = []
self.include_header_in_output = False
self.only_missing_langs = False;
self.gpt_mode_state = 'gpt-3.5-turbo'

self.setWindowTitle("Prepare your database for spatie/laravel-translatable")
Expand Down Expand Up @@ -231,12 +232,24 @@ def __init__(self):
options_label = QLabel('Options')
vbox.addWidget(options_label)
options_grid = QGridLayout()
all_columns_radio = QCheckBox('Output with Headers')
all_columns_radio.setChecked(self.include_header_in_output)
all_columns_radio.setToolTip(
'If checked, the output will not have headers. For database you need to check this.')
all_columns_radio.stateChanged.connect(self.include_header_option_change)
options_grid.addWidget(all_columns_radio, 0, 0)

# Output with headers or not checkbox
all_columns_check = QCheckBox('Output with Headers')
all_columns_check.setChecked(self.include_header_in_output)
all_columns_check.setToolTip(
'If checked, the output will have headers. For databases like MySQL make sure this option is not checked!')
all_columns_check.stateChanged.connect(self.include_header_option_change)
options_grid.addWidget(all_columns_check, 0, 0)

# Only translate missing langs or all checkbox
only_translate_missing_langs_check = QCheckBox('Only Translate missing langs')
only_translate_missing_langs_check.setChecked(self.only_missing_langs)
only_translate_missing_langs_check.setToolTip(
'If checked, only missing translations will translate base on source language.'
)
only_translate_missing_langs_check.stateChanged.connect(self.only_missing_langs_change)
options_grid.addWidget(only_translate_missing_langs_check, 0, 1)

options_grid.setColumnStretch(1, 1)
vbox.addLayout(options_grid)

Expand Down Expand Up @@ -286,6 +299,12 @@ def include_header_option_change(self, state):
else:
self.include_header_in_output = False

def only_missing_langs_change(self, state):
if state == 2:
self.only_missing_langs = True
else:
self.only_missing_langs = False

@QtCore.pyqtSlot()
def generate(self):
# self.generate_button.setText('Generating...')
Expand All @@ -300,7 +319,8 @@ def generate(self):
translations = self.data.translate_columns_with_open_ai(self.selected_headers, source_language,
destination_languages,
self.open_ai_line_edit.text(),
self.gpt_mode_state)
self.gpt_mode_state,
self.only_missing_langs)
except OpenAIException as e:
# self.generate_button.setEnabled(True)
# self.generate_button.setText('Generate')
Expand Down

0 comments on commit cd1f2c1

Please sign in to comment.