i18n у файлах і розділах JS RKWard

На відміну від файлів .xml, для уможливлення перекладу файлів .js доведеться серйозно попрацювати. Ключовою відмінністю у цьому випадку є те, що не існує простого способу автоматично визначити, є той чи інший рядок показаною користувачеві текстовою інформацією чи просто фрагментом програмного коду. Отже, вам доведеться позначити відповідні рядки вручну. Вище ми вже наводили приклади цього. Далі наведено повніший опис функцій для перекладу рядків у коді js та деякі підказки щодо складніших випадків:

i18n (msgid, [...])

Найважливіша функція. Позначає рядок для перекладу. Рядок (перекладений чи ні) повертається взятим у подвійні лапки («"»). Можна використовувати довільну кількість замінників у рядку, як це вже показано вище. Використання замінників замість з’єднання коротких рядків значно полегшує роботу перекладача:

i18n ("Compare objects %1 and %2", getString ('x'), getString ('y'));
                
i18nc (msgctxt, msgid, [...])

Те саме, що і i18n(), але із додаванням контексту повідомлення:

i18nc ("proper name, not state of mind", "Mood test");
                
i18np (msgid_singular, msgid_plural, n, [...])

Те саме, що і i18n(), але для повідомлень, у яких різні форми для однини і множини (у деяких мовах форм множини може бути декілька). Зауважте, що як і у випадку з i18n(), ви можете використовувати довільну кількість замінників, але перший з них, за яким розрізнятимуться форми множини («%1»), має бути цілим числом.

i18np ("Comparing a single pair", "Comparing %1 distinct pairs", n_pairs);
                
i18ncp (msgctxt, msgid_singular, msgid_plural, n, [...])

i18np() із доданим контекстом повідомлення.

comment (коментар, [режим відступу])

Виводить коментар до коду, позначений для перекладу. На відміну від інших функцій i18n(), дані не беруться у лапки, а на початку кожного рядка коментаря додається символ «#».

comment ("Transpose the matrix");
                        echo ('x <- t (x)\n');
                

Щоб додати коментарі для перекладачів (див. вище обговорення відмінностей між коментарем і контекстом), додайте коментар, що починатиметься з «i18n:» або «translators:» одразу перед викликом i18n(), який слід прокоментувати. Приклад:

// i18n: З правописом усе гаразд, так і має бути: Scree plot.
                echo ('rk.header (' + i18n ("Scree plot") + ')\n');
        

Інтернаціоналізація і лапки

Здебільшого, потреби перейматися тим, як поводить себе i18n() при використанні лапок у перекладі, немає потреби. Оскільки, типово, придатні до перекладу рядки є рядковими літералами, додавання до них лапок є природною річчю, яка навіть заощаджує зусилля на введення коду. Крім того, у функціях, подібних до makeHeaderCode()/Header(), у яких, зазвичай, аргументи беруть у лапки, рядки з i18n() захищено від дублювання лапок. З технічної точки зору, ми надсилаємо перекладений рядок спочатку до функції quote() (щоб додати лапки), а потім до функції noquote() (щоб запобігти появі зайвих лапок). Якщо вам потрібен придатний для перекладу рядок без лапок, скористайтеся конструкцією i18n(noquote ("Ваше повідомлення")). Якщо ж вам потрібен придатний до перекладу рядок із лапками, ще раз пропустіть його крізь quote(), двічі.

Однак, загалом кажучи, навряд чи варто робити придатними до перекладу назви функції або змінних. По-перше, R, мова програмування, заснована на словах англійської мови, а самі команди мови не підлягають перекладу. Коментарі у коді можна перекладати, але для них слід використовувати функцію comment(). По-друге, якщо ви зробите синтаксично пов’язані частини створеного коду придатним до перекладу, невдалий переклад може зашкодити працездатності додатка. Наприклад, якщо переклад рядка, який є назвою змінної, складатиметься з двох слів із пробілом між ними, отриманий код просто не працюватиме.