Типичный процесс Java i18n - отправка файлов ресурсов для переводных компаний перевод

StackOverflow https://stackoverflow.com/questions/3721882

Вопрос

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

Предполагая, например, я не знаю Французский и должен использовать компанию переводов, чтобы получить переводы для моего приложения, я бы отправил их

  1. Файл свойств ресурса по умолчанию «Whate_en_US.Properties», включая ключ и английское значение, и вернитесь «Что ASE_FR_FR.Properties»?
  2. «Что ASE_FR_FR.Properties» с пустыми значениями и «What_en_US.Properties» для справки?
  3. какая-то другая комбинация?
Это было полезно?

Решение

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

  1. Отправить английские файлы для перевода. В зависимости от вашего согласия с подрядчиком перевода вы могли бы использовать:

    • Ваши файлы свойств по умолчанию (вы будете нести ответственность за переименование их правильно)
    • Отличная электронная таблица, содержащая клавиши, английская фраза и пустой столбец для перевода
    • GetText * .po файл (ы), если вы собираетесь использовать GetText
    • Файлы памяти перевода (IE TRADOS * .tmx файлы)
  2. Когда вы получаете файлы обратно, вы вкладываете эти переводы в продукт, создаете локализованные сборки и проверьте его. Конечно, будут некоторые проблемы пользовательских пользователей. Некоторые из них вы можете починить самостоятельно, некоторые потребуют дополнительный перевод (например, жесткозедированные строки), другие потребуют укороченного перевода. Опять же, вы будете заниматься подрядчиком перевода и поставлять их строки, которые необходимо быть (повторно) переведено. Вы можете использовать здесь электронную таблицу (при условии, что не так много строк, которые необходимо перевести).

  3. Если вы хотите отправить одновременно (все языки одновременно), вам нужно рано заниматься переводчиками. Поскольку строки пользовательского интерфейса будут измениться (при условии, что нет периода замораживания жесткого UI или периода замораживания перевода), вам придется обновлять ваши переводы. В этом случае вам нужно будет поставлять уже переведенные файлы с строками, которые необходимо перевести (на английском языке). Если изменения действительно маленькие, вы можете отправить только английские строки и объединять переводы вручную, в противном случае лучше всего использовать какой-то формат обмена памяти переводов (GetText * .po или Trados * .tmx отлично здесь).

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

  5. После рассмотрения вам нужно будет применить изменения и тестирование перевода для пользовательских проблем ...

Вот об этом, если мы говорим о процессе перевода строк UI. Но, пожалуйста, сообщите, что есть многое другое, чтобы правильно локализовать приложение (документация, файлы справки, значки, цвета, звуки ...).

Другие советы

Чтобы ответить на ваш вопрос, я бы выбрал (2).

На практике я обнаружил, что для меня намного проще использовать что-то еще, а не раскладки ресурсов Java.

Я лично использую другой способ обращения с этим. Я использую тип GetText (там есть файл thettextresource.java, который вы должны использовать в своем приложении, чтобы извлечь выгоду из расширений GetText - см. здесь).

Если Вы знакомы с GetText, вы обязательно найдете этот подход намного проще и практично. Вы просто даете своим переводчикам файлы PO (которые можно редактировать с преступник). Из файлов PO Вы создаете класс Java, вы будете использовать внутри вашего приложения (это сделано с использованием MSGFMT - Указание параметров для Java Compilation файлов Po). Файлы PO могут быть обновлены довольно удобны, используя команду XGetText (из командной строки).

Конечно, все внутри Руководство GetText.

Преимущества:

  • GetText предлагает вам способ выбрать множественное число [больше сообщений, таких как: «N File (ы) удалены» (где n есть номер) - см. netthtext..

  • Ссылки для перевода строк после использования файлов Java обновляются новыми токенами

  • Нет необходимости получать доступ к каждой строке с использованием некоторых макросов (например, Translate (DELETE_BUTTON_MACRO)). Вы просто пишете свой код, как это:

    package translateutil;        
    import gnu.gettext.GettextResource;
    
    import java.util.ResourceBundle;
    
    import java.util.Locale;
    
    public class TranslateUtil
    {
    private static ResourceBundle myResources =null;
    
    public static boolean init(Locale loc, String resourceName)
    {
        boolean bRet = true;
        Locale.setDefault(loc);
    
        try
        {
            myResources = ResourceBundle.getBundle(resourceName);
    
            System.out.printf(  _("Current language: %s\n"),
                                Locale.getDefault().getDisplayName() );
    
            System.out.printf(  _("%s resource found\n"),
                                myResources.getClass().getName() );
        }
        catch(Exception e)
        {
            // let the application go on in English in case the ResourceBundle
            // was not found. Notify about the error
            bRet = false;
            System.out.println( e.toString() );
            myResources = null;
        }
    
        return bRet;
    }
    
    
    public static String _(String str)
    {
        if (myResources == null)
        {
            return str;
        }
        {
            return GettextResource.gettext(myResources, str);
        }
    }
    
    public static String _Plural(String singular, String plural, long param)
    {
        if (myResources == null)
        {
            if (param == 1)
            {
                return singular;
            }
            else
            {
                return plural;
            }
        }
        else
        {
            return GettextResource.ngettext(myResources, singular, plural, param);
        }
    }
    }
    

Вот образец

    // example
    // similar for plural

    import static translateutil.TranslateUtil._;

    System.out.println(_("The english text"));

Неважно, что вы выбираете: удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top