Пример #1
0
        public bool Insert()
        {
            if ((TranslatedText != null || TranslatedText.Length != 0) && LanguageID != 0)
            {
                if (ModuleConfig.StorageType == StorageType.MySql)
                {
                    CreateMySqlTableIfNotExists();
                    if (TranslationList.Instance.Exists(this))
                    {
                        return(Update());
                    }
                    else
                    {
                        var query = @"INSERT INTO `tmodule_translations` (`form_control_id`, `language_id`, `translated_text`) VALUES ('" + FormControlID + "', '" + LanguageID + "', '" + TranslatedText + "');";
                        Query.ExecuteMySql(query);
                        GetID();
                        TranslationData.AddTranslation(this);
                        return(true);
                    }
                }
            }
            else
            {
                Console.WriteLine("TranslatedText is empty or language id is 0.");
            }

            return(false);
        }
Пример #2
0
        /// <summary>
        /// Loads the information from the dto into the data object. Except...
        /// Does NOT load dto.Id.
        /// </summary>
        /// <param name="data"></param>
        /// <param name="dto"></param>
        public static void LoadDataFromDto(ref TranslationData data,
                                           TranslationDto dto,
                                           LearnLanguagesContext context)
        {
            //COPY USER INFO
            data.UserDataId = dto.UserId;
            data.UserData   = EfHelper.GetUserData(dto.UserId, context);

            var currentPhraseIds = (from phrase in data.PhraseDatas
                                    select phrase.Id);

            //COPY PHRASEID INFO
            //ADD NEW PHRASEDATAS IN THE DTO
            foreach (var id in dto.PhraseIds)
            {
                if (!currentPhraseIds.Contains(id))
                {
                    PhraseData phraseData = EfHelper.GetPhraseData(id, context);
                    data.PhraseDatas.Add(phraseData);
                }
            }

            //REMOVE PHRASEDATAS THAT ARE NOT IN DTO ANYMORE
            foreach (var phraseId in currentPhraseIds)
            {
                if (!dto.PhraseIds.Contains(phraseId))
                {
                    var dataToRemove = (from phraseData in data.PhraseDatas
                                        where phraseData.Id == phraseId
                                        select phraseData).First();
                    data.PhraseDatas.Remove(dataToRemove);
                }
            }
        }
Пример #3
0
        public static void AddTooltip(this Panel self, TranslationData translationData, string className = null, Action <Tooltip> onCreate = null, Action <Tooltip> onDelete = null, Action <Tooltip> onTick = null)
        {
            self.AddEventListener("onmouseover", (panelEvent) =>
            {
                if (Mouse.Delta == Vector2.Zero)
                {
                    return;
                }

                CreateTooltip(self, translationData, className, onCreate, onDelete, onTick);
            });

            self.AddEventListener("onmouseout", (panelEvent) =>
            {
                if (Mouse.Delta == Vector2.Zero)
                {
                    return;
                }

                DeleteTooltip();
            });

            self.AddEventListener("onclick", (panelEvent) =>
            {
                CreateTooltip(self, translationData, className, onCreate, onDelete, onTick);
            });
        }
Пример #4
0
        public static string GetTranslation(ulong guildId, string id, params string[] args)
        {
            string language = "en";

            if (guildId != 0)
            {
                language = Program.p.db.Languages[guildId];
            }
            if (Program.p.translations.ContainsKey(id))
            {
                TranslationData value = Program.p.translations[id].Find(x => x.language == language);
                string          elem;
                if (value.language != null)
                {
                    elem = value.content;
                }
                else if (Program.p.translations[id].Any(x => x.language == "en"))
                {
                    elem = Program.p.translations[id].Find(x => x.language == "en").content;
                }
                else
                {
                    return("An error occured in the translation submodule: The id " + id + " doesn't exist.");
                }
                for (int i = 0; i < args.Length; i++)
                {
                    elem = elem.Replace("{" + i + "}", args[i]);
                }
                elem = elem.Replace("\\n", Environment.NewLine);
                return(elem);
            }
            return("An error occured in the translation submodule: The id " + id + " doesn't exist.");
        }
