mirror of
https://github.com/niakw/Prospero.Eden-Encore.git
synced 2026-10-29 00:01:50 +01:00
55 lines
2.9 KiB
Python
Executable File
55 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
"""Release guard for PS5 locale -> launcher catalog selection and live language switching."""
|
|
from pathlib import Path
|
|
import re
|
|
|
|
root = Path(__file__).resolve().parents[1]
|
|
system = (root / 'third_party/ps5_system_language.hpp').read_text()
|
|
settings = (root / 'headless/settings_store.h').read_text()
|
|
frontend = (root / 'headless/prosperoeden/frontend.cpp').read_text()
|
|
browse = (root / 'headless/prosperoeden/pe/ui/browse.cpp').read_text()
|
|
services = (root / 'headless/prosperoeden/eden_services.cpp').read_text()
|
|
launcher = (root / 'headless/prosperoeden/pe/ui/launcher.hpp').read_text()
|
|
lang_dir = root / 'headless/prosperoeden/ui/lang'
|
|
|
|
quoted = lambda body: re.findall(r'"([^"\\]*(?:\\.[^"\\]*)*)"', body)
|
|
|
|
def array(name: str, text: str):
|
|
match = re.search(rf'{re.escape(name)}[^=]*=\s*\{{(.*?)\}};', text, re.S)
|
|
assert match, f'missing {name}'
|
|
return quoted(match.group(1))
|
|
|
|
system_tags = array('kLanguageTags', system)
|
|
assert len(system_tags) == 31, len(system_tags)
|
|
assert system_tags[2] == 'fr-FR', f'PS5 French must map to fr-FR, got {system_tags[2]!r}'
|
|
|
|
keys = array('kLanguageKeys', settings)
|
|
catalogs = array('kLanguageCatalogTags', settings)
|
|
assert len(keys) == len(catalogs) >= 18
|
|
assert keys[2] == 'fr' and catalogs[2] == 'fr-FR', (keys[2], catalogs[2])
|
|
|
|
po = sorted(lang_dir.glob('*.po'))
|
|
assert len(po) == 29, f'expected 29 launcher catalogs, got {len(po)}'
|
|
fr = lang_dir / 'fr-FR.po'
|
|
assert fr.is_file() and fr.stat().st_size > 1000, 'complete fr-FR catalog missing'
|
|
|
|
# A release must never let an old dev override force English. The only language.txt read must live
|
|
# inside the EDEN_DEV_PROFILE block.
|
|
needle = 'Eden::AppFile(\"language.txt\")'
|
|
pos = frontend.find(needle)
|
|
assert pos >= 0, 'development language override missing'
|
|
ifdef = frontend.rfind('#ifdef EDEN_DEV_PROFILE', 0, pos)
|
|
endif = frontend.find('#endif', pos)
|
|
assert ifdef >= 0 and endif > pos, 'language.txt is not development-only'
|
|
assert 'pe::catalog().clear();' in frontend, 'catalog is not cleared before each launcher language load'
|
|
assert 'launcher.restart_requested()' in frontend, 'frontend does not honor launcher language restart'
|
|
assert 'EDEN_LANGUAGE launcher-restart=1' in frontend, 'language restart is not diagnosable'
|
|
assert 'Requested launcher catalog unavailable:' in frontend, 'missing catalog is not reported'
|
|
assert 'restart_requested_ = true;' in browse, 'Settings > Language does not request live launcher reload'
|
|
assert 'bool restart_requested() const' in launcher, 'launcher restart contract missing'
|
|
assert 'static const std::vector<std::string> labels = Labels' not in services, 'translated labels survive a launcher restart'
|
|
assert 'return language_labels_;' in services and 'return resolution_labels_;' in services, 'translated labels are not per-service caches'
|
|
|
|
print('Language runtime contract PASS (PS5 French -> fr-FR, release override safe, live reload, 29 catalogs)')
|