Статьи

Почему и как я перевел NetBeans на вьетнамский

Меня зовут Куонг Нгуен Мань, по-английски Micheal Nguyen. Мне 25 лет. У меня около 4 лет опыта работы с IDE NetBeans и платформой NetBeans. В свободное время я играю в игры, поэтому я также участвую в разработке jMonkeyEngine SDK, который, как и IDE NetBeans, основан на платформе NetBeans.

Я работаю в Центре решений Hipt Coporation , компании во Вьетнаме, которая в основном предоставляет услуги и решения для хранилищ данных. Хипт является партнером Oracle во Вьетнаме.

Фон

Я перевел NetBeans на вьетнамский язык, потому что в моей компании (и во Вьетнаме) много разработчиков, работающих с IDE NetBeans. Я действительно не знаю , общее число разработчиков во Вьетнаме с помощью среды IDE NetBeans, но я же знаю , что в большинстве технических университетов и компаний, вьетнамские разработчики используют IDE NetBeans для разработки (а также учиться и учить) Java — приложений на рабочем столе, мобильные и веб-сферы. Однако вьетнамские разработчики испытывают трудности, потому что они, как правило, не очень хорошо знают английский.

Фактически, большая часть мира не говорит по-английски или не очень хорошо говорит по-английски. Среда IDE NetBeans и платформа NetBeans становятся все более популярными и используются во многих приложениях, от небольших до крупных. Тем не менее, язык пользовательского интерфейса — это большой «барьер», мешающий миру (представьте детей и пожилых людей) изучать программирование и переходить в IDE NetBeans. В азиатских странах проживают миллиарды людей, и около 15% говорят на английском адекватно. Теперь у нас есть официальный китайский, японский и несколько азиатских языков, поддерживаемых IDE NetBeans. Похоже, не сложно представить новый язык программирования в IDE NetBeans, так почему же должно быть трудно вводить человеческие языки?

