ASP.NET Core 3.1项目中用JS获取Portable Object本地化当前语言
获取ASP.NET Core多语言应用的当前语言(JS版)
没问题,这事儿其实挺容易搞定的,咱们结合你给出的代码一步步来:
首先,你用的CookieRequestCultureProvider.DefaultCookieName对应的实际Cookie名称是.AspNetCore.Culture——这是ASP.NET Core用来存储当前文化设置的默认Cookie名。这个Cookie的值格式一般是c=zh-CN|uic=zh-CN,其中c就是你通过SetLanguage方法设置的culture参数,uic是UI文化,咱们要拿的就是前者(或者 fallback到后者)。
接下来直接上可用的JS代码:
1. 通用Cookie读取函数+文化解析函数
// 通用工具函数:根据名称获取Cookie值 function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); } // 获取当前应用的语言文化 function getCurrentCulture() { // 读取ASP.NET Core的文化Cookie const cultureCookie = getCookie('.AspNetCore.Culture'); // 如果Cookie不存在,返回你的默认语言(比如'en-US',根据你的实际情况调整) if (!cultureCookie) return 'en-US'; // 解析Cookie的格式:c=xx-XX|uic=xx-XX const cultureSegments = cultureCookie.split('|'); // 先找请求文化(c=开头的部分) const requestCulture = cultureSegments.find(segment => segment.startsWith('c=')); if (requestCulture) { return requestCulture.split('=')[1]; } // 如果没找到请求文化, fallback到UI文化 const uiCulture = cultureSegments.find(segment => segment.startsWith('uic=')); return uiCulture ? uiCulture.split('=')[1] : 'en-US'; } // 调用示例 const currentLang = getCurrentCulture(); console.log('当前语言:', currentLang);
2. 更灵活的写法(避免硬写Cookie名称)
如果你不想在JS里硬写.AspNetCore.Culture这个字符串,可以在Razor视图(比如布局页_Layout.cshtml)里把.NET的常量值注入到JS中,这样以后哪怕框架调整Cookie名称(虽然概率极低),代码也不用改:
<script> // 从后端注入Cookie名称常量 const cultureCookieName = '@CookieRequestCultureProvider.DefaultCookieName'; // 调整上面的getCurrentCulture函数,用这个变量代替硬写的名称 function getCurrentCulture() { const cultureCookie = getCookie(cultureCookieName); // 后面的逻辑和之前一致即可 } </script>
这样就完美适配你的多语言设置啦,不管用户切换到哪种语言,JS都能准确拿到当前的文化值。
内容的提问来源于stack exchange,提问作者Simone Spagna
相关产品推荐
相关产品推荐

