最近,小戏骨版《红楼梦》很是火热,老周一口气看完了9集,一直看到 Surface 的风扇呼呼响。林黛玉和薛宝钗这两个角色都演得不怎么样,倒是演史湘云的娃娃演得不错,老周甚是喜欢。
于是,昨晚就不写代码了,让机器也休息一下。有人会问,看视频能看到发热?是的,一来,南方的天气,虽说秋分已过,但仍然暑气不消;二来嘛,老周是在网页上看的,Flash 那个播放组件,你懂的,特特的耗性能。
好了,F话就不扯太多,今天咱们聊聊 UWP 开发中,一个比较重要,可很多人不当回事的知识点——文本资源。
别以为这个没啥用,当你开发的应用需要多种语言的UI时,就会很TMD有用了。比如有中文版、英文版、法文版、鸡文版、狗语版等。
在 UWP 应用中,文本资源有一类专用的文件来存放,后缀名为.resw,后面那个“w”可能是 Windows 的意思,也可能是 Word 的意思。不管它,反正你知道这类文件是专用于存放文本资源的就可以了。其实啊,resw 文件本质上就是一个 XML 文档,就跟 .net 项目中的 .resx 文件差不多。resw 文件的架构也确实和 .resx 一样,只不过,它只能加入字符串类型的资源条目罢了。
这是纯技术性的玩意儿,你了解老周的,老周向来特特地不喜欢说太多玄之又玄的理论,拿到某个东西,我只要知道它是啥,干啥用,咋用就够了,其实的事情老周不关心。
估计很多学编程的人,也会像老周这样,最迫不及待的,就是马上用用。好,接下来老周就细细说一下。
如何创建文本资源
既然存放文本资源的是一个resw文件,当然是在项目中【新建项】了,这个会用吧,不用我说了,你要是没用 VS 的话,那你还不能开发 UWP 应用,该去学点幼儿园的课程。
在“新建项”窗口中,你会找到一项叫“资源文件”的,如下图。
再次严重强调一下,这个资源文件是放文本内容专用的,不是用来放片子的,记住了,放片子你可以直接以文件形式放到 Assets 目录下,或者你自己建的目录。
老周的演示项目是这样的,先是在项目中建了个叫 TextDecs 的目录,目录名字是随便取的,不动听,请原谅,本来想叫“小薇”的,但担心笔画太多,截图后看不清。然后下面建了两个.resw文件。如下图所示。
你一定猜到了,老周肯定想弄成简体中文版和繁体中文版。对的,你很聪明。为什么不弄英文版呢。是这样的,老周心里一直有一个痛处,当年英语四级考得特别好,差两分才及格,所以心里一直放不下,虽然佛祖也劝了我几次,不要太在意,但有时候还是得在意一下的,毕竟那是一次人生经历。
如果你 UWP 境界比较高,你肯定看出来了,老周你这文件名不对。是的,这个命名待会儿运行的时候,一定会报错的,但为了忽悠大家去看懂,所以我故意写错了。
那么,怎么写才对呢?很 easy ,在语言标记前面加上“lang-”,或者你可以用完整的单词“language-”,修改后就是这样。
你一定又要问了,不是可以不加 lang 的吗,为啥要加呢?是这样的,这里有个规范,分两种情况讨论:
1、对于目录,可以不加,你可以直接这样命名:zh-CN、zh-TW。
2、对于文件,你应该加上 lang,比如:lang-zh-CN、lang-dog-KK。
因为我这个项目只用一个资源文件就够了,所以,我直接在文件名上加语言标记,这是为了节约地球上的氧气。如果你的应用项目需要有 N 个资源文件,例如,你每种语言都要两个资源文件,那你就要建目录了,把语言标记写在目录名上,然后每个目录下的文件名相同即可。就像这样。
-- zh-cn
| -- Res1.resw
| -- Res2.resw
-- zh-hk
| -- Res1.resw
| -- Res2.resw
这样就很直观了。
上面说的是如何安排资源文件,下面咱们聊聊怎么往里面输入资源条目。
在项目中添加.resw 文件后,可以直接双击打开,VS 会使用.net 的资源文件编辑窗口打开。然后,这里头的操作就跟以往的.net 项目一样了。
比如,老周添加了以下内容。
这里重点说说资源项怎么命名,大伙儿看到,我上面的命名,中间有个“.”,这个点是用来指定属性名的。首先,你得确认一下,你的这条资源是要应用到哪个控件上的。比如我这里,名字为 demo1 的资源条目是应用到 TextBox 控件上的,所以整个条目的名字为 demo1.Header ,即,如果UI上某个 TextBox 控件引用了这条资源,那么,就会自动使用该资源条目中的值来填充 TextBox 控件的 Header 属性。