В то же время мы в Hipt Corporation изучаем аспекты платформы NetBeans, а также углубляемся в некоторые из ее подпроектов с открытым исходным кодом, чтобы найти то, что хорошо для наших будущих приложений. И, как я упоминал выше, я также являюсь участником другого проекта платформы NetBeans с открытым исходным кодом, в области Game, игрового движка на Java, работающего на OpenGL, который называется jMonkeyEngine . SDK jMonkeyEngine ( http://jmonkeyengine.com/sdk/ ) основан на платформе NetBeans. Мы стремимся сделать возможным создание приложений в области игр и образования, а также учебных программ для детей, конечно же, на любом человеческом языке, который мы выберем.

Тем не менее, короче говоря, главная причина, по которой я перевожу среду IDE NetBeans, заключается в том, что она будет становиться все более дружественной для вьетнамских пользователей, чтобы она могла предоставлять то, что им нужно, а также то, что они хотят!

Скриншоты

Вот несколько скриншотов переведенных приложений, IDE NetBeans и SDK jMonkeyEngine. Я только провел 4 дня, переводя около 10000 сегментов в 4 основных пакета с помощью Machine Translate. Вы увидите, что некоторые английские слова остаются непереведенными, потому что некоторые слова не могут быть переведены на вьетнамский язык без потери их значения. Например, «Файл» на английском языке является также «Файл» на вьетнамском языке.

На первом скриншоте вы видите фокус переведенного меню:

И здесь основное внимание уделяется переведенному меню в jMonkeyEngine SDK:

Наконец, здесь вы видите фокус на странице приветствия и форме входа в IDE NetBeans:

Процесс перевода

Это процесс, которому я следовал, он работает как с IDE NetBeans 7.0, так и с IDE NetBeans 7.1.

  1. Скачать вещи.

    http://dlc.sun.com.edgesuite.net/netbeans/7.0/final/zip/ide-l10n-201104080000.zip
    http://dlc.sun.com.edgesuite.net/netbeans/7.0/final/zip /netbeans-7.0-201104080000-src.zip
    http://www.omegat.org/en/downloads.html

  2. Прочитайте введение.

    http://nblocalization.netbeans.org/index-l10n.html
    http://nblocalization.netbeans.org/docs/HOWTOs/How-to-translate-NetBeans-using-OmegaT.html

  3. Настройте проект OmegaT.

        — Распакуйте ide-l10n-201104080000.zip.

        — Скопируйте все папки в Project1 \ source.

        — Установите для Переведенной Папки Файла локаль-цель.

  4. Делай переводы.
  5. Постройте проект. В среде IDE NetBeans создайте проект свободной формы и укажите путь к проекту OmegaT. Добавьте пакет «anttask», затем добавьте «MyTask.java» в проект.

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

package anttask;

import java.io.File;
import java.util.HashMap;
import java.util.regex.Pattern;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

public class MyTask extends Task {

    String filename = "";
    String filepath = "";

    public void setFilename(String filename) {
        this.filename = filename;
    }

    public void setFilepath(String filepath) {
        this.filepath = filepath;
    }

    HashMap<String, String> map = new HashMap<String, String>();

    public void execute() {

    // NOTE: I determine what the JAR filename should be
// by reading its folder path,
// this is why we call it a hack,
// but the only way you can know the cluster name
// is to build the whole source
// which we don’t want to do

        String[] split = filename.split(Pattern.quote("\\"));
        if (split.length < 2) {
            throw new BuildException("Incorrect path.");
        }

        String innerPath = filename;
        String parentPack = "";
        String parentPath = split[1];
        String jarName = split[2];

        log("\nsplit: " + split.length + "\nparentPath: " + parentPath);
   
        if (parentPath.equals("java")) {
            if (jarName.startsWith("org-")) {
               
            } else if (jarName.startsWith("projectui")){
                jarName.replace("projectui", "project-ui");
                parentPack = "org-netbeans-modules-";
            } else {
                parentPack = "org-netbeans-modules-";
            }
        } else if (parentPath.equals("ide")) {
            if (jarName.startsWith("org-")) {
               
            } else if (jarName.startsWith("projectui")){
                jarName.replace("projectui", "project-ui");
                parentPack = "org-netbeans-modules-";
            } else {
                parentPack = "org-netbeans-modules-";
            }
        } else if (parentPath.equals("platform")) {
            if (jarName.startsWith("org-")) {
            } else if (jarName.startsWith("projectui")){
                jarName.replace("projectui", "project-ui");
                parentPack = "org-netbeans-modules-";
            } else {
                parentPack = "org-netbeans-modules-";
            }
        } else if (parentPath.equals("nb")) {
            if (jarName.startsWith("org-")) {
               
            } else if (jarName.startsWith("projectui")){
                jarName.replace("projectui", "project-ui");
                parentPack = "org-netbeans-modules-";
            } else {
                parentPack = "org-netbeans-modules-";
            }
        }
        log("\nsplit: " + split.length + "\nparentPack: " + parentPack);

        jarName = parentPack + jarName;

        //getProject().setProperty("innerPath", innerPath);
        getProject().setProperty("jarName", jarName);

        log("Filename: " + filename + "\n path : " + filepath);
        log("\nJarname: " + jarName);

    }

}

Добавьте build.XML в свой проект:

<?xml version="1.0" encoding="UTF-8"?>

<project name="vi_locale_nbbuild" default="jar-up" basedir=".">
   
    <target name="init">
        <property name="locale.lang" value="vi"/>
        <property name="locale.dist" value="./dist"/>
        <property name="locale.src" value="./locale-target/src-todo"/>
        <property name="src.dir" value="java"/>
        <property name="classes.dir" value="classes"/>
        <property name="ant.libs.dir" value="F:\\DEV\\Project Structure and Complier\\apache-ant-1.8.2-bin\\apache-ant-1.8.2\\lib\\"/>
        <property name="jme.dir" value="F:\\jmonkeyplatform\\platform\\modules\\locale"/>
        <property name="antcontrib.lib" value="F:\\JGE\\Jar Tools\\ant-contrib-1.0b3-bin\\ant-contrib\\ant-contrib-1.0b3.jar"/>       
    </target>
   
    <target name="clean-ant-task" description="Delete all generated files" depends="init">
        <delete dir="${classes.dir}" failonerror="false"/>
        <delete file="${ant.project.name}.jar"/>
    </target>

    <path id="my.classpath">
        <fileset dir="${ant.libs.dir}">
            <include name="**/*.jar" />
        </fileset>
    </path>
   
    <target name="compile-ant-task" description="Compiles the Task" depends="init">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="true">
            <classpath path="my.classpath"/>
        </javac>
    </target>

    <target name="jar-ant-task" description="JARs the Task" depends="compile-ant-task">
        <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/>
    </target>
      
    <target name="test-my-task" description="Use the Task" depends="jar-ant-task">
        <makepath/>
    </target>
   
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="${antcontrib.lib}"/>
        </classpath>
    </taskdef>

    <taskdef name="makepath" classname="anttask.MyTask" classpath="${ant.project.name}.jar"/>
   
    <target name="jar-locale" depends="compile-ant-task,jar-ant-task">
        <delete dir="${locale.dist}"/>
        <echo>${locale.src}</echo>       
       
        <!-- UNICODE CONVERT -->
       
        <native2ascii src="${locale.src}" dest="${locale.src}" includes="**/*.properties" ext=".encode"/>
       
        <for param="filepath">
            <path>
                <dirset dir="${locale.src}" includes="**/*.properties"/>
            </path>
            <sequential>       
                <move file="@{filepath}" tofile="@{filepath}.saved" overwrite="true"/>
                <move file="@{filepath}.encode" tofile="@{filepath}" overwrite="true"/>
            </sequential>
        </for>
       
        <!-- END CONVERT -->

        <for param="filepath">

            <path>
                <dirset dir="${locale.src}" includes="*/*/*"/>
            </path>

            <sequential>

      <!-- do something -->
     
                <pathconvert property="filename">
                    <path location="@{filepath}"/>
                    <map from="${basedir}/locale-target/src-todo" to="" />
                </pathconvert>

                <makepath filename="${filename}" filepath="@{filepath}"/>

                <!-- JAR -->

                <jar destfile="${locale.dist}/${jarName}_${locale.lang}.jar" basedir="@{filepath}"/>

                <copy file="${locale.dist}/${jarName}_${locale.lang}.jar" tofile="${jme.dir}/${jarName}_${locale.lang}.jar" overwrite="true"/>
               
                <var name="filename" unset="true"/>

            </sequential>

        </for>      

    </target>

</project>

Свойства имеют четкое значение:

<property name="locale.lang" value="vi"/>
<property name="locale.dist" value="./dist"/>
<property name="locale.src" value="./locale-target/src-todo"/>
<property name="src.dir" value="java"/>
<property name="classes.dir" value="classes"/>
<property name="ant.libs.dir" value="F:\\DEV\\Project Structure and Complier\\apache-ant-1.8.2-bin\\apache-ant-1.8.2\\lib\\"/>
<property name="jme.dir" value="F:\\jmonkeyplatform\\platform\\modules\\locale"/>
<property name="antcontrib.lib" value="F:\\JGE\\Jar Tools\\ant-contrib-1.0b3-bin\\ant-contrib\\ant-contrib-1.0b3.jar"/>
  • locale.lang = «vi» // Как вьетнамский или какое у тебя слово короткое слово
  • locale.src = «./locale-target/src-todo/» // Выберите каталог, в который вы положили все свои папки
  • locale.dist = «WhereYourJarWillBePutInto»;
  • ant.libs.dir = «ThePathToAntLibs»; 
  • antcontrib.lib = «ThePathToAntContribLibs»; // Используем задачу FOR

Вывод

Что касается публикации Вьетнамской среды IDE NetBeans, я сделаю проект с открытым исходным кодом для плагина языкового пакета. Также я опубликую свой код на форуме Java для вьетнамских разработчиков, а именно http://congdongjava.com .