Skip to content

Commit bc9e1e3

Browse files
committed
fix apple locale
1 parent 36d7fa2 commit bc9e1e3

5 files changed

Lines changed: 110 additions & 95 deletions

File tree

backend/internal/services/language_service.go

Lines changed: 96 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -14,68 +14,68 @@ type LanguageMetadata struct {
1414

1515
// SupportedLanguages is a curated list of allowed language codes
1616
var SupportedLanguages = map[string]struct{}{
17-
// Apple App Store Connect locale codes
18-
"da": {}, "uk": {}, "ru": {}, "hr": {}, "ca": {}, "hu": {}, "hi": {},
19-
"id": {}, "tr": {}, "he": {}, "el": {}, "de": {}, "it": {}, "no": {}, "cs": {},
20-
"sk": {}, "ja": {}, "fr": {}, "fr-CA": {}, "pl": {}, "th": {}, "sv": {},
21-
"zh-Hans": {}, "zh-Hant": {}, "ro": {}, "fi": {}, "en-US": {}, "en-CA": {}, "en-AU": {}, "en-GB": {},
22-
"nl": {}, "pt-BR": {}, "pt-PT": {}, "es-MX": {}, "es-ES": {}, "vi": {},
23-
"ar": {}, "ko": {}, "ms": {},
17+
// Apple App Store Connect locale codes (41 languages)
18+
"ar-SA": {}, "ca": {}, "zh-Hans": {}, "zh-Hant": {}, "hr": {}, "cs": {}, "da": {},
19+
"nl-NL": {}, "en-AU": {}, "en-CA": {}, "en-GB": {}, "en-US": {}, "fi": {},
20+
"fr-CA": {}, "fr-FR": {}, "de-DE": {}, "el": {}, "he": {}, "hi": {}, "hu": {},
21+
"id": {}, "it": {}, "ja": {}, "ko": {}, "ms": {}, "no": {}, "pl": {},
22+
"pt-BR": {}, "pt-PT": {}, "ro": {}, "ru": {}, "sk": {}, "es-MX": {}, "es-ES": {},
23+
"sv": {}, "th": {}, "tr": {}, "uk": {}, "vi": {},
2424
}
2525

2626
// AppleConnectLanguage is the enum from Apple App Store Connect
2727
type AppleConnectLanguage string
2828

2929
const (
30-
danish AppleConnectLanguage = "da"
31-
ukrainian AppleConnectLanguage = "uk"
32-
russian AppleConnectLanguage = "ru"
33-
croatian AppleConnectLanguage = "hr"
34-
catalan AppleConnectLanguage = "ca"
35-
hungarian AppleConnectLanguage = "hu"
36-
hindiNorth AppleConnectLanguage = "hi"
37-
indonesian AppleConnectLanguage = "id"
38-
turkish AppleConnectLanguage = "tr"
39-
hebrew AppleConnectLanguage = "he"
40-
greek AppleConnectLanguage = "el"
41-
german AppleConnectLanguage = "de"
42-
italian AppleConnectLanguage = "it"
43-
norwegian AppleConnectLanguage = "no"
44-
czech AppleConnectLanguage = "cs"
45-
slovak AppleConnectLanguage = "sk"
46-
japanese AppleConnectLanguage = "ja"
47-
french AppleConnectLanguage = "fr"
48-
frenchCanada AppleConnectLanguage = "fr-CA"
49-
polish AppleConnectLanguage = "pl"
50-
thai AppleConnectLanguage = "th"
51-
swedish AppleConnectLanguage = "sv"
30+
arabic AppleConnectLanguage = "ar-SA"
31+
catalan AppleConnectLanguage = "ca"
5232
chineseSimplified AppleConnectLanguage = "zh-Hans"
5333
chineseTraditional AppleConnectLanguage = "zh-Hant"
54-
romanian AppleConnectLanguage = "ro"
55-
finnish AppleConnectLanguage = "fi"
56-
englishUS AppleConnectLanguage = "en-US"
57-
englishCanada AppleConnectLanguage = "en-CA"
58-
englishAustralia AppleConnectLanguage = "en-AU"
59-
englishUK AppleConnectLanguage = "en-GB"
60-
dutch AppleConnectLanguage = "nl"
61-
portugueseBrazil AppleConnectLanguage = "pt-BR"
34+
croatian AppleConnectLanguage = "hr"
35+
czech AppleConnectLanguage = "cs"
36+
danish AppleConnectLanguage = "da"
37+
dutch AppleConnectLanguage = "nl-NL"
38+
englishAustralia AppleConnectLanguage = "en-AU"
39+
englishCanada AppleConnectLanguage = "en-CA"
40+
englishUK AppleConnectLanguage = "en-GB"
41+
englishUS AppleConnectLanguage = "en-US"
42+
finnish AppleConnectLanguage = "fi"
43+
frenchCanada AppleConnectLanguage = "fr-CA"
44+
frenchFrance AppleConnectLanguage = "fr-FR"
45+
german AppleConnectLanguage = "de-DE"
46+
greek AppleConnectLanguage = "el"
47+
hebrew AppleConnectLanguage = "he"
48+
hindi AppleConnectLanguage = "hi"
49+
hungarian AppleConnectLanguage = "hu"
50+
indonesian AppleConnectLanguage = "id"
51+
italian AppleConnectLanguage = "it"
52+
japanese AppleConnectLanguage = "ja"
53+
korean AppleConnectLanguage = "ko"
54+
malay AppleConnectLanguage = "ms"
55+
norwegian AppleConnectLanguage = "no"
56+
polish AppleConnectLanguage = "pl"
57+
portugueseBrazil AppleConnectLanguage = "pt-BR"
6258
portuguesePortugal AppleConnectLanguage = "pt-PT"
63-
spanishMexico AppleConnectLanguage = "es-MX"
64-
spanishSpain AppleConnectLanguage = "es-ES"
65-
vietnamese AppleConnectLanguage = "vi"
66-
arabic AppleConnectLanguage = "ar"
67-
korean AppleConnectLanguage = "ko"
68-
malay AppleConnectLanguage = "ms"
59+
romanian AppleConnectLanguage = "ro"
60+
russian AppleConnectLanguage = "ru"
61+
slovak AppleConnectLanguage = "sk"
62+
spanishMexico AppleConnectLanguage = "es-MX"
63+
spanishSpain AppleConnectLanguage = "es-ES"
64+
swedish AppleConnectLanguage = "sv"
65+
thai AppleConnectLanguage = "th"
66+
turkish AppleConnectLanguage = "tr"
67+
ukrainian AppleConnectLanguage = "uk"
68+
vietnamese AppleConnectLanguage = "vi"
6969
)
7070

71-
// AppleConnectLanguages is the list of all Apple Store Connect supported languages
71+
// AppleConnectLanguages is the list of all Apple Store Connect supported languages (41 languages)
7272
var AppleConnectLanguages = []AppleConnectLanguage{
73-
danish, ukrainian, russian, croatian, catalan, hungarian, hindiNorth, indonesian,
74-
turkish, hebrew, greek, german, italian, norwegian, czech, slovak, japanese,
75-
french, frenchCanada, polish, thai, swedish, chineseSimplified, chineseTraditional,
76-
romanian, finnish, englishUS, englishCanada, englishAustralia, englishUK, dutch,
77-
portugueseBrazil, portuguesePortugal, spanishMexico, spanishSpain, vietnamese,
78-
arabic, korean, malay,
73+
arabic, catalan, chineseSimplified, chineseTraditional, croatian, czech, danish,
74+
dutch, englishAustralia, englishCanada, englishUK, englishUS, finnish,
75+
frenchCanada, frenchFrance, german, greek, hebrew, hindi, hungarian,
76+
indonesian, italian, japanese, korean, malay, norwegian, polish,
77+
portugueseBrazil, portuguesePortugal, romanian, russian, slovak, spanishMexico, spanishSpain,
78+
swedish, thai, turkish, ukrainian, vietnamese,
7979
}
8080

8181
// GetAppleConnectLanguages returns the list of Apple Connect languages with metadata
@@ -91,17 +91,24 @@ func GetAppleConnectLanguages() []LanguageMetadata {
9191

9292
// GetAppleConnectLanguageMetadata returns metadata for a specific Apple Connect language
9393
func GetAppleConnectLanguageMetadata(code string) (LanguageMetadata, bool) {
94-
// Map basic language codes to full Apple Connect codes
94+
// Map alternative language codes to Apple Connect codes
9595
appleConnectMap := map[string]string{
96-
"da": "da", "uk": "uk", "ru": "ru", "hr": "hr", "ca": "ca", "hu": "hu",
97-
"hi": "hi", "id": "id", "tr": "tr", "he": "he", "el": "el", "de": "de", "it": "it",
98-
"no": "no", "cs": "cs", "sk": "sk", "ja": "ja", "fr": "fr", "fr-CA": "fr-CA", "pl": "pl",
99-
"th": "th", "sv": "sv", "zh-Hans": "zh-Hans", "zh-Hant": "zh-Hant", "ro": "ro",
100-
"fi": "fi", "en-CA": "en-CA", "en-AU": "en-AU", "en-GB": "en-GB", "nl": "nl",
101-
"pt-BR": "pt-BR", "pt-PT": "pt-PT", "es-MX": "es-MX", "es-ES": "es-ES", "vi": "vi",
102-
"ar": "ar", "ko": "ko", "ms": "ms",
96+
"ar": "ar-SA", "ar-SA": "ar-SA",
97+
"ca": "ca",
98+
"zh-CN": "zh-Hans", "zh-Hans": "zh-Hans", "zh-Hans-CN": "zh-Hans",
99+
"zh-TW": "zh-Hant", "zh-Hant": "zh-Hant", "zh-Hant-TW": "zh-Hant",
100+
"hr": "hr", "cs": "cs", "da": "da",
101+
"nl": "nl-NL", "nl-NL": "nl-NL",
102+
"en-AU": "en-AU", "en-CA": "en-CA", "en-GB": "en-GB", "en-US": "en-US",
103+
"fi": "fi", "fr-CA": "fr-CA", "fr-FR": "fr-FR", "fr": "fr-FR",
104+
"de-DE": "de-DE", "de": "de-DE",
105+
"el": "el", "he": "he", "hi": "hi", "hu": "hu", "id": "id",
106+
"it": "it", "ja": "ja", "ko": "ko", "ms": "ms", "no": "no",
107+
"pl": "pl", "pt-BR": "pt-BR", "pt-PT": "pt-PT", "ro": "ro",
108+
"ru": "ru", "sk": "sk", "es-MX": "es-MX", "es-ES": "es-ES", "es": "es-ES",
109+
"sv": "sv", "th": "th", "tr": "tr", "uk": "uk", "vi": "vi",
103110
}
104-
111+
105112
if mappedCode, ok := appleConnectMap[code]; ok {
106113
if meta, ok := LanguageMetadataMap[mappedCode]; ok {
107114
return meta, true
@@ -112,46 +119,46 @@ func GetAppleConnectLanguageMetadata(code string) (LanguageMetadata, bool) {
112119

113120
// LanguageMetadataMap contains detailed information about each language
114121
var LanguageMetadataMap = map[string]LanguageMetadata{
115-
// Apple App Store Connect languages (37 languages)
116-
"da": {Code: "da", Name: "Danish", NativeName: "Dansk", Region: "Europe", Direction: "ltr", Emoji: "🇩🇰"},
117-
"uk": {Code: "uk", Name: "Ukrainian", NativeName: "Українська", Region: "Europe", Direction: "ltr", Emoji: "🇺🇦"},
118-
"ru": {Code: "ru", Name: "Russian", NativeName: "Русский", Region: "Europe", Direction: "ltr", Emoji: "🇷🇺"},
119-
"hr": {Code: "hr", Name: "Croatian", NativeName: "Hrvatski", Region: "Europe", Direction: "ltr", Emoji: "🇭🇷"},
122+
// Apple App Store Connect languages (41 languages)
123+
"ar-SA": {Code: "ar-SA", Name: "Arabic", NativeName: "العربية", Region: "Middle East", Direction: "rtl", Emoji: "🇸🇦"},
120124
"ca": {Code: "ca", Name: "Catalan", NativeName: "Català", Region: "Europe", Direction: "ltr", Emoji: "🇪🇸"},
121-
"hu": {Code: "hu", Name: "Hungarian", NativeName: "Magyar", Region: "Europe", Direction: "ltr", Emoji: "🇭🇺"},
125+
"zh-Hans": {Code: "zh-Hans", Name: "Chinese (Simplified)", NativeName: "简体中文", Region: "Asia", Direction: "ltr", Emoji: "🇨🇳"},
126+
"zh-Hant": {Code: "zh-Hant", Name: "Chinese (Traditional)", NativeName: "繁體中文", Region: "Asia", Direction: "ltr", Emoji: "🇹🇼"},
127+
"hr": {Code: "hr", Name: "Croatian", NativeName: "Hrvatski", Region: "Europe", Direction: "ltr", Emoji: "🇭🇷"},
128+
"cs": {Code: "cs", Name: "Czech", NativeName: "Čeština", Region: "Europe", Direction: "ltr", Emoji: "🇨🇿"},
129+
"da": {Code: "da", Name: "Danish", NativeName: "Dansk", Region: "Europe", Direction: "ltr", Emoji: "🇩🇰"},
130+
"nl-NL": {Code: "nl-NL", Name: "Dutch", NativeName: "Nederlands", Region: "Europe", Direction: "ltr", Emoji: "🇳🇱"},
131+
"en-AU": {Code: "en-AU", Name: "English (Australia)", NativeName: "English (Australia)", Region: "Oceania", Direction: "ltr", Emoji: "🇦🇺"},
132+
"en-CA": {Code: "en-CA", Name: "English (Canada)", NativeName: "English (Canada)", Region: "Americas", Direction: "ltr", Emoji: "🇨🇦"},
133+
"en-GB": {Code: "en-GB", Name: "English (U.K.)", NativeName: "English (U.K.)", Region: "Europe", Direction: "ltr", Emoji: "🇬🇧"},
134+
"en-US": {Code: "en-US", Name: "English (U.S.)", NativeName: "English (U.S.)", Region: "Americas", Direction: "ltr", Emoji: "🇺🇸"},
135+
"fi": {Code: "fi", Name: "Finnish", NativeName: "Suomi", Region: "Europe", Direction: "ltr", Emoji: "🇫🇮"},
136+
"fr-CA": {Code: "fr-CA", Name: "French (Canada)", NativeName: "Français (Canada)", Region: "Americas", Direction: "ltr", Emoji: "🇨🇦"},
137+
"fr-FR": {Code: "fr-FR", Name: "French (France)", NativeName: "Français (France)", Region: "Europe", Direction: "ltr", Emoji: "🇫🇷"},
138+
"de-DE": {Code: "de-DE", Name: "German", NativeName: "Deutsch", Region: "Europe", Direction: "ltr", Emoji: "🇩🇪"},
139+
"el": {Code: "el", Name: "Greek", NativeName: "Ελληνικά", Region: "Europe", Direction: "ltr", Emoji: "🇬🇷"},
140+
"he": {Code: "he", Name: "Hebrew", NativeName: "עברית", Region: "Middle East", Direction: "rtl", Emoji: "🇮🇱"},
122141
"hi": {Code: "hi", Name: "Hindi", NativeName: "हिन्दी", Region: "Asia", Direction: "ltr", Emoji: "🇮🇳"},
142+
"hu": {Code: "hu", Name: "Hungarian", NativeName: "Magyar", Region: "Europe", Direction: "ltr", Emoji: "🇭🇺"},
123143
"id": {Code: "id", Name: "Indonesian", NativeName: "Bahasa Indonesia", Region: "Asia", Direction: "ltr", Emoji: "🇮🇩"},
124-
"tr": {Code: "tr", Name: "Turkish", NativeName: "Türkçe", Region: "Asia", Direction: "ltr", Emoji: "🇹🇷"},
125-
"he": {Code: "he", Name: "Hebrew", NativeName: "עברית", Region: "Middle East", Direction: "rtl", Emoji: "🇮🇱"},
126-
"el": {Code: "el", Name: "Greek", NativeName: "Ελληνικά", Region: "Europe", Direction: "ltr", Emoji: "🇬🇷"},
127-
"de": {Code: "de", Name: "German", NativeName: "Deutsch", Region: "Europe", Direction: "ltr", Emoji: "🇩🇪"},
128144
"it": {Code: "it", Name: "Italian", NativeName: "Italiano", Region: "Europe", Direction: "ltr", Emoji: "🇮🇹"},
129-
"no": {Code: "no", Name: "Norwegian", NativeName: "Norsk", Region: "Europe", Direction: "ltr", Emoji: "🇳🇴"},
130-
"cs": {Code: "cs", Name: "Czech", NativeName: "Čeština", Region: "Europe", Direction: "ltr", Emoji: "🇨🇿"},
131-
"sk": {Code: "sk", Name: "Slovak", NativeName: "Slovenčina", Region: "Europe", Direction: "ltr", Emoji: "🇸🇰"},
132145
"ja": {Code: "ja", Name: "Japanese", NativeName: "日本語", Region: "Asia", Direction: "ltr", Emoji: "🇯🇵"},
133-
"fr": {Code: "fr", Name: "French", NativeName: "Français", Region: "Europe", Direction: "ltr", Emoji: "🇫🇷"},
134-
"fr-CA": {Code: "fr-CA", Name: "French (Canada)", NativeName: "Français (Canada)", Region: "Americas", Direction: "ltr", Emoji: "🇨🇦"},
146+
"ko": {Code: "ko", Name: "Korean", NativeName: "한국어", Region: "Asia", Direction: "ltr", Emoji: "🇰🇷"},
147+
"ms": {Code: "ms", Name: "Malay", NativeName: "Bahasa Melayu", Region: "Asia", Direction: "ltr", Emoji: "🇲🇾"},
148+
"no": {Code: "no", Name: "Norwegian", NativeName: "Norsk", Region: "Europe", Direction: "ltr", Emoji: "🇳🇴"},
135149
"pl": {Code: "pl", Name: "Polish", NativeName: "Polski", Region: "Europe", Direction: "ltr", Emoji: "🇵🇱"},
136-
"th": {Code: "th", Name: "Thai", NativeName: "ไทย", Region: "Asia", Direction: "ltr", Emoji: "🇹🇭"},
137-
"sv": {Code: "sv", Name: "Swedish", NativeName: "Svenska", Region: "Europe", Direction: "ltr", Emoji: "🇸🇪"},
138-
"zh-Hans": {Code: "zh-Hans", Name: "Chinese (Simplified)", NativeName: "简体中文", Region: "Asia", Direction: "ltr", Emoji: "🇨🇳"},
139-
"zh-Hant": {Code: "zh-Hant", Name: "Chinese (Traditional)", NativeName: "繁體中文", Region: "Asia", Direction: "ltr", Emoji: "🇹🇼"},
140-
"ro": {Code: "ro", Name: "Romanian", NativeName: "Română", Region: "Europe", Direction: "ltr", Emoji: "🇷🇴"},
141-
"fi": {Code: "fi", Name: "Finnish", NativeName: "Suomi", Region: "Europe", Direction: "ltr", Emoji: "🇫🇮"},
142-
"en-US": {Code: "en-US", Name: "English (America)", NativeName: "English (America)", Region: "Americas", Direction: "ltr", Emoji: "🇺🇸"},
143-
"en-CA": {Code: "en-CA", Name: "English (Canada)", NativeName: "English (Canada)", Region: "Americas", Direction: "ltr", Emoji: "🇨🇦"},
144-
"en-AU": {Code: "en-AU", Name: "English (Australia)", NativeName: "English (Australia)", Region: "Oceania", Direction: "ltr", Emoji: "🇦🇺"},
145-
"en-GB": {Code: "en-GB", Name: "English (United Kingdom)", NativeName: "English (United Kingdom)", Region: "Europe", Direction: "ltr", Emoji: "🇬🇧"},
146-
"nl": {Code: "nl", Name: "Dutch", NativeName: "Nederlands", Region: "Europe", Direction: "ltr", Emoji: "🇳🇱"},
147150
"pt-BR": {Code: "pt-BR", Name: "Portuguese (Brazil)", NativeName: "Português (Brasil)", Region: "Americas", Direction: "ltr", Emoji: "🇧🇷"},
148151
"pt-PT": {Code: "pt-PT", Name: "Portuguese (Portugal)", NativeName: "Português (Portugal)", Region: "Europe", Direction: "ltr", Emoji: "🇵🇹"},
152+
"ro": {Code: "ro", Name: "Romanian", NativeName: "Română", Region: "Europe", Direction: "ltr", Emoji: "🇷🇴"},
153+
"ru": {Code: "ru", Name: "Russian", NativeName: "Русский", Region: "Europe", Direction: "ltr", Emoji: "🇷🇺"},
154+
"sk": {Code: "sk", Name: "Slovak", NativeName: "Slovenčina", Region: "Europe", Direction: "ltr", Emoji: "🇸🇰"},
149155
"es-MX": {Code: "es-MX", Name: "Spanish (Mexico)", NativeName: "Español (México)", Region: "Americas", Direction: "ltr", Emoji: "🇲🇽"},
150156
"es-ES": {Code: "es-ES", Name: "Spanish (Spain)", NativeName: "Español (España)", Region: "Europe", Direction: "ltr", Emoji: "🇪🇸"},
157+
"sv": {Code: "sv", Name: "Swedish", NativeName: "Svenska", Region: "Europe", Direction: "ltr", Emoji: "🇸🇪"},
158+
"th": {Code: "th", Name: "Thai", NativeName: "ไทย", Region: "Asia", Direction: "ltr", Emoji: "🇹🇭"},
159+
"tr": {Code: "tr", Name: "Turkish", NativeName: "Türkçe", Region: "Asia", Direction: "ltr", Emoji: "🇹🇷"},
160+
"uk": {Code: "uk", Name: "Ukrainian", NativeName: "Українська", Region: "Europe", Direction: "ltr", Emoji: "🇺🇦"},
151161
"vi": {Code: "vi", Name: "Vietnamese", NativeName: "Tiếng Việt", Region: "Asia", Direction: "ltr", Emoji: "🇻🇳"},
152-
"ar": {Code: "ar", Name: "Arabic", NativeName: "العربية", Region: "Middle East", Direction: "rtl", Emoji: "🇸🇦"},
153-
"ko": {Code: "ko", Name: "Korean", NativeName: "한국어", Region: "Asia", Direction: "ltr", Emoji: "🇰🇷"},
154-
"ms": {Code: "ms", Name: "Malay", NativeName: "Bahasa Melayu", Region: "Asia", Direction: "ltr", Emoji: "🇲🇾"},
155162
}
156163

157164
// IsSupportedLanguage checks if a language code is allowed
@@ -200,4 +207,4 @@ func GetLanguageEmoji(code string) string {
200207
return lang.Emoji
201208
}
202209
return "🌐"
203-
}
210+
}

web/src/views/AppLocalizations.vue

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -876,7 +876,15 @@ async function fetchLocalizations() {
876876
try {
877877
const response = await api.getAppLocalizations(appId.value)
878878
if (response.success) {
879-
localizations.value = response.localizations
879+
// 去重:按 languageCode 去重,保留 ID 最大的(最新的记录)
880+
const seen = new Map<string, AppLocalization>()
881+
for (const loc of response.localizations) {
882+
const existing = seen.get(loc.languageCode)
883+
if (!existing || loc.id > existing.id) {
884+
seen.set(loc.languageCode, loc)
885+
}
886+
}
887+
localizations.value = Array.from(seen.values())
880888
}
881889
} catch (error) {
882890
console.error('Failed to fetch localizations:', error)
Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webui/dist/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
<meta charset="UTF-8" />
55
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7-
<title>XCStrings Translator</title>
7+
<title>OpenTrans</title>
88
<link rel="preconnect" href="https://fonts.googleapis.com">
99
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
1010
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Space+Grotesk:wght@400;500;600&display=swap" rel="stylesheet">
11-
<script type="module" crossorigin src="/assets/index-CBUJTaG8.js"></script>
11+
<script type="module" crossorigin src="/assets/index-uG8J5YR6.js"></script>
1212
<link rel="stylesheet" crossorigin href="/assets/index-bBGLHCQX.css">
1313
</head>
1414
<body class="font-body">

0 commit comments

Comments
 (0)