Пример #5
0
    public override bool Load()
    {
        Translation targetData = target as Translation;

        var    client = new DatabaseClient("", "");
        string error  = string.Empty;
        var    db     = client.GetDatabase(targetData.SheetName, ref error);
        var    table  = db.GetTable <TranslationData>(targetData.WorksheetName) ?? db.CreateTable <TranslationData>(targetData.WorksheetName);

        List <TranslationData> myDataList = new List <TranslationData>();

        var all = table.FindAll();

        foreach (var elem in all)
        {
            TranslationData data = new TranslationData();

            data = Cloner.DeepCopy <TranslationData>(elem.Element);
            myDataList.Add(data);
        }

        targetData.dataArray = myDataList.ToArray();

        EditorUtility.SetDirty(targetData);
        AssetDatabase.SaveAssets();

        return(true);
    }
Пример #6
0
        public static Dictionary <int, string> getTranslationDictionary(int LangId, int SurahId)
        {
            Dictionary <int, string> Data = new Dictionary <int, string>();

            try
            {
                var lng = getLanguage(LangId);
                if (lng != null)
                {
                    FungsiDB.KoneksiStr = Conn;
                    string Qry = string.Format("select surah_id, ayah_id, {0} from quran where surah_id = {1}", lng.lang, SurahId);
                    System.Data.DataTable dt = FungsiDB.RetrieveData(Qry);
                    //dt.TableName = "data";
                    if (dt != null)
                    {
                        foreach (System.Data.DataRow dr in dt.Rows)
                        {
                            TranslationData item = new TranslationData()
                            {
                                ayah_id = Convert.ToInt32(dr["ayah_id"]), surah_id = Convert.ToInt32(dr["surah_id"]), content = dr[lng.lang].ToString()
                            };
                            Data.Add(item.ayah_id, item.content);
                        }
                    }
                }
            }
            catch
            {
                throw;
            }
            return(Data);
        }
            public TranslationTab(TranslationTabContainer tabControl, TranslationData tabTitle, Panel panel, string icon)
                : base(tabControl, TTTLanguage.ActiveLanguage.GetFormattedTranslation(tabTitle), icon, panel)
            {
                translationData = tabTitle;

                Button.AddClass("translationtab");
            }
Пример #8
0
        internal ChoreHandler(ChoreData chore, int price)
        {
            Chore = chore;
            Price = price;

            var choreTokens = HelpForHireMod.CustomChoresApi.GetChoreTokens(chore.ChoreName);

            choreTokens.Add("Mod", () => "HelpForHire");

            // get display name
            _displayName = (
                from translation in chore.Translations
                where translation.Key.Equals("DisplayName", StringComparison.CurrentCultureIgnoreCase) &&
                translation.Filter(choreTokens)
                select translation)?.First();

            // get description
            _description = (
                from translation in chore.Translations
                where translation.Key.Equals("Description", StringComparison.CurrentCultureIgnoreCase) &&
                translation.Filter(choreTokens)
                select translation)?.First();

            // get work needed token
            _workNeeded = (choreTokens.TryGetValue("WorkNeeded", out var workNeededFn)) ? workNeededFn : () => "1";

            // get work done token
            _workDone = (choreTokens.TryGetValue("WorkDone", out var workDoneFn)) ? workDoneFn : () => "1";
        }
Пример #9
0
        public static TranslationButton TranslationButton(this PanelCreator self, TranslationData translationData, string icon = null, string classname = null, Action onClick = null)
        {
            TranslationButton translationButton = new(translationData, icon, classname, onClick);

            self.panel.AddChild(translationButton);

            return(translationButton);
        }
