Многоязычные и ресурсные файлы - PullRequest
2 голосов
/ 27 августа 2009

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

Я делаю это в VB.Net и использую Visual Studio 2008

После создания нового проекта я добавил в него файл ресурсов (Добавить -> Новый элемент, Выбранный файл ресурсов, назвал его Resource1.resx).

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

Имя - lblFirstName, значение - Джон Имя - lblLastName, значение - Смит

В моей форме есть 2 ярлыка: FirstName и LastName

В коде я добавил

FirstName.Text = My.Resources.Resource1.lblFirstName
LastName.Text = My.Resources.Resource1.lblLastName 

Если я запускаю этот код, он работает нормально. Джон и Смит отображаются на этикетках.

Теперь на мой вопрос. Скажем, вместо имени и фамилии ярлыки (кнопки, пункты меню и т. Д.) На самом деле были словами, которые на разных языках были бы разными. Я хотел бы иметь что-то вроде

EnglishText.resx SpanishText.resx GermanText.resx

Каждый файл ресурсов будет содержать одинаковые имена, только разные значения. В зависимости от того, какой язык был выбран, определяется пользователем (из меню), как я могу получить соответствующий файл ресурсов для использования.

По сути, я бы хотел получить

FirstName.Text = My.Resources.<Language Specific Resource File>.lblFirstName

Возможно ли что-то подобное? Это приемлемый подход? Есть ли лучший способ сделать это?

Любые советы или рекомендации будут с благодарностью. Я стараюсь часто проверять, есть ли дополнительные вопросы или требуется дополнительная информация.

Ответы [ 3 ]

2 голосов
/ 06 июля 2015
Imports System.Globalization
Imports System.Resources

Public Class Form1
    Public rm As Resources.ResourceManager

    Private Property CultureInfo As CultureInfo
    Public Function getRMValue(ByVal strValue As String)
        Dim strLanguage As String

        If IsNothing(rm) Then
            strLanguage = CultureInfo.CurrentCulture.ToString.ToUpper.Substring(0, 2)
            If strLanguage = "EN" Then
                rm = My.Resources.English.ResourceManager
            Else
                rm = My.Resources.Turkce.ResourceManager
            End If
        End If
        getRMValue = rm.GetString(strValue)
    End Function
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    End Sub
    Private Sub btnBye_Click(sender As Object, e As EventArgs) Handles btnBye.Click
        MessageBox.Show(getRMValue("messagebox"))

    End Sub
End Class

Скриншот ресурса

2 голосов
/ 27 августа 2009

Платформа .NET построена с учетом локализации. Уже существует врожденный механизм локализации собраний и ресурсов, основанный на текущей культуре. Вот несколько стартовых ссылок, которые вы должны прочитать, прежде чем пытаться свернуть свои собственные:

http://msdn.microsoft.com/en-us/library/bb398937.aspx
http://msdn.microsoft.com/en-us/goglobal/bb688096.aspx

0 голосов
/ 27 декабря 2012

Допустим, у вас есть 3 языка, на которых вы могли бы сделать что-то вроде этого:

If LanguageChanger<change this to the way you let people change languages> = "English" Then
Language = My.Resources.EnglishText 
else if LanguageChanger = "Spanish" Then 
Language = My.Resources.SpanishText
else if LanguageChanger = "German" Then 
Language = My.Resources.GermanText
End if

Затем вы можете использовать его:

FirstName.Text = Language.lblFirstName

Я только что сделал это из этой формы, он не тестировался, поэтому извините, если он не работает

...