diff --git a/definition.yml b/definition.yml index 50b6f31..e687869 100644 --- a/definition.yml +++ b/definition.yml @@ -1,8 +1,10 @@ name: custom-hotkeys display-name: Custom Hotkeys -version: 0.2.1 +version: 0.2.2 author: Krarilotus type: module + +tags: [hotkeys, interface, tools] game: [SHC==1.41, SHCE==1.41] dependencies: framework: ">=3.0.7" diff --git a/files.xml b/files.xml index 07883e1..aaee7b0 100644 --- a/files.xml +++ b/files.xml @@ -5,5 +5,6 @@ + diff --git a/locale/ch.yml b/locale/ch.yml new file mode 100644 index 0000000..5e4bdf4 --- /dev/null +++ b/locale/ch.yml @@ -0,0 +1,3 @@ +tags.hotkeys: 快捷键 +tags.interface: 界面 +tags.tools: 工具 diff --git a/locale/de.yml b/locale/de.yml new file mode 100644 index 0000000..8deef80 --- /dev/null +++ b/locale/de.yml @@ -0,0 +1,3 @@ +tags.hotkeys: Tastenkürzel +tags.interface: Oberfläche +tags.tools: Werkzeuge diff --git a/locale/en.yml b/locale/en.yml new file mode 100644 index 0000000..92fdd4c --- /dev/null +++ b/locale/en.yml @@ -0,0 +1,3 @@ +tags.hotkeys: Hotkeys +tags.interface: Interface +tags.tools: Tools diff --git a/locale/es.yml b/locale/es.yml new file mode 100644 index 0000000..169d81f --- /dev/null +++ b/locale/es.yml @@ -0,0 +1,3 @@ +tags.hotkeys: Atajos de teclado +tags.interface: Interfaz +tags.tools: Herramientas diff --git a/locale/fa.yml b/locale/fa.yml new file mode 100644 index 0000000..cea494a --- /dev/null +++ b/locale/fa.yml @@ -0,0 +1,3 @@ +tags.hotkeys: کلیدهای میانبر +tags.interface: رابط کاربری +tags.tools: ابزارها diff --git a/locale/fr.yml b/locale/fr.yml new file mode 100644 index 0000000..36f3eb3 --- /dev/null +++ b/locale/fr.yml @@ -0,0 +1,3 @@ +tags.hotkeys: Raccourcis clavier +tags.interface: Interface +tags.tools: Outils diff --git a/locale/hu.yml b/locale/hu.yml new file mode 100644 index 0000000..dcc7eb5 --- /dev/null +++ b/locale/hu.yml @@ -0,0 +1,3 @@ +tags.hotkeys: Gyorsbillentyűk +tags.interface: Kezelőfelület +tags.tools: Eszközök diff --git a/locale/ru.yml b/locale/ru.yml new file mode 100644 index 0000000..e438272 --- /dev/null +++ b/locale/ru.yml @@ -0,0 +1,3 @@ +tags.hotkeys: Горячие клавиши +tags.interface: Интерфейс +tags.tools: Инструменты diff --git a/locale/tr.yml b/locale/tr.yml new file mode 100644 index 0000000..4a96bb1 --- /dev/null +++ b/locale/tr.yml @@ -0,0 +1,3 @@ +tags.hotkeys: Kısayol tuşları +tags.interface: Arayüz +tags.tools: Araçlar diff --git a/tests/test_package.py b/tests/test_package.py index c274397..ee8a78f 100644 --- a/tests/test_package.py +++ b/tests/test_package.py @@ -14,7 +14,8 @@ def test_committed_module_package_is_reproducible_and_excludes_test_data(tmp_pat names = set(archive.namelist()) assert {'init.lua', 'definition.yml', 'config.yml', 'build.json', 'code/native/runtime.lua'} <= names assert all(name in ('init.lua', 'definition.yml', 'config.yml', 'README.md', 'build.json') - or name.startswith('code/') for name in names) + or name.startswith(('code/', 'locale/')) for name in names) + assert {f'locale/{lang}.yml' for lang in ('en', 'de', 'fr', 'es', 'hu', 'tr', 'ru', 'ch', 'fa')} <= names assert not any(name.endswith(('.exe', '.dll')) or 'probe' in name for name in names) embedded = json.loads(archive.read('build.json')) assert embedded['commit'] == receipt['commit'] diff --git a/tests/test_release_metadata.py b/tests/test_release_metadata.py index 730fe61..b9bfb31 100644 --- a/tests/test_release_metadata.py +++ b/tests/test_release_metadata.py @@ -10,7 +10,9 @@ def test_optional_legacy_has_required_conflict_value_without_dependency_or_switch(): definition = yaml.safe_load((ROOT / 'definition.yml').read_text(encoding='utf-8')) assert definition['display-name'] == 'Custom Hotkeys' - assert definition['version'] == '0.2.1' + assert definition['version'] == '0.2.2' + assert definition['tags'] == ['hotkeys', 'interface', 'tools'] + assert 'family' not in definition assert 'ucp2-legacy' not in definition['dependencies'] config = yaml.safe_load((ROOT / 'config.yml').read_text(encoding='utf-8'))['config-sparse'] assert config['plugins'] == {} @@ -19,7 +21,7 @@ def test_optional_legacy_has_required_conflict_value_without_dependency_or_switc 'o_keys': {'enabled': {'contents': {'required-value': False}}}}}} assert not (ROOT / 'options.yml').exists() files = {entry.attrib['src'] for entry in ET.parse(ROOT / 'files.xml').findall('./files/file')} - assert files == {'definition.yml', 'config.yml', 'init.lua', 'code', 'README.md'} + assert files == {'definition.yml', 'config.yml', 'init.lua', 'code', 'README.md', 'locale'} def test_all_store_languages_present_the_ingame_editor_without_release_notes(): @@ -37,6 +39,15 @@ def test_all_store_languages_present_the_ingame_editor_without_release_notes(): 'Automarket', 'SHC 1.41', 'Extreme 1.41')) +def test_discovery_tags_have_translated_labels_in_every_store_language(): + assert {p.stem for p in (ROOT / 'locale').glob('*.yml')} == LANGUAGES + for lang in LANGUAGES: + labels = yaml.safe_load((ROOT / 'locale' / f'{lang}.yml').read_text(encoding='utf-8')) + assert set(labels) == {'tags.hotkeys', 'tags.interface', 'tags.tools'} + assert all(isinstance(value, str) and value.strip() and '?' not in value + for value in labels.values()) + + def test_all_runtime_lua_parses(lua): # Includes native-only adapters that cannot execute in the host architecture. load = lua.eval('function(path) return assert(loadfile(path)) ~= nil end')