Пример #10
0
 public static void LoadTranslationFile(string target)
 {
     if (File.Exists(target))
     {
         translation     = File.ReadAllLines(target).ToList <string>();
         translationData = JsonConvert.DeserializeObject <TranslationData>(File.ReadAllText(target));
     }
 }
        private void LoadTranslations(string selectedLanguageFile)
        {
            listBox_translations.Items.Clear();
            Debugger.WriteLine(
                LogLevel.Info,
                $"Loading translation files. Selected language file: {selectedLanguageFile}");
            string translationsPath = Path.Combine(MaidFiddler.DATA_PATH, Translation.TRANSLATIONS_PATH);

            if (!Directory.Exists(translationsPath))
            {
                Debugger.WriteLine(LogLevel.Warning, "No translation folder found. Creating one...");
                Directory.CreateDirectory(translationsPath);
                return;
            }

            string[] files    = Directory.GetFiles(translationsPath, "*.txt");
            int      selected = -1;

            foreach (string filePath in files)
            {
                using (StreamReader sr = File.OpenText(filePath))
                {
                    TranslationData translationData = new TranslationData();
                    string          line            = sr.ReadLine();

                    if (line == null || line.Trim() == string.Empty)
                    {
                        continue;
                    }

                    Match match = Translation.TagPattern.Match(line);
                    if (!match.Success)
                    {
                        continue;
                    }

                    translationData.FileName = Path.GetFileNameWithoutExtension(filePath);
                    translationData.Language = match.Groups["lang"].Value;
                    translationData.Version  = match.Groups["ver"].Value;
                    translationData.Author   = match.Groups["auth"].Value;

                    Debugger.WriteLine(
                        LogLevel.Info,
                        $"Found language: File={translationData.FileName}, Lang={translationData.Language}");

                    int i = listBox_translations.Items.Add(translationData);
                    if (translationData.FileName == selectedLanguageFile)
                    {
                        selected = i;
                    }
                }
            }

            if (selected != -1)
            {
                listBox_translations.SelectedIndex = selected;
            }
        }
Пример #12
0
        public static TranslationDto ToDto(TranslationData data)
        {
            var dto = new TranslationDto()
            {
                Id        = data.Id,
                PhraseIds = (from phrase in data.PhraseDatas
                             select phrase.Id).ToList(),
                UserId   = data.UserDataId,
                Username = data.UserData.Username
            };

            return(dto);
        }
Пример #13
0
        bool Update()
        {
            if (ModuleConfig.StorageType == StorageType.MySql)
            {
                GetID();
                CreateMySqlTableIfNotExists();
                var query = @"UPDATE `tmodule_translations` SET `translated_text` = '" + TranslatedText + "' WHERE `tmodule_translations`.`id` = " + Id;
                Query.ExecuteMySql(query);
                TranslationData.UpdateTranslation(this);
                return(true);
            }

            return(false);
        }
