天天看点

ASP.NET MVC 3 Razor 多国语言参考解决方案 补充二

ASP.NET MVC 3 Razor 多国语言参考解决方案 补充二

使用资源文件:

<code>public</code> <code>class</code> <code>Class1</code>

<code>{</code>

<code>    </code><code>public</code> <code>string</code> <code>GetTT()</code>

<code>    </code><code>{</code>

<code>        </code><code>return</code> <code>Resources.Test.TT;</code>

<code>    </code><code>}</code>

<code>}</code>

期望能像往常一样,随着浏览器中的语言选项的变换能出现自动切换效果,结果不出意料的失望了,只能显示没有带Culture信息的资源项值。

(3月22日重要更新内容:在web.config的system.web配置节点下加入&lt;globalization culture="auto" uiCulture="auto"/&gt;就可以不使用下列的方法了,唉,学艺不精啊!!!)

通过检查资源文件的Designer.cs文件,发现其内部有一个属性定义:

<code>[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]</code>

<code>internal</code> <code>static</code> <code>global::System.Globalization.CultureInfo Culture {</code>

<code>    </code><code>get</code> <code>{</code>

<code>        </code><code>return</code> <code>resourceCulture;</code>

<code>    </code><code>set</code> <code>{</code>

<code>        </code><code>resourceCulture = value;</code>

于是猜想,如果能设置这个属性值,想必可以让ResourceManager自动选取相应的资源文件吧,但是添加在哪里呢,发现在HttpApplication中有这样一个事件:

<code>public</code> <code>event</code> <code>EventHandler PreRequestHandlerExecute;</code>

于是在Global里面添加了这个事件的事件处理器,并在其方法内部添加如下代码:

<code>protected</code> <code>void</code> <code>Application_PreRequestHandlerExecute(</code><code>object</code> <code>sender, EventArgs e)</code>

<code>    </code><code>Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(Request.UserLanguages[0]);</code>

<code>    </code><code>Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;</code>

F5运行,果然达到了预期的效果:随着浏览器语言选项的切换,页面上的语言也能自动切换了。

英文:

ASP.NET MVC 3 Razor 多国语言参考解决方案 补充二

中文:

ASP.NET MVC 3 Razor 多国语言参考解决方案 补充二

继续阅读