public Article(Workspace workspace, WorkspaceRepository repository, string articleName) { m_workspace = workspace; m_repository = repository; Name = articleName; // Запрашиваем текст статьи у БД WorkspaceRepository.FinishedText originalFinishedText = m_repository.GetArticleText(Name); // Создаем оригинальный текст статьи OriginalText = new TextInLanguage(workspace.Language.Code, originalFinishedText.text, originalFinishedText.finished); CurrentArtisticalTranslation = null; UpdateTranslationUnits(); }
public TranslationUnit(TextInLanguage.SyntaxLayout.Word[] originalPhrase) { OriginalPhrase = originalPhrase; }
void BuildUniversal_FinishWord(TextInLanguage.SyntaxLayout.Sentence sentence, ref string word, int startIndex, int endIndex) { if (word != string.Empty) { var props = new TextInLanguage.SyntaxLayout.Word.Properties(); sentence.AddWord(word, startIndex, endIndex, props); word = string.Empty; } }
// Получает перевод (если таковой есть) для фразы, в которой содержится заданное слово. Так как фраза для слова может быть // Только одна то тут либо будет ее перевод либо будет null, в случае если фразы у этого слова нет public TranslationUnit GetPhraseTranslation(string languageCode, TextInLanguage.SyntaxLayout.Word wordInPhrase) { if (wordInPhrase == null) return null; // Получаем для заданного языка все еденицы перевода List<TranslationUnit> translationLanguageUnits; bool languageExists = m_translationUnits.TryGetValue(languageCode, out translationLanguageUnits); Debug.Assert(languageExists); // Пробегаем все еденицы перевода для заданного языка foreach (TranslationUnit translationUnit in translationLanguageUnits) { // Возвратим перевод если перевод идет для фразы (более 1го слова) и перевод содержит заданное слово if (translationUnit.OriginalPhrase.Length > 1 && wordInPhrase.FirstIndex >= translationUnit.OriginalPhrase[0].FirstIndex && wordInPhrase.LastIndex <= translationUnit.OriginalPhrase[translationUnit.OriginalPhrase.Length - 1].LastIndex && translationUnit.OriginalPhrase.Contains(wordInPhrase)) { return translationUnit; } } return null; }
// Получает перевод (если таковой есть) для заданного слова. То есть перевод самого слова, без фразы public TranslationUnit GetWordTranslation(string languageCode, TextInLanguage.SyntaxLayout.Word word) { if (word == null) return null; // Получаем для заданного языка все еденицы перевода List<TranslationUnit> translationLanguageUnits; bool languageExists = m_translationUnits.TryGetValue(languageCode, out translationLanguageUnits); Debug.Assert(languageExists); // Пробегаем все еденицы перевода для заданного языка foreach (TranslationUnit translationUnit in translationLanguageUnits) { // Возвратим перевод если он состоит из 1го слова и это слово совпадает с заданным if (translationUnit.OriginalPhrase.Length == 1 && translationUnit.OriginalPhrase[0].Equals(word)) return translationUnit; } return null; }
// Открывает художественный перевод по заданному языку. Если язык не присутсвует в списке языков для перевода, либо передан null, то // CurrentArtisticalTranslation будет установлен в null, в другом случае в CurrentArtisticalTranslation будет открыт перевод либо пустой вариант перевода (добавление нового перевода) public void OpenArtisticalTranslation(string languageCode) { // Если заданный язык null, либо не является языком для перевода if (languageCode == null || m_workspace.TranslationLanguages.First(lang => lang.Code == languageCode) == null) { CurrentArtisticalTranslation = null; return; } WorkspaceRepository.FinishedText finishedText = m_repository.GetArtisticalTranslaionText(Name, languageCode); // В случае, если перевода для этого языка еще нет, считаем как будто он есть, но с пустым текстом if (finishedText.text == null) { finishedText.text = string.Empty; finishedText.finished = false; } // Создаем текущий текст перевода CurrentArtisticalTranslation = new TextInLanguage(languageCode, finishedText.text, finishedText.finished); }