Пример #14
0
        public Hint(TranslationData translationData)
        {
            AddClass("centered-vertical-75");
            AddClass("background-color-primary");
            AddClass("rounded");
            AddClass("text-color-info");
            AddClass("text-shadow");

            _label = Add.TranslationLabel(translationData);
            _label.Style.Padding = 10;

            Style.ZIndex = 1;

            this.Enabled(false);
        }
        private void OnLanguageSelected(object sender, EventArgs e)
        {
            if (listBox_translations.SelectedIndex == -1)
            {
                return;
            }
            TranslationData translationData = (TranslationData)listBox_translations.SelectedItem;

            label_lang_val.Text = translationData.Language != string.Empty
                                  ? translationData.Language : Translation.GetTranslation("UNKNOWN");
            label_version_val.Text = translationData.Version != string.Empty
                                     ? translationData.Version : Translation.GetTranslation("UNKNOWN");
            label_author_val.Text = translationData.Author != string.Empty
                                    ? translationData.Author : Translation.GetTranslation("UNKNOWN");
        }
        private void LoadTranslations(string selectedLanguageFile)
        {
            listBox_translations.Items.Clear();
            Debugger.WriteLine(
            LogLevel.Info,
            $"Loading translation files. Selected language file: {selectedLanguageFile}");
            string translationsPath = Path.Combine(MaidFiddler.DATA_PATH, Translation.TRANSLATIONS_PATH);
            if (!Directory.Exists(translationsPath))
            {
                Debugger.WriteLine(LogLevel.Warning, "No translation folder found. Creating one...");
                Directory.CreateDirectory(translationsPath);
                return;
            }

            string[] files = Directory.GetFiles(translationsPath, "*.txt");
            int selected = -1;
            foreach (string filePath in files)
            {
                using (StreamReader sr = File.OpenText(filePath))
                {
                    TranslationData translationData = new TranslationData();
                    string line = sr.ReadLine();

                    if (line == null || line.Trim() == string.Empty)
                        continue;

                    Match match = Translation.TagPattern.Match(line);
                    if (!match.Success)
                        continue;

                    translationData.FileName = Path.GetFileNameWithoutExtension(filePath);
                    translationData.Language = match.Groups["lang"].Value;
                    translationData.Version = match.Groups["ver"].Value;
                    translationData.Author = match.Groups["auth"].Value;

                    Debugger.WriteLine(
                    LogLevel.Info,
                    $"Found language: File={translationData.FileName}, Lang={translationData.Language}");

                    int i = listBox_translations.Items.Add(translationData);
                    if (translationData.FileName == selectedLanguageFile)
                        selected = i;
                }
            }

            if (selected != -1)
                listBox_translations.SelectedIndex = selected;
        }
Пример #17
0
    public void Initialize()
    {
        _repository = new Mock <INStackRepository>(MockBehavior.Strict);
        _repository.Setup(r => r.DoRequestAsync <DataAppOpenWrapper>(It.Is <RestRequest>(s => s.Resource.EndsWith("api/v2/open")), It.IsAny <Action <HttpStatusCode> >()))
        .Returns(GetAppOpenMock);

        var danish         = new TranslationData();
        var defaultSection = new DefaultSection();

        defaultSection.TryAdd("text", "Jeg er på dansk");
        danish.TryAdd("default", defaultSection);

        _danish = new DataMetaWrapper <TranslationData>
        {
            Data = danish,
            Meta = new MetaData
            {
                Language = new Language
                {
                    Direction = LanguageDirection.LRM,
                    Id        = LanguageId,
                    IsBestFit = true,
                    IsDefault = true,
                    Locale    = LanguageLocale,
                    Name      = "Danish"
                },
                Platform = new ResourcePlatform
                {
                    Id   = LanguageId,
                    Slug = NStackPlatform.Web
                }
            }
        };

        _localizeService = new Mock <INStackLocalizeService>(MockBehavior.Strict);
        _localizeService.Setup(r => r.GetResourceAsync <TranslationData>(It.Is <int>(id => id == LanguageId)))
        .Returns(Task.FromResult(_danish));

        var services = new ServiceCollection();

        services.AddMemoryCache();
        var serviceProvider = services.BuildServiceProvider();

        _memoryCache = serviceProvider?.GetService <IMemoryCache>() ?? throw new ArgumentNullException();

        _service = new NStackAppService(_repository.Object, _localizeService.Object, _memoryCache);
    }
