Я хочу использовать с JavaScript и Drupal.t()
эквивалент format_interval()
.
С PHP я бы использовал следующий код.
print t("!date ago", array("!date" => format_interval(time() - $lastActivity, 1)));
Каким будет эквивалент в JavaScript?
Я хочу использовать с JavaScript и Drupal.t()
эквивалент format_interval()
.
С PHP я бы использовал следующий код.
print t("!date ago", array("!date" => format_interval(time() - $lastActivity, 1)));
Каким будет эквивалент в JavaScript?
Ответы:
Drupal не реализует версию JS format_interval()
; это грубый (минимально протестированный) порт:
Drupal.formatInterval = function(interval, granularity, langcode) {
granularity = typeof granularity !== 'undefined' ? granularity : 2;
langcode = typeof langcode !== 'undefined' ? langcode : null;
var units = {
'1 year|@count years': 31536000,
'1 month|@count months': 2592000,
'1 week|@count weeks': 604800,
'1 day|@count days': 86400,
'1 hour|@count hours': 3600,
'1 min|@count min': 60,
'1 sec|@count sec': 1
},
output = '';
for (var key in units) {
var keys = key.split('|');
var value = units[key];
if (interval >= value) {
output += (output.length ? ' ' : '') + Drupal.formatPlural(Math.floor(interval / value), keys[0], keys[1], {}, { langcode: langcode });
interval %= value;
granularity--;
}
if (granularity == 0) {
break;
}
}
return output.length ? output : Drupal.t('0 sec', {}, { langcode: langcode });
}
Некоторые случайные результаты, использующие вышеупомянутое (кажется, они соответствуют функции PHP, как и ожидалось):
Реализация Clives идет хорошо. Тем не менее, Jrupas-агрегатору Drupals необходимо проанализировать все файлы JavaScript для поиска переводимых строк. Поскольку Clive использует динамические значения для Drupal.formatPlural, это не сработает.
Итак, вот еще одна реализация с рабочим переводом:
Drupal.formatInterval = function(interval, granularity) {
granularity = typeof granularity !== 'undefined' ? granularity : 2;
output = '';
while (granularity > 0) {
var value = 0;
if (interval >= 31536000) {
value = 31536000;
output += (output.length ? ' ' : '') + Drupal.formatPlural(Math.floor(interval / value), '1 year', '@count years');
}
else if (interval >= 2592000) {
value = 2592000;
output += (output.length ? ' ' : '') + Drupal.formatPlural(Math.floor(interval / value), '1 month', '@count months');
}
else if (interval >= 604800) {
value = 604800;
output += (output.length ? ' ' : '') + Drupal.formatPlural(Math.floor(interval / value), '1 week', '@count weeks');
}
else if (interval >= 86400) {
value = 86400;
output += (output.length ? ' ' : '') + Drupal.formatPlural(Math.floor(interval / value), '1 day', '@count days');
}
else if (interval >= 3600) {
value = 3600;
output += (output.length ? ' ' : '') + Drupal.formatPlural(Math.floor(interval / value), '1 hour', '@count hours');
}
else if (interval >= 60) {
value = 60;
output += (output.length ? ' ' : '') + Drupal.formatPlural(Math.floor(interval / value), '1 min', '@count min');
}
else if (interval >= 1) {
value = 1;
output += (output.length ? ' ' : '') + Drupal.formatPlural(Math.floor(interval / value), '1 sec', '@count sec');
}
interval %= value;
granularity--;
}
return output.length ? output : Drupal.t('0 sec');
}
t
метод представляет собой текст, очищающий и переводящий Drupal, эквивалентныйt()
функции PHP из ядра Drupal.