使用资源文件(二)

ROS2实战:手把手教你用CMake集成自定义DDS(以CycloneDDS为例) 本文详细介绍了如何在ROS2中通过CMake集成自定义DDS(以CycloneDDS为例),涵盖环境准备、源码编译、ROS2工作区集成、性能调优及常见问题排查。通过RMW中间件抽象层,开发者可以灵活切换DDS实现,提升系统实时性和可靠性。 阅读详情
使用资源文件


创建资源

资源管理是 .NET 框架类库的一个功能,可用于从源代码中提取可本地化的元素,并将它们与字符串键一起存储为资源。运行时,可使用 ResourceManager 类的一个实例将键解析为原始资源或本地化版本。资源可存储为独立(“松散”)文件,或程序集的一部分。

ASP.NET 页可使用资源文件;另外,已编译的代码隐藏控件可以使用嵌入或链接到它们的程序集中的资源。

可使用 ResourceWriter 类以编程方式创建资源,或使用工具 Resgen.exe 创建资源。Resgen.exe 可使用简单的“键=值”格式作为输入,或使用 .resx 格式的 XML 文件。

   ; ; Lines beginning with a semicolon can be used for comments. ; [strings] greeting=Welcome ! more=Read more ... ... 
  
ResourceWriter 和 Resgen.exe 创建一个 .resources 文件,该文件可单独使用,也可用作程序集的一部分。若要在程序集中包括 .resources 文件,请使用相关的编译器开关或 Al.exe 工具。仅包含本地化资源、不包含代码的程序集称为附属程序集。

使用页上的资源

下面的示例仅实现一个 .aspx 页,该页针对每个请求进行本地化。支持的语言是英语、德语和日语。确定语言的方法是检查 Global.asax 文件中 HTTP 标头的 Content-Language 字段。该字段的内容可通过 UserLanguages 集合访问:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
C# VB JScript  

若要更改初始语言设置,可使用不同的本地化客户端,或更改浏览器上的语言设置。例如,对于 Internet Explorer 5.x,从菜单中选择“工具”->“Internet 选项”并单击底部的“语言”按钮。在接下来的对话框中,可以添加其他语言,并定义它们的优先级。为简单起见,示例总是选择第一项。

页第一次加载后,用户可在下拉列表控件 MyUICulture 中选择其他区域性。如果选定的区域性有效,此值将重写从 UserLanguages 获得的设置:

String SelectedCulture = MyUICulture.SelectedItem.Text;
if(! SelectedCulture.StartsWith("Choose")) {
  // If another culture was selected, use that instead.
  Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedCulture);
  Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
}
C# VB JScript  

以前的代码中需要使用 CreateSpecificCulture 方法,原因是您无法将线程的当前 CultureInfo 设置为非特定区域性。但是从 UserLanguages 设置中得到的字符串可以为非特定区域性。因此,CreateSpecificCulture 方法获取该字符串,并从中生成相应的 CultureInfo。

同样,在 Global.asax 文件中,将用应用程序范围初始化 ResourceManager 实例。这样,资源对每个应用程序仅加载一次。因为资源是只读的,因此不会发生锁争用。

public void Application_Start() {
    Application["RM"] = new ResourceManager("articles",
                Server.MapPath("resources") + Path.DirectorySeparatorChar,
                null);
}
C# VB JScript  

于是就可以在页上轻松地使用资源管理器。问候字符串仅本地化为:

<%=rm.GetString("greeting")%>
 

global.asax

[ 查看源代码]
 
VB news.aspx

[ 运行示例] | [ 查看源代码]


使用附属程序集

查看前一节示例中的目录结构,可以发现示例的资源不是从 DLL 加载的,而是从 .resource 文件加载。尽管这确实是一种解决方案,但还可以将代码编译为附属程序集。根据定义,附属程序集是仅包含资源、不包含可执行代码的程序集。有关附属程序集的更多信息,请参阅如何做...创建资源

