import 'dart:ui'; import 'locale_storage.dart'; const supportedLocaleCodes = ['en', 'ko']; const defaultLocaleCode = 'en'; String normalizeLocaleCode(String? code) { if (code == null || code.isEmpty) { return defaultLocaleCode; } final normalized = code.toLowerCase(); if (normalized == 'ko' || normalized.startsWith('ko-')) { return 'ko'; } if (normalized == 'en' || normalized.startsWith('en-')) { return 'en'; } return defaultLocaleCode; } String resolvePreferredLocaleCode() { final stored = LocaleStorage.read(); if (stored != null && supportedLocaleCodes.contains(stored)) { return stored; } final deviceLocale = PlatformDispatcher.instance.locale; return normalizeLocaleCode(deviceLocale.languageCode); } String? extractLocaleFromPath(Uri uri) { if (uri.pathSegments.isEmpty) { return null; } final code = uri.pathSegments.first.toLowerCase(); if (supportedLocaleCodes.contains(code)) { return code; } return null; } String stripLocalePath(Uri uri) { final segments = uri.pathSegments; if (segments.isNotEmpty && supportedLocaleCodes.contains(segments.first)) { final rest = segments.skip(1).join('/'); if (rest.isEmpty) { return '/'; } return '/$rest'; } return uri.path; } String buildLocalizedPath(String localeCode, Uri uri) { final segments = uri.pathSegments; Iterable restSegments = segments; if (segments.isNotEmpty) { final head = segments.first.toLowerCase(); if (supportedLocaleCodes.contains(head) || head.length == 2) { restSegments = segments.skip(1); } } final newSegments = [localeCode, ...restSegments]; final path = '/${newSegments.join('/')}'; if (uri.queryParameters.isEmpty) { return path; } return Uri(path: path, queryParameters: uri.queryParameters).toString(); }