2016-12-22 1 views
2

Я пытаюсь локализовать свое приложение и заметил, что такие приложения, как Twitter и Facebook, немедленно переключают язык, используемый в предыдущих уведомлениях, хранящихся на сервере, в соответствии с языком устройств. Как они это делают?Как приложения отображают сохраненные уведомления как локализованные строки?

Например кто-то комментарии на пост так, что уведомления является:

John commented "hi" on your post. 

Это позже переведена на французский язык, если мой язык устройство установлено на французском языке.

ли они хранить локализованную строку, такие как:

%@ commented %@ on your post. 

А потом как-то ссылаться на эту строку в уведомлении вместе с переменными?

ответ

1

Есть много инструментов, связанных с локализацией, один как Phraseapp. Способ работы этих инструментов довольно прост, и локализация в основном ориентирована на конечные элементы, а не на бэкэнд.

Вы определяете ключ для некоторого содержимого, и ключ может также принимать параметры. Таким образом, в вашем примере это может выглядеть следующим образом.

Английский:user_commented_message = %@ commented %@ on your post.

Немецкий:user_commented_message = %@ Kommentierte %@ auf Ihrem Beitrag.

Чем вы сохраните это в вашем Localizable.strings, что в настоящее время поставляется с приложением двоичного файла.

После завершения локализации все, что вам нужно сделать, это создать правильную полезную нагрузку для вашего уведомления. В вашем примере, это будет выглядеть примерно следующим образом:

{ 
    aps =  { 
     alert =   { 
      "loc-args" = (
       "John", 
       "hi" 
      ); 
      "loc-key" = "user_commented_message"; 
     }; 
     badge = 1; 
     sound = default; 
    }; 
} 

Как вы можете видеть, вы передаете 2 аргумента в loc-args секции, где вы в значительной степени определяют, что должно быть дисплей вместо %@ в вашем ключе , Порядок аргументов важен, они заменят %@ в том же порядке, что и в разделах loc-args.

В разделе loc-key вы точно определяете, какой ключ должен использоваться с вашего Localizable.strings. С этого момента в Центре уведомлений будет отображаться уведомление, основанное на настройках языка устройства, читающих контент, словарь локализации, сервер Twitter или Facebook не имеет к этому никакого отношения.

Для дальнейшего чтения я бы порекомендовал взглянуть на Apple notification programming guide.

EDIT

  1. This пост говорит, что вы не в состоянии использовать body и loc-args одновременно. Это эксклюзивная связь EATE ONE или OTHER.

  2. Если это приложение, просто используйте локализацию.Не отправляйте жестко кодированный языковой контент или сохраняйте текст на жестком диске на сервере, всегда используйте каждый текстовый контент с ключами локализации. Он все еще управляется на передней панели, сервер должен хранить только локализованные ключи, а не сам контент.

+0

Две вещи: 1. В моем приложении в настоящее время используется тело предупреждения, а не loc-args. Если я начну использовать loc-args, то, если кто-то не обновит их приложение, push-уведомление не будет выглядеть правильно. Есть ли способ использовать как тело предупреждения, так и loc-args? и 2. Мой пост был главным образом о том, когда вы загружаете уведомления, которые были сохранены на сервере в виде текста (который вы видите позже на вкладке уведомлений в приложении). – Tometoyou

+0

отредактировал мой ответ. – dirtydanee

Смежные вопросы