Поскольку вы не хотите перечислять все локали в произвольном формате, исправление исключений выглядит лучше. Это может быть пользовательский шаблон или просто выбор другого стиля / постредактирование.
String[] locales = {"en-GB", "es-ES", "zh-CN", "de-DE", "fr-FR", "it-IT",
"ja-JP", "ko-KR", "ko-KP"};
for (String loc : locales) {
String[] langCtry = loc.split("-");
Locale locale = new Locale(langCtry[0], langCtry[1]);
Locale.setDefault(locale);
LocalDate.set(2019, 1, 17);
FormatStyle style = locale.getLanguage().equals("ja") ? FormatStyle.FULL
: FormatStyle.LONG;
DateTimeFormatter.ofLocalizedDate(style);
String text = format.format(date);
if (locale.getLanguage().equals("ko")) {
text = text.replaceFirst("\\s\\S+$", "");
}
System.out.printf("%s: %s%n", locale, text);
}
Это исправляет и JA и КО , по-разному.
Может пригодиться набор модульных тестов для проверки ожидаемого, так как данные, зависящие от локали, могут со временем меняться.
Можно также поместить "конкатенацию" в текстовую часть тега при использовании шаблонного поля:
<asp:TemplateField HeaderText="Name" SortExpression="sortName">
<ItemTemplate>
<asp:LinkButton ID="lbName" runat="server" OnClick="lbName_Click" CommandArgument='<%# Eval("ID") %>'>
<%--Enter any text / eval bindind you want between the tags--%>
<%# Eval("Name") %> (<%# Eval("ID") %>)
</asp:LinkButton>
</ItemTemplate>
Это приводит к выводу как:
Имя (идентификатор)
в шаблонном столбце.
Используйте Оценку вместо этого.
Text='<%# Eval("ID", "{0} View") %>'
Оценка также лучше, если значение не будет обновленным, где Связывают, позволяет двум путям привязку данных.
Я использовал String.Format("{0}{1}"
... прежде успешно.