.resources 文件由于不是 DLL 而不是影像复制的,因此 Web 站点在使用它们时可能会遇到锁定问题。认识到这一点,使用附属程序集的优点就变得十分明显了。另一种方法是使用应用程序资源的并行主程序集。主程序集包含备用的资源;附属程序集(每个区域设置都有一个)包含本地化资源。主程序集安装在 /bin 目录中,而附属程序集存储在普通的 xx-XX 子目录下(请参阅如何做...创建资源)。作为程序集,它们是影像复制的,而且不会被锁定。若要创建程序集识别的 .asp 应用程序:

  1. 创建资源 DLL 并将其复制到 /bin 目录中。例如:

    resgen qq.txt qq.resources
    al /embed:qq.resources,qq.resources /out:qq.dll

    “y”指示 Blob 是否应对其他程序集可见。由于 ResourceManager 位于 Mscorlib 中而且是一个不同于“qq”的程序集,因此 .resources 文件必须是公共可见的。“y”指示这是否应是公共的。

  2. 在页上包括以下语句。注意,此处的程序集名称位于在 Mscorlib 中定义的 System.Reflection 命名空间中(编译时总要引用它):

            <%
            Assembly a = Assembly.Load("qq");
            ResourceManager rm = new ResourceManager("qq", a);
            Response.Write(rm.GetString("key"));
            %>
    
    C# VB JScript  

  3. 将每个附属资源编译到各自的程序集中,并将其放入 /bin 目录中所需的正确目录结构中:

    al /embed:qq.en-US.resources,qq.en-US.resources /out:qq.resources.dll /c:en-US

    将代码替换为正在将 en-US 本地化到的区域性。记住,/c: 标记是区域性说明符。

将 DLL 放置到正确的位置(上例中的 /bin 和 /bin/en-US)后,即可适当地检索资源。注意,一切都通过程序集缓存得到影像复制,因此是可替换的,从而避免了潜在的锁定情况。



对控件使用附属程序集

已编译的代码隐藏控件还可使用附属程序集提供本地化内容。从部署的角度看,这尤其是一件好事,因为附属程序集对代码可以是与版本无关的。因此,只需将附属程序集的模块复制到服务器,即可提供对附加语言的支持,而不需要进行代码更改。

下面的示例包含程序集 LocalizedControls(模块 LocalizedControls.dll)中的 LocalizedButton 控件。编译控件在页 Showcontrols.aspx 上注册并在稍后使用:

LocalizedButton 控件存储 ResourceManager 实例,该实例由 LocalizedButton 的所有实例共享。每当呈现一个控件时,Text 属性的值便由本地化版本替换:

_rm = new ResourceManager("LocalizedStrings",
                          Assembly.GetExecutingAssembly(),
                          null,
                          true );
...
override protected void Render(HtmlTextWriter writer) {
    Text = ResourceFactory.RManager.GetString(Text);
    base.Render(writer);
}
C# VB JScript  

ResourceManager 实例负责将键解析为本地化资源。如果具有正确区域性的附属程序集不可用,并且找不到相关的区域性,则使用主程序集的非特定语言资源("en-us" -> "en" -> "非特定语言")。只需将新附属程序集的模块文件复制到适当的位置,即可提供另一种语言支持。

 

本地化控件

[ 查看源代码]
 
VB 使用本地化控件

[ 运行示例] | [ 查看源代码]

本节小结
  1. ASP.NET 页可使用资源类将资源中可本地化的内容分离出来,这部分内容在运行时被选定。
  2. 另一个好办法是使用附属程序集而不是中间的 .resources 文件加载资源,因为这样可避免锁定问题。
  3. 已编译控件可包含它们自己的资源,并将根据宿主页的 UICulture 来选择正确的本地化内容。
VL53L0X测距不准?手把手教你做RefSPAD校准与环境补偿(附Arduino/STM32代码) 本文详细解析了VL53L0X激光测距传感器精度不足的原因,并提供了RefSPAD校准与环境补偿的完整解决方案。通过Arduino和STM32代码示例,手把手教你实现毫米级测距稳定性,适用于机器人避障、工业检测等场景。 阅读详情

相关推荐

数学文化赏析MOOC笔记【2023】

深圳大学UOOC课程《数学文化赏析》课程笔记

simplenthpower的博客 1727

.net国际化 本地化 应用程序语言快速切换的解决办法

