SelectLanguageForm.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows.Forms;
  4. using FastReport.Utils;
  5. using System.IO;
  6. using System.Globalization;
  7. namespace FastReport.Forms
  8. {
  9. internal partial class SelectLanguageForm : BaseDialogForm
  10. {
  11. private void Init()
  12. {
  13. tbFolder.Text = Res.LocaleFolder;
  14. PopulateLocalizations(tbFolder.Text);
  15. }
  16. private void Done()
  17. {
  18. // convert selected locale name from Native name to English name
  19. string localeName = (lbxLanguages.SelectedIndex <= 0 ? "" : (string)lbxLanguages.SelectedItem).ToUpper();
  20. if (localeName != "")
  21. {
  22. CultureInfo[] infos = CultureInfo.GetCultures(CultureTypes.AllCultures);
  23. foreach (CultureInfo info in infos)
  24. {
  25. if (String.Compare(info.NativeName.ToUpper(), localeName, true) == 0)
  26. {
  27. localeName = info.EnglishName;
  28. break;
  29. }
  30. }
  31. }
  32. Res.DefaultLocaleName = localeName;
  33. Res.LocaleFolder = tbFolder.Text;
  34. Res.LoadDefaultLocale();
  35. }
  36. private string ToUpperFirstLetter(string source)
  37. {
  38. if (string.IsNullOrEmpty(source))
  39. return string.Empty;
  40. char[] letters = source.ToCharArray();
  41. letters[0] = char.ToUpper(letters[0]);
  42. return new string(letters);
  43. }
  44. private void PopulateLocalizations(string folder)
  45. {
  46. lbxLanguages.Items.Clear();
  47. lbxLanguages.Items.Add(Res.Get("Forms,SelectLanguage,Auto"));
  48. lbxLanguages.SelectedIndex = 0;
  49. List<string> files = new List<string>();
  50. if (Directory.Exists(folder))
  51. {
  52. foreach (string file in Directory.GetFiles(folder, "*.frl"))
  53. {
  54. files.Add(Path.GetFileNameWithoutExtension(file));
  55. }
  56. }
  57. files.Add("English");
  58. files.Sort();
  59. // convert English locale name to DisplayName
  60. CultureInfo[] infos = CultureInfo.GetCultures(CultureTypes.AllCultures);
  61. List<string> names = new List<string>();
  62. string defaultName = "";
  63. foreach (string file in files)
  64. {
  65. string name = file;
  66. foreach (CultureInfo info in infos)
  67. {
  68. if (String.Compare(info.EnglishName, file, true) == 0)
  69. {
  70. name = ToUpperFirstLetter(info.NativeName);
  71. break;
  72. }
  73. }
  74. names.Add(name);
  75. if (String.Compare(file, Res.DefaultLocaleName, true) == 0)
  76. defaultName = name;
  77. }
  78. names.Sort();
  79. foreach (string name in names)
  80. {
  81. lbxLanguages.Items.Add(name);
  82. }
  83. if (defaultName != "")
  84. lbxLanguages.SelectedItem = defaultName;
  85. }
  86. private void tbFolder_ButtonClick(object sender, EventArgs e)
  87. {
  88. using (FolderBrowserDialog dialog = new FolderBrowserDialog())
  89. {
  90. dialog.SelectedPath = tbFolder.Text;
  91. dialog.ShowNewFolderButton = false;
  92. dialog.Description = Res.Get("Forms,SelectLanguage,SelectFolder");
  93. if (dialog.ShowDialog() == DialogResult.OK)
  94. {
  95. tbFolder.Text = dialog.SelectedPath;
  96. PopulateLocalizations(tbFolder.Text);
  97. }
  98. }
  99. }
  100. private void lbxLanguages_DoubleClick(object sender, EventArgs e)
  101. {
  102. DialogResult = DialogResult.OK;
  103. }
  104. private void SelectLanguageForm_FormClosed(object sender, FormClosedEventArgs e)
  105. {
  106. if (DialogResult == DialogResult.OK)
  107. Done();
  108. }
  109. public override void Localize()
  110. {
  111. base.Localize();
  112. MyRes res = new MyRes("Forms,SelectLanguage");
  113. Text = res.Get("");
  114. lblSelect.Text = res.Get("SelectLanguage");
  115. lblFolder.Text = res.Get("Folder");
  116. }
  117. public override void UpdateDpiDependencies()
  118. {
  119. base.UpdateDpiDependencies();
  120. lbxLanguages.Height = lblFolder.Top - lbxLanguages.Top - 12;
  121. tbFolder.Image = GetImage(1);
  122. }
  123. public SelectLanguageForm()
  124. {
  125. InitializeComponent();
  126. Localize();
  127. Init();
  128. UIUtils.CheckRTL(this);
  129. UpdateDpiDependencies();
  130. }
  131. }
  132. }