/// <summary> /// Creates a new writing system. /// </summary> /// <param name="languageSubtag">The language subtag.</param> /// <param name="scriptSubtag">The script subtag.</param> /// <param name="regionSubtag">The region subtag.</param> /// <param name="variantSubtag">The variant subtag.</param> /// <returns></returns> public IWritingSystem Create(LanguageSubtag languageSubtag, ScriptSubtag scriptSubtag, RegionSubtag regionSubtag, VariantSubtag variantSubtag) { if (!languageSubtag.IsValid) { throw new ArgumentException("Can not create a new writing system with an invalid language tag."); } PalasoWritingSystem ws; lock (m_syncRoot) ws = (PalasoWritingSystem)m_localStore.CreateNew(); ws.LanguageSubtag = languageSubtag; ws.ScriptSubtag = scriptSubtag; ws.RegionSubtag = regionSubtag; ws.VariantSubtag = variantSubtag; if (!string.IsNullOrEmpty(languageSubtag.Name)) { ws.Abbreviation = languageSubtag.Name.Length > 3 ? languageSubtag.Name.Substring(0, 3) : languageSubtag.Name; } else { ws.Abbreviation = ws.Id; } CultureInfo ci = MiscUtils.GetCultureForWs(ws.Id); if (ci != null) { ws.SortUsing = WritingSystemDefinition.SortRulesType.OtherLanguage; ws.SortRules = ci.Name; } ws.Modified = false; return(ws); }
private void _scriptsAndVariants_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { // This is a Script link, so for now we'll limit the dialog to only the ScriptRegionVariant combo option. var wsSetupModel = new WritingSystemSetupModel(new WritingSystemDefinition(_model.SelectedLanguage.LanguageTag), WritingSystemSetupModel.SelectionsForSpecialCombo.ScriptRegionVariant, false); wsSetupModel.IdentifierScriptRegionVariantSelected(); using (var dlg = new ScriptsAndVariantsDialog()) { dlg.BindToModel(wsSetupModel); if (dlg.ShowDialog() != DialogResult.OK) { return; } // Allow the user to think of the the Script and Variant's Abbreviation as the primary language tag // for unlisted languages. Otherwise, why show it or allow it to be edited? var tag = wsSetupModel.CurrentDefinition.LanguageTag; var abbr = wsSetupModel.CurrentDefinition.Abbreviation; if (tag.Length >= 3 && LanguageSubtag.IsUnlistedCode(tag.Substring(0, 3)) && abbr.Length == 3 && LanguageSubtag.IsUnlistedCode(abbr) && abbr != tag.Substring(0, 3)) { tag = abbr + tag.Substring(3); } _model.SelectedLanguage.LanguageTag = tag; UpdateReadiness(); } }
public void GetValidLangCodeForNewLang() { string storePath = PrepareTempStore("Store"); string globalStorePath = PrepareTempStore("GlobalStore"); EnsureDirectoryIsEmpty(storePath); EnsureDirectoryIsEmpty(globalStorePath); var globalStore = new GlobalFileWritingSystemStore(globalStorePath); var wsManager = new PalasoWritingSystemManager( new LocalFileWritingSystemStore(storePath, globalStore), globalStore); Assert.AreEqual("qip", wsManager.GetValidLangTagForNewLang("Qipkey")); Assert.AreEqual("sn", wsManager.GetValidLangTagForNewLang("Sn")); Assert.AreEqual("eba", wsManager.GetValidLangTagForNewLang("\u00CBbashlish")); // \u00CB == E with diacritic Assert.AreEqual("eee", wsManager.GetValidLangTagForNewLang("\u00CB\u00CB\u00CBlish")); // \u00CB == E with diacritic Assert.AreEqual("aaa", wsManager.GetValidLangTagForNewLang("U")); LanguageSubtag subtag = new LanguageSubtag("qip", "Qipkey", true, null); IWritingSystem newWs = wsManager.Create(subtag, null, null, null); wsManager.Set(newWs); Assert.AreEqual("aaa", wsManager.GetValidLangTagForNewLang("Qipsing"), "code for 'qip' should already be taken"); subtag = new LanguageSubtag("aaa", "Qipsing", true, null); newWs = wsManager.Create(subtag, null, null, null); wsManager.Set(newWs); Assert.AreEqual("aab", wsManager.GetValidLangTagForNewLang("Qipwest"), "code for 'qip' should already be taken twice"); // ENHANCE: Ideally, we would want to test incrementing the middle and first character, // but that would require at least 677 (26^2 + 1) writing systems be created. }
/// <summary> /// Creates a new writing system. /// </summary> /// <param name="languageSubtag">The language subtag.</param> /// <param name="scriptSubtag">The script subtag.</param> /// <param name="regionSubtag">The region subtag.</param> /// <param name="variantSubtags">The variant subtags.</param> /// <returns></returns> public CoreWritingSystemDefinition Create(LanguageSubtag languageSubtag, ScriptSubtag scriptSubtag, RegionSubtag regionSubtag, IEnumerable <VariantSubtag> variantSubtags) { lock (m_syncRoot) { VariantSubtag[] variantSubtagsArray = variantSubtags.ToArray(); string langTag = IetfLanguageTag.Create(languageSubtag, scriptSubtag, regionSubtag, variantSubtagsArray); CoreWritingSystemDefinition ws; m_repo.WritingSystemFactory.Create(langTag, out ws); if (ws.Language != null && languageSubtag != null && ws.Language.Name != languageSubtag.Name) { ws.Language = new LanguageSubtag(ws.Language, languageSubtag.Name); } if (ws.Script != null && scriptSubtag != null && ws.Script.Name != scriptSubtag.Name) { ws.Script = new ScriptSubtag(ws.Script, scriptSubtag.Name); } if (ws.Region != null && regionSubtag != null && ws.Region.Name != regionSubtag.Name) { ws.Region = new RegionSubtag(ws.Region, regionSubtag.Name); } for (int i = 0; i < Math.Min(ws.Variants.Count, variantSubtagsArray.Length); i++) { if (ws.Variants[i].Code == variantSubtagsArray[i].Code && ws.Variants[i].Name != variantSubtagsArray[i].Name) { ws.Variants[i] = new VariantSubtag(ws.Variants[i], variantSubtagsArray[i].Name); } } if (ws.Language != null && !string.IsNullOrEmpty(ws.Language.Name)) { ws.Abbreviation = ws.Language.Name.Length > 3 ? ws.Language.Name.Substring(0, 3) : ws.Language.Name; } else { ws.Abbreviation = ws.LanguageTag; } if (ws.DefaultCollation == null) { string message; if (SystemCollator.ValidateLanguageTag(ws.LanguageTag, out message)) { ws.DefaultCollation = new SystemCollationDefinition { LanguageTag = ws.LanguageTag } } ; else { ws.DefaultCollation = new IcuRulesCollationDefinition("standard"); } } if (ws.DefaultFont == null) { ws.DefaultFont = new FontDefinition("Charis SIL"); } ws.AcceptChanges(); return(ws); } }
public static string GetRailwayDescription(string railwayId, LanguageSubtag languageTag) { var format = new ResourceLoader().GetString("CaptionLine"); return((languageTag == LanguageSubtag.Ja) ? String.Format(format, GetRailwayTitleJa(railwayId)) : String.Format(format, GetRailwayTitleEn(railwayId))); }
public static string GetRailDirectionDescription(string railDirection, LanguageSubtag languageTag) { var format = new ResourceLoader().GetString("CaptionDirection"); return((languageTag == LanguageSubtag.Ja) ? String.Format(format, GetRailDirectionNameJa(railDirection)) : String.Format(format, GetRailDirectionNameEn(railDirection))); }
/// <summary> /// Store the language portion of the identifier for the writing system of each /// existing reversal index. This is to facilitate choosing an initial value to /// display in the combo box. /// </summary> /// <param name="ws">The ws.</param> private void AddLanguageForExistingRevIdx(IWritingSystem ws) { LanguageSubtag sLang = ws.LanguageSubtag; // LT-4937 : only add if not already present. // This is really a Set. if (!m_revIdx.Contains(sLang)) { m_revIdx.Add(sLang); } }
public void UpdateContent(LanguageSubtag languageTag) { this.LanguageTag = languageTag; RaisePropertyChanged(() => RailwayId); RaisePropertyChanged(() => RailwayDescription); RaisePropertyChanged(() => TrainTypeDescription); RaisePropertyChanged(() => TerminalStationDescription); RaisePropertyChanged(() => RailDirectionDescription); RaisePropertyChanged(() => State); RaisePropertyChanged(() => Note); }
private IWritingSystem CreateWritingSystem(string wsId, string name, bool addVern) { IWritingSystem ws = Cache.ServiceLocator.WritingSystemManager.Set(wsId); LanguageSubtag subtag = ws.LanguageSubtag; ws.LanguageSubtag = new LanguageSubtag(subtag, name); if (addVern) { Cache.ServiceLocator.WritingSystems.VernacularWritingSystems.Add(ws); } return(ws); }
public void UpdateContent(LanguageSubtag languageTag) { this.LanguageTag = languageTag; RaisePropertyChanged(() => StationGroupDescription); foreach (var train in Trains) { train.UpdateContent(languageTag); } State = CheckState(Trains.ToArray()); }
public void UpdateContent(LanguageSubtag languageTag) { this.LanguageTag = languageTag; RaisePropertyChanged(() => RailwayDescription); foreach (var train in Trains) { train.UpdateContent(languageTag); } StateFromA = CheckState(Trains.Where(x => x.IsFromA).ToArray()); StateFromB = CheckState(Trains.Where(x => x.IsFromB).ToArray()); }
internal async Task UpdateBaseAsync(LanguageSubtag languageTag) { if (!CanConvert) { return; } var trains = await MetroManager.Current.GetTrainsAsync(_standardLength); if (trains == null) { return; } UpdateBase(trains, languageTag); }
public void LanguageSubtag_newWS() { var wsManager = new PalasoWritingSystemManager(); using (var langSetup = new LanguageSetup()) { langSetup.WritingSystemManager = wsManager; langSetup.StartedInModifyState = false; langSetup.LanguageName = "Monkey"; LanguageSubtag subtag = langSetup.LanguageSubtag; Assert.AreEqual("mon", subtag.Code); LanguageSubtag newSubtag = new LanguageSubtag("mon", "Moniker", true, null); IWritingSystem newWs = wsManager.Create(newSubtag, null, null, null); wsManager.Set(newWs); subtag = langSetup.LanguageSubtag; Assert.AreEqual("aaa", subtag.Code, "Language code 'mon' should already be in use"); } }
private void LoadLanguage(LanguageSubtag languageTag) { const string optionsHeader = "OptionsHeaderText"; const string lineSelectionPriority = "LineSelectionPriorityText"; const string languageSelection = "LanguageSelectionText"; const string clearButton = "ClearButtonText"; const string applyButton = "ApplyButtonText"; var languageBag = Settings.LanguageList.FirstOrDefault(x => x.Subtag == languageTag); if (languageBag != null) { var context = ResourceContext.GetForViewIndependentUse(); // Constructing ResourceContext may cause freeze when called multiple times. context.Languages = new List <String> { languageBag.FullTag }; var resourceMap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources"); this.Title = resourceMap.GetValue(optionsHeader, context).ValueAsString; this.LineSelectionPriority.Text = resourceMap.GetValue(lineSelectionPriority, context).ValueAsString; this.LanguageSelection.Text = resourceMap.GetValue(languageSelection, context).ValueAsString; this.ClearButton.Content = resourceMap.GetValue(clearButton, context).ValueAsString; this.ApplyButton.Content = resourceMap.GetValue(applyButton, context).ValueAsString; } else // Fallback { var loader = ResourceLoader.GetForCurrentView(); this.Title = loader.GetString(optionsHeader); this.LineSelectionPriority.Text = loader.GetString(lineSelectionPriority); this.LanguageSelection.Text = loader.GetString(languageSelection); this.ClearButton.Content = loader.GetString(clearButton); this.ApplyButton.Content = loader.GetString(applyButton); } }
private void SetScriptsAndVariantsLabel() { _scriptsAndVariantsLink.Enabled = _model.HaveSufficientInformation; if (!_model.HaveSufficientInformation) { _scriptsAndVariantsLabel.Text = ""; _scriptsAndVariantsLabel.Visible = false; } else { // Usually it's not interesting to see this unless some script, region, or variant data is present. // But when the user has entered a custom unknown language code, this is the only way to confirm it. if (_model.LanguageTagContainsScriptRegionVariantInfo || LanguageSubtag.IsUnlistedCode(_model.SelectedLanguage.LanguageTag)) { _scriptsAndVariantsLabel.Text = "(" + _model.LanguageTag + ")"; _scriptsAndVariantsLabel.Visible = true; } else { _scriptsAndVariantsLabel.Text = ""; _scriptsAndVariantsLabel.Visible = false; } } }
public void RegisteredLanguages_HasIso3CodeForEnglish() { LanguageSubtag english = StandardSubtags.RegisteredLanguages["en"]; Assert.That(english.Iso3Code, Is.EqualTo("eng")); }
public void RegisteredLanguages_CodeFaHasIso3Fas() { LanguageSubtag target = StandardSubtags.RegisteredLanguages["fa"]; Assert.That(target.Iso3Code, Is.EqualTo("fas")); }
/// <summary> /// Initializes a new instance of the <see cref="T:LanguageSubtag"/> class. /// </summary> /// <param name="subtag">The subtag.</param> /// <param name="name">The name.</param> public LanguageSubtag(LanguageSubtag subtag, string name) : this(subtag.Code, name, subtag.IsPrivateUse, subtag._iso3Code) { }
public static string GetStationDescription(string stationId, LanguageSubtag languageTag) { return((languageTag == LanguageSubtag.Ja) ? GetStationTitleJa(stationId) : GetStationTitleEn(stationId)); }
public static string GetTrainTypeDescription(string trainType, LanguageSubtag languageTag) { return((languageTag == LanguageSubtag.Ja) ? GetTrainTypeNameJa(trainType) : GetTrainTypeNameEn(trainType)); }
/// <summary></summary> public IWritingSystem Create(LanguageSubtag languageSubtag, ScriptSubtag scriptSubtag, RegionSubtag regionSubtag, VariantSubtag variantSubtag) { throw new NotImplementedException(); }
public LanguageBag(LanguageSubtag subtag, string fullTag, string displayName) { this.Subtag = subtag; this.FullTag = fullTag; this.DisplayName = displayName; }
private void UpdateBase(Train[] trains, LanguageSubtag languageTag) { var locker = new Object(); lock (locker) { foreach (var stationGroup in _core.OfType <StationGroupViewModel>()) { if (trains != null) { var stationIds = stationGroup.Members.Select(x => x.StationId).ToArray(); stationGroup.Trains.Clear(); foreach (var train in trains.Where(x => x.ToStationId == null)) { if (stationIds.Contains(train.FromStationId)) { stationGroup.Trains.Add(new TrainViewModel(train)); } } } stationGroup.UpdateContent(languageTag); } foreach (var connector in _core.OfType <ConnectorViewModel>()) { if (trains != null) { var buffList = new List <TrainViewModel>(); foreach (var train in trains) { if (train.FromStationId == connector.StationIdA) { if (train.ToStationId == connector.StationIdB) { buffList.Add(new TrainViewModel(train, true, false)); } else if (train.RailwayId == connector.RailwayId) { var terminalStationIndex = GetStationIndex(train.RailwayId, train.TerminalStationId); if ((0 <= terminalStationIndex) && IsIncluded(connector.StationIndexB, connector.StationIndexA, terminalStationIndex)) { buffList.Add(new TrainViewModel(train, true, true)); } } } else if (train.FromStationId == connector.StationIdB) { if (train.ToStationId == connector.StationIdA) { buffList.Add(new TrainViewModel(train, false, false)); } else if (train.RailwayId == connector.RailwayId) { var terminalStationIndex = GetStationIndex(train.RailwayId, train.TerminalStationId); if ((0 <= terminalStationIndex) && IsIncluded(connector.StationIndexA, connector.StationIndexB, terminalStationIndex)) { buffList.Add(new TrainViewModel(train, false, true)); } } } } connector.Trains.Clear(); foreach (var buffItem in buffList.OrderBy(x => x.IsPhantom).ThenBy(x => x.IsFromA)) { connector.Trains.Add(buffItem); } } connector.UpdateContent(languageTag); } DelayedRailwayIds = trains .GroupBy(x => x.RailwayId) .Where(x => x.Any(y => 0 < y.Delay)) .Select(x => x.First().RailwayId) .ToArray(); } }