Angular Moment - 使用自定义语言环境更改语言环境 object
Angular Moment - Change Locale with customized locale object
我在 Angular 应用程序中配置语言环境更改时遇到问题。我正在使用 Angular Moment 和 Moment.js
首先,我在 angular.module.config 中将语言环境设置为英语,并根据需要立即设置相对时间 object:
moment.locale('en', {
relativeTime: {
future: "In %s",
past: "%s ago",
s: "<1 minute",
m: "1 minute",
mm: "%d minutes",
h: "1 hour",
hh: "%d hours",
d: "24 hours",
dd: "%d days",
M: "1 month",
MM: "%d months",
y: "1 year",
yy: "%d years"
}
});
这按预期工作,
现在我也有一个平等的 object 但对于德语。我不知道把它放在哪里,因为如果我把它放在配置中,它会覆盖英文配置。
然后我在控制器中的 header 菜单视图中有一个 select 下拉菜单,其中包含 EN 和 DE(我已经将其转换为小写以进行翻译),但我似乎无法关联 amMoment.changeLocale('de');
将 moment 部分更改为德语,我似乎也无法直接用 moment 更新它。
我怎样才能做到这一点?
您可以连续自定义relativeTime
多个语言环境,而不会覆盖之前的配置。
您可以使用 ng-change
将下拉列表更改绑定到为所选区域设置调用 amMoment.changeLocale
的函数。
请注意,您必须导入 moment-with-locales
或所有必需的语言环境文件才能在非默认语言环境中使用 moment。
如果我明白你想要完成什么,这里有一个工作示例:
angular.module('MyApp',['angularMoment'])
.run(function(){
moment.updateLocale('en', {
relativeTime: {
future: "In %s",
past: "%s ago",
s: "<1 minute",
m: "1 minute",
mm: "%d minutes",
h: "1 hour",
hh: "%d hours",
d: "24 hours",
dd: "%d days",
M: "1 month",
MM: "%d months",
y: "1 year",
yy: "%d years"
}
});
moment.updateLocale('de', {
relativeTime: {
future : 'in %s',
past : 'vor %s',
s : '<ein Minute',
m : 'ein Minute',
mm : '%d Minuten'
}
});
})
.controller('AppCtrl', function($scope, moment, amMoment) {
$scope.last_update = moment().valueOf();
$scope.lang = 'en';
$scope.changeLang = function(){
amMoment.changeLocale($scope.lang);
};
$scope.changeLang();
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/0.10.3/angular-moment.min.js"></script>
<div ng-app="MyApp" ng-controller="AppCtrl">
{{last_update|amDateFormat:'dddd, MMMM Do YYYY, HH:mm:ss a'}}
<br/>
<span am-time-ago="last_update"></span>
<br/>
<select name="singleSelect" ng-model="lang" ng-change="changeLang()">
<option value="en">EN</option>
<option value="de">DE</option>
</select>
{{lang}}
</div>
我在 Angular 应用程序中配置语言环境更改时遇到问题。我正在使用 Angular Moment 和 Moment.js
首先,我在 angular.module.config 中将语言环境设置为英语,并根据需要立即设置相对时间 object:
moment.locale('en', {
relativeTime: {
future: "In %s",
past: "%s ago",
s: "<1 minute",
m: "1 minute",
mm: "%d minutes",
h: "1 hour",
hh: "%d hours",
d: "24 hours",
dd: "%d days",
M: "1 month",
MM: "%d months",
y: "1 year",
yy: "%d years"
}
});
这按预期工作,
现在我也有一个平等的 object 但对于德语。我不知道把它放在哪里,因为如果我把它放在配置中,它会覆盖英文配置。
然后我在控制器中的 header 菜单视图中有一个 select 下拉菜单,其中包含 EN 和 DE(我已经将其转换为小写以进行翻译),但我似乎无法关联 amMoment.changeLocale('de');
将 moment 部分更改为德语,我似乎也无法直接用 moment 更新它。
我怎样才能做到这一点?
您可以连续自定义relativeTime
多个语言环境,而不会覆盖之前的配置。
您可以使用 ng-change
将下拉列表更改绑定到为所选区域设置调用 amMoment.changeLocale
的函数。
请注意,您必须导入 moment-with-locales
或所有必需的语言环境文件才能在非默认语言环境中使用 moment。
如果我明白你想要完成什么,这里有一个工作示例:
angular.module('MyApp',['angularMoment'])
.run(function(){
moment.updateLocale('en', {
relativeTime: {
future: "In %s",
past: "%s ago",
s: "<1 minute",
m: "1 minute",
mm: "%d minutes",
h: "1 hour",
hh: "%d hours",
d: "24 hours",
dd: "%d days",
M: "1 month",
MM: "%d months",
y: "1 year",
yy: "%d years"
}
});
moment.updateLocale('de', {
relativeTime: {
future : 'in %s',
past : 'vor %s',
s : '<ein Minute',
m : 'ein Minute',
mm : '%d Minuten'
}
});
})
.controller('AppCtrl', function($scope, moment, amMoment) {
$scope.last_update = moment().valueOf();
$scope.lang = 'en';
$scope.changeLang = function(){
amMoment.changeLocale($scope.lang);
};
$scope.changeLang();
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/0.10.3/angular-moment.min.js"></script>
<div ng-app="MyApp" ng-controller="AppCtrl">
{{last_update|amDateFormat:'dddd, MMMM Do YYYY, HH:mm:ss a'}}
<br/>
<span am-time-ago="last_update"></span>
<br/>
<select name="singleSelect" ng-model="lang" ng-change="changeLang()">
<option value="en">EN</option>
<option value="de">DE</option>
</select>
{{lang}}
</div>