Самый легкий способ генерировать файлы локализации

Я бы начал с создания класса одежды:

public class Clothing {

    private int sales, cost, price, benefits;

    public Clothing(int sales, int cost, int price, int benefits) {
        this.sales = sales;
        this.cost = cost;
        this.price = price;
        this.benefits = benefits;
    }

    public int getSales() {
        return sales;
    }

    public int getCost() {
        return cost;
    }

    public int getPrice() {
        return price;
    }

    public int getBenefits() {
        return benefits;
    }

}

Затем вы можете поместить все свои объекты одежды в массив (одномерный) и выполнить итерацию по нему, чтобы заполнить 2D-массив (используя геттер). методы в классе Clothing):

//Make a clothes array
Clothing[] clothes = new Clothing[4];
//Fill it
clothes[0] = new Clothing(3000, 50, 10, 36000); //Dress
clothes[1] = new Clothing(4500, 40, 13, 35600); //Pants
//etc...

//Make your 2D array
int[][] array = new int[clothes.length][4];

//Fill it
for(int i = 0; i < clothes.length; i++) {
    array[i][0] = clothes[i].getSales();
    array[i][1] = clothes[i].getCost();
    array[i][2] = clothes[i].getPrice();
    array[i][3] = clothes[i].getBenefits();
}
21
задан landyman 11 April 2009 в 03:44
поделиться

6 ответов

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

Во-первых, у меня есть файл POTFILES.in, содержащий список исходные файлы, требующие перевода. На самом деле у нас есть два файла (например, admin.in и user.in), поскольку интерфейс администратора не всегда нуждается в переводе. Таким образом, мы можем отправлять переводчикам только файл, содержащий строки, которые видят пользователи.

Выполнение следующей команды создаст шаблон .pot из POTFILES.in:

xgettext --files-from=POTFILES.in --directory=.. --output=messages.pot

Выполните указанную выше команду из каталога po /, который должен быть подкаталог вашего проекта и содержит файл POTFILES.in. Файл .pot имеет тот же формат, что и файл .po, но это шаблон, не содержащий переводов. Вы создаете новый шаблон всякий раз, когда к вашим исходным файлам добавляются новые переводимые строки.

Чтобы обновить уже переведенные файлы .po и добавить к ним новые строки, выполните:

msgmerge --update --no-fuzzy-matching --backup=off da.po messages.pot

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

Наконец, запустите msgfmt, чтобы создать файлы .mo из файлов .po:

msgfmt nl.po --output-file nl.mo

Конечно, вы не захотите запускать это каждый раз вручную , поэтому создайте несколько сценариев (или, желательно, один или несколько файлов Makefile), чтобы сделать это за вас.

Обратите внимание, что структура вашего каталога немного отличается от моей ситуации, поэтому вам придется немного изменить имена файлов / пути вывода, но шаги должно быть таким же.

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

Наконец, запустите msgfmt, чтобы создать файлы .mo из файлов .po:

msgfmt nl.po --output-file nl.mo

Конечно, вы не захотите запускать это каждый раз вручную , поэтому создайте несколько сценариев (или, желательно, один или несколько файлов Makefile), чтобы сделать это за вас.

Обратите внимание, что структура вашего каталога немного отличается от моей ситуации, поэтому вам придется немного изменить имена файлов / пути вывода, но шаги должно быть таким же.

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

Наконец, запустите msgfmt, чтобы создать файлы .mo из файлов .po:

msgfmt nl.po --output-file nl.mo

Конечно, вы не захотите запускать это каждый раз вручную , поэтому создайте несколько сценариев (или, желательно, один или несколько файлов Makefile), чтобы сделать это за вас.

Обратите внимание, что структура вашего каталога немного отличается от моей ситуации, поэтому вам придется немного изменить имена файлов / пути вывода, но шаги должно быть таким же.

29
ответ дан 29 November 2019 в 20:06
поделиться

Это ускользает от меня, как вы хотите добиться реального перевода без редактирования файлов .po для каждого языка? Magic?

Редактировать (после комментария) - как автоматизировать генерацию файлов .po :

Я не использую Gettext, но со страницы вики похоже, вам нужно только вызвать

msginit --locale = xx --input = name.pot

для каждого языка, который вы хотите поддерживать. Я бы сгенерировал скрипт, который сгенерирует все языковые файлы, передаст их переводчикам, а когда вы вернете их обратно, запустите msgfmt .

4
ответ дан 29 November 2019 в 20:06
поделиться

Использовать скрипты. Предположим, ваш исходный код находится в каталоге $ SRC, поэтому создайте каталог $ SRC / po для файлов i18n (pot, po, mo и т. Д.). Затем создайте файл $ SRC / po / POTFILES.in, где укажите путь к файлам исходного кода с помощью вызовов функций gettext. Это может выглядеть следующим образом:

[encoding: UTF-8]
./main.cpp
./plugins/list.cpp

Теперь вы можете использовать следующие команды (внутри директории $ SRC):

Для обновления мастер-файла messages.pot:

intltool-update --pot --gettext-package=messages --verbose

Для объединения изменений из messages.pot в файл fr.po, например:

msgmerge -U fr.po messages.pot

Чтобы сгенерировать файл mo, используйте команду:

msgmerge -o - fr.po messages.pot | msgfmt -c -o fr/LC_MESSAGES/programname.mo -

Конечно, каталог fr / LC_MESSAGES / должен быть создан до этого вызова, вы также можете удалить существующий файл fr / LC_MESSAGES / programname.mo перед выполнением

. Ускорьте процесс, поместите все такие команды, например, в соответствующие .sh-файлы.

3
ответ дан 29 November 2019 в 20:06
поделиться

Я использую poEdit для переводов.

2
ответ дан 29 November 2019 в 20:06
поделиться

Вы можете попробовать Translate Toolkit для различных преобразований файлов po (например, po2csv). Дочерние проекты Pootle позволяют управлять переводами через Интернет.

3
ответ дан 29 November 2019 в 20:06
поделиться

Я предлагаю django-rosetta , который дает вам веб-интерфейс для редактирования ваших переводов. Django вообще не нужно задействовать в вашем приложении,

2
ответ дан 29 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: