Интересно, есть ли какой-нибудь неприятный запах в моей практике для i18n на Angular.
Я поставил функцию перевода I18n на контроллер Angular (потому что я не знаю, как поместить ее в файл шаблона HTML)
Что касается области i18n, я использую этот способ I18n.t("city." + city_name)
, чтобы указать, что имя города находится в области действия «город». Могу я написать так I18n.t(city_name, scope: "city")
, чтобы было понятнее.
Я ценю каждый комментарий и предложение по улучшению моего текущего решения.
Структура данных
отправления_lst — это список названий стран на английском языке, например: [США, Китай, Япония]
Каждая страна имеет много названий городов. например [Нью-Йорк, Лос-Анджелес, Бостон]
Угловой контроллер
App.controller("departures_ctrl", function($scope, $location, $http) {
$http.get("/departures.json")
.success(function (response) {
$scope.departures_lst = response;
});
$scope.get_destinations = function(city_name) {
return $location.url("/depart_from/" + city_name);
};
$scope.i18nCountryName = function(country_name) {
return I18n.t("country." + country_name) + country_name
};
$scope.i18nCityName = function(city_name) {
return I18n.t("city." + city_name) + city_name
};
});
Табличка HTML?
<div class="panel panel-transparent" ng-repeat="departure in departures_lst">
<h5>{{i18nCountryName(departure.country)}}</h5>
<li class="col-sm-3 col-lg-3 col-xs-3" ng-repeat="city in departure.cities">
<a ng-click="get_destinations(city)">
<i class="fa fa-plane"></i>
{{i18nCityName(city)}}
</a>
</li>
</div>