Пример #18
0
        private static Tooltip CreateTooltip(Panel panel, TranslationData translationData, string className = null, Action <Tooltip> onCreate = null, Action <Tooltip> onDelete = null, Action <Tooltip> onTick = null)
        {
            DeleteTooltip();

            Tooltip tooltip = new(panel, onCreate, onDelete, onTick);

            tooltip.UpdateTranslation(translationData);

            if (!string.IsNullOrEmpty(className))
            {
                tooltip.AddClass(className);
            }

            onCreate?.Invoke(tooltip);

            return(tooltip);
        }
            public void TranslationDataFactory_CreateTranslationDataFromProject_Test()
            {
                // Arrange
                var data = new ProjectData()
                {
                    ProjectName  = mockProjectName,
                    ProjectLines = mockProjectLines
                };
                var expected = new TranslationData(data, mockSubTranslationDataFactory.Object);

                // Act
                var actual = translationDataFactory.CreateTranslationDataFromProject(data);

                // Assert
                Assert.IsType <TranslationData>(actual);
                Assert.IsAssignableFrom <ITranslationData>(actual);
                Assert.NotStrictEqual(expected, actual);
            }
            public void TranslationDataFactory_CreateTranslationDataFromArray_Test()
            {
                // Arrange
                var expected = new TranslationData(mockProjectData.Object, mockSubTranslationDataFactory.Object)
                {
                    DataChanged = true
                };

                // Act
                var actual = translationDataFactory.CreateTranslationDataFromArray(mockProjectName, mockProjectLines.Select(x => x.Raw).ToArray());

                // Assert
                mockProjectDataFactory.Verify(x => x.CreateProjectDataFromArray(It.IsAny <string>(), It.IsAny <string[]>()), Times.Once);

                Assert.IsType <TranslationData>(actual);
                Assert.IsAssignableFrom <ITranslationData>(actual);
                Assert.NotStrictEqual(expected, actual);
            }
