利用资源文件切换语言, 所以先要新建所需要的语言文件
International.en-GB.resx
International.resx
所有的资源都将从上面两个资源文件中得到, 比如:
var msg = International.UserNotExist;
新建CultureHandler类, 继承DelegatingHandler
public class CultureHandler : DelegatingHandler
{
private List<string> supportedCulture = new List<string>()
{
"en-GB"
};
protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
HttpHeaderValueCollection<StringWithQualityHeaderValue> acceptedLanguage = request.Headers.AcceptLanguage;
if (acceptedLanguage != null && acceptedLanguage.Count > 0)
{
StringWithQualityHeaderValue preferredLanguage =
acceptedLanguage.OrderByDescending(e => e.Quality ?? 1.0D)
.Where(e => !e.Quality.HasValue || e.Quality.Value > 0.0D)
.FirstOrDefault(
e => supportedCulture.Contains(e.Value, StringComparer.OrdinalIgnoreCase));
if (preferredLanguage != null)
{
// 如需要,此处也可同时设置CurrentCulture属性
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(preferredLanguage.Value);
}
if (acceptedLanguage.Any(e => e.Value == "*" && (!e.Quality.HasValue || e.Quality.Value > 0.0D)))
{
string selectedCulture =
supportedCulture.FirstOrDefault(e => !acceptedLanguage.Any(
ee =>
ee.Value.Equals(e, StringComparison.OrdinalIgnoreCase) && ee.Quality.HasValue &&
ee.Quality.Value == 0.0D));
if (!string.IsNullOrWhiteSpace(selectedCulture))
{
// 如需要,此处也可同时设置CurrentCulture属性
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(selectedCulture);
}
}
}
return base.SendAsync(request, cancellationToken);
}
}
在WebApiConfig类的路由中注册事件:
config.MessageHandlers.Add(new CultureHandler());
如果要切换语言的话就只需要将request headers的Accept-Language, 比如切换英文就将Accept-Language:en-GB,
完毕