Основано на this tutorial Я пытаюсь иметь возможность интернационализации в своем проекте. У меня есть эти файлы ресурсов для сохранения слов на разных языках:asp.net исходные файлы MVC для интернационализации
Resources.resx -> для языка по умолчанию (EN-US)
resources.fa.resx -> для языка фарси
resources.es.resx -> для испанского языка
слова, подобные fa
и es
показаны культуры.
в views
я заменил слова с их равными в файлах ресурсов таким образом:
<a href="#" >@Resources.IranNewsStand</a>
Edit: Я реализовал всю логику на основе tutorial.but У меня есть один вид для все языки и в этом представлении я использую resources.resx. Это правильная логика?
Мой вопрос в том, как мой проект знает, для загрузки какого файла ресурсов на основе значения Thread.CurrentThread.CurrentCulture
? Что я упустил?
Edit: Я реализовал эти шаги:
1-я есть Class Library Project
имени Resources
, содержащий три упомянутых Resx файлов (Resources.resx, resources.fa.resx, resources.es.resx).
2- Resource project
добавлен в мое приложение mvc в качестве ссылки.
3-контроллеры наследует этот базовый контроллер:
public class BaseController : Controller
{
protected override void ExecuteCore()
{
string cultureName;
HttpCookie cultureCookie = Request.Cookies["_culture"];
if (cultureCookie != null)
cultureName = cultureCookie.Value;
else
cultureName = Request.UserLanguages[0];
cultureName = utilities.CultureHelper.GetValidCulture(cultureName);
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
base.ExecuteCore();
}
}
4-я сказал в view
я использовал строку ресурсов из resource.resx
файла, содержащего язык по умолчанию (EN-US) строки:
<p>@Resources.Resources.Home</p>
5-в виду у меня есть ссылка, что при нажатии на нее, это JQuery код запуска:
<script type="text/javascript">
$("#btnChangeLanguage").click(function() {
$.cookie("_culture", "fa-IR", { expires: 365, path: '/' });
window.location.reload(); // reload
})
</script>
fa-IR
- культура, выбранная пользователем. Но при нажатии на эту ссылку язык не изменяется.
Edit: Решение
Я нашел 2 проблемы в моем проекте, решая их сделал все в порядке:
1-JQuery печенье плагин должен иметь Jquery код работать correctely:
<script type="text/javascript" src="~/Scripts/jquery.cookie.js" ></script>
2-Событие ExecuteCore в BaseController
не срабатывало, и это звучит так, как будто это было проблемой в asp.net MVC 4
. Так на основе this question Я попытался вместо этого вместо OnActionExecuted
.
Вы говорите, что интернационализация не работает? Загруженный ресурс будет выбран на основе строки культуры, предоставляемой вашим браузером. –
, но я использую строки в resources.resx в представлениях, это означает язык по умолчанию. Правильно ли это? –
Можете ли вы проверить, просматривается ли файл cookie сервером? Кроме того, на странице просмотра попробуйте выполнить рендеринг @ System.Diagnostics.Thread.CurrentThread.CurrentCulture, чтобы проверить, не установлен ли он там. – Eilon