Как использовать интернационализированную функцию человеческого времени diff() на китайском языке?


Глядя на https://codex.wordpress.org/Function_Reference/human_time_diff

Я использую английскую версию Wordpress.

В моем шаблоне темы я хотел бы определить пользовательский текст минуты, часа, дня, недели, месяца, года на китайском языке, используя human_time_diff() при циклическом просмотре сообщений.

В соответствии с инструкцией в документации Кодекса:

<?php
    printf( _x( '%s ago', '%s = human-readable time difference',
    'your-text-domain' ), human_time_diff( get_the_time( 'U' ),
    current_time( 'timestamp' ) ) );
?>

Я все еще не знаю, как сделать реализацию для выполнения подкачки, используя приведенный выше код. например.

min -> 分鐘
hour -> 小時
dat -> 天
week -> 週
month -> 月
year -> 年

ago часть должна быть прямой.

Есть ли пример, который может продемонстрировать, как это работает?

Кроме того, нужно ли мне беспокоиться о множественном числе в английском языке?

Author: KDX, 2016-06-30

2 answers

Если вы проверите источник human_time_diff:

if ( $diff < HOUR_IN_SECONDS ) {
    $mins = round( $diff / MINUTE_IN_SECONDS );
    if ( $mins <= 1 )
        $mins = 1;
    /* translators: min=minute */
    $since = sprintf( _n( '%s min', '%s mins', $mins ), $mins );
} elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) {
    $hours = round( $diff / HOUR_IN_SECONDS );
    if ( $hours <= 1 )
        $hours = 1;
    $since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours );
} elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) {
    $days = round( $diff / DAY_IN_SECONDS );
    if ( $days <= 1 )
        $days = 1;
    $since = sprintf( _n( '%s day', '%s days', $days ), $days );
} elseif ( $diff < MONTH_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
    $weeks = round( $diff / WEEK_IN_SECONDS );
    if ( $weeks <= 1 )
        $weeks = 1;
    $since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks );
} elseif ( $diff < YEAR_IN_SECONDS && $diff >= MONTH_IN_SECONDS ) {
    $months = round( $diff / MONTH_IN_SECONDS );
    if ( $months <= 1 )
        $months = 1;
    $since = sprintf( _n( '%s month', '%s months', $months ), $months );
} elseif ( $diff >= YEAR_IN_SECONDS ) {
    $years = round( $diff / YEAR_IN_SECONDS );
    if ( $years <= 1 )
        $years = 1;
    $since = sprintf( _n( '%s year', '%s years', $years ), $years );
}

Как вы можете видеть, просто переведите %s min, %s mins и т.д. строки.

 2
Author: TheDeadMedic, 2016-07-01 09:53:43

Полное решение, которое работает для меня без изменения ядра Wordpress, состоит в том, чтобы клонировать функцию human_time_diff() и поместить ее внутрь functions.php как переименованную human_time_diff_chinese(), а затем поменять местами все вхождения функции human_time_diff() с этой новой функцией human_time_diff_chinese().

function human_time_diff_chinese( $from, $to = '' ) {
  if ( empty( $to ) ) {
    $to = time();
  }

  $diff = (int) abs( $to - $from );

  if ( $diff < HOUR_IN_SECONDS ) {
    $mins = round( $diff / MINUTE_IN_SECONDS );
    if ( $mins <= 1 )
      $mins = 1;
    /* translators: min=minute */
    $since = sprintf( _n( '%s 分鐘', '%s 分鐘', $mins ), $mins );
  } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) {
    $hours = round( $diff / HOUR_IN_SECONDS );
    if ( $hours <= 1 )
      $hours = 1;
    $since = sprintf( _n( '%s 小時', '%s 小時', $hours ), $hours );
  } elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) {
    $days = round( $diff / DAY_IN_SECONDS );
    if ( $days <= 1 )
      $days = 1;
    $since = sprintf( _n( '%s 天', '%s 天', $days ), $days );
  } elseif ( $diff < MONTH_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
    $weeks = round( $diff / WEEK_IN_SECONDS );
    if ( $weeks <= 1 )
      $weeks = 1;
    $since = sprintf( _n( '%s 週', '%s 週', $weeks ), $weeks );
  } elseif ( $diff < YEAR_IN_SECONDS && $diff >= MONTH_IN_SECONDS ) {
    $months = round( $diff / MONTH_IN_SECONDS );
    if ( $months <= 1 )
      $months = 1;
    $since = sprintf( _n( '%s 個月', '%s 個月', $months ), $months );
  } elseif ( $diff >= YEAR_IN_SECONDS ) {
    $years = round( $diff / YEAR_IN_SECONDS );
    if ( $years <= 1 )
      $years = 1;
    $since = sprintf( _n( '%s 年', '%s 年', $years ), $years );
  }

  return apply_filters( 'human_time_diff_chinese', $since, $diff, $from, $to );
}
 0
Author: KDX, 2016-07-04 02:18:12