Существуют ли передовые практики, которым необходимо следовать при разработке модели / ViewModel для представления данных в приложении, которое будет просматривать / редактировать эти данные на нескольких языках? Наш класс верхнего уровня, назовем его «Курс», содержит несколько свойств коллекции, например, Books и TopicsCovered, каждое из которых может иметь свойство коллекции среди своих данных. Какую структуру классов я должен реализовать для хранения данных для определенных свойств на нескольких языках?
Например, данные должны представлять course1.Books.First (). Заголовок на разных языках и course1.TopicsCovered.First (). Имя на разных языках. Нам нужно приложение, которое может редактировать любые данные для одного данного курса на любом из доступных языков, а также редактировать данные, не относящиеся к конкретному языку, например, «Автор книги» (т.е. course1.Books.First (). Автор). У нас возникают проблемы с выяснением того, как лучше настроить модель для включения привязки в представлении XAML.
Например, заменяем ли мы (в одноязычной модели) каждую строку на набор экземпляров LanguageSpecificString? Таким образом, чтобы получить название на текущем языке:
course1.Books.First().Title.Where(lss => lss.Language==CurrentLanguage).SingleOrDefault()
Если мы сделаем это, мы не сможем легко связать любое значение на одном данном языке, только с набором значений языка, таких как ItemsControl.
<TextBox Text={Binding Title.???} /> <!-- no way to bind to the current language title -->
Заменим ли мы курс высшего уровня на набор языковых курсов? Итак, чтобы получить название на текущем языке:
course1.GetLanguage(CurrentLanguage).Books.First().Title
Если мы это сделаем, мы можем легко работать только с одним языком одновременно; мы могли бы хотеть, чтобы представление показывало один язык и позволяло пользователю редактировать другой.
<TextBox Text={Binding Title} /> <!-- good -->
<TextBlock Text={Binding ??? } /> <!-- no way to bind to the other language's title-->
Кроме того, недостатком является то, что они не представляют нейтрально-языковые данные как таковые; каждое свойство (например, Author) может показаться на нескольких языках. Даже нестроковые свойства будут на нескольких языках.
Есть ли вариант между этими двумя? Есть ли другой способ, о котором мы не думаем?
Я понимаю, что это несколько расплывчато, но, похоже, это довольно распространенная проблема для разработки.
Примечание. Речь идет не о предоставлении многоязычного пользовательского интерфейса, а о гибком редактировании многоязычных данных.
Редактировать: поэтому вопрос в том, как мы должны моделировать классы? Примерно так:
Class Course {
ObservableCollection<Book> Books
ObservableCollection<Topic> TopicsCovered
}
Class Book {
ObservableCollection<LanguageSpecificString> Title
String Author
}
Class Topic {
ObservableCollection<LanguageSpecificString> Name
}
Class LanguageSpecificString {
String LanguageCode
String Value
}
Или это должно быть что-то вроде:
Class MultilingualCourse {
Course GetLanguage(string languageCode)
}
Class Course {
ObservableCollection<Book> Books
ObservableCollection<Topic> TopicsCovered
}
Class Book {
String Title
String Author
}
Class Topic {
String Name
}
Или что-то совсем другое?