Skip to content

Commit ecfbfed

Browse files
committed
fix 1364 - language zh-alt-long displayName can't show correctly
1 parent 68cfa21 commit ecfbfed

File tree

2 files changed

+42
-32
lines changed

2 files changed

+42
-32
lines changed

g11n-ws/modules/md-service-i18n-l2/src/main/java/com/vmware/i18n/l2/service/locale/LocaleService.java

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -81,26 +81,22 @@ public List<DisplayLanguageDTO> getDisplayNamesFromCLDR(String productName, Stri
8181
cacheKey = productName + "_" + version + "_" + locale;
8282
}
8383
jsonMap = TranslationCache3.getCachedObject(CacheName.LANGUAGE, cacheKey, HashMap.class);
84+
Map<String, String> languageMap = languageList.stream().collect(Collectors.toMap(language ->language, language -> LocaleUtils.normalizeToLanguageTag(language)));
8485
if (jsonMap == null) {
8586
logger.info("get data from file");
86-
languageList = languageList.stream().map(language -> LocaleUtils.normalizeToLanguageTag(language))
87-
.collect(Collectors.toList());
8887
Map<String, String> tmp = new HashMap<String, String>();
8988
Map<String, Object> displayNamesMap = null;
9089
if (StringUtils.isEmpty(dispLanguage)) {
91-
for (String language : languageList) {
92-
String diplayLanguage = language;
93-
if(language.indexOf(ConstantsUnicode.ALT)>0)//handle languages like en-US-alt-short
94-
diplayLanguage = language.substring(0, language.indexOf(ConstantsUnicode.ALT));
95-
normalizedDispLanguage = CommonUtil.getCLDRLocale(diplayLanguage, localePathMap, localeAliasesMap);
90+
for (String language : languageMap.keySet()) {
91+
normalizedDispLanguage = CommonUtil.getCLDRLocale(languageMap.get(language), localePathMap, localeAliasesMap);
9692
displayNamesMap = languagesParser.getDisplayNames(normalizedDispLanguage);
97-
getDisplayNameForLanguage(language, displayNamesMap, tmp);
93+
getDisplayNameForLanguage(language, languageMap.get(language), displayNamesMap, tmp);
9894
}
9995
} else {
10096
// VIP-2001:[Get LanguageList API]Can't parse the language(i.e. en-US) which in default content json file.
10197
displayNamesMap = languagesParser.getDisplayNames(normalizedDispLanguage);
102-
for (String language : languageList) {
103-
getDisplayNameForLanguage(language, displayNamesMap, tmp);
98+
for (String language : languageMap.keySet()) {
99+
getDisplayNameForLanguage(language, languageMap.get(language), displayNamesMap, tmp);
104100
}
105101
}
106102
if (tmp.size() == 0) {
@@ -112,33 +108,38 @@ public List<DisplayLanguageDTO> getDisplayNamesFromCLDR(String productName, Stri
112108
}
113109
languagesMap = (Map<String, String>) jsonMap.get(LANGUAGE_STR);
114110

115-
for (String language : languageList) {
111+
for (String language : languageMap.keySet()) {
116112
Map<String, String> displayNameMap = null;
117113
if (StringUtils.isEmpty(dispLanguage)) {
118-
displayNameMap = getDisplayNameMap(language, languagesParser, languagesMap.get(language));
114+
normalizedDispLanguage = CommonUtil.getCLDRLocale(languageMap.get(language), localePathMap, localeAliasesMap);
115+
displayNameMap = getDisplayNameMap(normalizedDispLanguage, languagesParser, languagesMap.get(language));
119116
} else {
120117
String disPlayLocale = CommonUtil.getCLDRLocale(dispLanguage.replace("_", "-"),
121118
localePathMap, localeAliasesMap);
122119
displayNameMap = getDisplayNameMap(disPlayLocale, languagesParser, languagesMap.get(language));
123120
}
124121
dto = new DisplayLanguageDTO();
122+
if(language.indexOf(ConstantsUnicode.ALT)>0) {//handle languages like en-US-alt-short
123+
dto.setLanguageTag(language);
124+
}else{
125+
dto.setLanguageTag(languageMap.get(language));
126+
}
125127
dto.setDisplayName(languagesMap.get(language) == null ? "" : languagesMap.get(language));
126128
dto.setDisplayName_sentenceBeginning(StringUtils.isEmpty(displayNameMap.get(DISPLAY_NAME_SENTENCE_BEGINNING)) ? dto.getDisplayName() : displayNameMap.get(DISPLAY_NAME_SENTENCE_BEGINNING));
127129
dto.setDisplayName_uiListOrMenu(StringUtils.isEmpty(displayNameMap.get(DISPLAY_NAME_UI_LIST)) ? dto.getDisplayName() : displayNameMap.get(DISPLAY_NAME_UI_LIST));
128130
dto.setDisplayName_standalone(StringUtils.isEmpty(displayNameMap.get(DISPLAY_NAME_STANDALONE)) ? dto.getDisplayName() : displayNameMap.get(DISPLAY_NAME_STANDALONE));
129-
dto.setLanguageTag(language);
130131
dtoList.add(dto);
131132
}
132133
return dtoList;
133134
}
134135

135-
private void getDisplayNameForLanguage(String language, Map<String, Object> displayNamesMap, Map<String, String> languageNameMap){
136+
private void getDisplayNameForLanguage(String language, String normalizedLanguage, Map<String, Object> displayNamesMap, Map<String, String> languageNameMap){
136137
if(displayNamesMap != null && displayNamesMap.get(LANGUAGE_STR) != null){
137138
Map<String, Object> languageMap = (Map<String, Object>) displayNamesMap.get(LANGUAGE_STR);
138139
if(languageMap != null && languageMap.get(LANGUAGE_STR) != null && ((Map<String, String>)languageMap.get(LANGUAGE_STR)).get(language) != null) {
139140
languageNameMap.put(language, ((Map<String, String>)languageMap.get(LANGUAGE_STR)).get(language));
140141
}else {
141-
languageNameMap.put(language, getDisplayNameByLocaleElements(language, displayNamesMap));
142+
languageNameMap.put(language, getDisplayNameByLocaleElements(normalizedLanguage, displayNamesMap));
142143
}
143144
}else{
144145
languageNameMap.put(language, "");
@@ -168,23 +169,28 @@ private String getDisplayNameByLocaleElements(String locale, Map<String, Object>
168169
boolean hasVariant = variant !=null && variant.length() > 0;
169170

170171
String languageName = languageData.get(language);
171-
StringBuilder buf = new StringBuilder();
172-
if(hasScript){
173-
String scriptName = scriptsData.get(script);
174-
if(scriptName != null)
175-
buf.append(scriptName);
176-
}
177-
if(hasCountry){
178-
String countryName = regionData.get(country);
179-
if(countryName != null)
180-
appendWithSep(buf, localeSeparator, countryName);
181-
}
182-
if(hasVariant){
183-
String variantName = variantsData.get(variant);
184-
if(variantName != null)
185-
appendWithSep(buf, localeSeparator, variantName);
172+
173+
if (!StringUtils.isEmpty(languageName)) {
174+
StringBuilder buf = new StringBuilder();
175+
if (hasScript) {
176+
String scriptName = scriptsData.get(script);
177+
if (scriptName != null) {buf.append(scriptName);}
178+
}
179+
if (hasCountry) {
180+
String countryName = regionData.get(country);
181+
if (countryName != null) {appendWithSep(buf, localeSeparator, countryName);}
182+
}
183+
if (hasVariant) {
184+
String variantName = variantsData.get(variant);
185+
if (variantName != null) {appendWithSep(buf, localeSeparator, variantName);}
186+
}
187+
188+
if (buf.isEmpty()) {
189+
displayName = languageName;
190+
} else {
191+
displayName = MessageFormat.format(localePattern, languageName, buf.toString());
192+
}
186193
}
187-
displayName = MessageFormat.format(localePattern, languageName, buf.toString());
188194
return displayName;
189195
}
190196

g11n-ws/vip-common/src/main/java/com/vmware/vip/common/utils/LocaleUtils.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.List;
1010
import java.util.Locale;
1111

12+
import com.vmware.vip.common.constants.ConstantsUnicode;
1213
import org.apache.commons.lang3.StringUtils;
1314

1415
/**
@@ -103,11 +104,14 @@ public static String normalizeToLanguageTag(String localeStr) {
103104
if(null ==localeStr || "".equalsIgnoreCase(localeStr)){
104105
return localeStr;
105106
}
107+
localeStr = localeStr.replace("_", "-");
108+
if(localeStr.indexOf(ConstantsUnicode.ALT)>0)//handle languages like en-US-alt-short
109+
localeStr = localeStr.substring(0, localeStr.indexOf(ConstantsUnicode.ALT));
106110
if (isLanguageTag(localeStr)) {
107111
return Locale.forLanguageTag(localeStr).toLanguageTag();
108112
} else {
109113
String language = "", country = "", script = "";
110-
String[] os = localeStr.split("_");
114+
String[] os = localeStr.split("-");
111115
for (int i = 0; i < os.length; i++) {
112116
switch (i) {
113117
case 0:

0 commit comments

Comments
 (0)