Пример #21
0
    public void SetUp()
    {
        _repository = new Mock <INStackRepository>
        {
            DefaultValue = DefaultValue.Empty
        };

        _repository.Setup(r => r.DoRequestAsync <DataWrapper <List <ResourceData> > >(It.Is <RestRequest>(s => s.Resource.EndsWith("platforms/backend")), It.IsAny <Action <HttpStatusCode> >()))
        .Returns(GetLanguageMock);

        _english = new TranslationData();
        var defaultSection = new DefaultSection();

        defaultSection.TryAdd("text", "I'm in English");
        _english.TryAdd("default", defaultSection);

        _repository.Setup(r => r.DoRequestAsync <DataMetaWrapper <TranslationData> >(It.Is <RestRequest>(s => s.Resource.EndsWith($"resources/{_englishLanguage.Id}")), It.IsAny <Action <HttpStatusCode> >()))
        .Returns(Task.FromResult(new DataMetaWrapper <TranslationData> {
            Data = _english
        }));

        _repository.Setup(r => r.DoRequestAsync <DataMetaWrapper <ResourceItem> >(It.Is <RestRequest>(s => s.Resource.EndsWith($"resources/{_englishLanguage.Id}")), It.IsAny <Action <HttpStatusCode> >()))
        .Returns(Task.FromResult(new DataMetaWrapper <ResourceItem> {
            Data = _english
        }));

        _danish = new TranslationData();
        var defaultDanishSection = new DefaultSection();

        defaultDanishSection.TryAdd("text", "Jeg er på dansk");
        _danish.TryAdd("default", defaultDanishSection);

        _repository.Setup(r => r.DoRequestAsync <DataMetaWrapper <TranslationData> >(It.Is <RestRequest>(s => s.Resource.EndsWith($"resources/{_danishLanguage.Id}")), It.IsAny <Action <HttpStatusCode> >()))
        .Returns(Task.FromResult(new DataMetaWrapper <TranslationData> {
            Data = _danish
        }));

        _repository.Setup(r => r.DoRequestAsync <DataMetaWrapper <ResourceItem> >(It.Is <RestRequest>(s => s.Resource.EndsWith($"resources/{_danishLanguage.Id}")), It.IsAny <Action <HttpStatusCode> >()))
        .Returns(Task.FromResult(new DataMetaWrapper <ResourceItem> {
            Data = _danish
        }));

        _service = new NStackLocalizeService(_repository.Object);
    }
        public void Write(TranslationData src, string dstPath)
        {
            // 全項目を、ロケールを含んだアイテムに射影
            var edited = src.SelectMany(o => o.Select(item => new { o.Locale, item.Namespace, item.Key, item.Value }));

            // プロパティ名完全一致の項目同市でグルーピング
            var groupedByNS = edited.GroupBy(o => Tuple.Create(o.Namespace, o.Key),
                                             o => new { o.Locale, o.Value });

            // TODO: ★出力先ディレクトリに、すでに同名フォルダがあったりしないかチェック。

            foreach (var lang in src)
            {
                var langPath = Path.Combine(dstPath, lang.Locale);
                Directory.CreateDirectory(langPath);
                langPath = Path.Combine(langPath, JsonFilename);

                this.WriteSingleFile(lang, langPath);
            }

        }
            public void TranslationDataFactory_CreateTranslationDataFromDocument_Test()
            {
                // Arrange
                var expected = new TranslationData(mockProjectData.Object, mockSubTranslationDataFactory.Object)
                {
                    DataChanged = false
                };

                var expectedDataChanged = expected.DataChanged;

                // Act
                var actual            = translationDataFactory.CreateTranslationDataFromDocument("", new Document());
                var actualDataChanged = actual.DataChanged;

                // Assert
                mockProjectDataFactory.Verify(x => x.CreateProjectDataFromDocument(It.IsAny <string>(), It.IsAny <Document>()), Times.Once);

                Assert.IsType <TranslationData>(actual);
                Assert.IsAssignableFrom <ITranslationData>(actual);
                Assert.NotStrictEqual(expected, actual);
                Assert.Equal(expectedDataChanged, actualDataChanged);
            }
        public Tab AddTab(Panel panel, TranslationData tabTitle, string icon = null)
        {
            int index = Tabs.Count;

            TranslationTab tab = new(this, tabTitle, panel, icon);

            Tabs.Add(tab);

            int cookieIndex = string.IsNullOrWhiteSpace(TabCookie) ? -1 : Cookie.Get($"dropdown.{TabCookie}", -1);

            panel.Parent = SheetContainer;

            if (index == 0 || cookieIndex == index)
            {
                SwitchTab(tab, false);
            }
            else
            {
                tab.Active = false;
            }

            return(tab);
        }
        /// <summary>
        /// 引数のパスで指定されたファイルを読み込み、ローカライズ用文字列の配列を返します。
        /// </summary>
        /// <param name="srcPath"></param>
        /// <returns></returns>
        public TranslationData Read(string srcPath)
        {
            // 各種入力チェック
            // フォルダ指定かどうか?localeというフォルダ名か?__lang__/translation.jsonという構造になっているか?


            // JSONのパース時の例外チェック

            var translation = new TranslationData();


            // TODO: 指定フォルダ内のツリー構造をチェック
            // フォルダ指定かどうか?localeというフォルダ名か?__lang__/translation.jsonという構造になっているか?
            var fileList = Directory.GetFiles(srcPath, JsonFilename, SearchOption.AllDirectories)
                                    .Select(o => new FileInfo(o));

            foreach (var file in fileList)
            {
                var lang = this.ReadSingleFile(file);
                translation.Add(lang);
            }

            return translation;
        }
Пример #26
0
        public List <TranslationData> GetFieldIdNDescriptionInEnglish(string moduleId)
        {
            var lstTranslationData = new List <TranslationData>();
            var jsonString         = _translationService.GetFieldIdNDescriptionInEnglish(moduleId);

            if (!string.IsNullOrEmpty(jsonString))
            {
                dynamic dictFieldIdNDescription = JsonConvert.DeserializeObject <Dictionary <string, object> >(jsonString);

                var data = dictFieldIdNDescription["result"];

                foreach (var item in data)
                {
                    var key   = item["fieldId"].ToString();
                    var value = item["fieldDescri"];

                    var translationDataItem = new TranslationData {
                        FieldId = key, FieldDescription = value
                    };
                    lstTranslationData.Add(translationDataItem);
                }
            }
            return(lstTranslationData);
        }
