Skip to content

Commit 58286e7

Browse files
committed
Extracted messages.json
1 parent 3d989f5 commit 58286e7

12 files changed

Lines changed: 104 additions & 46 deletions

File tree

remove-json-keys/src/remove_json_keys/__main__.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ def main():
99
if cli.config.init : init.config_file(cli) ; sys.exit(0)
1010
if not cli.config.no_wizard : wizard.run(cli)
1111

12-
log.info(f'Searching for {cli.config.json_dir}...')
12+
log.info(f'{cli.msgs.log_SEARCHING_FOR} {cli.config.json_dir}...')
1313
init.json_dir(cli)
1414
if Path(cli.config.json_dir).exists():
15-
log.success('Directory found!')
15+
log.success(f'{cli.msgs.log_DIR_FOUND}!')
1616
print(f'\n>> {cli.config.json_dir}')
1717
else:
18-
log.warn('Unable to locate directory!')
18+
log.warn(f'{cli.msgs.warn_DIR_NOT_FOUND}.')
1919
sys.exit(1)
2020

2121
keys_removed, keys_skipped, files_processed_cnt = data.json.remove_keys(cli.config.json_dir, cli.config.keys)
2222

23-
log.final_summary({
23+
log.final_summary(cli.msgs, {
2424
'removed': [f'{key} ({file_path})' for key, file_path in keys_removed],
2525
'skipped': [f'{key} ({file_path})' for key, file_path in keys_skipped],
2626
})
27-
log.data(f'Total JSON files processed: {files_processed_cnt}')
27+
log.data(f'{cli.msgs.log_TOTAL_JSON_PROCESSED}: {files_processed_cnt}')
2828

2929
if __name__ == '__main__' : main()
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"prompt_KEYS_TO_REMOVE": { "message": "Enter key(s) to remove (comma-separated, or ENTER if done)" },
3+
"prompt_NO_KEYS_EXIT": { "message": "No keys entered. Exit?" },
4+
"log_OVERWRITING_CONFIG_AT": { "message": "Overwriting existing config at" },
5+
"log_DEFAULT_CONFIG_CREATED_AT": { "message": "Default config created at" },
6+
"log_EXITING": { "message": "Exiting" },
7+
"log_SEARCHING_FOR": { "message": "Searching for" },
8+
"log_DIR_FOUND": { "message": "Directory found" },
9+
"log_ADDED": { "message": "Added" },
10+
"log_KEYS": { "message": "Keys" },
11+
"log_KEYS_TO_REMOVE": { "message": "Current keys to remove" },
12+
"log_NO_NEW_KEYS_ADDED": { "message": "No new keys added (all already present)" },
13+
"log_ALL_JSON_PROCESSED": { "message": "All JSON files processed" },
14+
"log_TOTAL_JSON_PROCESSED": { "message": "Total JSON files processed" },
15+
"tip_PASS_FORCE_TO_OVERWRITE": { "message": "Pass --force to overwrite" },
16+
"warn_CONFIG_EXISTS_AT": { "message": "Config already exists at" },
17+
"warn_DIR_NOT_FOUND": { "message": "Unable to locate directory" }
18+
}

remove-json-keys/src/remove_json_keys/lib/init.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
from pathlib import Path
22

3-
from . import data, log, settings
3+
from . import data, language, log, settings
44

55
def cli(caller_file):
66
cli = data.sns.from_dict(data.json.read(Path(__file__).parent.parent / 'assets/data/package_data.json'))
7+
cli.msgs = language.get_msgs()
78
settings.load(cli, caller_file)
89
return cli
910

1011
def config_file(cli):
1112
config_path = Path(cli.config_filepath)
1213
if config_path.exists():
1314
if cli.config.force:
14-
log.info(f'Overwriting existing config at {config_path}...')
15+
log.info(f'{cli.msgs.log_OVERWRITING_CONFIG_AT} {config_path}...')
1516
else:
16-
log.warn(f'Config already exists at {config_path}! Skipping init.')
17-
log.tip('Pass --force to overwrite.')
17+
log.warn(f'{cli.msgs.warn_CONFIG_EXISTS_AT} {config_path}. {cli.msgs.log_SKIPPING} --init.')
18+
log.tip(f'{cli.msgs.tip_PASS_FORCE_TO_OVERWRITE}.')
1819
return
1920
cli.config_filename = f'.{cli.short_name}.config.json5'
2021
cli.config_filepath = str(Path(cli.project_root) / cli.config_filename)
2122
if not getattr(cli, 'default_file_config', None):
2223
cli.default_file_config = data.url.get(f'{cli.urls.jsdelivr}/{cli.name}/{cli.config_filename}')
2324
data.file.write(cli.config_filepath, cli.default_file_config)
24-
log.success(f'Default config created at {cli.config_filepath}')
25+
log.success(f'{cli.msgs.log_DEFAULT_CONFIG_CREATED_AT} {cli.config_filepath}')
2526

2627
def json_dir(cli):
2728
for path in Path.cwd().rglob(cli.config.json_dir):
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from pathlib import Path
2+
from types import SimpleNamespace as sn
3+
4+
from . import data
5+
6+
def get_msgs():
7+
msgs_path = Path(__file__).parent.parent / 'assets' / 'data' / 'messages.json'
8+
return sn(**{ key:val['message'] for key,val in data.json.read(msgs_path).items() })

remove-json-keys/src/remove_json_keys/lib/log.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ def success(msg, *args, **kwargs) : print(f'\n{colors.bg}{msg.format(*args, **kw
2727
def tip(msg, *args, **kwargs) : print(f'\n{colors.bo}TIP: {msg.format(*args, **kwargs)}{colors.nc}')
2828
def warn(msg, *args, **kwargs) : print(f'\n{colors.bo}WARNING: {msg.format(*args, **kwargs)}{colors.nc}')
2929

30-
def final_summary(summary_dict):
31-
success('All JSON files processed!')
30+
def final_summary(msgs, summary_dict):
31+
success(f'{msgs.log_ALL_JSON_PROCESSED}!')
3232
for name, file_set in summary_dict.items():
3333
if file_set:
3434
status = name.replace('_', ' ')
3535
status_color = colors.by if status == 'removed' else colors.gry
36-
data(f'Keys {status}: {len(file_set)}')
36+
data(f'{msgs.log_KEYS} {status}: {len(file_set)}')
3737
print(f'{status_color}[\n ' + '\n '.join(file_set) + f'\n]{colors.nc}')
3838

3939
def trunc(msg, end='\n'):

remove-json-keys/src/remove_json_keys/lib/wizard.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ def run(cli):
77
while True: # prompt user for keys to remove
88

99
if getattr(cli.config, 'keys', ''):
10-
print('\nCurrent keys to remove:', cli.config.keys)
10+
print(f'\n{cli.msgs.log_KEYS_TO_REMOVE}:', cli.config.keys)
1111
input_keys = input(
12-
f'\n{log.colors.bw}Enter key(s) to remove (comma-separated, or ENTER if done): {log.colors.nc}')
12+
f'\n{log.colors.bw}{cli.msgs.prompt_KEYS_TO_REMOVE}: {log.colors.nc}')
1313

1414
if not input_keys: # no keys entered
1515
if cli.config.keys : break # out of wizard
16-
user_resp = input('\nNo keys entered. Exit? (Y/n): ').lower()
16+
user_resp = input(F'\n{cli.msgs.prompt_NO_KEYS_EXIT} (Y/n): ').lower()
1717
if user_resp == 'n' : continue # back to og prompt
18-
else : print(f'Exiting {cli.name}...') ; sys.exit(0)
18+
else : print(f'{cli.msgs.log_EXITING} {cli.name}...') ; sys.exit(0)
1919

2020
new_keys = data.csv.parse(input_keys)
2121
existing_keys = set(cli.config.keys)
@@ -26,6 +26,6 @@ def run(cli):
2626

2727
if truly_new_keys:
2828
cli.config.keys.extend(truly_new_keys)
29-
print(f"Added: {', '.join(truly_new_keys)}")
29+
print(f"{cli.msgs.log_ADDED}: {', '.join(truly_new_keys)}")
3030
else:
31-
print('No new keys added (all already present)')
31+
print(f'{cli.msgs.log_NO_NEW_KEYS_ADDED}')

translate-messages/src/translate_messages/__main__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ def main():
99
if cli.config.init : init.config_file(cli) ; sys.exit(0)
1010
if not cli.config.no_wizard : wizard.run(cli)
1111

12-
log.info(f'Searching for {cli.config.locales_dir}...')
12+
log.info(f'{cli.msgs.log_SEARCHING_FOR} {cli.config.locales_dir}...')
1313
init.locales_dir(cli)
1414
if Path(cli.config.locales_dir).exists():
15-
log.success('Directory found!')
15+
log.success(f'{cli.msgs.log_DIR_FOUND}!')
1616
print(f'\n>> {cli.config.locales_dir}')
1717
else:
18-
log.warn('Unable to locate directory!')
18+
log.warn(f'{cli.msgs.warn_DIR_NOT_FOUND}.')
1919
sys.exit(1)
2020

2121
init.src_msgs(cli)
2222
init.target_langs(cli)
2323

2424
langs_translated, langs_skipped, langs_added, langs_not_translated = language.write_translations(cli)
2525

26-
log.final_summary({
26+
log.final_summary(cli.msgs, {
2727
'translated': langs_translated,
2828
'skipped': langs_skipped,
2929
'added': langs_added,
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"prompt_KEYS_TO_IGNORE": { "message": "Enter key(s) to ignore (comma-separated, or ENTER if done)" },
3+
"log_OVERWRITING_CONFIG_AT": { "message": "Overwriting existing config at" },
4+
"log_DEFAULT_CONFIG_CREATED_AT": { "message": "Default config created at" },
5+
"log_SEARCHING_FOR": { "message": "Searching for" },
6+
"log_DIR_FOUND": { "message": "Directory found" },
7+
"log_ADDING": { "message": "Adding" },
8+
"log_ADDED": { "message": "Added" },
9+
"log_SKIPPING": { "message": "Skipping" },
10+
"log_SKIPPED": { "message": "Skipped" },
11+
"log_UPDATING": { "message": "Updating" },
12+
"log_UPDATED": { "message": "Updated" },
13+
"log_LANGUAGES": { "message": "Languages" },
14+
"log_IGNORED_KEYS": { "message": "Ignored key(s)" },
15+
"log_NO_NEW_KEYS_ADDED": { "message": "No new keys added (all already present)" },
16+
"log_ALL_JSON_UPDATED": { "message": "All JSON files updated successfully" },
17+
"tip_PASS_FORCE_TO_OVERWRITE": { "message": "Pass --force to overwrite" },
18+
"tip_MAKE_SURE": { "message": "Make sure" },
19+
"tip_EXISTS": { "message": "exists" },
20+
"tip_IT_HAS_VALID_JSON": { "message": "it contains valid JSON" },
21+
"warn_CONFIG_EXISTS_AT": { "message": "Config already exists at" },
22+
"warn_DIR_NOT_FOUND": { "message": "Unable to locate directory" },
23+
"err_TRANSLATE_FAILED_FOR_KEY": { "message": "Translation failed for key" },
24+
"err_EN_LOC_NOT_FOUND_AT": { "message": "English locale not found at" }
25+
}

translate-messages/src/translate_messages/lib/init.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
from pathlib import Path
22
import sys
33

4-
from . import data, log, settings
4+
from . import data, language, log, settings
55

66
def cli(caller_file):
77
cli = data.sns.from_dict(data.json.read(Path(__file__).parent.parent / 'assets/data/package_data.json'))
8+
cli.msgs = language.get_msgs()
89
settings.load(cli, caller_file)
910
return cli
1011

1112
def config_file(cli):
1213
config_path = Path(cli.config_filepath)
1314
if config_path.exists():
1415
if cli.config.force:
15-
log.info(f'Overwriting existing config at {config_path}...')
16+
log.info(f'{cli.msgs.log_OVERWRITING_CONFIG_AT} {config_path}...')
1617
else:
17-
log.warn(f'Config already exists at {config_path}! Skipping init.')
18-
log.tip('Pass --force to overwrite.')
18+
log.warn(f'{cli.msgs.warn_CONFIG_EXISTS_AT} {config_path}. {cli.msgs.log_SKIPPING} --init.')
19+
log.tip(f'{cli.msgs.tip_PASS_FORCE_TO_OVERWRITE}.')
1920
return
2021
cli.config_filename = f'.{cli.short_name}.config.json5'
2122
cli.config_filepath = str(Path(cli.project_root) / cli.config_filename)
2223
if not getattr(cli, 'default_file_config', None):
2324
cli.default_file_config = data.url.get(f'{cli.urls.jsdelivr}/{cli.name}/{cli.config_filename}')
2425
data.file.write(cli.config_filepath, cli.default_file_config)
25-
log.success(f'Default config created at {cli.config_filepath}')
26+
log.success(f'{cli.msgs.log_DEFAULT_CONFIG_CREATED_AT} {cli.config_filepath}')
2627

2728
def locales_dir(cli):
2829
for path in Path.cwd().rglob(cli.config.locales_dir):
@@ -36,14 +37,14 @@ def src_msgs(cli):
3637
cli.locales_path = Path(cli.config.locales_dir)
3738
cli.en_path = cli.locales_path / 'en' / cli.msgs_filename
3839
if not cli.en_path.exists():
39-
log.error(f'English locale not found at {cli.en_path}.')
40-
log.tip(f'Make sure {cli.en_path} exists!')
40+
log.error(f'{cli.msgs.err_EN_LOC_NOT_FOUND_AT} {cli.en_path}.')
41+
log.tip(f'{cli.msgs.tip_MAKE_SURE} {cli.en_path} {cli.msgs.tip_EXISTS}!')
4142
sys.exit(1)
4243
try:
4344
cli.en_msgs = data.json.read(cli.en_path)
4445
except Exception as err:
4546
log.error(f'Failed to parse {cli.en_path}: {err}')
46-
log.tip('Make sure it contains valid JSON')
47+
log.tip(f'{cli.msgs.tip_MAKE_SURE} {cli.msgs.tip_IT_HAS_VALID_JSON}')
4748
sys.exit(1)
4849

4950
def target_langs(cli):

translate-messages/src/translate_messages/lib/language.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from pathlib import Path
22
import re, sys
3+
from types import SimpleNamespace as sn
34

45
from translate import Translator
56

@@ -27,14 +28,18 @@ def create_translations(cli, target_msgs, lang_code):
2728
if any(flag in translated_msg for flag in fail_flags):
2829
translated_msg = original_msg
2930
except Exception as err:
30-
log.trunc(f'Translation failed for key "{key}" in {lang_code}/{cli.msgs_filename}: {err}')
31+
log.trunc(f'{cli.msgs.err_TRANSLATE_FAILED_FOR_KEY} "{key}" in {lang_code}/{cli.msgs_filename}: {err}')
3132
translated_msg = original_msg
3233
translated_msgs[key] = { 'message': translated_msg }
3334
else:
3435
translated_msgs[key] = target_msgs[key]
3536

3637
return translated_msgs
3738

39+
def get_msgs():
40+
msgs_path = Path(__file__).parent.parent / 'assets' / 'data' / 'messages.json'
41+
return sn(**{ key:val['message'] for key,val in data.json.read(msgs_path).items() })
42+
3843
def write_translations(cli):
3944

4045
langs_added, langs_skipped, langs_translated, langs_not_translated = [], [], [], []
@@ -43,7 +48,8 @@ def write_translations(cli):
4348
lang_folder = lang_code.replace('-', '_')
4449

4550
if lang_code.startswith('en'): # skip EN locales
46-
print(f'\n{log.colors.gry}Skipped {lang_folder}/{cli.msgs_filename}...{log.colors.nc}', end='')
51+
print(f'\n{log.colors.gry}'
52+
f'{cli.msgs.log_SKIPPED} {lang_folder}/{cli.msgs_filename}...{log.colors.nc}', end='')
4753
langs_skipped.append(lang_code) ; langs_not_translated.append(lang_code)
4854
continue
4955

@@ -60,19 +66,18 @@ def write_translations(cli):
6066
lang_folder_path.mkdir(parents=True, exist_ok=True)
6167
langs_added.append(lang_code) ; lang_added = True
6268

63-
log.info(f"{ 'Adding' if not msgs else 'Updating' } {lang_folder}/{cli.msgs_filename}...", end='')
69+
action = cli.msgs.log_ADDING if not msgs else cli.msgs.log_UPDATING
70+
log.info(f'{action} {lang_folder}/{cli.msgs_filename}...', end='')
6471
sys.stdout.flush()
6572
translated_msgs = create_translations(cli, msgs, lang_code)
6673
data.json.write(msgs_path, translated_msgs)
6774

6875
if translated_msgs == msgs : langs_skipped.append(lang_code) ; lang_skipped = True
6976
else : langs_translated.append(lang_code) ; lang_translated = True
7077
if not lang_translated : langs_not_translated.append(lang_code)
71-
status = (
72-
f'{log.colors.dg}Added' if lang_added else
73-
f'{log.colors.gry}Skipped' if lang_skipped else
74-
f'{log.colors.dy}Updated'
75-
)
78+
status = f'{log.colors.dg}{cli.msgs.log_ADDED}' if lang_added else \
79+
f'{log.colors.gry}{cli.msgs.log_SKIPPED}' if lang_skipped else \
80+
f'{log.colors.dy}{cli.msgs.log_UPDATED}'
7681
log.overwrite_print(f'{status} {lang_folder}/{cli.msgs_filename}{log.colors.nc}')
7782

7883
return langs_translated, langs_skipped, langs_added, langs_not_translated

0 commit comments

Comments
 (0)