// Добавляет/Меняет/Удаляет еденицу перевода. Удаление идет в случае если поле перевода = null, а также поля оригинала и перевода в инфинитиве. // Добавление идет, если такой еденицы еще нет, в другом случае - изменение. public void ModifyTranslationUnit(TranslationUnit translationUnit, string languageCode) { Debug.Assert(translationUnit != null && translationUnit.OriginalPhrase != null && m_translationUnits.ContainsKey(languageCode)); // Перевод в инфинитиве должен быть либо не задан полностью либо полностью задан Debug.Assert( (translationUnit.infinitiveTranslation.originalPhrase == null && translationUnit.infinitiveTranslation.translatedPhrase == null) || (translationUnit.infinitiveTranslation.originalPhrase != null && translationUnit.infinitiveTranslation.translatedPhrase != null)); // Получаем список едениц перевода для данного языка (который также будет изменен, чтобы не лезть лишний раз в базу и не синхронизировать) List <TranslationUnit> translationLanguageUnits = m_translationUnits[languageCode]; // Находим заданный элемент в текущем списке едениц перевода, если он там есть int foundIndex = translationLanguageUnits.FindIndex(trUnit => trUnit.OriginalPhrase.SequenceEqual(translationUnit.OriginalPhrase)); // Получаем оригинальную фразу в виде строки с индексами (Это данные, которые будет сохранять БД) string phraseIndexes = TextInLanguage.GetPhraseIndexes(translationUnit.OriginalPhrase); if (translationUnit.translatedPhrase != null || translationUnit.infinitiveTranslation.originalPhrase != null) { // Какие-то поля заданы - значит добавляем либо модифицируем эту еденицу перевода WorkspaceRepository.RawTranslationUnit rawTranslationUnit = new WorkspaceRepository.RawTranslationUnit(); rawTranslationUnit.originalPhraseIndexes = phraseIndexes; rawTranslationUnit.translatedPhrase = translationUnit.translatedPhrase == null ? string.Empty : translationUnit.translatedPhrase; rawTranslationUnit.infinitiveOriginalPhrase = translationUnit.infinitiveTranslation.originalPhrase; rawTranslationUnit.infinitiveTranslatedPhrase = translationUnit.infinitiveTranslation.translatedPhrase; m_repository.AddOrChangeTranslationUnit(Name, languageCode, rawTranslationUnit); // Обновляем локальный список if (foundIndex == -1) { translationLanguageUnits.Add(translationUnit); } else { translationLanguageUnits[foundIndex] = translationUnit; } } else { // Ни одно поле не задано - значит удаляем эту еденицу перевода (в случае, если такой еденицы перевода нет - то просто ничего не произойдет) m_repository.RemoveTranslationUnitIfExists(Name, languageCode, phraseIndexes); // Обновляем локальный список if (foundIndex != -1) { translationLanguageUnits.RemoveAt(foundIndex); } } }
// Добавляет/Меняет/Удаляет еденицу перевода. Удаление идет в случае если поле перевода = null, а также поля оригинала и перевода в инфинитиве. // Добавление идет, если такой еденицы еще нет, в другом случае - изменение. public void ModifyTranslationUnit(TranslationUnit translationUnit, string languageCode) { Debug.Assert(translationUnit != null && translationUnit.OriginalPhrase != null && m_translationUnits.ContainsKey(languageCode)); // Перевод в инфинитиве должен быть либо не задан полностью либо полностью задан Debug.Assert( (translationUnit.infinitiveTranslation.originalPhrase == null && translationUnit.infinitiveTranslation.translatedPhrase == null) || (translationUnit.infinitiveTranslation.originalPhrase != null && translationUnit.infinitiveTranslation.translatedPhrase != null)); // Получаем список едениц перевода для данного языка (который также будет изменен, чтобы не лезть лишний раз в базу и не синхронизировать) List<TranslationUnit> translationLanguageUnits = m_translationUnits[languageCode]; // Находим заданный элемент в текущем списке едениц перевода, если он там есть int foundIndex = translationLanguageUnits.FindIndex(trUnit => trUnit.OriginalPhrase.SequenceEqual(translationUnit.OriginalPhrase)); // Получаем оригинальную фразу в виде строки с индексами (Это данные, которые будет сохранять БД) string phraseIndexes = TextInLanguage.GetPhraseIndexes(translationUnit.OriginalPhrase); if (translationUnit.translatedPhrase != null || translationUnit.infinitiveTranslation.originalPhrase != null) { // Какие-то поля заданы - значит добавляем либо модифицируем эту еденицу перевода WorkspaceRepository.RawTranslationUnit rawTranslationUnit = new WorkspaceRepository.RawTranslationUnit(); rawTranslationUnit.originalPhraseIndexes = phraseIndexes; rawTranslationUnit.translatedPhrase = translationUnit.translatedPhrase == null ? string.Empty : translationUnit.translatedPhrase; rawTranslationUnit.infinitiveOriginalPhrase = translationUnit.infinitiveTranslation.originalPhrase; rawTranslationUnit.infinitiveTranslatedPhrase = translationUnit.infinitiveTranslation.translatedPhrase; m_repository.AddOrChangeTranslationUnit(Name, languageCode, rawTranslationUnit); // Обновляем локальный список if (foundIndex == -1) translationLanguageUnits.Add(translationUnit); else translationLanguageUnits[foundIndex] = translationUnit; } else { // Ни одно поле не задано - значит удаляем эту еденицу перевода (в случае, если такой еденицы перевода нет - то просто ничего не произойдет) m_repository.RemoveTranslationUnitIfExists(Name, languageCode, phraseIndexes); // Обновляем локальный список if (foundIndex != -1) translationLanguageUnits.RemoveAt(foundIndex); } }