Пример #27
0
 public Label AddTranslation(TranslationData translationData) => Content.Add.TranslationLabel(translationData, "text");
Пример #28
0
 private void TranslateTempMember(TranslationData data)
 {
     throw new System.NotImplementedException();
 }
Пример #29
0
 public void SetTranslationTitle(TranslationData translationData)
 {
     Header.NavigationHeader.SetTranslationTitle(translationData);
 }
Пример #30
0
 public GlyphHintData(TranslationData translationData, params InputButton[] inputButtons)
 {
     TranslationData = translationData;
     InputButtons    = new(inputButtons);
 }
 public static void LoadTranslationFile(string target)
 {
     if (File.Exists(target))
     {
         translation = File.ReadAllLines(target).ToList<string>();
         translationData = JsonConvert.DeserializeObject<TranslationData>(File.ReadAllText(target));
     }
 }
Пример #32
0
 public void SetTranslationTitle(TranslationData translationdata)
 {
     _title.UpdateTranslation(translationdata);
 }
        // POST api/Translation
        public async Task <IHttpActionResult> PostTranslation(TranslationData data)
        {
            try {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                LanguageType wordLanguage;
                LanguageType translationLanguage;
                if (!Enum.TryParse <LanguageType>(data.wordLanguage, out wordLanguage))
                {
                    return(BadRequest("Invalid word language"));
                }
                if (!Enum.TryParse <LanguageType>(data.translationLanguage, out translationLanguage))
                {
                    return(BadRequest("Invalid translation language"));
                }

                var user = this.GetUser();

                // . add word
                SpeachPartType    sp = GetSpeachPart(data.translationWords, data.translationWord);
                LanguageFormatter languageFormatter = new LanguageFormatter(wordLanguage);
                Word word = await db.AddWord(languageFormatter.FormatWord(data.word, sp),
                                             wordLanguage,
                                             data.wordPronunciation,
                                             data.wordSoundUrls,
                                             data.wordPictureUrls);

                // . add word translations to mongo
                await mongoDb.AddTranslations(
                    data.word.ToLower(),
                    data.wordLanguage,
                    data.translationLanguage,
                    data.translationWords,
                    data.translationCards);

                // . if book id is not specified - add translation to 'Cool Translator' book
                UserBook userBook;
                if (data.bookId == 0)
                {
                    userBook = await db.GetCTUserBook(User.Identity.GetUserId(), wordLanguage);

                    data.bookId = userBook.BookId;
                }
                else
                {
                    userBook = await db.FindUserBookAsync(user.Id, data.bookId);

                    if (userBook == null)
                    {
                        return(BadRequest("Invalid bookId"));
                    }
                    if (!userBook.Book.CanBeUpdatedBy(user.Id))
                    {
                        return(BadRequest(string.Format("User {0} is not author of the book", user.DisplayName)));
                    }
                }

                // . add translation
                Tuple <BookWord, Translation> bwt = await db.AddTranslation(data.bookId, word.Id, data.translationWord, translationLanguage, sp);

                Redis.PushWord(wordLanguage, sp, word.Value);
                Redis.PushWord(translationLanguage, sp, bwt.Item2.Value);

                var userBookDto = new UserBookDto(userBook);
                return(CreatedAtRoute("DefaultApi", new { id = bwt.Item2.Id }, new {
                    userBook = userBookDto,
                    book = userBookDto.BookDto,
                    word = new WordDto(word),
                    bookWord = new BookWordDto(bwt.Item1),
                    translation = new TranslationDto(bwt.Item2)
                }));
            } catch (Exception e) {
                _logger.Error(e, "Unable to add translation");
                throw;
            }
        }
        public void Write(TranslationData src, string dstPath)
        {
            // TODO: 出力先の拡張子チェック
            var ext = System.IO.Path.GetExtension(dstPath);
            if (ext != ".xlsx")
            {
                throw new ArgumentException("Invalid extension.");
            }

            try
            {
                // ワークブックの作成
                using (var workbook = new XLWorkbook())
                {
                    // ワークブックにシートを追加
                    var worksheet = workbook.Worksheets.Add(ExcelConverter.SheetName);

                    // 「dev」ロケールを先頭に持ってくる
                    var sorted = src.OrderBy(o => o.Locale != "dev");

                    // 全キーのリストを作る
                    var allKeys = sorted.SelectMany(o => o.Select(item => Tuple.Create(item.Namespace, item.Key)))
                                     .Distinct()
                                     .OrderBy(o => o);

                    // 全体のヘッダー領域を作成
                    this.CreateHeader(worksheet, sorted.Count());


                    // プロパティ名などの列を作成
                    this.CreateKeyColumns(worksheet, allKeys);

                    var columnPos = DataRow;


                    // 各言語用のデータを書き込み
                    foreach (var lang in sorted)
                    {
                        // 言語名を書く
                        worksheet.Cell(LanguageTitleRow, columnPos).Value = lang.Locale;


                        // 各言語の全項目を書く
                        var temp = allKeys.GroupJoin(lang,
                                                     o => o,
                                                     i => Tuple.Create(i.Namespace, i.Key),
                                                     (o, i) => new { Key = o, Value = i.Select(e => e.Value).FirstOrDefault() ?? "" });

                        // ↓コイツを書き込めばOK
                        var result = temp.Select(o => o.Value).AsEnumerable();

                        var startCell = worksheet.Cell(DataRow, columnPos);
                        startCell.Value = result;
                        columnPos++;
                    }


                    var langCount = sorted.Count();

                    // 罫線を描画
                    this.DrawBorder(worksheet, allKeys, langCount);


                    worksheet.Range(OffsetRow, OffsetColumn, DataRow + allKeys.Count() - 1, DataColumn + langCount - 1)
                             .Style.Border.SetOutsideBorder(MidBorder);


                    // カラム幅を自動調整
                    worksheet.Columns().AdjustToContents();

                    // ワークブックの保存
                    workbook.SaveAs(dstPath);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex);
                throw;
            }

        }
