Exemplo n.º 1
0
        // Добавляет/Меняет/Удаляет еденицу перевода. Удаление идет в случае если поле перевода = 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);
                }
            }
        }
Exemplo n.º 2
0
        // Добавляет/Меняет/Удаляет еденицу перевода. Удаление идет в случае если поле перевода = 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);
            }
        }