add language helpers

This commit is contained in:
frederik
2025-10-26 12:05:42 +01:00
committed by Nachtzuster
parent 14be6e68ad
commit a152250f11
2 changed files with 79 additions and 0 deletions
+39
View File
@@ -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)
+40
View File
@@ -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)