add language helpers
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import glob
|
import glob
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
from collections import OrderedDict
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
|
||||||
@@ -11,6 +13,7 @@ from tzlocal import get_localzone
|
|||||||
_settings = None
|
_settings = None
|
||||||
|
|
||||||
DB_PATH = os.path.expanduser('~/BirdNET-Pi/scripts/birds.db')
|
DB_PATH = os.path.expanduser('~/BirdNET-Pi/scripts/birds.db')
|
||||||
|
MODEL_PATH = os.path.expanduser('~/BirdNET-Pi/model')
|
||||||
ANALYZING_NOW = os.path.expanduser('~/BirdSongs/StreamData/analyzing_now.txt')
|
ANALYZING_NOW = os.path.expanduser('~/BirdSongs/StreamData/analyzing_now.txt')
|
||||||
FONT_DIR = os.path.expanduser('~/BirdNET-Pi/homepage/static')
|
FONT_DIR = os.path.expanduser('~/BirdNET-Pi/homepage/static')
|
||||||
|
|
||||||
@@ -118,3 +121,39 @@ def get_wav_files():
|
|||||||
open_recs = get_open_files_in_dir(rec_dir)
|
open_recs = get_open_files_in_dir(rec_dir)
|
||||||
files = [file for file in files if file not in open_recs]
|
files = [file for file in files if file not in open_recs]
|
||||||
return files
|
return files
|
||||||
|
|
||||||
|
|
||||||
|
def get_language(language=None):
|
||||||
|
if language is None:
|
||||||
|
language = get_settings()['DATABASE_LANG']
|
||||||
|
file_name = os.path.join(MODEL_PATH, f'l18n/labels_{language}.json')
|
||||||
|
with open(file_name) as f:
|
||||||
|
ret = json.loads(f.read())
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def save_language(labels, language):
|
||||||
|
file_name = os.path.join(MODEL_PATH, f'l18n/labels_{language}.json')
|
||||||
|
with open(file_name, 'w') as f:
|
||||||
|
f.write(json.dumps(OrderedDict(sorted(labels.items())), indent=2, ensure_ascii=False))
|
||||||
|
|
||||||
|
|
||||||
|
def get_model_labels(model=None):
|
||||||
|
if model is None:
|
||||||
|
model = get_settings()['MODEL']
|
||||||
|
file_name = os.path.join(MODEL_PATH, f'{model}_Labels.txt')
|
||||||
|
with open(file_name) as f:
|
||||||
|
labels = [line.strip() for line in f.readlines()]
|
||||||
|
if labels and labels[0].count('_') == 1:
|
||||||
|
labels = [re.sub(r'_.+$', '', label) for label in labels]
|
||||||
|
return labels
|
||||||
|
|
||||||
|
|
||||||
|
def set_label_file():
|
||||||
|
lang = get_language()
|
||||||
|
labels = [f'{label}_{lang[label]}\n' for label in get_model_labels()]
|
||||||
|
file_name = os.path.join(MODEL_PATH, 'labels.txt')
|
||||||
|
if os.path.islink(file_name):
|
||||||
|
os.remove(file_name)
|
||||||
|
with open(file_name, 'w') as f:
|
||||||
|
f.writelines(labels)
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from scripts.utils.helpers import MODEL_PATH, save_language
|
||||||
|
|
||||||
|
|
||||||
|
def get_labels(model, language=None):
|
||||||
|
postfix = '' if language is None else f'_{language}'
|
||||||
|
file_name = os.path.join(MODEL_PATH, f'labels_{model}/labels{postfix}.txt')
|
||||||
|
with open(file_name) as f:
|
||||||
|
ret = [line.strip() for line in f.readlines()]
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def as_dict(labels, den="_", key=0, value=1):
|
||||||
|
return {label.split(den)[key]: label.split(den)[value] for label in labels}
|
||||||
|
|
||||||
|
|
||||||
|
def create_language(language):
|
||||||
|
en_l18n = as_dict(get_labels('l18n', 'en'))
|
||||||
|
l18n = as_dict(get_labels('l18n', language))
|
||||||
|
new_language = as_dict(get_labels('nm', language))
|
||||||
|
|
||||||
|
for sci_name, com_name in l18n.items():
|
||||||
|
if sci_name not in new_language or new_language[sci_name] == sci_name:
|
||||||
|
new_language[sci_name] = com_name
|
||||||
|
continue
|
||||||
|
|
||||||
|
# now check if the l18n version is translated
|
||||||
|
if com_name != new_language[sci_name] and new_language[sci_name] == en_l18n[sci_name]:
|
||||||
|
print(f'changing {new_language[sci_name]} -> {com_name}')
|
||||||
|
new_language[sci_name] = com_name
|
||||||
|
|
||||||
|
save_language(new_language, language)
|
||||||
|
|
||||||
|
|
||||||
|
def create_all_languages():
|
||||||
|
languages = ['af', 'ar', 'ca', 'cs', 'da', 'de', 'en', 'es', 'et', 'fi', 'fr', 'hr', 'hu', 'id', 'is', 'it', 'ja',
|
||||||
|
'ko', 'lt', 'lv', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sl', 'sr', 'sv', 'th', 'tr', 'uk', 'zh']
|
||||||
|
for language in languages:
|
||||||
|
create_language(language)
|
||||||
Reference in New Issue
Block a user