Перевод проекта Visual Studio

У меня есть большой проект, написанный на моем родном языке (хун) в С# с помощью Visual Studio 2012.

Я хотел бы перевести его на английский язык.

Конечно, если я получу текст на венгерском языке, я смогу его перевести, так что дело не в том, как перевести текст, а в том, как упростить весь перевод. Мне не нужно программное обеспечение для изменения языка во время выполнения, также нормально, если я получу другой проект с другим языком. Один из способов — пройтись по всему проекту и изменить все метки, но это много работы, и поскольку я изменяю весь проект, мне придется делать это снова и снова.

Я написал еще одну программу, которая находит метки, помеченные "..." в файлах проекта (например, "Form1.cs" и т. д.), и я мог их перевести. В этом было много ошибок. Например, Visual Studio разбивает длинный текст, поэтому я разделил эти строки, так что после всего перевода все еще было много работы.

Другая идея заключалась в том, чтобы заменить все строки элементами массива, например, вместо "Cancel" написать t[201] или что-то в этом роде, а затем я мог перевести t только переменная. Но это также много работы, и есть проблема, если я включу переменную в текст.

Например, на венгерском языке я мог бы написать '2 masodperc maradt', но я должен перевести это как 'Оставшиеся секунды: 2' или что-то в этом роде. Затем я должен помнить о включенных переменных.

Как вы думаете, как сделать перевод проще всего, и как это делают другие программисты?

Например, TotalCommander меняет язык за секунду, без перезапуска и прочего.


person weiszam    schedule 18.06.2013    source источник


Ответы (1)


В .Net есть сборка с использованием файлов resx.

Существует множество инструментов, помогающих с переводом на основе локализации .Net, но вы также можете сделать это напрямую в VS.

  • Возможно, вам больше нравится ResXManager.

Приложения .Net, способные изменять переводы на лету, обычно используют пользовательскую интернационализацию, например. загрузка текстовых файлов и обновление графического интерфейса.

Если вы хотите сделать что-то подобное самостоятельно, имейте в виду, что вам также нужно изменить размер элементов управления, чтобы текст соответствовал размеру.

Для вашей проблемы с #count текстовым текстом и текстовым текстом #count вы можете использовать string.Format как.

  1. Добавьте файл resx в свой проект, например Localized.resx.
  2. Добавьте строковое свойство "CountText" со значением {0} text text.
  3. Добавьте второй resx Localized.en.resx
  4. Добавьте строковое свойство "CountText" со значением text text {0}. в Localized.en.resx
  5. Когда вы записываете свой прогресс в графический интерфейс, используйте string.Format(Localized.CountText, myCount);
  6. Переключите язык программы, как показано в первой ссылке.
  7. .Net автоматически загружает соответствующий ресурс для языка.

Чтобы узнать обо всех возможностях, особенно о переводе с помощью VS, вам действительно следует просмотреть статьи библиотеки MSDN. Перевод может стать громоздким, если вы что-то упустили.

person Community    schedule 18.06.2013
comment
Хорошо, это действительно работает и удивительно. Но есть ли способ решить эту проблему, когда переменная идет в середине текста на одном языке и идет в конец текста на другом языке? - person weiszam; 18.06.2013
comment
У этого есть проблема. До сих пор у меня везде были точные тексты, и теперь я начал заменять их вещами из Localized.resx. Это работало нормально, но когда я заменил весь проект в Form1.Designer.cs, одна крошечная модификация в Form1.cs [Design] заменила весь Localized.resx ссылки с реальными текстами, поэтому вся моя работа пропала. Как мне это решить? При изменении области дизайна ссылки исчезают. - person weiszam; 19.06.2013
comment
Вы установили Form.Localizable = true? - person ; 19.06.2013
comment
Пока нет, попробую, а потом еще раз прокомментирую. - person weiszam; 19.06.2013
comment
Это очень важно для его работы. :) Вот почему я имел в виду, что чтение статей в MSDN полезно. - person ; 19.06.2013
comment
Хорошо, кажется, теперь это работает. Я вернусь к вам, когда что-то снова пойдет не так. Спасибо! - person weiszam; 19.06.2013
comment
Одна небольшая проблема все еще остается: у меня есть Form1.resx, где есть некоторые строки, но Localized.resx там не идентифицируется, потому что это какой-то файл xml. Что делать? - person weiszam; 20.06.2013
comment
Если вы добавили Localizes.resx с помощью Add New Item, также должен быть Localized.Designer.cs, в котором генерируются свойства для доступа к строкам. Строки в Localized.resx должны быть доступны в коде, таком как Localized.MyStringKey. Localized.resx предназначен для доступа из кода, а не из конструктора. Строки для Designer будут храниться в Form1.resx (и resx для конкретного языка, если вы установили Form1.Localizable = true. - person ; 21.06.2013
comment
Хорошо, благодаря вашим ссылкам и описанию, теперь у меня есть язык Form1.resx. Я тоже пойду переводить :) - person weiszam; 21.06.2013