Пример #35
0
 void ToggleTranslationItem_Click(object sender, EventArgs e)
 {
     TranslationData.ToggleTranslation(!ModuleConfig.TranslationEnabled);
 }
Пример #36
0
        public void ReadFile(string file)
        {
            XmlDocument doc = new XmlDocument();

            doc.Load(file);

            XmlNode node = doc.DocumentElement.FirstChild;

            while (true)
            {
                if (node.Attributes != null)
                {
                    var langAttribute = node.Attributes["lang"];
                    if (langAttribute != null)
                    {
                        if (!LocaliseManager.AvailableLanguages.Contains(langAttribute.Value))
                        {
                            LocaliseManager.AvailableLanguages.Add(langAttribute.Value);
                        }

                        if (LocaliseManager.CurrentLanguage == langAttribute.Value)
                        {
                            XmlNode childNode = node.FirstChild;
                            while (true)
                            {
                                XmlNode IDAttribute   = null;
                                XmlNode TextAttribute = null;

                                if (childNode.Attributes != null)
                                {
                                    IDAttribute   = childNode.Attributes["id"];
                                    TextAttribute = childNode.Attributes["text"];
                                }

                                if (IDAttribute == null)
                                {
                                    throw new InvalidOperationException("Attribute 'id' not found.");
                                }
                                else if (TextAttribute == null)
                                {
                                    throw new InvalidOperationException("Attribute 'text' not found.");
                                }
                                else
                                {
                                    TranslationData data = new TranslationData(IDAttribute.Value, TextAttribute.Value);

                                    LocaliseManager.Instance.Localisations.Add(IDAttribute.Value, data);
                                }

                                if ((childNode = childNode.NextSibling) == null)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        throw new InvalidOperationException("Attribute 'lang' not found.");
                    }
                }

                if ((node = node.NextSibling) == null)
                {
                    break;
                }
            }
        }