Несколько вопросов о мультиязычности - PullRequest
2 голосов
/ 14 февраля 2011

Недавно я решил добавить 4 языка в свое приложение. Я прочитал о том, как это сделать, и мне это удалось.

Но есть две проблемы / вопросы, которые я хотел бы задать.

Первый вопрос: есть ли лучший способ изменить текст каждого элемента управления вместо

private System.Resources.ResourceManager rm;

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr");
rm = new System.Resources.ResourceManager(typeof(MainForm));

и затем для каждого элемента управления написать эту строку:

aboutToolStripMenuItem.Text = rm.GetString("aboutToolStripMenuItem.Text");
addTaskToolStripMenuItem.Text = rm.GetString("addTaskToolStripMenuItem.Text");
addTaskToolStripMenuItem1.Text = rm.GetString("addTaskToolStripMenuItem1.Text");
...

Второй вопрос: допустим, текст label1 является «test», а на другом языке его «testest», тогда размер метки изменится, и это нормально. но если я получил label2, что его местоположение находится рядом с label1, label1 может быть в верхней части label2. Как я могу переместить label1 по сравнению с label2, поэтому независимо от длины текста в label1 расположение label2 будет относительно label1. Я не хочу использовать вычисления в программе, я хочу знать, есть ли другой способ, как свойство, в одном из элементов управления.

EDIT: после долгих раздумий я решил использовать XML для своего мультиязычности. таким образом я могу позволить людям перевести его и загрузить его для меня, плюс я могу использовать его во время выполнения или перезагрузить программы.

Об относительном положении элементов управления, которые я буду использовать FlowLayoutPanel или TableLayoutPanel Я проверю далее, что лучше.

Ответы [ 3 ]

3 голосов
/ 14 февраля 2011

Спутниковые сборки - это то, что вы ищете.

Q1: В VS установите для свойства Localizable вашей формы значение true.Затем выберите соответствующее свойство языка и введите свои переводы в дизайнере.Таким образом, вам просто нужно установить культуру потоков при запуске, и .NET загрузит нужный вам язык.Не нужно добавлять дополнительный код.

Q2: Опять же, после того, как вы выбрали язык в конструкторе, просто переместите элементы управления: их новое расположение / размер является частью перевода и будет автоматически обрабатываться .NET.

2 голосов
/ 14 февраля 2011

Не очень хорошая идея менять GUI на другую культуру во время работы, лучше сказать что-то вроде того, что вам нужно перезапустить приложение, чтобы увидеть изменения.

Хотя, если вам нужно это сделать, вам необходимо перезагрузить все ресурсы из новой культуры (более или менее такие же, как в InitializeComponen), а не только текст, поскольку местоположение, размер и т. Д. Могут быть изменился тоже. Также необходимо изменить культуру потоков, чтобы ошибки, сообщения и новые элементы управления также имели правильную культуру (чтобы они отображались также на правильном языке).

Вы можете установить свою культуру приложения с помощью:

CultureInfo appCulture = CultureInfo.CreateSpecificCulture("fr");
Thread.CurrentThread.CurrentCulture = appCulture; 
Thread.CurrentThread.CurrentUICulture = appCulture;

Вам нужна особая культура, чтобы использовать ее для форматирования и анализа.

1 голос
/ 14 февраля 2011

В ответ на ваш первый вопрос:

Если вы действительно хотите следовать этой схеме, возможно, использование Reflection или автоматическая генерация кода - это альтернатива для более простого управления.Я обычно пишу свой собственный метод GetString, который принимает в качестве аргумента английскую строку по умолчанию (используется, если никакой ресурс не может быть загружен динамически для текущего языка).Но я не уверен, является ли это лучшим решением ...


В ответ на ваш второй вопрос:

В Winforms используйте TableLayoutPanel или FlowLayoutPanel или другоеКомпонент компоновки для позиционирования элементов управления.Можно указать, например, подходит ли метка к ее содержимому (AutoSize), или она должна стыковаться, и если да, то с каким выравниванием.Практически нет сценария использования, который потребовал бы утомительного самостоятельного управления или вычислений.

Ссылка: http://msdn.microsoft.com/en-us/library/z9w7ek2f(v=VS.100).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...