Add English localization and MIT-licensed public release documentation
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import string
|
||||
import subprocess
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
from btd700.controller import Controller
|
||||
from btd700.demo import DemoTransport
|
||||
from btd700.i18n import ENGLISH, detect_language, get_language, set_language, tr
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
class TranslationTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.language = get_language()
|
||||
|
||||
def tearDown(self):
|
||||
set_language(self.language)
|
||||
|
||||
def test_language_detection(self):
|
||||
for env, expected in (({}, 'en'), ({'LANG': 'de_DE.UTF-8'}, 'de'),
|
||||
({'LANG': 'fr_FR.UTF-8'}, 'en'),
|
||||
({'LANGUAGE': 'de:en', 'LANG': 'en_GB.UTF-8'}, 'de'),
|
||||
({'BTD700_LANGUAGE': 'en', 'LANG': 'de_DE.UTF-8'}, 'en')):
|
||||
self.assertEqual(detect_language(env), expected)
|
||||
|
||||
def test_templates_keep_all_fields(self):
|
||||
formatter = string.Formatter()
|
||||
def fields(text):
|
||||
return sorted((field, spec, conversion) for _, field, spec, conversion in formatter.parse(text) if field is not None)
|
||||
for source, translated in ENGLISH.items():
|
||||
self.assertTrue(translated)
|
||||
self.assertEqual(fields(source), fields(translated), source)
|
||||
|
||||
def test_status_translates_without_changing_device_values(self):
|
||||
controller = Controller(DemoTransport())
|
||||
set_language('en')
|
||||
english = controller.snapshot().public_dict()
|
||||
self.assertEqual(english['state_name'], 'Playing audio')
|
||||
self.assertEqual(english['transport_name'], 'Automatic')
|
||||
self.assertEqual(english['audio_quality'], '24-bit / 48 kHz')
|
||||
set_language('de')
|
||||
german = controller.snapshot().public_dict()
|
||||
self.assertEqual(german['state_name'], 'Musikwiedergabe')
|
||||
self.assertEqual(german['audio_quality'], '24 Bit / 48 kHz')
|
||||
for field in ('mode', 'transport', 'codec', 'firmware', 'broadcast_name'):
|
||||
self.assertEqual(english[field], german[field])
|
||||
|
||||
def test_english_error(self):
|
||||
set_language('en')
|
||||
with self.assertRaisesRegex(ValueError, 'Unknown audio mode'):
|
||||
Controller(DemoTransport()).set_mode(255)
|
||||
set_language('de')
|
||||
self.assertEqual(tr('Speichern'), 'Speichern')
|
||||
self.assertEqual(tr('aptX Adaptive'), 'aptX Adaptive')
|
||||
|
||||
def test_cli_override_and_help(self):
|
||||
env = dict(os.environ, BTD700_LANGUAGE='de')
|
||||
command = [sys.executable, '-m', 'btd700', '--language', 'en']
|
||||
result = subprocess.run(command + ['--demo', 'status'], cwd=ROOT, env=env, check=True, text=True, capture_output=True)
|
||||
self.assertEqual(json.loads(result.stdout)['state_name'], 'Playing audio')
|
||||
result = subprocess.run(command + ['--help'], cwd=ROOT, env=env, check=True, text=True, capture_output=True)
|
||||
self.assertIn('Start in the system tray only', result.stdout)
|
||||
self.assertNotIn('Nur im Infobereich', result.stdout)
|
||||
Reference in New Issue
Block a user