多语言asp.net类项目

时间:2010-11-02 10:15:36

标签: c# asp.net visual-studio-2010 multilingual

我在visual studio 2010的解决方案中有几个项目。这是结构:

alt text

在名为TerapiaFisica的WebSite项目中,我使用localResources进行多语言支持,这没关系。
我的问题出在ModelosEF文件夹中,我有几个entityFramework项目 这正是我的问题:

public void ModificarProducto(Dictionary<string, string> valores)
    {
        #region Obtencion de Datos y Validaciones de estos
        int productoID;
        try
        {
            productoID = Convert.ToInt32(valores["ProductoID"]);
        }
        catch (Exception)
        {
            throw new Exception("Debe seleccionarse una Categoría válida.");
        }

在这个方法中,我在异常中使用普通西班牙语,如果lang设置为EN(Productos.aspx?lang = EN),我需要一种以最简单的方式将文本更改为英语的方法。 /> 我怎样才能做到这一点?我如何知道网站中使用的语言,以便我可以在ModeloInventarioLogica.cs类中使用适当的语言?我应该通过参数发送当前的文化知道吗?如果是这样,我如何使用Visual C#从哪里选择相应的语言文本?
很多问题,但只有一个问题,使一个课程项目多语言!
非常感谢你。

3 个答案:

答案 0 :(得分:2)

在C#函数中,跟随变量 exceptionMessage

string exceptionMessage = ResourcesNameSpace.ResourceFileName.strYouMustSelectAValidCategory;
如果在ResourceFileName.resx和ResourceFileName.en-US.resx文件中都有密钥“strYouMustSelectAValidCategory”,则

可以采用正确的值(西班牙文或英文文本)。

那么,你可以写:

throw new Exception(exceptionMessage);

应用程序将“知道”运行时的当前文化:)

要在应用程序中设置当前文化,您可以使用带有代码隐藏的链接按钮:

// Changes the CurrentUICulture of the current thread:
Thread.CurrentThread.CurrentUICulture = new CultureInfo( "en-US", false );

(来源:http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentuiculture.aspx


要将资源文件添加到项目中,可以右键单击项目图标(ModeloInventario),选择“添加新项”, 选择“资源文件”并输入文件名(我正在使用vs2008,希望它没有太大差异!)。

您的默认资源文件可以命名为: MIResources.resx

然后,您添加另一个,并将其命名为: MIResources.en-US.resx ,英语为... MIResources.fr 为法语...和等等, 您希望使用的其他每种语言都有一个文件(此处有语言代码:http://msdn.microsoft.com/en-us/library/ms533052%28VS.85%29.aspx)。

默认资源文件是当前文化资源文件中不存在项目时或当前文化没有资源文件时搜索值的默认位置。

然后,首先将键和值添加到默认资源文件中(strYouMustSelectAValidCategory:Debe seleccionarseunaCategoríaválida。), 然后使用转换将相同的密钥添加到MIResources.en-US.resx(strYouMustSelectAValidCategory:您必须选择一个有效的类别。)... 所以,相同的键,不同的值。

毕竟,您可以使用以下方法在应用程序的任何位置获取密钥(字符串)值:

string str = ResourcesNameSpace.MIResources.strYouMustSelectAValidCategory;

ResourcesNameSpace是使用资源文件创建的命名空间(如果有的话)!您可以在默认资源文件的代码隐藏中检查或编辑它...如果没有,您不需要使用它(只要您到达MIResources.strYouMustSelectAValidCategory)。

答案 1 :(得分:2)

如其他响应中所述,您可以使用ResourceManager获取要显示的适当本地化字符串。要回答您的其他问题... ASP.NET将在Accept-Language标头中选择随浏览器发送的当前首选文化。例如,我的浏览器发送:

接受语言:en-ca,en-us; q = 0.7,en; q = 0.3

如果可以,请使用加拿大英语,否则使用英语,然后使用英语。 (这可能同样是土耳其语,法语,祖鲁语,然后是英语。)这种回退行为在浏览器的选项中指定。在FireFox中,选项......内容......语言......选择......

正如我所提到的,ASP.NET自动检测此选择并适当地设置请求处理线程的当前文化(和UI文化)。如果您想在您的网站上提供一种在语言之间切换的选项,您必须考虑的问题是什么?您可能不希望强制用户更改其浏览器的默认语言。您需要提供一个按钮,下拉列表或其他允许用户选择语言的机制。然后,您需要将该选项存储在cookie,查询字符串,隐藏表单变量或其他位置,以便您可以在每个请求的开头设置它。

Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedCulture, false);

答案 2 :(得分:1)

使用ResourceManager从资源XML文件中获取字符串。