Отправить локализованный строковый ключ в loc-args для push-уведомлений iOS

Мое приложение поддерживает 4 языка и push-уведомления. Когда я отправляю push-уведомление в APNS, я отправляю loc_key и loc-args. Теперь мне нужно отправить локализованные строки в массиве loc-args, чтобы я мог переводить их на стороне приложения iOS, когда приложение получает push-уведомление.

Но когда я отправляю локализованные строки в loc-args , вместо того, чтобы показывать переведенную строку в центре уведомлений, он просто показывает локализованный ключ как есть.

Мой строковый файл содержит ниже 2 сообщения:

"WINNER_ALERT"= "Congratulations! %@ won the match & became %@ player";
"ROLE_PROFESSIONAL_LOCALIZED_KEY" = "professional"

Сервер отправляет ниже полезной нагрузки

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

Когда я отправляю вышеуказанную полезную нагрузку, то в Центре уведомлений iOS сообщение выглядит так:

Congratulations! John won the match & became ROLE_PROFESSIONAL_LOCALIZED_KEY player

вместо

Congratulations! JOHN won the match & became professional player

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

заранее спасибо


person iOSAppDev    schedule 07.08.2014    source источник
comment
Вы не можете отправлять ключи локализации в loc-args   -  person Laszlo    schedule 04.03.2015
comment
у тебя есть решение?   -  person Shajo    schedule 25.03.2015


Ответы (2)


Я считаю, что ваш файл Localizable.strings должен выглядеть так:

"WINNER_ALERT"= "Congratulations! %@ won the match & became %@ player";

И полезная нагрузка push-уведомления должна выглядеть так:

{
    aps =     {
        alert =         {
            "loc-args" = (
                "JOHN",
                "professional"
            );
            "loc-key" = "WINNER_ALERT";
        };
        badge = 1;
        sound = default;
    };
}

Это даст желаемый результат:

Congratulations! JOHN won the match & became professional player


Вот почему (согласно Руководство Apple по программированию локальных и удаленных уведомлений):

  • loc-key : ключ к строке предупреждающего сообщения в файле Localizable.strings для текущей локализации.
  • loc-args : переменные строковые значения, которые будут отображаться вместо спецификаторов формата в loc-key.
person Zakaria Braksa    schedule 17.09.2015

Ответ @Zak работает как шарм.

Кроме того, если вам нужно локализовать professional, он должен быть частью строки WINNER_ARERT.

Если вам нужно передать разные строки для professional, вы должны создать несколько локализованных строк. НАПРИМЕР. :

1) "WINNER_ALERT_PROFESSIONAL"= "Congratulations! %@ won the match & became professional player";

2) "WINNER_ALERT_SEMI_PROFESSIONAL"= "Congratulations! %@ won the match & became semi-professional player";

person dvp.petrov    schedule 30.09.2015
comment
Это должен был быть комментарий, а не ответ. Имея немного больше представителей, вы сможете публиковать комментарии. - person IKavanagh; 30.09.2015