日常的信息化项目都中文的,由于公司要开展国际业务,需要把之前的软件翻译成国外对应的语言,方法应该不止一个。经过研究了解到.net有一套自己的国际化/本地化解决方案,个人认为该方案是推荐方案。 操作流程: 1、在窗体属性找到Language和Localizable两项,这两项的意思就是是否允许本地化,如果允许则可以在下拉列表中选择所需的语言。 2、我们先进行设置,选择一种语言...

weixin_30359021的博客 213

大厂校招:星宸科技嵌入式面试及参考答案(5万字长文)

当一个新的硬件设备被插入系统时,内核会发送一个设备事件通知 udev,udev 会根据设备的属性和规则,为该设备创建一个合适的设备文件。通过去除不必要的驱动程序、禁用不需要的功能、选择合适的内核配置选项、优化内核编译选项和定制内核模块等方法,可以减小内核的大小和复杂性,提高系统的性能和稳定性。上半部通常是在中断关闭的情况下执行的,以确保中断处理的原子性。处理碎片化内存是内存管理中的一个重要问题,可以采用内存压缩、内存池管理、伙伴系统、首次适应算法和最佳适应算法等方法来减少内存碎片的产生,提高内存的利用率。

大模型大数据攻城狮的专栏 2875

ASP.NET 2.0 本地化功能:本地化 Web 应用程序的新方法

Michèle Leroux BustamanteIDesign Inc适用于:Microsoft ASP.NET 2.0Microsoft Visual Studio .NETMicrosoft Visual Studio 2005本地化摘要:随着越来越多的公司拓展海外业务,通过 Microsoft ASP.NET 创建全球化的 Web 应用程序显得日益重要。ASP.NET 1.1

净心编程 3991

关于程序资源文件-深入学习笔记

可以将字符串、图像、对象数据等资源包含在资源文件之中,以供程序使用.net平台提供了5种资源方案的支持: 一、 创建一个包含字符串资源的文本文件。可以使用资源文件生成器 (Resgen.exe)将文本文件转换成进制资源 (.resources) 文件。然后使用语言编译器将这个进制资源文件嵌入可执行应用程序或应用程序库,或者使用程序集链接器 (Al.exe)将这个进制资源文件嵌入附属程序集。有关详细信息,请参阅文本文件中的资源部分。 、 创建一个包含字符串、图像或对象数据的 XML...

Learn_change_myself的博客 495

创建附属程序集步骤

 1,创建文本文件:例如myResources.txt  输入内容例如:txt1=New document                txt2=New document for this contact2,在vs命令面板中用命令行工具resgen.exe把它编译为 .resources资源文件  例如:Resources.en.resources  命令为:resgen myResources

流光岁月的专栏 821

资源文件使用总结

一、导言 microsoft的.net从2002年1月15日第一版发布到今天,已经得到了广泛的使用;从刚推出时国内相关书籍种类寥寥,到今天.net的相关书籍的大大丰富,已有越来越多的人——初学者或者有经验的程序员,在学习、应用.net。本文面向对.net有些了解的者,以c#

马龙宁的专栏 607

连接值图像中断开的点资源文件介绍

连接值图像中断开的点资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 资源简介 本资源文件提供了将值图像中的断开的点连接起来的技术实现,用户可通过该资源实现值图像中闭合区域的生成。连接过程采用单像素连接方式,确保图像处理后的精确性和美观性。 功能特点 单像素连接:精细的连接方式,确保连接区域细腻且精准。 自动闭合:智能识别断开点,自动完成闭合区域的连接。 通用...

gitblog_06771的博客 267

Button的使用():从资源文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <EditTe

多看多听多总结 537

Android学习笔记()——使用任意XML资源文件

本篇文章主要将在Android项目中使用任意自定义的XML资源文件。 1、在/res/下新建文件夹xml,在此目录下新建一个xml文件test.xml bobby man 24 hunan guangdong 2、在.java文件中获取xml文件的内容,布局神马的就不写了,直接些获取方法,我在此写了一个静态方法做测试。 p

奋斗猪的小窝 658

【亲测免费】 用友T+12.1开工具指南说明

用友T+12.1开工具指南说明 【下载地址】用友T12.1开工具指南说明 用友T+12.1开工具指南说明 项目地址: https://gitcode.com/open-source-toolkit/2ee95 ...

