diff --git a/Configuration/Arguments.cs b/Configuration/Arguments.cs index eca41c98..a18c5fd2 100644 --- a/Configuration/Arguments.cs +++ b/Configuration/Arguments.cs @@ -5,7 +5,6 @@ namespace TweetDuck.Configuration{ static class Arguments{ // public args public const string ArgDataFolder = "-datafolder"; - public const string ArgLocale = "-locale"; public const string ArgLogging = "-log"; public const string ArgDebugUpdates = "-debugupdates"; diff --git a/Configuration/UserConfig.cs b/Configuration/UserConfig.cs index 04bdcf87..fa0ea261 100644 --- a/Configuration/UserConfig.cs +++ b/Configuration/UserConfig.cs @@ -46,11 +46,13 @@ static UserConfig(){ public bool OpenSearchInFirstColumn { get; set; } = true; public bool BestImageQuality { get; set; } = true; public bool EnableAnimatedImages { get; set; } = true; - public bool EnableSpellCheck { get; set; } = false; public int VideoPlayerVolume { get; set; } = 50; private int _zoomLevel = 100; private bool _muteNotifications; + public bool EnableSpellCheck { get; set; } = false; + public string AppLocale { get; set; } = "en-US"; + private TrayIcon.Behavior _trayBehavior = TrayIcon.Behavior.Disabled; public bool EnableTrayHighlight { get; set; } = true; diff --git a/Core/Other/FormSettings.cs b/Core/Other/FormSettings.cs index 14a7f647..2930834a 100644 --- a/Core/Other/FormSettings.cs +++ b/Core/Other/FormSettings.cs @@ -37,6 +37,7 @@ public FormSettings(FormBrowser browser, PluginManager plugins, UpdateHandler up this.buttonHeight = BrowserUtils.Scale(39, this.GetDPIScale()) | 1; AddButton("General", () => new TabSettingsGeneral(this.browser, updates)); + AddButton("Locales", () => new TabSettingsLocales(this.browser)); AddButton("System Tray", () => new TabSettingsTray()); AddButton("Notifications", () => new TabSettingsNotifications(new FormNotificationExample(this.browser, this.plugins))); AddButton("Sounds", () => new TabSettingsSounds()); diff --git a/Core/Other/Settings/Dialogs/DialogSettingsRestart.Designer.cs b/Core/Other/Settings/Dialogs/DialogSettingsRestart.Designer.cs index 0a19d6e6..7f73f034 100644 --- a/Core/Other/Settings/Dialogs/DialogSettingsRestart.Designer.cs +++ b/Core/Other/Settings/Dialogs/DialogSettingsRestart.Designer.cs @@ -29,10 +29,8 @@ private void InitializeComponent() { this.cbLogging = new System.Windows.Forms.CheckBox(); this.toolTip = new System.Windows.Forms.ToolTip(this.components); this.cbDebugUpdates = new System.Windows.Forms.CheckBox(); - this.comboLocale = new System.Windows.Forms.ComboBox(); this.tbDataFolder = new System.Windows.Forms.TextBox(); this.tbShortcutTarget = new System.Windows.Forms.TextBox(); - this.labelLocale = new System.Windows.Forms.Label(); this.labelDataFolder = new System.Windows.Forms.Label(); this.labelShortcutTarget = new System.Windows.Forms.Label(); this.SuspendLayout(); @@ -40,7 +38,7 @@ private void InitializeComponent() { // btnCancel // this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnCancel.Location = new System.Drawing.Point(216, 217); + this.btnCancel.Location = new System.Drawing.Point(215, 163); this.btnCancel.Name = "btnCancel"; this.btnCancel.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0); this.btnCancel.Size = new System.Drawing.Size(56, 23); @@ -52,7 +50,7 @@ private void InitializeComponent() { // btnRestart // this.btnRestart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnRestart.Location = new System.Drawing.Point(153, 217); + this.btnRestart.Location = new System.Drawing.Point(152, 163); this.btnRestart.Name = "btnRestart"; this.btnRestart.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0); this.btnRestart.Size = new System.Drawing.Size(57, 23); @@ -83,54 +81,33 @@ private void InitializeComponent() { this.toolTip.SetToolTip(this.cbDebugUpdates, "Allows updating to pre-releases."); this.cbDebugUpdates.UseVisualStyleBackColor = true; // - // comboLocale - // - this.comboLocale.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.comboLocale.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboLocale.FormattingEnabled = true; - this.comboLocale.Location = new System.Drawing.Point(15, 83); - this.comboLocale.Name = "comboLocale"; - this.comboLocale.Size = new System.Drawing.Size(257, 21); - this.comboLocale.TabIndex = 3; - this.toolTip.SetToolTip(this.comboLocale, "Language used for spell checking."); - // // tbDataFolder // this.tbDataFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.tbDataFolder.Location = new System.Drawing.Point(15, 135); + this.tbDataFolder.Location = new System.Drawing.Point(15, 83); this.tbDataFolder.Name = "tbDataFolder"; this.tbDataFolder.Size = new System.Drawing.Size(257, 20); this.tbDataFolder.TabIndex = 5; - this.toolTip.SetToolTip(this.tbDataFolder, "Path to the data folder. Must be either an absolute path,\r\nor a simple folder name that will be created in LocalAppData."); + this.toolTip.SetToolTip(this.tbDataFolder, "Path to the data folder. Must be either an absolute path,\r\nor a simple folder nam" + + "e that will be created in LocalAppData."); // // tbShortcutTarget // this.tbShortcutTarget.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tbShortcutTarget.Cursor = System.Windows.Forms.Cursors.Hand; - this.tbShortcutTarget.Location = new System.Drawing.Point(15, 186); + this.tbShortcutTarget.Location = new System.Drawing.Point(15, 134); this.tbShortcutTarget.Name = "tbShortcutTarget"; this.tbShortcutTarget.ReadOnly = true; this.tbShortcutTarget.Size = new System.Drawing.Size(257, 20); this.tbShortcutTarget.TabIndex = 7; this.tbShortcutTarget.Click += new System.EventHandler(this.tbShortcutTarget_Click); // - // labelLocale - // - this.labelLocale.AutoSize = true; - this.labelLocale.Location = new System.Drawing.Point(12, 67); - this.labelLocale.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0); - this.labelLocale.Name = "labelLocale"; - this.labelLocale.Size = new System.Drawing.Size(39, 13); - this.labelLocale.TabIndex = 2; - this.labelLocale.Text = "Locale"; - // // labelDataFolder // this.labelDataFolder.AutoSize = true; - this.labelDataFolder.Location = new System.Drawing.Point(12, 119); + this.labelDataFolder.Location = new System.Drawing.Point(12, 67); this.labelDataFolder.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0); this.labelDataFolder.Name = "labelDataFolder"; this.labelDataFolder.Size = new System.Drawing.Size(62, 13); @@ -140,7 +117,7 @@ private void InitializeComponent() { // labelShortcutTarget // this.labelShortcutTarget.AutoSize = true; - this.labelShortcutTarget.Location = new System.Drawing.Point(12, 170); + this.labelShortcutTarget.Location = new System.Drawing.Point(12, 118); this.labelShortcutTarget.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0); this.labelShortcutTarget.Name = "labelShortcutTarget"; this.labelShortcutTarget.Size = new System.Drawing.Size(155, 13); @@ -151,13 +128,11 @@ private void InitializeComponent() { // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(284, 252); + this.ClientSize = new System.Drawing.Size(284, 198); this.Controls.Add(this.tbShortcutTarget); this.Controls.Add(this.labelShortcutTarget); this.Controls.Add(this.tbDataFolder); this.Controls.Add(this.labelDataFolder); - this.Controls.Add(this.comboLocale); - this.Controls.Add(this.labelLocale); this.Controls.Add(this.cbDebugUpdates); this.Controls.Add(this.cbLogging); this.Controls.Add(this.btnRestart); @@ -180,8 +155,6 @@ private void InitializeComponent() { private System.Windows.Forms.CheckBox cbLogging; private System.Windows.Forms.ToolTip toolTip; private System.Windows.Forms.CheckBox cbDebugUpdates; - private System.Windows.Forms.Label labelLocale; - private System.Windows.Forms.ComboBox comboLocale; private System.Windows.Forms.Label labelDataFolder; private System.Windows.Forms.TextBox tbDataFolder; private System.Windows.Forms.TextBox tbShortcutTarget; diff --git a/Core/Other/Settings/Dialogs/DialogSettingsRestart.cs b/Core/Other/Settings/Dialogs/DialogSettingsRestart.cs index 8768bd95..b4f9bb7e 100644 --- a/Core/Other/Settings/Dialogs/DialogSettingsRestart.cs +++ b/Core/Other/Settings/Dialogs/DialogSettingsRestart.cs @@ -1,33 +1,20 @@ using System; -using System.IO; -using System.Linq; using System.Windows.Forms; using TweetDuck.Configuration; using TweetDuck.Data; namespace TweetDuck.Core.Other.Settings.Dialogs{ sealed partial class DialogSettingsRestart : Form{ - private const string DefaultLocale = "en-US"; - public CommandLineArgs Args { get; private set; } public DialogSettingsRestart(CommandLineArgs currentArgs){ InitializeComponent(); - try{ - object[] locales = Directory.EnumerateFiles(Path.Combine(Program.ProgramPath, "locales"), "*.pak", SearchOption.TopDirectoryOnly).Select(Path.GetFileNameWithoutExtension).ToArray<object>(); - comboLocale.Items.AddRange(locales); - }catch{ - comboLocale.Items.Add(DefaultLocale); - } - cbLogging.Checked = currentArgs.HasFlag(Arguments.ArgLogging); cbDebugUpdates.Checked = currentArgs.HasFlag(Arguments.ArgDebugUpdates); - comboLocale.SelectedItem = currentArgs.GetValue(Arguments.ArgLocale, DefaultLocale); cbLogging.CheckedChanged += control_Change; cbDebugUpdates.CheckedChanged += control_Change; - comboLocale.SelectedValueChanged += control_Change; if (Program.IsPortable){ tbDataFolder.Text = "Not available in portable version"; @@ -54,12 +41,6 @@ private void control_Change(object sender, EventArgs e){ Args.AddFlag(Arguments.ArgDebugUpdates); } - string locale = comboLocale.SelectedItem as string; - - if (!string.IsNullOrWhiteSpace(locale) && locale != DefaultLocale){ - Args.SetValue(Arguments.ArgLocale, locale); - } - if (!string.IsNullOrWhiteSpace(tbDataFolder.Text) && tbDataFolder.Enabled){ Args.SetValue(Arguments.ArgDataFolder, tbDataFolder.Text); } diff --git a/Core/Other/Settings/TabSettingsGeneral.Designer.cs b/Core/Other/Settings/TabSettingsGeneral.Designer.cs index 34d7d49c..03c4661b 100644 --- a/Core/Other/Settings/TabSettingsGeneral.Designer.cs +++ b/Core/Other/Settings/TabSettingsGeneral.Designer.cs @@ -26,7 +26,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.checkExpandLinks = new System.Windows.Forms.CheckBox(); this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.checkSpellCheck = new System.Windows.Forms.CheckBox(); this.checkUpdateNotifications = new System.Windows.Forms.CheckBox(); this.btnCheckUpdates = new System.Windows.Forms.Button(); this.labelZoomValue = new System.Windows.Forms.Label(); @@ -57,21 +56,10 @@ private void InitializeComponent() { this.checkExpandLinks.Text = "Expand Links When Hovered"; this.checkExpandLinks.UseVisualStyleBackColor = true; // - // checkSpellCheck - // - this.checkSpellCheck.AutoSize = true; - this.checkSpellCheck.Location = new System.Drawing.Point(6, 141); - this.checkSpellCheck.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); - this.checkSpellCheck.Name = "checkSpellCheck"; - this.checkSpellCheck.Size = new System.Drawing.Size(119, 17); - this.checkSpellCheck.TabIndex = 5; - this.checkSpellCheck.Text = "Enable Spell Check"; - this.checkSpellCheck.UseVisualStyleBackColor = true; - // // checkUpdateNotifications // this.checkUpdateNotifications.AutoSize = true; - this.checkUpdateNotifications.Location = new System.Drawing.Point(6, 268); + this.checkUpdateNotifications.Location = new System.Drawing.Point(6, 245); this.checkUpdateNotifications.Margin = new System.Windows.Forms.Padding(6, 6, 3, 3); this.checkUpdateNotifications.Name = "checkUpdateNotifications"; this.checkUpdateNotifications.Size = new System.Drawing.Size(165, 17); @@ -81,7 +69,7 @@ private void InitializeComponent() { // // btnCheckUpdates // - this.btnCheckUpdates.Location = new System.Drawing.Point(5, 291); + this.btnCheckUpdates.Location = new System.Drawing.Point(5, 268); this.btnCheckUpdates.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3); this.btnCheckUpdates.Name = "btnCheckUpdates"; this.btnCheckUpdates.Size = new System.Drawing.Size(144, 23); @@ -151,7 +139,7 @@ private void InitializeComponent() { // labelZoom // this.labelZoom.AutoSize = true; - this.labelZoom.Location = new System.Drawing.Point(3, 173); + this.labelZoom.Location = new System.Drawing.Point(3, 150); this.labelZoom.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0); this.labelZoom.Name = "labelZoom"; this.labelZoom.Size = new System.Drawing.Size(34, 13); @@ -179,7 +167,7 @@ private void InitializeComponent() { this.panelZoom.Anchor = System.Windows.Forms.AnchorStyles.Top; this.panelZoom.Controls.Add(this.trackBarZoom); this.panelZoom.Controls.Add(this.labelZoomValue); - this.panelZoom.Location = new System.Drawing.Point(0, 186); + this.panelZoom.Location = new System.Drawing.Point(0, 163); this.panelZoom.Margin = new System.Windows.Forms.Padding(0); this.panelZoom.Name = "panelZoom"; this.panelZoom.Size = new System.Drawing.Size(322, 36); @@ -200,7 +188,7 @@ private void InitializeComponent() { // this.labelUpdates.AutoSize = true; this.labelUpdates.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - this.labelUpdates.Location = new System.Drawing.Point(0, 242); + this.labelUpdates.Location = new System.Drawing.Point(0, 219); this.labelUpdates.Margin = new System.Windows.Forms.Padding(0, 20, 0, 0); this.labelUpdates.Name = "labelUpdates"; this.labelUpdates.Size = new System.Drawing.Size(70, 20); @@ -218,7 +206,6 @@ private void InitializeComponent() { this.flowPanel.Controls.Add(this.checkOpenSearchInFirstColumn); this.flowPanel.Controls.Add(this.checkBestImageQuality); this.flowPanel.Controls.Add(this.checkAnimatedAvatars); - this.flowPanel.Controls.Add(this.checkSpellCheck); this.flowPanel.Controls.Add(this.labelZoom); this.flowPanel.Controls.Add(this.panelZoom); this.flowPanel.Controls.Add(this.labelUpdates); @@ -227,7 +214,7 @@ private void InitializeComponent() { this.flowPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; this.flowPanel.Location = new System.Drawing.Point(9, 9); this.flowPanel.Name = "flowPanel"; - this.flowPanel.Size = new System.Drawing.Size(322, 320); + this.flowPanel.Size = new System.Drawing.Size(322, 296); this.flowPanel.TabIndex = 4; this.flowPanel.WrapContents = false; // @@ -237,7 +224,7 @@ private void InitializeComponent() { this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.flowPanel); this.Name = "TabSettingsGeneral"; - this.Size = new System.Drawing.Size(340, 338); + this.Size = new System.Drawing.Size(340, 314); ((System.ComponentModel.ISupportInitialize)(this.trackBarZoom)).EndInit(); this.panelZoom.ResumeLayout(false); this.flowPanel.ResumeLayout(false); @@ -250,7 +237,6 @@ private void InitializeComponent() { private System.Windows.Forms.CheckBox checkExpandLinks; private System.Windows.Forms.ToolTip toolTip; - private System.Windows.Forms.CheckBox checkSpellCheck; private System.Windows.Forms.CheckBox checkUpdateNotifications; private System.Windows.Forms.Button btnCheckUpdates; private System.Windows.Forms.Label labelZoom; diff --git a/Core/Other/Settings/TabSettingsGeneral.cs b/Core/Other/Settings/TabSettingsGeneral.cs index c8088c99..c2d40b56 100644 --- a/Core/Other/Settings/TabSettingsGeneral.cs +++ b/Core/Other/Settings/TabSettingsGeneral.cs @@ -23,7 +23,6 @@ public TabSettingsGeneral(FormBrowser browser, UpdateHandler updates){ toolTip.SetToolTip(checkOpenSearchInFirstColumn, "By default, TweetDeck adds Search columns at the end.\r\nThis option makes them appear before the first column instead."); toolTip.SetToolTip(checkBestImageQuality, "When right-clicking a tweet image, the context menu options\r\nwill use links to the original image size (:orig in the URL)."); toolTip.SetToolTip(checkAnimatedAvatars, "Some old Twitter avatars could be uploaded as animated GIFs."); - toolTip.SetToolTip(checkSpellCheck, "Underlines words that are spelled incorrectly."); toolTip.SetToolTip(labelZoomValue, "Changes the zoom level.\r\nAlso affects notifications and screenshots."); toolTip.SetToolTip(trackBarZoom, toolTip.GetToolTip(labelZoomValue)); @@ -39,7 +38,6 @@ public TabSettingsGeneral(FormBrowser browser, UpdateHandler updates){ checkOpenSearchInFirstColumn.Checked = Config.OpenSearchInFirstColumn; checkBestImageQuality.Checked = Config.BestImageQuality; checkAnimatedAvatars.Checked = Config.EnableAnimatedImages; - checkSpellCheck.Checked = Config.EnableSpellCheck; checkUpdateNotifications.Checked = Config.EnableUpdateCheck; } @@ -50,7 +48,6 @@ public override void OnReady(){ checkOpenSearchInFirstColumn.CheckedChanged += checkOpenSearchInFirstColumn_CheckedChanged; checkBestImageQuality.CheckedChanged += checkBestImageQuality_CheckedChanged; checkAnimatedAvatars.CheckedChanged += checkAnimatedAvatars_CheckedChanged; - checkSpellCheck.CheckedChanged += checkSpellCheck_CheckedChanged; trackBarZoom.ValueChanged += trackBarZoom_ValueChanged; checkUpdateNotifications.CheckedChanged += checkUpdateNotifications_CheckedChanged; @@ -82,11 +79,6 @@ private void checkAnimatedAvatars_CheckedChanged(object sender, EventArgs e){ BrowserProcessHandler.UpdatePrefs().ContinueWith(task => browser.ReloadColumns()); } - private void checkSpellCheck_CheckedChanged(object sender, EventArgs e){ - Config.EnableSpellCheck = checkSpellCheck.Checked; - BrowserProcessHandler.UpdatePrefs(); - } - private void trackBarZoom_ValueChanged(object sender, EventArgs e){ if (trackBarZoom.AlignValueToTick()){ zoomUpdateTimer.Stop(); diff --git a/Core/Other/Settings/TabSettingsLocales.Designer.cs b/Core/Other/Settings/TabSettingsLocales.Designer.cs new file mode 100644 index 00000000..193e677a --- /dev/null +++ b/Core/Other/Settings/TabSettingsLocales.Designer.cs @@ -0,0 +1,115 @@ +namespace TweetDuck.Core.Other.Settings { + partial class TabSettingsLocales { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.checkSpellCheck = new System.Windows.Forms.CheckBox(); + this.labelLocales = new System.Windows.Forms.Label(); + this.flowPanel = new System.Windows.Forms.FlowLayoutPanel(); + this.comboBoxAppLocale = new System.Windows.Forms.ComboBox(); + this.labelAppLanguage = new System.Windows.Forms.Label(); + this.flowPanel.SuspendLayout(); + this.SuspendLayout(); + // + // checkSpellCheck + // + this.checkSpellCheck.AutoSize = true; + this.checkSpellCheck.Location = new System.Drawing.Point(6, 26); + this.checkSpellCheck.Margin = new System.Windows.Forms.Padding(6, 6, 3, 3); + this.checkSpellCheck.Name = "checkSpellCheck"; + this.checkSpellCheck.Size = new System.Drawing.Size(119, 17); + this.checkSpellCheck.TabIndex = 5; + this.checkSpellCheck.Text = "Enable Spell Check"; + this.checkSpellCheck.UseVisualStyleBackColor = true; + // + // labelLocales + // + this.labelLocales.AutoSize = true; + this.labelLocales.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.labelLocales.Location = new System.Drawing.Point(0, 0); + this.labelLocales.Margin = new System.Windows.Forms.Padding(0); + this.labelLocales.Name = "labelLocales"; + this.labelLocales.Size = new System.Drawing.Size(64, 20); + this.labelLocales.TabIndex = 0; + this.labelLocales.Text = "Locales"; + // + // flowPanel + // + this.flowPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.flowPanel.Controls.Add(this.labelLocales); + this.flowPanel.Controls.Add(this.checkSpellCheck); + this.flowPanel.Controls.Add(this.labelAppLanguage); + this.flowPanel.Controls.Add(this.comboBoxAppLocale); + this.flowPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flowPanel.Location = new System.Drawing.Point(9, 9); + this.flowPanel.Name = "flowPanel"; + this.flowPanel.Size = new System.Drawing.Size(322, 320); + this.flowPanel.TabIndex = 4; + this.flowPanel.WrapContents = false; + // + // comboBoxAppLocale + // + this.comboBoxAppLocale.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxAppLocale.FormattingEnabled = true; + this.comboBoxAppLocale.Location = new System.Drawing.Point(5, 74); + this.comboBoxAppLocale.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3); + this.comboBoxAppLocale.Name = "comboBoxAppLocale"; + this.comboBoxAppLocale.Size = new System.Drawing.Size(311, 21); + this.comboBoxAppLocale.TabIndex = 9; + // + // labelAppLanguage + // + this.labelAppLanguage.AutoSize = true; + this.labelAppLanguage.Location = new System.Drawing.Point(3, 58); + this.labelAppLanguage.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0); + this.labelAppLanguage.Name = "labelAppLanguage"; + this.labelAppLanguage.Size = new System.Drawing.Size(77, 13); + this.labelAppLanguage.TabIndex = 11; + this.labelAppLanguage.Text = "App Language"; + // + // TabSettingsLocales + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.flowPanel); + this.Name = "TabSettingsLocales"; + this.Size = new System.Drawing.Size(340, 338); + this.flowPanel.ResumeLayout(false); + this.flowPanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.ToolTip toolTip; + private System.Windows.Forms.CheckBox checkSpellCheck; + private System.Windows.Forms.Label labelLocales; + private System.Windows.Forms.FlowLayoutPanel flowPanel; + private System.Windows.Forms.ComboBox comboBoxAppLocale; + private System.Windows.Forms.Label labelAppLanguage; + } +} diff --git a/Core/Other/Settings/TabSettingsLocales.cs b/Core/Other/Settings/TabSettingsLocales.cs new file mode 100644 index 00000000..bb8cf220 --- /dev/null +++ b/Core/Other/Settings/TabSettingsLocales.cs @@ -0,0 +1,46 @@ +using System; +using TweetDuck.Core.Handling.General; +using TweetDuck.Core.Utils; + +namespace TweetDuck.Core.Other.Settings{ + sealed partial class TabSettingsLocales : BaseTabSettings{ + private readonly FormBrowser browser; + + public TabSettingsLocales(FormBrowser browser){ + InitializeComponent(); + + this.browser = browser; + + toolTip.SetToolTip(checkSpellCheck, "Underlines words that are spelled incorrectly."); + toolTip.SetToolTip(comboBoxAppLocale, "Language used for spell check and context menu items."); + + checkSpellCheck.Checked = Config.EnableSpellCheck; + + try{ + foreach(LocaleUtils.Item item in LocaleUtils.ChromiumLocales){ + comboBoxAppLocale.Items.Add(item); + } + }catch{ + comboBoxAppLocale.Items.Add(new LocaleUtils.Item("en-US")); + } + + comboBoxAppLocale.SelectedItem = new LocaleUtils.Item(Config.AppLocale); + + } + + public override void OnReady(){ + checkSpellCheck.CheckedChanged += checkSpellCheck_CheckedChanged; + comboBoxAppLocale.SelectedValueChanged += comboBoxAppLocale_SelectedValueChanged; + } + + private void checkSpellCheck_CheckedChanged(object sender, EventArgs e){ + Config.EnableSpellCheck = checkSpellCheck.Checked; + BrowserProcessHandler.UpdatePrefs(); + } + + private void comboBoxAppLocale_SelectedValueChanged(object sender, EventArgs e){ + Config.AppLocale = (comboBoxAppLocale.SelectedItem as LocaleUtils.Item)?.Code; + PromptRestart(); + } + } +} diff --git a/Core/Utils/LocaleUtils.cs b/Core/Utils/LocaleUtils.cs new file mode 100644 index 00000000..829f41d0 --- /dev/null +++ b/Core/Utils/LocaleUtils.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; + +namespace TweetDuck.Core.Utils{ + static class LocaleUtils{ + public static string LocaleFolder => Path.Combine(Program.ProgramPath, "locales"); + + public static IEnumerable<Item> ChromiumLocales => Directory + .EnumerateFiles(LocaleFolder, "*.pak", SearchOption.TopDirectoryOnly) + .Select(file => new Item(Path.GetFileNameWithoutExtension(file))) + .OrderBy(code => code); + + public sealed class Item : IComparable<Item>{ + public string Code { get; } + public CultureInfo Info { get; } + + public Item(string code){ + this.Code = code; + this.Info = CultureInfo.GetCultureInfo(code); + } + + public override bool Equals(object obj){ + return obj is Item other && Code.Equals(other.Code, StringComparison.OrdinalIgnoreCase); + } + + public override int GetHashCode(){ + return Code.GetHashCode(); + } + + public override string ToString(){ + string capitalizedName = Info.TextInfo.ToTitleCase(Info.NativeName); + return Info.DisplayName == Info.NativeName ? capitalizedName : $"{capitalizedName}, {Info.DisplayName}"; + } + + public int CompareTo(Item other){ + return string.Compare(Info.NativeName, other.Info.NativeName, false, CultureInfo.InvariantCulture); + } + } + } +} diff --git a/Program.cs b/Program.cs index 1e84af49..97dce1f7 100644 --- a/Program.cs +++ b/Program.cs @@ -133,7 +133,7 @@ private static void Main(){ CefSettings settings = new CefSettings{ AcceptLanguageList = BrowserUtils.HeaderAcceptLanguage, UserAgent = BrowserUtils.HeaderUserAgent, - Locale = Arguments.GetValue(Arguments.ArgLocale, string.Empty), + Locale = UserConfig.AppLocale, BrowserSubprocessPath = BrandName+".Browser.exe", CachePath = StoragePath, LogFile = ConsoleLogFilePath, diff --git a/TweetDuck.csproj b/TweetDuck.csproj index fe048eb0..f05db95e 100644 --- a/TweetDuck.csproj +++ b/TweetDuck.csproj @@ -196,6 +196,12 @@ <Compile Include="Core\Other\Settings\TabSettingsFeedback.Designer.cs"> <DependentUpon>TabSettingsFeedback.cs</DependentUpon> </Compile> + <Compile Include="Core\Other\Settings\TabSettingsLocales.cs"> + <SubType>UserControl</SubType> + </Compile> + <Compile Include="Core\Other\Settings\TabSettingsLocales.Designer.cs"> + <DependentUpon>TabSettingsLocales.cs</DependentUpon> + </Compile> <Compile Include="Core\Other\Settings\TabSettingsTray.cs"> <SubType>UserControl</SubType> </Compile> @@ -203,6 +209,7 @@ <DependentUpon>TabSettingsTray.cs</DependentUpon> </Compile> <Compile Include="Core\TweetDeckBrowser.cs" /> + <Compile Include="Core\Utils\LocaleUtils.cs" /> <Compile Include="Core\Utils\StringUtils.cs" /> <Compile Include="Core\Utils\TwitterUtils.cs" /> <Compile Include="Data\CombinedFileStream.cs" />