Skip to content

Commit 6662bdc

Browse files
committed
refactor(writeObject): Улучшена обработка мультиязычных пояснений в конвертере SubsystemDesignerWriteConverter
- Добавлен новый список предпочтительных локалей для выбора языковой записи в методе explanationToString. - Обновлены комментарии для более точного описания логики обработки мультиязычных данных в формате Designer.
1 parent add931b commit 6662bdc

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

src/main/java/com/github/_1c_syntax/bsl/writer/designer/SubsystemDesignerWriteConverter.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
3030
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
3131

32+
import java.util.List;
3233
import java.util.Set;
3334

3435
/**
@@ -47,6 +48,8 @@ public class SubsystemDesignerWriteConverter implements Converter {
4748
private static final String V8_CONTENT = "v8:content";
4849
private static final String FALSE = "false";
4950
private static final Set<String> ALLOW_EMPTY_NODES = Set.of("Comment", "Explanation", "Picture", "Content");
51+
/** Preferred locale order for Explanation when Designer format only allows a single string. */
52+
private static final List<String> EXPLANATION_LOCALE_ORDER = List.of("ru", "en");
5053

5154
@Override
5255
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
@@ -80,8 +83,9 @@ public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingC
8083

8184
/**
8285
* Преобразует мультиязычное пояснение в одну строку для элемента Designer Explanation.
83-
* В формате Designer элемент Explanation не поддерживает мультиязычность, поэтому выводится
84-
* первая доступная языковая запись.
86+
* В формате Designer элемент Explanation — одно строковое значение, мультиязычность не поддерживается.
87+
* Используется подход (A): выбор по предпочтительному порядку локалей — сначала "ru", затем "en",
88+
* затем первая доступная запись. Остальные переводы не выводятся.
8589
*/
8690
private static String explanationToString(MultiLanguageString explanation) {
8791
if (explanation == null || explanation.isEmpty()) {
@@ -91,6 +95,16 @@ private static String explanationToString(MultiLanguageString explanation) {
9195
if (content == null || content.isEmpty()) {
9296
return "";
9397
}
98+
for (var locale : EXPLANATION_LOCALE_ORDER) {
99+
var value = content.stream()
100+
.filter(e -> locale.equals(e.getLangKey()))
101+
.findFirst()
102+
.map(e -> e.getValue())
103+
.orElse(null);
104+
if (value != null && !value.isEmpty()) {
105+
return value;
106+
}
107+
}
94108
return content.iterator().next().getValue();
95109
}
96110

0 commit comments

Comments
 (0)