feat: add runtime i18n API with manifest translations

This commit is contained in:
gem
2026-06-12 10:19:14 +08:00
parent 79ee35db2f
commit 4ea3663853
8 changed files with 141 additions and 0 deletions

View File

@@ -181,6 +181,25 @@ class FlameLuaGame extends FlameGame with PanDetector, ScrollDetector {
_resources = activation.resources;
_audio = activation.audio ?? _createAudioManager();
_scriptEngine = activation.scriptEngine;
// 合并所有包的翻译字典,框架包先、游戏包后,后加载的覆盖先加载的。
final mergedTranslations = <String, Map<String, String>>{};
for (final package in activation.packages) {
for (final entry in package.manifest.translations.entries) {
mergedTranslations.putIfAbsent(entry.key, () => {})
.addAll(entry.value);
}
}
final resolvedLocale = RuntimeLocaleResolver.resolve(
requested: _localeOverride ?? PlatformDispatcher.instance.locale,
defaultLocale: activation.package.manifest.defaultLocale,
supportedLocales: activation.package.manifest.supportedLocales,
);
_scriptEngine.setTranslations(
locale: resolvedLocale.resolved,
translations: mergedTranslations,
);
_viewportConfig = activation.package.manifest.display.toViewportConfig();
_viewportRoot = PositionComponent();
add(_viewportRoot);