Ejemplo n.º 1
0
 public async Task AddTermAsync(Guid glossaryId, [FromBody] TranslationSubstring newTerm, [FromQuery] Guid?partOfSpeechId)
 {
     await this._glossaryService
     .AddNewTermAsync(
         glossaryId : glossaryId,
         newTerm : newTerm,
         partOfSpeechId : partOfSpeechId);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Функция, предназначенная для распарсивания файла 'tmx'
        /// Translation Memory Exchange Format — Обмен памятью переводов
        /// </summary>
        /// <param name="fs">Поток tmx-файла миграции</param>
        public void Load(FileStream fs)
        {
            try
            {
                _logger.WriteLn("Распарсивание tmx-файла");
                //var tempFileName = Path.GetTempFileName();
                //fs.Seek(0, SeekOrigin.Begin);
                //fs.CopyTo(System.IO.File.Open(tempFileName, FileMode.Open));
                var tempFileName = tWriter.CopyFile(fs);
                var d            = XDocument.Load(tempFileName);
                var srclang      = d.Root.Element("header").Attribute("srclang");
                var body         = d.Root.Element("body");
                var ns_xml       = body.GetNamespaceOfPrefix("xml");
                foreach (var tu in body.Elements("tu"))
                {
                    Hashtable ht        = new Hashtable();
                    Guid?     newTermId = null;

                    foreach (var tuv in tu.Elements("tuv"))
                    {
                        var lang  = tuv.Attribute(ns_xml + "lang").Value;
                        var trans = tuv.Element("seg").Value;

                        tWriter.AppendTable(ht, lang, trans);
                        //newTermId = tWriter.AddTranslationSubstring(lang, ht, newTermId, memoryId, (Guid)memory.id_file);

                        try
                        {
                            TranslationSubstring termString =
                                tWriter.AddTranslationSubstring(lang, ht, newTermId, memoryId, (Guid)memory.id_file);
                            if (termString != null)
                            {
                                newTermId = ts.AddAsync(termString).Result;
                                gsr.AddTranslationMemoriesStrings((Guid)memoryId, (Guid)newTermId);
                                //newTermId = glossaryRep.AddNewTermAsync(memoryId, termString, null).Result;
                            }
                        }
                        catch (Exception exc)
                        {
                            _logger.WriteLn("ERROR: Перевод [" + trans + "] на язык [" + lang + "] " + exc.Message, exc);
                        }
                    }

                    foreach (var lang in ht.Keys)
                    {
                        tWriter.AddTranslation(lang, newTermId, ht);
                    }
                }


                System.IO.File.Delete(tempFileName);
                _logger.WriteLn("tmx-файл успешно распарсен");
            }
            catch (Exception ex)
            {
                _loggerError.WriteLn($"Ошибка в {typeof(TmxReader)}.{nameof(Load)}", ex);
            }
        }
Ejemplo n.º 3
0
        public async Task <ActionResult <TranslationSubstring> > GetStringById(Guid id)
        {
            TranslationSubstring foundedString = await stringRepository.GetByIDAsync(id);

            if (foundedString == null)
            {
                return(BadRequest("String not found"));
            }

            return(Ok(foundedString));
        }
Ejemplo n.º 4
0
 public async Task UpdateTermAsync(
     Guid glossaryId,
     Guid termId,
     [FromBody] TranslationSubstring updatedTerm,
     [FromQuery] Guid?partOfSpeechId)
 {
     updatedTerm.id = termId;
     await this._glossaryService
     .UpdateTermAsync(
         glossaryId : glossaryId,
         updatedTerm : updatedTerm,
         partOfSpeechId : partOfSpeechId);
 }
Ejemplo n.º 5
0
 public async Task UpdateTermAsync(Guid glossaryId, TranslationSubstring updatedTerm, Guid?partOfSpeechId)
 {
     try
     {
         await this._glossaryRepository.UpdateTermAsync(
             glossaryId : glossaryId,
             updatedTerm : updatedTerm,
             partOfSpeechId : partOfSpeechId);
     }
     catch (Exception exception)
     {
         throw new Exception(WriteLn(exception.Message, exception), exception);
     }
 }
Ejemplo n.º 6
0
        public TranslationSubstring AddTranslationSubstring(string lang, Hashtable ht, Guid?newTermId, Guid glossaryId, Guid idFile)
        {
            if (lang.Equals(_localDefault))
            {
                TranslationSubstring newTerm =
                    new TranslationSubstring(ht[_localDefault].ToString(), null, idFile, null, 0);
                //newTermId = glossaryRep.AddNewTermAsync(glossaryId, newTerm, null).Result;

                // newTermId = ts.AddAsync(newTerm).Result;
                return(newTerm);
            }

            return(null);
        }
Ejemplo n.º 7
0
        public async Task UpdateTermAsync(Guid glossaryId, TranslationSubstring updatedTerm, Guid?partOfSpeechId)
        {
            try
            {
                using (var dbConnection = new NpgsqlConnection(connectionString))
                {
                    var updateTermSql =
                        "UPDATE translation_substrings SET " +
                        "substring_to_translate=@substring_to_translate, " +
                        "description=@description, " +
                        "context=@context, " +
                        "translation_max_length=@translation_max_length, " +
                        "id_file_owner=@id_file_owner, " +
                        "value=@value, " +
                        "position_in_text=@position_in_text " +
                        "WHERE id=@id";
                    var updateTermParam = updatedTerm;
                    this.LogQuery(updateTermSql, updatedTerm.GetType(), updateTermParam);
                    await dbConnection.ExecuteAsync(
                        sql : updateTermSql,
                        param : updateTermParam);

                    var updateTermPartOfSpeechIdSql =
                        "UPDATE glossaries_strings SET " +
                        "id_part_of_speech=@PartOfSpeechId " +
                        "WHERE id_string=@StringId "; // +
                                                      //"AND id_glossary=@GlossaryId";
                    var updateTermPartOfSpeechIdParam = new { GlossaryId = glossaryId, StringId = updatedTerm.id, PartOfSpeechId = partOfSpeechId };
                    this.LogQuery(updateTermPartOfSpeechIdSql, updateTermPartOfSpeechIdParam);
                    await dbConnection.ExecuteAsync(
                        sql : updateTermPartOfSpeechIdSql,
                        param : updateTermPartOfSpeechIdParam);
                }
            }
            catch (NpgsqlException exception)
            {
                this._loggerError.WriteLn(
                    $"Ошибка в {nameof(GlossaryRepository)}.{nameof(GlossaryRepository.UpdateTermAsync)} {nameof(NpgsqlException)} ",
                    exception);
                //   return null;
            }
            catch (Exception exception)
            {
                this._loggerError.WriteLn(
                    $"Ошибка в {nameof(GlossaryRepository)}.{nameof(GlossaryRepository.UpdateTermAsync)} {nameof(Exception)} ",
                    exception);
                //    return 0;
            }
        }
Ejemplo n.º 8
0
        public async Task AddNewTermAsync(Guid glossaryId, TranslationSubstring newTerm, Guid?partOfSpeechId)
        {
            var newTermId = await this._glossaryRepository.AddNewTermAsync(
                glossaryId : glossaryId,
                newTerm : newTerm,
                partOfSpeechId : partOfSpeechId);

            var glossaryLocales = await this._glossaryRepository.GetTranslationLocalesAsync(glossaryId : glossaryId);

            try
            {
                //TODO переделать под одну транзакуцию
                await this._stringsRepository.AddTranslationLocalesAsync(
                    translationSubstringId : (Guid)newTermId,
                    localesIds : glossaryLocales.Select(locale => locale.id));
            }
            catch (Exception exception)
            {
                throw new Exception(WriteLn(exception.Message, exception), exception);
            }
        }
Ejemplo n.º 9
0
        public async Task <ActionResult <IEnumerable <SimilarTranslation> > > FindSimilarTranslations(Guid currentProjectId, Guid localeId, [FromBody] TranslationSubstring translationSubstring)
        {
            var  identityName = User.Identity.Name;
            Guid userId       = (Guid)userRepository.GetID(identityName);

            var similarTranslations = await translationRepository.GetSimilarTranslationsAsync(currentProjectId, localeId, translationSubstring, userId);

            return(Ok(similarTranslations));
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Функция, предназначенная для распарсивания файла 'tbx'?
        /// Termbase Exchange format — Обмен терминологическими базами
        /// </summary>
        /// <param name="fs">Поток tbx-файла миграции</param>
        public void Load(FileStream fs)
        {
            try
            {
                _logger.WriteLn("Распарсивание tbx-файла");
                var tempFileName = tWriter.CopyFile(fs);

                var d  = XDocument.Load(tempFileName);
                var ns = d.Root.GetNamespaceOfPrefix("xml");
                foreach (var text in d.Root.Elements("text"))
                {
                    foreach (var termEntry in text.Element("body").Elements("termEntry"))
                    {
                        Hashtable ht        = new Hashtable();
                        Guid?     newTermId = null;
                        foreach (var langSet in termEntry.Elements("langSet"))
                        {
                            string lang = langSet.Attribute(ns + "lang").Value;
                            string term = langSet.Element("tig").Element("term").Value;
                            //ok, now it's all about where to write gathered data

                            tWriter.AppendTable(ht, lang, term);
                            TranslationSubstring termString = tWriter.AddTranslationSubstring(lang, ht, newTermId, glossaryId, (Guid)glossaries.ID_File);

                            if (termString != null)
                            {
                                newTermId = glossaryRep.AddNewTermAsync(glossaryId, termString, null).Result;
                            }
                        }

                        foreach (var lang in ht.Keys)
                        {
                            tWriter.AddTranslation(lang, newTermId, ht);
                        }
                        // break;
                    }
                }
                _logger.WriteLn("tbx-файл успешно распарсен");
                System.IO.File.Delete(tempFileName);

                /*
                 *
                 *
                 * INSERT INTO public.translation_substrings_locales
                 * (id_translation_substrings, id_locale)
                 * select id_string, id_locale
                 * from (
                 * select distinct t.id_string as id_string,  id_locale
                 * FROM public.translations as t) as tt
                 *
                 *
                 *
                 *
                 * INSERT INTO public.files_locales
                 * (id_file, id_locale,percent_of_confirmed, percent_of_translation)
                 * select 'd297766a-8d17-46f4-b8fc-be7e9165c66b', f. id_locale, 0,0
                 * from (select distinct  id_locale as id_locale
                 * FROM public.translations) as f
                 *
                 *
                 */
            }
            catch (Exception ex)
            {
                _loggerError.WriteLn($"Ошибка в {typeof(TbxReader)}.{nameof(Load)}", ex);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Метод получения схожих вариантов перевода в проекте локализации
        /// </summary>
        /// <param name="currentProjectId">id проекта в котором происходит поиск</param>
        /// <param name="translationSubstring">фраза для которой происходит поиск совпадений</param>
        /// <returns></returns>
        public async Task <IEnumerable <SimilarTranslation> > GetSimilarTranslationsAsync(Guid currentProjectId, Guid localeId, TranslationSubstring translationSubstring, Guid userId)
        {
            //TODO полный запрос, тут загвозка в том, что память переводов подключаеться из все проектов где работает пользователь, а это не так
            var query = @"select*
            from(select substring_to_translate as translation_text, similarity(substring_to_translate, @TranslationSubstringText) as similarity, files.name_text as file_owner_name,
            translations.translated as translation_variant
            from localization_projects
            inner join files on
            files.id_localization_project = localization_projects.id
            inner
                join translation_substrings on
            translation_substrings.id_file_owner = files.id
            inner
                join translations on
            translations.id_string = translation_substrings.id
            where (localization_projects.id = @ProjectId
            and substring_to_translate % @TranslationSubstringText
            and translation_substrings.id != @TranslationSubstringId
            and translations.id_locale = @localeId)
            union
                select substring_to_translate as translation_text, similarity(substring_to_translate, @TranslationSubstringText) as similarity, tm.name_text as file_owner_name,
            translations.translated as translation_variant
            from translation_memories as tm
                inner join translation_memories_strings as tms
            on tm.id = tms.id_translation_memory
            inner join translation_substrings on
            translation_substrings.id = tms.id_string
            inner join translations on
            translations.id_string = translation_substrings.id
            inner join localization_projects_translation_memories as lptm
            on tm.id = lptm.id_translation_memory
            inner join participants as p
            on lptm.id_localization_project = p.id_localization_project
            where
                p.id_user = @UserId
            and substring_to_translate % @TranslationSubstringText
            and translation_substrings.id != @TranslationSubstringId
            and translations.id_locale = @localeId
             and lptm.id_localization_project = @ProjectId
) as t order by  t.similarity desc";


            //var query = "SELECT substring_to_translate AS translation_text, similarity(substring_to_translate, @TranslationSubstringText) AS similarity, " +
            //            "files.name_text AS file_owner_name, translations.translated AS translation_variant" +
            //            " FROM localization_projects " +
            //            "INNER JOIN files ON files.id_localization_project = localization_projects.id " +
            //            "INNER JOIN translation_substrings ON translation_substrings.id_file_owner = files.id " +
            //            "INNER JOIN translations ON translations.id_string = translation_substrings.id " +
            //            "WHERE (localization_projects.id = @ProjectId " +
            //            "AND substring_to_translate % @TranslationSubstringText " +
            //            "AND translation_substrings.id != @TranslationSubstringId " +
            //            "AND translations.id_locale = @localeId);";


            try
            {
                using (var dbConnection = new NpgsqlConnection(connectionString))
                {
                    var param = new { TranslationSubstringText = translationSubstring.substring_to_translate, TranslationSubstringId = translationSubstring.id, ProjectId = currentProjectId, localeId, UserId = userId };
                    this.LogQuery(query, param);
                    IEnumerable <SimilarTranslation> similarTranslations = await dbConnection.QueryAsync <SimilarTranslation>(query, param);

                    return(similarTranslations);
                }
            }
            catch (NpgsqlException exception)
            {
                this._loggerError.WriteLn(
                    $"Ошибка в {nameof(TranslationRepository)}.{nameof(TranslationRepository.GetSimilarTranslationsAsync)} {nameof(NpgsqlException)} ",
                    exception);
                return(null);
            }
            catch (Exception exception)
            {
                this._loggerError.WriteLn(
                    $"Ошибка в {nameof(TranslationRepository)}.{nameof(TranslationRepository.GetSimilarTranslationsAsync)} {nameof(Exception)} ",
                    exception);
                return(null);
            }
        }
Ejemplo n.º 12
0
        public async Task <Guid?> AddNewTermAsync(Guid glossaryId, TranslationSubstring newTerm, Guid?partOfSpeechId)
        {
            var glossary = await this.GetByIDAsync(id : glossaryId);

            newTerm.id_file_owner = glossary.ID_File;
            newTerm.word_count    = TranslationSubstringRepository.GetWordsCount(newTerm.substring_to_translate);
            try
            {
                using (var dbConnection = new NpgsqlConnection(connectionString))
                {
                    var insertNewStingSql =
                        "INSERT INTO translation_substrings " +
                        "(" +
                        "substring_to_translate, " +
                        "description, " +
                        "context_file, " +
                        "translation_max_length, " +
                        "id_file_owner, " +
                        "value, " +
                        "position_in_text, " +
                        "word_count" +
                        ") VALUES " +
                        "(" +
                        "@substring_to_translate, " +
                        "@description, " +
                        "@context_file, " +
                        "@translation_max_length, " +
                        "@id_file_owner, " +
                        "@value, " +
                        "@position_in_text, " +
                        "@word_count" +
                        ") " +
                        "RETURNING id";
                    var insertNewStingParam = newTerm;
                    this.LogQuery(insertNewStingSql, newTerm.GetType(), insertNewStingParam);
                    var idOfNewTerm = await dbConnection
                                      .ExecuteScalarAsync <Guid>(
                        sql : insertNewStingSql,
                        param : insertNewStingParam);

                    var instertGlossaryStringAssotiationSql =
                        "INSERT INTO glossaries_strings (id_glossary, id_string,id_part_of_speech) VALUES (@glossary_id, @string_id, @parts_of_speechId)";
                    var instertGlossaryStringAssotiationParam = new { glossary_id = glossaryId, string_id = idOfNewTerm, parts_of_speechId = partOfSpeechId };
                    this.LogQuery(instertGlossaryStringAssotiationSql, instertGlossaryStringAssotiationParam);
                    await dbConnection
                    .ExecuteAsync(
                        sql : instertGlossaryStringAssotiationSql,
                        param : instertGlossaryStringAssotiationParam);

                    return(idOfNewTerm);
                }
            }

            catch (NpgsqlException exception)
            {
                this._loggerError.WriteLn(
                    $"Ошибка в {nameof(GlossaryRepository)}.{nameof(GlossaryRepository.AddNewTermAsync)} {nameof(NpgsqlException)} ",
                    exception);
                return(null);
            }
            catch (Exception exception)
            {
                this._loggerError.WriteLn(
                    $"Ошибка в {nameof(GlossaryRepository)}.{nameof(GlossaryRepository.AddNewTermAsync)} {nameof(Exception)} ",
                    exception);
                return(null);
            }
        }
Ejemplo n.º 13
0
 public async Task UpdateTranslationSubstring(Guid translationSubstringId, [FromBody] TranslationSubstring updatedTranslationSubstring)
 {
     updatedTranslationSubstring.id = translationSubstringId;
     await this.stringRepository.UpdateAsync(item : updatedTranslationSubstring);
 }