【问题标题】:Why is the text on asp.net controls is not changed when changing uiCulture为什么更改uiCulture时asp.net控件上的文字没有改变
【发布时间】:2025-11-29 16:35:02
【问题描述】:

我在 aspx 页面上有用户控制权。
uc 具有用于选择以下三种语言之一的下拉列表控件:希伯来语(默认)、英语或俄语。
我有三个 resx 页面包含每种语言的翻译。
当用户选择一种语言时,我将父页面的 uiCulture 更改为 selected 选项:

this.Page.UICulture = language;  

它有效。
但是...不完全。
我的 div 定义如下:

<div class="col col-md-3 col-xs-4"><%= Resources.MyResource.CurrencyText %></div>  

其内容按预期更改。
但我也定义了下拉列表:

<asp:DropDownList ID="ddlCurrency" CssClass="form-control" runat="server" Height="16px">
  <asp:ListItem Value="1" Text="<%$ Resources:MyResource,shekelOpt %>"></asp:listitem>
  <asp:ListItem Value="2"  Text="<%$ Resources:MyResource,dollarOpt %>"></asp:ListItem>
</asp:DropDownList>  

它根本没有改变。
我尝试解决方法并在 $(document).ready 函数中写入类似:

$("#<%= ddlCurrency.ClientID %> option:nth-child(1)").text("<%= Resources.MyResource.shekelOpt %>");
$("#<%= ddlCurrency.ClientID %> option:nth-child(2)").text("<%= Resources.MyResource.dollarOpt %>");  

它可以工作,但我不喜欢这个解决方案,它丑陋且不够完善。

谁能帮助并告诉我如何更改 asp:dropdownlist(以及 asp:button)上的文本?

【问题讨论】:

  • 您可以使用标签并定义resx中的文本进行更改。
  • 如何在下拉列表中定义标签?
  • 让我搜索一下,我以前没有遇到过这个问题。如果我得到一些解决方案,会通知你
  • 你在所有 3 个 resx 页面中都有 shekelOpt 和 DollarOpt 吗?
  • 当然!!!当我在 jQuery 代码中更改它时显示它有效,但我无法通过代码手动更改所有控件。

标签: c# jquery asp.net controls globalization


【解决方案1】:

将此添加到 ResourceClearing.aspx.vb 以测试 ru-RU 文化。不要在 InitializeCulture 之外设置文化:

protected override void InitializeCulture()
                {
                    Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
                    base.InitializeCulture();
                }

在 ResourceClearing.aspx 页面中添加这个

<asp:DropDownList ID="ddlCurrency" CssClass="form-control" runat="server" Height="16px">
  <asp:ListItem Value="1" Text="<%$ Resources:shekelOpt %>"></asp:listitem>
  <asp:ListItem Value="2"  Text="<%$ Resources:dollarOpt %>"></asp:ListItem>
</asp:DropDownList> 

如果这不起作用,请在 ResourceClearing.aspx 页面中添加此标记

<asp:DropDownList ID="ddlCurrency" CssClass="form-control" runat="server" Height="16px" meta:resourcekey="ddlCurrencyResource1" >
                <asp:ListItem Value="1" Text="Shekal" meta:resourcekey="ListItemResource1"></asp:ListItem>
                <asp:ListItem Value="2"  Text="Dollar" meta:resourcekey="ListItemResource2"></asp:ListItem>
            </asp:DropDownList>

并在所有 3 个资源文件中添加以下条目及其值:

【讨论】:

  • 现在我收到错误消息'找不到键为'shekelOpt'的资源对象'。我知道它确实存在。
  • 你能贴出3个.resx页面的截图吗?
  • 你是指每一个的内容?
  • 是的,任何事情...从您的代码看来,您正在尝试访问全局资源,但您需要在所有 3 个 resx 文件中定义条目
  • 编辑您的问题,然后按 ctrl+G
【解决方案2】:

在您的代码隐藏中覆盖文化和 UIculture 的两个属性

protected override void InitializeCulture (){
  UICulture = selectedLanguage;
        Culture = selectedLanguage;
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
        base.InitializeCulture();
}

【讨论】:

  • 我试过了,没有任何改变。也许是 web.config 中的东西?
  • 您的资源必须保存在 App_GlobalResources 或 App_LocalResources 文件夹中的位置。您需要将资源放在 App_GlobalResources 文件夹中
  • 我在这个文件夹中。奇怪的是(至少对我来说)标签和 div 确实发生了变化,只有控件的 Text 属性保持不变。
  • 你能不能试试这个必须工作Text='&lt;%# GetGlobalResourceObject([ResourceClassName],[ResourceKey]) %&gt;'
  • 当我把它写在我的按钮 Text='' 我得到空文本
最近更新 更多