gitblog_09731的博客 611

LT-86102SX HDMI一分硬件设计电路资源

LT-86102SX HDMI一分硬件设计电路资源 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了一个名为“LT-86102SX HDMI一分”的资源文件下载。该资源文件包含了LT-86102SX硬件设计电路的详细资料,能够帮助您完全实现HDMI一分的方案设计。 资源文件描述 标题: LT-86102SX HDMI一分 描述: LT-86102SX硬件设计...

gitblog_09732的博客 463

QT资源文件的两种使用方式

QT资源文件的两种使用方式(CMake) 通过Qt资源文件管理图片资源,qss样式表等。有两种方式使用Qt资源文件。 第一种:将资源内容编译到可执行文件中,实现了图标等资源的封装,可达到防止恶意篡改的目的。 第种:使用rcc工具将资源文件qrc编译成rcc文件,然后在代码中动态加载。 1:如何将资源文件qrc编译到可执行程序中 第一步:生成资源文件qrc 1:打开Qt designer,随便新建一个窗体(打开窗体后才能新建出资源文件) 2:打开资源浏览器,点击编辑资源图标 3:点击新建资源文件 4:

qq_29022265的博客 3455

相无刷电机资源文件介绍

相无刷电机资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 此仓库包含了名为“相无刷电机.pptx”的资源文件,该文件详细介绍了无刷直流电机相关的知识和应用。 文件内容 以下是该PPT文件的主要内容: 无刷直流电机的发展过程:阐述了无刷直流电机从诞生到发展的历程。 相无刷直流电机的工作原理:详细介绍了相无刷直流电机的工作原理,以及其内部结构。 相无刷直流电...

gitblog_06766的博客 389

遍历Resources下资源文件方法

遍历Resources下资源文件方法 Properties.Resources res = new Properties.Resources(); PropertyInfo[] properInfo = res.GetType().GetProperties(BindingFlags.Static | BindingFlags.NonPublic | BindingF...

L_M_C的博客 1756

在DataSet中搜索数据

  在DataSet中搜索数据   在一个数据集中查询符合特定条件的行时,使用基于索引(index-based)的查看表将提高性能。给数据表指定主键(PrimaryKey)值时,就建立了一个索引。当为数据表建立数据视图(DataView)时也建立了索引。下面是一些使用基于索引查看的技巧:   如果查询是在数据表的主键列上进行的,使用DataTable.Rows.Find代替DataTabl

清水堂 3235

ISA是个什么东西?

ISA server是什么? ISA Server是一个兼具代理和服务器功能的产品。 在什么情况下才推荐使用ISA 推荐在中小型网络做防火墙,可在所有网络内做代理服务器。 ISA能否实现某些用户可以使用指定服务,其他用户不可以 ISAServer的Access Policy可以applies to 用户,可在这里设置。 -------------------

清水堂 2141

Asp.net动态生成html页面

Asp.net动态生成html页面适用于:Microsoft ASP.NET摘要:asp.net动态生成html页面简介:此功能适用于后台数据库功能不强的web站点,即大部分文本不是存放在数据库的记录中,而是放在html文件或者xml文件中,仅仅把索引放到数据库中,如文章标题、类别、查询关键字等。这样适合于后台没有诸如MS Sql Server这样的数据库支持的Web站点。适用于新闻发布系

清水堂 1880

DataList 分页

/* Create By 飞刀 http://www.aspcn.com 2001-7-25 01:44 Support .Net Framework Beta 2*/OleDbConnection MyConn;int PageSize,RecordCount,PageCount,CurrentPage;public void Page_Load(Object src,EventArgs e

清水堂 1509

改进的人工势场法Python.rar_APF_dinner42h_percentcbm_python人工势场_人工势场法

用Python语言编写的改进的人工势场法代码。解决了目标不可达问题。

DGR66-IATA Dangerous Goods RegulationsAddendum-1-EN-2025.rar

DGR66-IATA Dangerous Goods RegulationsAddendum-1-EN-2025.rar

上一篇: 使用资源文件
下一篇: .NET 资源文件的使用
andtom
博客等级 码龄22年 0粉丝 21原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值