diff --git a/.github/workflows/azure-functions-app-java.yml b/.github/workflows/azure-functions-app-java.yml new file mode 100644 index 000000000..2a6aeb55c --- /dev/null +++ b/.github/workflows/azure-functions-app-java.yml @@ -0,0 +1,41 @@ +name: Build Reteras Model Studio EXE + +on: + push: + branches: [ CN ] + +jobs: + build: + runs-on: windows-latest + strategy: + matrix: + java: [ '17' ] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java }} + distribution: 'temurin' + cache: 'gradle' + + - name: Grant execute permission for gradlew + run: chmod +x ./gradlew + working-directory: ./ + + - name: List all available Gradle tasks + run: ./gradlew.bat tasks --all + working-directory: ./ + + - name: Try to create EXE with jpackage + run: ./gradlew.bat jpackage + working-directory: ./ + continue-on-error: true + + - name: 上传最终程序 + uses: actions/upload-artifact@v4 + with: + name: ReterasModelStudio-Portable + Path: D:/a/ReterasModelStudio/ReterasModelStudio \ No newline at end of file diff --git a/build.gradle b/build.gradle index e1981a1c4..7040a166b 100644 --- a/build.gradle +++ b/build.gradle @@ -50,6 +50,7 @@ project(":matrixeater") { dependencies { implementation project(":craft3data") implementation project(":craft3editor") + implementation project(":localizationmanager") api "com.fifesoft:rsyntaxtextarea:$rsyntaxtextareaVersion" api "org.openjdk.nashorn:nashorn-core:${nashornVersion}" } @@ -61,6 +62,7 @@ project(":craft3editor") { dependencies { implementation project(":craft3data") + implementation project(":localizationmanager") api "org.jclarion:image4j:$image4jVersion" } } @@ -70,8 +72,9 @@ project(":craft3data") { dependencies { - api "com.jtattoo:JTattoo:$jtattooVersion" - api "com.miglayout:miglayout-swing:$miglayoutVersion" + implementation project(":localizationmanager") + api "com.jtattoo:JTattoo:$jtattooVersion" + api "com.miglayout:miglayout-swing:$miglayoutVersion" api "org.lwjgl.lwjgl:lwjgl:${lwjglVersion}" api "org.lwjgl.lwjgl:lwjgl-platform:${lwjglVersion}:natives-windows" api "org.lwjgl.lwjgl:lwjgl-platform:${lwjglVersion}:natives-linux" @@ -85,6 +88,15 @@ project(":craft3data") { } } +project(":localizationmanager") { + apply plugin: "java-library" + + + dependencies { + // 添加该模块需要的依赖 + } +} + tasks.eclipse.doLast { delete ".project" } diff --git a/craft3data/src/com/badlogic/gdx/backends/lwjgl/LwjglNativesLoader.java b/craft3data/src/com/badlogic/gdx/backends/lwjgl/LwjglNativesLoader.java index 1c09d13da..94c92ad55 100644 --- a/craft3data/src/com/badlogic/gdx/backends/lwjgl/LwjglNativesLoader.java +++ b/craft3data/src/com/badlogic/gdx/backends/lwjgl/LwjglNativesLoader.java @@ -21,6 +21,7 @@ import static com.badlogic.gdx.utils.SharedLibraryLoader.*; import com.badlogic.gdx.utils.SharedLibraryLoader; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.lang.reflect.Method; @@ -61,7 +62,7 @@ static public void load () { loader.extractFileTo(is64Bit ? "libopenal64.so" : "libopenal.so", nativesDir); } } catch (Throwable ex) { - throw new RuntimeException("Unable to extract LWJGL natives.", ex); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.sharedlibraryloader"), ex); } System.setProperty("org.lwjgl.librarypath", nativesDir.getAbsolutePath()); load = false; diff --git a/craft3data/src/com/badlogic/gdx/utils/SharedLibraryLoader.java b/craft3data/src/com/badlogic/gdx/utils/SharedLibraryLoader.java index 03af991e9..2381d3f38 100644 --- a/craft3data/src/com/badlogic/gdx/utils/SharedLibraryLoader.java +++ b/craft3data/src/com/badlogic/gdx/utils/SharedLibraryLoader.java @@ -17,6 +17,7 @@ /* Included in MatrixEater by Retera for deployability */ package com.badlogic.gdx.utils; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.io.FileInputStream; @@ -88,7 +89,7 @@ public SharedLibraryLoader(final String nativesJar) { /** Returns a CRC of the remaining bytes in the stream. */ public String crc(final InputStream input) { if (input == null) { - throw new IllegalArgumentException("input cannot be null."); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.streamutils")); } final CRC32 crc = new CRC32(); final byte[] buffer = new byte[4096]; @@ -146,7 +147,7 @@ public void load(final String libraryName) { } setLoaded(libraryName); } catch (final Throwable ex) { - throw new RuntimeException("Couldn't load shared library '" + platformName + "' for target: " + throw new RuntimeException(LocalizationManager.getInstance().get("exception.platformname_1") + platformName + LocalizationManager.getInstance().get("exception.platformname_2") + System.getProperty("os.name") + (is64Bit ? ", 64-bit" : ", 32-bit"), ex); } } @@ -156,7 +157,7 @@ private InputStream readFile(final String path) { if (nativesJar == null) { final InputStream input = SharedLibraryLoader.class.getResourceAsStream("/" + path); if (input == null) { - throw new RuntimeException("Unable to read file for extraction: " + path); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.readfile") + path); } return input; } @@ -166,11 +167,11 @@ private InputStream readFile(final String path) { final ZipFile file = new ZipFile(nativesJar); final ZipEntry entry = file.getEntry(path); if (entry == null) { - throw new RuntimeException("Couldn't find '" + path + "' in JAR: " + nativesJar); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.zipfile_1") + path + LocalizationManager.getInstance().get("exception.zipfile_2") + nativesJar); } return file.getInputStream(entry); } catch (final IOException ex) { - throw new RuntimeException("Error reading '" + path + "' in JAR: " + nativesJar, ex); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.zipfile_catch_1") + path + LocalizationManager.getInstance().get("exception.zipfile_catch_2") + nativesJar, ex); } } @@ -196,7 +197,7 @@ public File extractFile(final String sourcePath, String dirName) throws IOExcept extractedFile = getExtractedFile(UUID.randomUUID().toString(), new File(sourcePath).getName()); if (extractedFile == null) { throw new RuntimeException( - "Unable to find writable path to extract file. Is the user home directory writable?"); + LocalizationManager.getInstance().get("exception.extractfile_extractedfile")); } } return extractFile(sourcePath, sourceCrc, extractedFile); @@ -346,7 +347,7 @@ private File extractFile(final String sourcePath, final String sourceCrc, final output.close(); } catch (final IOException ex) { throw new RuntimeException( - "Error extracting file: " + sourcePath + "\nTo: " + extractedFile.getAbsolutePath(), ex); + LocalizationManager.getInstance().get("exception.extractfile_extractedcrc_1") + sourcePath + LocalizationManager.getInstance().get("exception.extractfile_extractedcrc_2") + extractedFile.getAbsolutePath(), ex); } } diff --git a/craft3data/src/com/etheller/collections/AbstractCollection.java b/craft3data/src/com/etheller/collections/AbstractCollection.java index 14274390a..f64d2d36c 100644 --- a/craft3data/src/com/etheller/collections/AbstractCollection.java +++ b/craft3data/src/com/etheller/collections/AbstractCollection.java @@ -24,6 +24,7 @@ */ package com.etheller.collections; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.Arrays; import java.util.Iterator; @@ -271,7 +272,7 @@ private static T[] finishToArray(T[] r, final Iterator it) { private static int hugeCapacity(final int minCapacity) { if (minCapacity < 0) { - throw new OutOfMemoryError("Required array size too large"); + throw new OutOfMemoryError(LocalizationManager.getInstance().get("memoryerror.hugecapacity")); } return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; } diff --git a/craft3data/src/com/etheller/collections/AbstractMap.java b/craft3data/src/com/etheller/collections/AbstractMap.java index eae92ef8b..5f2b647b4 100644 --- a/craft3data/src/com/etheller/collections/AbstractMap.java +++ b/craft3data/src/com/etheller/collections/AbstractMap.java @@ -23,6 +23,7 @@ * */ package com.etheller.collections; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.Iterator; @@ -383,7 +384,7 @@ public K next() { @Override public void remove() { - throw new UnsupportedOperationException("iterator is read only"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.keysetforeachadapter")); // i.remove(); } }; @@ -459,7 +460,7 @@ public V next() { @Override public void remove() { - throw new UnsupportedOperationException("iterator is read only"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.abstractcollection")); // i.remove(); } }; diff --git a/craft3data/src/com/etheller/collections/ArrayList.java b/craft3data/src/com/etheller/collections/ArrayList.java index fcfc94bb5..87624220c 100644 --- a/craft3data/src/com/etheller/collections/ArrayList.java +++ b/craft3data/src/com/etheller/collections/ArrayList.java @@ -1,4 +1,5 @@ package com.etheller.collections; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.Arrays; import java.util.ConcurrentModificationException; @@ -18,7 +19,7 @@ public ArrayList() { @SuppressWarnings("unchecked") public ArrayList(final int defaultSize) { if (defaultSize < 0) { - throw new IllegalArgumentException("Negative size not allowed on ArrayList: " + defaultSize); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.defaultsize") + defaultSize); } elementData = (TYPE[]) new Object[defaultSize]; } @@ -137,13 +138,13 @@ private void fastRemove(final int index) { private void rangeCheck(final int index) { if (index >= size || index < 0) { - throw new IndexOutOfBoundsException(index + " not in [0," + (size - 1) + "]"); + throw new IndexOutOfBoundsException(index + LocalizationManager.getInstance().get("exception.rangecheck") + "[0," + (size - 1) + "]"); } } private void rangeCheckForAdd(final int index) { if (index > size || index < 0) { - throw new IndexOutOfBoundsException(index + " not in [0," + (size - 1) + "]"); + throw new IndexOutOfBoundsException(index + LocalizationManager.getInstance().get("exception.rangecheck") + "[0," + (size - 1) + "]"); } } @@ -168,7 +169,7 @@ public TYPE next() { @Override public void remove() { - throw new IllegalStateException("iterator is read only"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.abstractmap_remove")); } @Override @@ -202,7 +203,7 @@ public void add(final int index, final TYPE value) { public ListIterator listIterator(final int index) { if (index < 0 || index > size) { - throw new IndexOutOfBoundsException("Index: " + index); + throw new IndexOutOfBoundsException(LocalizationManager.getInstance().get("exception.listiterator") + index); } return new ListItr(index); } diff --git a/craft3data/src/com/etheller/collections/HashMap.java b/craft3data/src/com/etheller/collections/HashMap.java index 28be28eb4..97ea5fa74 100644 --- a/craft3data/src/com/etheller/collections/HashMap.java +++ b/craft3data/src/com/etheller/collections/HashMap.java @@ -1,4 +1,5 @@ package com.etheller.collections; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.Arrays; import java.util.ConcurrentModificationException; @@ -366,7 +367,7 @@ public HashIterator() { protected final Entry nextEntry() { if (node == null) { - throw new IllegalStateException("no more nodes for iterator"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.hashiterator_nextentry")); } final Node current = node; node = node.getNext(); @@ -383,7 +384,7 @@ public boolean hasNext() { @Override public void remove() { - throw new UnsupportedOperationException("iterator is read only"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.hashiterator_remove")); } private void advanceIndexAndNode() { diff --git a/craft3data/src/com/etheller/collections/TreeMap.java b/craft3data/src/com/etheller/collections/TreeMap.java index c9541d5cf..8615a1b7e 100644 --- a/craft3data/src/com/etheller/collections/TreeMap.java +++ b/craft3data/src/com/etheller/collections/TreeMap.java @@ -24,6 +24,7 @@ */ package com.etheller.collections; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.Collections; @@ -1498,7 +1499,7 @@ abstract static class NavigableSubMap extends AbstractMap 0) { - throw new IllegalArgumentException("fromKey > toKey"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablesubmap")); } } else { if (!fromStart) { @@ -1653,7 +1654,7 @@ public final boolean containsKey(final Object key) { @Override public final SECONDONE put(final KWERTY key, final SECONDONE value) { if (!inRange(key)) { - throw new IllegalArgumentException("key out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablesubmap_secondone")); } return m.put(key, value); } @@ -2007,10 +2008,10 @@ public Comparator comparator() { public NavigableMap subMap(final K fromKey, final boolean fromInclusive, final K toKey, final boolean toInclusive) { if (!inRange(fromKey, fromInclusive)) { - throw new IllegalArgumentException("fromKey out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablemap_fromkey")); } if (!inRange(toKey, toInclusive)) { - throw new IllegalArgumentException("toKey out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablemap_tokey")); } return new AscendingSubMap(m, false, fromKey, fromInclusive, false, toKey, toInclusive); } @@ -2018,7 +2019,7 @@ public NavigableMap subMap(final K fromKey, final boolean fromInclusive, f @Override public NavigableMap headMap(final K toKey, final boolean inclusive) { if (!inRange(toKey, inclusive)) { - throw new IllegalArgumentException("toKey out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablemap_tokey")); } return new AscendingSubMap(m, fromStart, lo, loInclusive, false, toKey, inclusive); } @@ -2026,7 +2027,7 @@ public NavigableMap headMap(final K toKey, final boolean inclusive) { @Override public NavigableMap tailMap(final K fromKey, final boolean inclusive) { if (!inRange(fromKey, inclusive)) { - throw new IllegalArgumentException("fromKey out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablemap_fromkey")); } return new AscendingSubMap(m, false, fromKey, inclusive, toEnd, hi, hiInclusive); } @@ -2141,10 +2142,10 @@ public Comparator comparator() { public NavigableMap subMap(final K fromKey, final boolean fromInclusive, final K toKey, final boolean toInclusive) { if (!inRange(fromKey, fromInclusive)) { - throw new IllegalArgumentException("fromKey out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablemap_fromkey")); } if (!inRange(toKey, toInclusive)) { - throw new IllegalArgumentException("toKey out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablemap_tokey")); } return new DescendingSubMap(m, false, toKey, toInclusive, false, fromKey, fromInclusive); } @@ -2152,7 +2153,7 @@ public NavigableMap subMap(final K fromKey, final boolean fromInclusive, f @Override public NavigableMap headMap(final K toKey, final boolean inclusive) { if (!inRange(toKey, inclusive)) { - throw new IllegalArgumentException("toKey out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablemap_tokey")); } return new DescendingSubMap(m, false, toKey, inclusive, toEnd, hi, hiInclusive); } @@ -2160,7 +2161,7 @@ public NavigableMap headMap(final K toKey, final boolean inclusive) { @Override public NavigableMap tailMap(final K fromKey, final boolean inclusive) { if (!inRange(fromKey, inclusive)) { - throw new IllegalArgumentException("fromKey out of range"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.navigablemap_fromkey")); } return new DescendingSubMap(m, fromStart, lo, loInclusive, false, fromKey, inclusive); } diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/ConfigurationFile.java b/craft3data/src/com/hiveworkshop/blizzard/casc/ConfigurationFile.java index d508983da..6bb90310d 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/ConfigurationFile.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/ConfigurationFile.java @@ -12,6 +12,7 @@ import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; import com.hiveworkshop.nio.ByteBufferInputStream; +import hiveworkshop.localizationmanager.LocalizationManager; /** * File containing CASC configuration information. This is basically a @@ -91,7 +92,7 @@ record = line; final int assignmentIndex = record.indexOf('='); if (assignmentIndex == -1) { throw new MalformedCASCStructureException( - "configuration file line contains record with no assignment"); + LocalizationManager.getInstance().get("exception.configurationfile_configuration_no_assignment")); } final String key = record.substring(0, assignmentIndex).trim(); @@ -99,7 +100,7 @@ record = line; if (configuration.putIfAbsent(key, value) != null) { throw new MalformedCASCStructureException( - "configuration file contains duplicate key declarations"); + LocalizationManager.getInstance().get("exception.configurationfile_configuration_key_duplicate")); } } } diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/Key.java b/craft3data/src/com/hiveworkshop/blizzard/casc/Key.java index 453cc6f08..453397deb 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/Key.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/Key.java @@ -2,6 +2,7 @@ import com.hiveworkshop.ReteraCASCUtils; import com.hiveworkshop.lang.Hex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Class representing a CASC related key such as an encoding key. @@ -66,7 +67,7 @@ public byte[] getKey() { @Override public int hashCode() { - throw new UnsupportedOperationException("key hash code not safe to use due to variable sizes between systems"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.key_hashcode")); } @Override diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/StorageReference.java b/craft3data/src/com/hiveworkshop/blizzard/casc/StorageReference.java index 6a4993d46..9c84551bc 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/StorageReference.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/StorageReference.java @@ -1,4 +1,5 @@ package com.hiveworkshop.blizzard.casc; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.Map; @@ -25,11 +26,11 @@ public class StorageReference { public StorageReference(final String name, final Map configuration) { final String keys = configuration.get(name); if (keys == null) { - throw new IllegalArgumentException("name does not exist in configuration"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.storagereference_storagereference_not_exist")); } final String sizes = configuration.get(name + SIZES_SUFFIX); if (sizes == null) { - throw new IllegalArgumentException("size missing in configuration"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.storagereference_storagereference_size_missing")); } final String[] keyStrings = keys.split(" "); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/info/FieldDescriptor.java b/craft3data/src/com/hiveworkshop/blizzard/casc/info/FieldDescriptor.java index 72565e6e3..b77f5ac7a 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/info/FieldDescriptor.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/info/FieldDescriptor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.blizzard.casc.info; +import hiveworkshop.localizationmanager.LocalizationManager; public class FieldDescriptor { private static final int NAME_TERMINATOR = '!'; @@ -16,11 +17,11 @@ public class FieldDescriptor { public FieldDescriptor(final String encoded) { final int nameEnd = encoded.indexOf(NAME_TERMINATOR); if (nameEnd == -1) { - throw new IllegalArgumentException("missing name terminator"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.fielddescriptor_nameend")); } final int dataTypeEnd = encoded.indexOf(DATA_TYPE_TERMINATOR, nameEnd + 1); if (dataTypeEnd == -1) { - throw new IllegalArgumentException("missing data type terminator"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.fielddescriptor_datatypeend")); } name = encoded.substring(0, nameEnd); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/info/Info.java b/craft3data/src/com/hiveworkshop/blizzard/casc/info/Info.java index 004db7045..a78fb17d7 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/info/Info.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/info/Info.java @@ -11,6 +11,7 @@ import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; import com.hiveworkshop.nio.ByteBufferInputStream; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Top level CASC information file containing configuration information and @@ -66,7 +67,7 @@ public Info(final ByteBuffer fileBuffer) throws IOException { records.add(new ArrayList<>(Arrays.asList(separateFields(lineScanner.nextLine())))); } } catch (final NoSuchElementException e) { - throw new MalformedCASCStructureException("missing headers"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.nosuchelementexception")); } } diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC.java b/craft3data/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC.java index 88c706f6e..24be5ade2 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC.java @@ -14,6 +14,7 @@ import com.hiveworkshop.blizzard.casc.storage.Storage; import com.hiveworkshop.blizzard.casc.vfs.VirtualFileSystem; import com.hiveworkshop.blizzard.casc.vfs.VirtualFileSystem.PathResult; +import hiveworkshop.localizationmanager.LocalizationManager; /** * A convenient access to locally stored Warcraft III data files. Intended for @@ -115,9 +116,9 @@ public ByteBuffer readFileData(final String filePath) throws IOException { final PathResult resolveResult = vfs.resolvePath(pathFragments); if (!resolveResult.isFile()) { - throw new FileNotFoundException("the specified file path does not resolve to a file"); + throw new FileNotFoundException(LocalizationManager.getInstance().get("exception.readfiledata_isfile")); } else if (!resolveResult.existsInStorage()) { - throw new FileNotFoundException("the specified file is not in local storage"); + throw new FileNotFoundException(LocalizationManager.getInstance().get("exception.readfiledata_existsinstorage")); } final ByteBuffer fileBuffer = resolveResult.readFile(null); @@ -187,13 +188,13 @@ public WarcraftIIICASC(final Path installFolder, final boolean useMemoryMapping, final int recordCount = buildInfo.getRecordCount(); if (recordCount < 1) { - throw new MalformedCASCStructureException("build info contains no records"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.warcraftIIIcasc_1")); } // resolve the active record final int activeFiledIndex = buildInfo.getFieldIndex("Active"); if (activeFiledIndex == -1) { - throw new MalformedCASCStructureException("build info contains no active field"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.warcraftIIIcasc_2")); } int productFieldIndex = buildInfo.getFieldIndex("Product"); int recordIndex = 0; @@ -205,21 +206,21 @@ public WarcraftIIICASC(final Path installFolder, final boolean useMemoryMapping, } } if (recordIndex == recordCount) { - throw new MalformedCASCStructureException("build info contains no active record"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.warcraftIIIcasc_3")); } activeInfoRecord = recordIndex; // resolve build configuration file final int buildKeyFieldIndex = buildInfo.getFieldIndex("Build Key"); if (buildKeyFieldIndex == -1) { - throw new MalformedCASCStructureException("build info contains no build key field"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.warcraftIIIcasc_4")); } final String buildKey = buildInfo.getField(activeInfoRecord, buildKeyFieldIndex); // resolve data folder dataPath = installFolder.resolve(WC3_DATA_FOLDER_NAME); if (!Files.isDirectory(dataPath)) { - throw new MalformedCASCStructureException("data folder is missing"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.warcraftIIIcasc_5")); } // resolve build configuration file @@ -268,7 +269,7 @@ public String getBranch() throws IOException { // resolve branch final int branchFieldIndex = buildInfo.getFieldIndex("Branch"); if (branchFieldIndex == -1) { - throw new MalformedCASCStructureException("build info contains no branch field"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.getbranch")); } return buildInfo.getField(activeInfoRecord, branchFieldIndex); } diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/nio/LittleHashBlockProcessor.java b/craft3data/src/com/hiveworkshop/blizzard/casc/nio/LittleHashBlockProcessor.java index baf55bdf9..08d2a2fbf 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/nio/LittleHashBlockProcessor.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/nio/LittleHashBlockProcessor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.blizzard.casc.nio; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.nio.BufferUnderflowException; @@ -21,7 +22,7 @@ public int processBlock(final ByteBuffer encoded) throws MalformedCASCStructureE length = encoded.getInt(); expectedHash = encoded.getInt(); } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("little hash block header out of bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.processblock")); } final int actualHash = expectedHash; // TODO generate actual hash @@ -51,11 +52,11 @@ public ByteBuffer getBlock(final ByteBuffer sourceBuffer) throws IOException { length = workingBuffer.getInt(); expectedHash = workingBuffer.getInt(); } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("little hash block header out of bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_hash_block_header_out")); } if (workingBuffer.remaining() < length) { - throw new MalformedCASCStructureException("little hash block out of bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_hash_block_out")); } workingBuffer.limit(workingBuffer.position() + length); @@ -66,7 +67,7 @@ public ByteBuffer getBlock(final ByteBuffer sourceBuffer) throws IOException { final int actualHash = expectedHash; // TODO generate actual hash if (actualHash != expectedHash) { - throw new HashMismatchException("little hash block"); + throw new HashMismatchException(LocalizationManager.getInstance().get("exception.bytebuffer_hash_block")); } sourceBuffer.position(sourceBuffer.position() + workingBuffer.position()); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/BLTEContent.java b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/BLTEContent.java index 6a4f89e3a..1323dd673 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/BLTEContent.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/BLTEContent.java @@ -7,6 +7,7 @@ import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; import com.hiveworkshop.lang.Hex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * BLTE content entry, used to decode BLTE file data that follows it. @@ -39,7 +40,7 @@ public static BLTEContent[] decodeContent(final ByteBuffer storageBuffer) throws if ((contentBuffer.remaining() < IDENTIFIER.remaining()) || !contentBuffer.limit(IDENTIFIER.remaining()).equals(IDENTIFIER)) { - throw new MalformedCASCStructureException("missing BLTE identifier"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.decodecontent")); } // decode header @@ -52,14 +53,14 @@ public static BLTEContent[] decodeContent(final ByteBuffer storageBuffer) throws try { headerSize = Integer.toUnsignedLong(contentBuffer.getInt()); } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("header preamble goes out of bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.decodecontent_header_preamble_out")); } if (headerSize == 0L) { storageBuffer.position(storageBuffer.position() + contentBuffer.position()); return new BLTEContent[0]; } else if (headerSize > contentBuffer.capacity()) { - throw new MalformedCASCStructureException("BLTE header extends beyond storage buffer bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.decodecontent_header_extends_buffer")); } contentBuffer.limit((int) headerSize); @@ -73,7 +74,7 @@ public static BLTEContent[] decodeContent(final ByteBuffer storageBuffer) throws try { flags = blteBuffer.get(); if (flags != 0xF) { - throw new MalformedCASCStructureException("unknown flags"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.decodecontent_flags")); } // BE24 read final int be24Bytes = 3; @@ -82,10 +83,10 @@ public static BLTEContent[] decodeContent(final ByteBuffer storageBuffer) throws blteBuffer.get(be24Buffer.array(), Integer.BYTES - be24Bytes, be24Bytes); entryCount = be24Buffer.getInt(0); if (entryCount == 0) { - throw new MalformedCASCStructureException("explicit zero entry count"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.decodecontent_zero_entry_count")); } } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("header goes out of bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.decodecontent_header_goes_out")); } final BLTEContent[] content = new BLTEContent[entryCount]; @@ -95,7 +96,7 @@ public static BLTEContent[] decodeContent(final ByteBuffer storageBuffer) throws } if (blteBuffer.hasRemaining()) { - throw new MalformedCASCStructureException("unprocessed BLTE bytes"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.decodecontent_unprocessed_blte_bytes")); } storageBuffer.position(storageBuffer.position() + contentBuffer.position()); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/BankStream.java b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/BankStream.java index 44c0c0481..d36213ea2 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/BankStream.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/BankStream.java @@ -10,6 +10,7 @@ import com.hiveworkshop.blizzard.casc.Key; import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Allows high level access to stored file data banks. These data banks can be @@ -37,16 +38,16 @@ public BankStream(final ByteBuffer storageBuffer, final Key encodingKey) throws ByteBuffer streamBuffer = storageBuffer.slice(); container = new StorageContainer(streamBuffer); if ((encodingKey != null) && !container.getKey().equals(encodingKey)) { - throw new MalformedCASCStructureException("container encoding key mismatch"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bankstream_1")); } final int storageSize = (int) container.getSize(); final int storageSizeDiff = Integer.compare(streamBuffer.capacity(), storageSize); if (storageSizeDiff < 0) { - throw new MalformedCASCStructureException("container buffer smaller than container"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bankstream_2")); } else if ((encodingKey != null) && (storageSizeDiff != 0)) { - throw new MalformedCASCStructureException("container buffer size mismatch"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bankstream_3")); } else if (storageSizeDiff > 0) { // resize buffer to match file final int streamPos = streamBuffer.position(); @@ -76,7 +77,7 @@ public BankStream(final ByteBuffer storageBuffer, final Key encodingKey) throws */ public long getNextBankLength() throws EOFException { if (!hasNextBank()) { - throw new EOFException("no more banks to decode"); + throw new EOFException(LocalizationManager.getInstance().get("exception.getnextbanklLength")); } return content.length != 0 ? content[bank].getDecompressedSize() : streamBuffer.remaining(); @@ -96,7 +97,7 @@ public long getNextBankLength() throws EOFException { */ public ByteBuffer getBank(ByteBuffer bankBuffer) throws IOException { if (!hasNextBank()) { - throw new EOFException("no more banks to decode"); + throw new EOFException(LocalizationManager.getInstance().get("exception.bytebuffer_hasnextbank")); } if (content.length != 0) { @@ -105,10 +106,10 @@ public ByteBuffer getBank(ByteBuffer bankBuffer) throws IOException { final long decodedSize = blteEntry.getDecompressedSize(); if (streamBuffer.remaining() < encodedSize) { - throw new MalformedCASCStructureException("encoded data beyond end of file"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_streambuffer")); } else if (bankBuffer == null) { if (decodedSize > Integer.MAX_VALUE) { - throw new MalformedCASCStructureException("bank too large for Java to manipulate"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_bankbuffer")); } bankBuffer = ByteBuffer.allocate((int) decodedSize); } else if (bankBuffer.remaining() < decodedSize) { @@ -125,7 +126,7 @@ public ByteBuffer getBank(ByteBuffer bankBuffer) throws IOException { case 'N': // uncompressed data if (encodedBuffer.remaining() != decodedSize) { - throw new MalformedCASCStructureException("not enough uncompressed bytes"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_encodedbuffer")); } decodedBuffer.put(encodedBuffer); break; @@ -139,16 +140,16 @@ public ByteBuffer getBank(ByteBuffer bankBuffer) throws IOException { resultSize = zlib.inflate(intermediateDecodedCopy); decodedBuffer.put(intermediateDecodedCopy, 0, resultSize); } catch (final DataFormatException e) { - throw new MalformedCASCStructureException("zlib inflate exception", e); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_dataformatexception"), e); } if (resultSize != decodedSize) { - throw new MalformedCASCStructureException("not enough bytes generated: " + resultSize + "B"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_decodedsize") + resultSize + "B"); } else if (!zlib.finished()) { - throw new MalformedCASCStructureException("unfinished inflate operation"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_zlib")); } break; default: - throw new UnsupportedEncodingException("unsupported encoding mode: " + encodingMode); + throw new UnsupportedEncodingException(LocalizationManager.getInstance().get("exception.bytebuffer_default") + encodingMode); } streamBuffer.position(streamBuffer.position() + encodedBuffer.position()); @@ -163,7 +164,7 @@ public ByteBuffer getBank(ByteBuffer bankBuffer) throws IOException { if (bankBuffer == null) { bankBuffer = ByteBuffer.allocate(streamBuffer.remaining()); } else if (bankBuffer.remaining() < streamBuffer.remaining()) { - throw new MalformedCASCStructureException("bank buffer too small"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.bytebuffer_bankbuffer_streambuffer")); } bankBuffer.put(streamBuffer); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/IndexFile.java b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/IndexFile.java index bda01be1e..ab7ddefb0 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/IndexFile.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/IndexFile.java @@ -11,6 +11,7 @@ import com.hiveworkshop.blizzard.casc.nio.HashMismatchException; import com.hiveworkshop.blizzard.casc.nio.LittleHashBlockProcessor; import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; +import hiveworkshop.localizationmanager.LocalizationManager; public class IndexFile { /** @@ -47,7 +48,7 @@ private void decode(final ByteBuffer fileBuffer) throws IOException { try { headerBuffer = hashBlockProcessor.getBlock(sourceBuffer); } catch (final HashMismatchException e) { - throw new MalformedCASCStructureException("header block corrupt", e); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.hashblockprocessor"), e); } headerBuffer.order(ByteOrder.LITTLE_ENDIAN); @@ -66,7 +67,7 @@ private void decode(final ByteBuffer fileBuffer) throws IOException { dataFileSizeBits = Byte.toUnsignedInt(headerBuffer.get()); dataSizeMaximum = headerBuffer.getLong(); } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("header block too small"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.hashblockprocessor_header_block_small")); } // decode entries @@ -78,7 +79,7 @@ private void decode(final ByteBuffer fileBuffer) throws IOException { try { entryBuffer = hashBlockProcessor.getBlock(sourceBuffer); } catch (final HashMismatchException e) { - throw new MalformedCASCStructureException("entries block corrupt", e); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.hashblockprocessor_entries_corrupt"), e); } final int entryLength = fileSizeLength + dataOffsetLength + encodingKeyLength; @@ -109,7 +110,7 @@ private void decode(final ByteBuffer fileBuffer) throws IOException { } if (entryBuffer.hasRemaining()) { - throw new MalformedCASCStructureException("unable to fully process entries block"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.hashblockprocessor_unable_fully")); } fileBuffer.position(fileBuffer.position() + sourceBuffer.position()); @@ -138,7 +139,7 @@ public IndexEntry getEntry(final Key encodingKey) { final Key ekey = (Key) right; return entry.getKey().compareTo(ekey); } - throw new IllegalArgumentException("binary search comparing in inverted order"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.hashblockprocessor_binary_search_inverted")); }); return index >= 0 ? entries.get(index) : null; diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/Storage.java b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/Storage.java index 5d3a9c651..bda6d51af 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/Storage.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/Storage.java @@ -20,6 +20,7 @@ import com.hiveworkshop.blizzard.casc.Key; import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Main data storage of a CASC archive. It consists of index files which point @@ -159,7 +160,7 @@ class IndexFileNameMeta { for (int index = 0; index < indicies.length; index += 1) { final ArrayList bucketList = metaMap.get(index); if (bucketList == null) { - throw new MalformedCASCStructureException("storage index file missing"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.storage_index_file_missing")); } Collections.sort(bucketList, bucketOrder); @@ -174,7 +175,7 @@ class IndexFileNameMeta { encodingKeyLength = indicies[index++].getEncodingKeyLength(); for (; index < indicies.length; index += 1) { if (encodingKeyLength != indicies[index].getEncodingKeyLength()) { - throw new MalformedCASCStructureException("inconsistent encoding key length between index files"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.storage_inconsistent_encoding_key_length")); } } } @@ -201,7 +202,7 @@ public synchronized void close() throws IOException { closed = true; if (exception != null) { - throw new IOException("IOExceptions occured during closure", exception); + throw new IOException(LocalizationManager.getInstance().get("exception.close_closure"), exception); } } @@ -219,7 +220,7 @@ public BankStream getBanks(final Key encodingKey) throws IOException { final IndexEntry indexEntry = index.getEntry(encodingKey); if (indexEntry == null) { - throw new FileNotFoundException("encoding key not in store indicies"); + throw new FileNotFoundException(LocalizationManager.getInstance().get("exception.getbanks_encoding_indicies")); } final long dataOffset = indexEntry.getDataOffset(); @@ -239,7 +240,7 @@ private synchronized FileChannel getDataFileChannel(final int index) throws IOEx FileChannel fileChannel = channelMap.get(index); if (fileChannel == null) { if (index > DATA_FILE_INDEX_MAXIMUM) { - throw new MalformedCASCStructureException("storage data file index too large"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.getdatafilechannel_data_file_index_large")); } final StringBuilder builder = new StringBuilder(); @@ -272,7 +273,7 @@ private synchronized FileChannel getDataFileChannel(final int index) throws IOEx private ByteBuffer getStorageBuffer(final int index, final long offset, final long length) throws IOException { final FileChannel fileChannel = getDataFileChannel(index); if (length > Integer.MAX_VALUE) { - throw new MalformedCASCStructureException("data buffer too large to process"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.getstoragebuffer_data_buffer_large")); } final ByteBuffer storageBuffer; @@ -288,7 +289,7 @@ private ByteBuffer getStorageBuffer(final int index, final long offset, final lo } if (storageBuffer.hasRemaining()) { - throw new EOFException("unexpected end of file"); + throw new EOFException(LocalizationManager.getInstance().get("exception.getstoragebuffer_unexpected_end")); } storageBuffer.clear(); } @@ -308,7 +309,7 @@ private ByteBuffer loadFileFully(final Path file) throws IOException { try (final FileChannel channel = FileChannel.open(file, StandardOpenOption.READ)) { final long fileLength = channel.size(); if (fileLength > Integer.MAX_VALUE) { - throw new MalformedCASCStructureException("file too large to process"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.loadfilefully_failed_file_fully")); } if (useMemoryMapping) { @@ -322,7 +323,7 @@ private ByteBuffer loadFileFully(final Path file) throws IOException { } if (fileBuffer.hasRemaining()) { - throw new EOFException("unexpected end of file"); + throw new EOFException(LocalizationManager.getInstance().get("exception.loadfilefully__unexpected_end")); } fileBuffer.clear(); } diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/StorageContainer.java b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/StorageContainer.java index 22387925b..1abc07df2 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/storage/StorageContainer.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/storage/StorageContainer.java @@ -8,6 +8,7 @@ import com.hiveworkshop.blizzard.casc.Key; import com.hiveworkshop.blizzard.casc.nio.HashMismatchException; import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; +import hiveworkshop.localizationmanager.LocalizationManager; /** * High level storage container representing a storage entry. @@ -48,16 +49,16 @@ public StorageContainer(final ByteBuffer storageBuffer) throws IOException { checksumA = containerBuffer.getInt(); checksumB = containerBuffer.getInt(); } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("storage buffer too small"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.storagecontainer_storage_buffer_small")); } final int computedA = checksumA; // TODO compute this final int computedB = checksumB; // TODO compute this if (checksumA != computedA) { - throw new HashMismatchException("container checksum A mismatch"); + throw new HashMismatchException(LocalizationManager.getInstance().get("exception.storagecontainer_a_mismatch")); } if (checksumB != computedB) { - throw new HashMismatchException("container checksum B mismatch"); + throw new HashMismatchException(LocalizationManager.getInstance().get("exception.storagecontainer_b_mismatch")); } storageBuffer.position(storageBuffer.position() + containerBuffer.position()); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalDataFiles.java b/craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalDataFiles.java index 3299341bf..8846900aa 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalDataFiles.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalDataFiles.java @@ -20,6 +20,7 @@ import com.hiveworkshop.blizzard.casc.nio.HashMismatchException; import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; import com.hiveworkshop.lang.Hex; +import hiveworkshop.localizationmanager.LocalizationManager; public class LocalDataFiles implements Closeable { private static final int FRAGMENTATION_SIZE_BITS = 30; @@ -60,7 +61,7 @@ public void close() throws IOException { } if (exception != null) { - throw new IOException("one or more IOExceptions occured during closure", exception); + throw new IOException(LocalizationManager.getInstance().get("exception.localdatafiles_close_exception"), exception); } } @@ -72,7 +73,7 @@ public FileEntry getFileEntry(final LocalIndexFile.IndexEntry indexEntry) throws final long fileOffset = dataOffset & (1L << FRAGMENTATION_SIZE_BITS) - 1L; final FileChannel channel = dataFiles.get(dataFile); if (channel.read(fileHeader, fileOffset) != fileHeader.limit()) { - throw new EOFException("unexpected incomplete read"); + throw new EOFException(LocalizationManager.getInstance().get("exception.localdatafiles_getfileentry_incomplete_read")); } fileHeader.flip(); @@ -89,7 +90,7 @@ public FileEntry getFileEntry(final LocalIndexFile.IndexEntry indexEntry) throws key[i] = fileHeader.get(--keyPos); } if (!indexEntry.compareKey(key)) { - throw new HashMismatchException("file entry does not match index entry"); + throw new HashMismatchException(LocalizationManager.getInstance().get("exception.localdatafiles_getfileentry_file_not_match_index")); } fileEntry.key = key; @@ -111,12 +112,12 @@ public BLTEChunk[] getBLTEChunks(final FileEntry file) throws IOException { long currentOffset = blteOffset; final long blteLimit = file.fileOffset + file.size; if (blteLimit - currentOffset < blteDeclareHeader.capacity()) { - throw new MalformedCASCStructureException("BLTE header extends beyond file limits"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getbltechunks_header_beyond_limits")); } currentOffset += channel.read(blteDeclareHeader, currentOffset); if (blteDeclareHeader.hasRemaining()) { - throw new EOFException("unexpected incomplete read"); + throw new EOFException(LocalizationManager.getInstance().get("exception.localdatafiles_getfileentry_incomplete_read")); } blteDeclareHeader.flip(); @@ -124,7 +125,7 @@ public BLTEChunk[] getBLTEChunks(final FileEntry file) throws IOException { final byte[] mime = new byte[BLTE_MIME.length]; blteDeclareHeader.get(mime); if (!Arrays.equals(mime, BLTE_MIME)) { - throw new MalformedCASCStructureException("expected BLTE mime"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getfileentry_blte_mime")); } final long headerSize = Integer.toUnsignedLong(blteDeclareHeader.getInt()); @@ -133,16 +134,16 @@ public BLTEChunk[] getBLTEChunks(final FileEntry file) throws IOException { final long headerBodySize = headerSize - blteDeclareHeader.capacity(); if (headerBodySize > Integer.MAX_VALUE) { - throw new MalformedCASCStructureException("BLTE header too large to process"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getbltechunks_header_larges")); } else if (blteOffset + headerBodySize > blteLimit) { - throw new MalformedCASCStructureException("BLTE header extends beyond file limits"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getbltechunks_header_beyond_limits")); } final ByteBuffer blteHeaderBody = ByteBuffer.allocate((int) headerBodySize); currentOffset += channel.read(blteHeaderBody, currentOffset); if (blteHeaderBody.hasRemaining()) { - throw new EOFException("unexpected incomplete read"); + throw new EOFException(LocalizationManager.getInstance().get("exception.localdatafiles_getfileentry_incomplete_read")); } blteHeaderBody.flip(); @@ -150,7 +151,7 @@ public BLTEChunk[] getBLTEChunks(final FileEntry file) throws IOException { blteHeaderBody.mark(); final byte flags = blteHeaderBody.get(); if (flags != 0xF) { - throw new MalformedCASCStructureException("unknown BLTE flags"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getbltechunks_unknown_flags")); } // BE24 read blteHeaderBody.reset(); @@ -159,9 +160,9 @@ public BLTEChunk[] getBLTEChunks(final FileEntry file) throws IOException { final int chunkCount = blteHeaderBody.getInt(); if (chunkCount < 0) { - throw new MalformedCASCStructureException("BLTE chunk count too large to process"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getbltechunks_chunk_large")); } else if (chunkCount == 0) { - throw new MalformedCASCStructureException("invalid BLTE chunk count"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getbltechunks_invalid_chunk")); } chunks = new BLTEChunk[chunkCount]; @@ -202,7 +203,7 @@ public BLTEChunk[] getBLTEChunks(final FileEntry file) throws IOException { public ByteBuffer getBLTEData(final FileEntry file, final BLTEChunk chunk, ByteBuffer blteDataBuffer) throws IOException { if (chunk.compressedSize + chunk.compressedOffset > file.size) { - throw new MalformedCASCStructureException("BLTE data extends beyond file data"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getbltedata_beyond_data")); } if (blteDataBuffer == null || blteDataBuffer.remaining() < chunk.compressedSize) { @@ -228,7 +229,7 @@ public ByteBuffer getBLTEData(final FileEntry file, final BLTEChunk chunk, ByteB public ByteBuffer getFileData(final BLTEChunk chunk, final ByteBuffer blteDataBuffer, ByteBuffer fileDataBuffer) throws IOException { if (blteDataBuffer.remaining() < chunk.compressedSize) { - throw new MalformedCASCStructureException("BLTE data too small"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getfiledata_data_small")); } if (fileDataBuffer == null || fileDataBuffer.remaining() < chunk.decompressedSize) { @@ -244,7 +245,7 @@ public ByteBuffer getFileData(final BLTEChunk chunk, final ByteBuffer blteDataBu switch (encodingMode) { case 'N': if (blteDataBuffer.remaining() != chunk.decompressedSize) { - throw new MalformedCASCStructureException("not enough uncompressed bytes"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getfiledata_not_uncompressed")); } fileDataBuffer.put(blteDataBuffer); break; @@ -256,16 +257,16 @@ public ByteBuffer getFileData(final BLTEChunk chunk, final ByteBuffer blteDataBu resultSize = zlib.inflate(fileDataBuffer.array(), fileDataBuffer.position(), fileDataBuffer.remaining()); } catch (final DataFormatException e) { - throw new MalformedCASCStructureException("zlib inflate exception", e); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getfiledata_zlib_inflate"), e); } if (resultSize != chunk.decompressedSize) { - throw new MalformedCASCStructureException("not enough bytes generated: " + resultSize + "B"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getfiledata_not_generated") + resultSize + "B"); } else if (!zlib.finished()) { - throw new MalformedCASCStructureException("unfinished inflate operation"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.localdatafiles_getfiledata_unfinished_inflate")); } break; default: - throw new UnsupportedEncodingException("unsupported encoding mode: " + encodingMode); + throw new UnsupportedEncodingException(LocalizationManager.getInstance().get("exception.localdatafiles_getfiledata_unsupported_encoding") + encodingMode); } } finally { blteDataBuffer.position(blteDataBuffer.limit()); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalIndexFile.java b/craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalIndexFile.java index 961c5f73b..cebc2da24 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalIndexFile.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalIndexFile.java @@ -9,6 +9,7 @@ import com.hiveworkshop.blizzard.casc.nio.HashMismatchException; import com.hiveworkshop.blizzard.casc.nio.LittleHashBlockProcessor; import com.hiveworkshop.lang.Hex; +import hiveworkshop.localizationmanager.LocalizationManager; public class LocalIndexFile { private byte bucketIndex; @@ -44,7 +45,7 @@ public void decode(final ByteBuffer encodedFileBuffer) throws IOException { final int headerLength = hashBlockProcessor.processBlock(encodedFileBuffer); if (headerLength < 0) { - throw new HashMismatchException("index header corrupt"); + throw new HashMismatchException(LocalizationManager.getInstance().get("exception.localindexfile_decode_header_corrupt")); } encodedFileBuffer.limit(encodedFileBuffer.position() + headerLength); @@ -69,7 +70,7 @@ public void decode(final ByteBuffer encodedFileBuffer) throws IOException { final int entriesLength = hashBlockProcessor.processBlock(encodedFileBuffer); if (entriesLength < 0) { - throw new HashMismatchException("index entries corrupt"); + throw new HashMismatchException(LocalizationManager.getInstance().get("exception.localindexfile_decode_entries_corrupt")); } encodedFileBuffer.limit(encodedFileBuffer.position() + entriesLength); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/trash/VirtualFileSystem.java b/craft3data/src/com/hiveworkshop/blizzard/casc/trash/VirtualFileSystem.java index 4ddfb7240..a47c405a8 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/trash/VirtualFileSystem.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/trash/VirtualFileSystem.java @@ -8,6 +8,7 @@ //import com.hiveworkshop.blizzard.casc.vfs.path.Container; //import com.hiveworkshop.blizzard.casc.vfs.path.FileFactory; //import com.hiveworkshop.blizzard.casc.vfs.path.Node; +import hiveworkshop.localizationmanager.LocalizationManager; public class VirtualFileSystem { @@ -22,7 +23,7 @@ public VirtualFileSystem(final ByteBuffer fileBuffer) throws IOException { if (localBuffer.remaining() < IDENTIFIER.remaining() || !localBuffer.limit(IDENTIFIER.remaining()).equals(IDENTIFIER)) { - throw new MalformedCASCStructureException("missing TVFS identifier"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.virtualfilesystem_missing_tvfs")); } // decode header @@ -32,11 +33,11 @@ public VirtualFileSystem(final ByteBuffer fileBuffer) throws IOException { final byte version = localBuffer.get(); if (version != 1) { - throw new UnsupportedOperationException("unsupported vfs version: " + version); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.virtualfilesystem_unsupported_version") + version); } final int headerSize = Byte.toUnsignedInt(localBuffer.get()); if (headerSize < 0x26) { - throw new MalformedCASCStructureException("vfs header too small"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.virtualfilesystem_header_small")); } localBuffer.limit(headerSize); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/vfs/TVFSDecoder.java b/craft3data/src/com/hiveworkshop/blizzard/casc/vfs/TVFSDecoder.java index 6a96cd605..efc9ca0a6 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/vfs/TVFSDecoder.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/vfs/TVFSDecoder.java @@ -10,6 +10,7 @@ import com.hiveworkshop.ReteraCASCUtils; import com.hiveworkshop.blizzard.casc.Key; import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Decodes file data for file value nodes. @@ -99,7 +100,7 @@ private PathNode decodeNode(final ByteBuffer pathBuffer) throws MalformedCASCStr pathBuffer.position(pathBuffer.position() - Integer.BYTES); if (containerSize > pathBuffer.remaining()) { - throw new MalformedCASCStructureException("prefix node container extends beyond path container"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_decode_node_beyond_path")); } pathBuffer.limit(pathBuffer.position() + containerSize); @@ -121,7 +122,7 @@ private PathNode decodeNode(final ByteBuffer pathBuffer) throws MalformedCASCStr node = new FileNode(pathFragments, Arrays.asList(fileReferences)); } } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("path stream goes beyond path container"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_decode_path_beyond_path")); } return node; @@ -129,7 +130,7 @@ private PathNode decodeNode(final ByteBuffer pathBuffer) throws MalformedCASCStr private StorageReference[] getFileReferences(final int fileOffset) throws MalformedCASCStructureException { if (fileOffset > logicalBuffer.limit()) { - throw new MalformedCASCStructureException("logical offset beyond file reference chunk"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_storagereference_logical_beyond_file")); } logicalBuffer.position(fileOffset); @@ -147,7 +148,7 @@ private StorageReference[] getFileReferences(final int fileOffset) throws Malfor final int cascReferenceOffset = contentsOffsetDecoder.getInt(0); if (cascReferenceOffset > storageBuffer.limit()) { - throw new MalformedCASCStructureException("storage offset beyond casc reference chunk"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_storagereference_storage_beyond_casc")); } storageBuffer.position(cascReferenceOffset); @@ -165,11 +166,11 @@ private StorageReference[] getFileReferences(final int fileOffset) throws Malfor physicalSize, actualSize); references[i] = reference; } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("storage goes out of bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_storagereference_storage_out")); } } } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("logical reference goes out of bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_storagereference_logical_out")); } return references; @@ -182,7 +183,7 @@ public TVFSFile loadFile(final ByteBuffer fileBuffer) throws IOException { if (localBuffer.remaining() < IDENTIFIER.remaining() || !localBuffer.limit(IDENTIFIER.remaining()).equals(IDENTIFIER)) { - throw new MalformedCASCStructureException("missing TVFS identifier"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_loadfile_missing_tvfs")); } // decode header @@ -193,11 +194,11 @@ public TVFSFile loadFile(final ByteBuffer fileBuffer) throws IOException { try { version = localBuffer.get(); if (version != 1) { - throw new UnsupportedOperationException("unsupported TVFS version: " + version); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.tvfsdecoder_loadfile_unsupported_version") + version); } final int headerSize = Byte.toUnsignedInt(localBuffer.get()); if (headerSize > localBuffer.capacity()) { - throw new MalformedCASCStructureException("TVFS header extends past end of file"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_loadfile_header_past_end")); } localBuffer.limit(headerSize); @@ -208,26 +209,26 @@ public TVFSFile loadFile(final ByteBuffer fileBuffer) throws IOException { pathOffset = localBuffer.getInt(); pathSize = localBuffer.getInt(); if (Integer.toUnsignedLong(pathOffset) + Integer.toUnsignedLong(pathSize) > localBuffer.capacity()) { - throw new MalformedCASCStructureException("path stream extends past end of file"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_loadfile_path_past_end")); } fileReferenceOffset = localBuffer.getInt(); fileReferenceSize = localBuffer.getInt(); if (Integer.toUnsignedLong(fileReferenceOffset) + Integer.toUnsignedLong(fileReferenceSize) > localBuffer .capacity()) { - throw new MalformedCASCStructureException("logical data extends past end of file"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_loadfile_file_reference_past_end")); } cascReferenceOffset = localBuffer.getInt(); cascReferenceSize = localBuffer.getInt(); if (Integer.toUnsignedLong(cascReferenceOffset) + Integer.toUnsignedLong(cascReferenceSize) > localBuffer .capacity()) { - throw new MalformedCASCStructureException("storage data extends past end of file"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_loadfile_logical_past_end")); } maximumPathDepth = Short.toUnsignedInt(localBuffer.getShort()); } catch (final BufferUnderflowException e) { - throw new MalformedCASCStructureException("header goes out of bounds"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.tvfsdecoder_loadfile_header_past_end")); } contentsOffsetSize = Math.max(1, Integer.BYTES - Integer.numberOfLeadingZeros(cascReferenceSize) / Byte.SIZE); diff --git a/craft3data/src/com/hiveworkshop/blizzard/casc/vfs/VirtualFileSystem.java b/craft3data/src/com/hiveworkshop/blizzard/casc/vfs/VirtualFileSystem.java index 5da0ad553..662ef1cd9 100644 --- a/craft3data/src/com/hiveworkshop/blizzard/casc/vfs/VirtualFileSystem.java +++ b/craft3data/src/com/hiveworkshop/blizzard/casc/vfs/VirtualFileSystem.java @@ -22,6 +22,7 @@ import com.hiveworkshop.blizzard.casc.nio.MalformedCASCStructureException; import com.hiveworkshop.blizzard.casc.storage.BankStream; import com.hiveworkshop.blizzard.casc.storage.Storage; +import hiveworkshop.localizationmanager.LocalizationManager; /** * High level file system API using TVFS directories to extract files from a @@ -145,12 +146,12 @@ public boolean isTVFS() { */ public ByteBuffer readFile(ByteBuffer destBuffer) throws IOException { if (!isFile()) { - throw new FileNotFoundException("result is not a file"); + throw new FileNotFoundException(LocalizationManager.getInstance().get("exception.virtualfilesystem_readfile_result_not_file")); } final long fileSize = getFileSize(); if (fileSize > Integer.MAX_VALUE) { - throw new OutOfMemoryError("file too big to process"); + throw new OutOfMemoryError(LocalizationManager.getInstance().get("error.virtualfilesystem_readfile_file_big")); } if (destBuffer == null) { @@ -168,7 +169,7 @@ public ByteBuffer readFile(ByteBuffer destBuffer) throws IOException { final long logicalSize = fileReference.getSize(); if (logicalSize != fileReference.getActualSize()) { - throw new MalformedCASCStructureException("inconsistent size"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.virtualfilesystem_readfile_inconsistent_size")); } final long logicalOffset = fileReference.getOffset(); @@ -402,7 +403,7 @@ private ByteBuffer fetchStoredBuffer(final com.hiveworkshop.blizzard.casc.Storag throws IOException { final long size = storageReference.getSize(); if (size > Integer.MAX_VALUE) { - throw new MalformedCASCStructureException("stored data too large to process"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.fetchstoredbuffer_stored_large")); } final BankStream bankStream = storage.getBanks(storageReference.getEncodingKey()); @@ -412,11 +413,11 @@ private ByteBuffer fetchStoredBuffer(final com.hiveworkshop.blizzard.casc.Storag bankStream.getBank(storedBuffer); } } catch (final BufferOverflowException e) { - throw new MalformedCASCStructureException("stored data is bigger than expected"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.fetchstoredbuffer_stored_bigger")); } if (storedBuffer.hasRemaining()) { - throw new MalformedCASCStructureException("stored data is smaller than expected"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.fetchstoredbuffer_stored_smaller")); } storedBuffer.rewind(); @@ -506,7 +507,7 @@ private void recursiveFilePathRetrieve(final byte[][] parentPathFragments, final try { tvfsFile = resolveTVFS(encodingKey); } catch(Exception e){ - System.out.println("Failed decoding tvfsFile at " + PathNode.toString(parentPathFragments) + currentNode + "."); + System.out.println(LocalizationManager.getInstance().get("println.recursivefilepathretrieve_failed_decoding") + PathNode.toString(parentPathFragments) + currentNode + "."); tvfsFile = null; } @@ -526,7 +527,7 @@ private void recursiveFilePathRetrieve(final byte[][] parentPathFragments, final resultList.add(new PathResult(currentNode, currentPathFragments)); } } else { - throw new IllegalArgumentException("unsupported node type"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.fetchstoredbuffer_unsupported")); } } @@ -608,7 +609,7 @@ private FileNode recursiveResolvePathFragments(final byte[][] pathFragments, int if (tvfsFile != null) { // TVFS file to recursively resolve if (tvfsFile.getRootNodeCount() != 1) { - throw new MalformedCASCStructureException("logic only defined for 1 TVFS root node"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.recursiveresolvepathfragments_logic_defined")); } fragmentIndex += 1; @@ -620,7 +621,7 @@ private FileNode recursiveResolvePathFragments(final byte[][] pathFragments, int } } else { - throw new IllegalArgumentException("unsupported node type"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.recursiveresolvepathfragments_unsupported")); } // file not found @@ -640,16 +641,16 @@ private FileNode recursiveResolvePathFragments(final byte[][] pathFragments, int */ public PathResult resolvePath(final byte[][] pathFragments) throws IOException { if (pathFragments.length == 0) { - throw new IllegalArgumentException("pathFragments.length must be greater than 0"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.resolvepath_greater")); } if (tvfsRoot.getRootNodeCount() != 1) { - throw new MalformedCASCStructureException("logic only defined for 1 root node"); + throw new MalformedCASCStructureException(LocalizationManager.getInstance().get("exception.resolvepath_logic_defined")); } final FileNode result = recursiveResolvePathFragments(pathFragments, 0, 0, tvfsRoot.getRootNode(0)); if (result == null) { - throw new FileNotFoundException("path not in storage"); + throw new FileNotFoundException(LocalizationManager.getInstance().get("exception.resolvepath_not_storage")); } return new PathResult(result, pathFragments); diff --git a/craft3data/src/com/hiveworkshop/json/JSONObject.java b/craft3data/src/com/hiveworkshop/json/JSONObject.java index 7768b5de9..a69d62a69 100644 --- a/craft3data/src/com/hiveworkshop/json/JSONObject.java +++ b/craft3data/src/com/hiveworkshop/json/JSONObject.java @@ -1,4 +1,5 @@ package com.hiveworkshop.json; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.Closeable; @@ -2129,7 +2130,7 @@ protected static Number stringToNumber(final String val) throws NumberFormatExce } return bi; } - throw new NumberFormatException("val ["+val+"] is not a valid number."); + throw new NumberFormatException(LocalizationManager.getInstance().get("exception.jsonobject_invalid_number_1")+val+LocalizationManager.getInstance().get("exception.jsonobject_invalid_number_2")); } /** diff --git a/craft3data/src/com/hiveworkshop/json/JSONPointer.java b/craft3data/src/com/hiveworkshop/json/JSONPointer.java index 07f781126..324040d07 100644 --- a/craft3data/src/com/hiveworkshop/json/JSONPointer.java +++ b/craft3data/src/com/hiveworkshop/json/JSONPointer.java @@ -1,4 +1,5 @@ package com.hiveworkshop.json; +import hiveworkshop.localizationmanager.LocalizationManager; import static java.lang.String.format; @@ -87,7 +88,7 @@ public JSONPointer build() { */ public Builder append(String token) { if (token == null) { - throw new NullPointerException("token cannot be null"); + throw new NullPointerException(LocalizationManager.getInstance().get("exception.jsonpointer_builder_token_not_null")); } this.refTokens.add(token); return this; @@ -138,7 +139,7 @@ public static Builder builder() { */ public JSONPointer(final String pointer) { if (pointer == null) { - throw new NullPointerException("pointer cannot be null"); + throw new NullPointerException(LocalizationManager.getInstance().get("exception.jsonpointer_builder_pointer_not_null")); } if (pointer.isEmpty() || pointer.equals("#")) { this.refTokens = Collections.emptyList(); @@ -155,7 +156,7 @@ public JSONPointer(final String pointer) { } else if (pointer.startsWith("/")) { refs = pointer.substring(1); } else { - throw new IllegalArgumentException("a JSON pointer should start with '/' or '#/'"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.jsonpointer_builder_pointer_should")); } this.refTokens = new ArrayList(); int slashIdx = -1; diff --git a/craft3data/src/com/hiveworkshop/lang/Hex.java b/craft3data/src/com/hiveworkshop/lang/Hex.java index 5517082ef..f40ec4c04 100644 --- a/craft3data/src/com/hiveworkshop/lang/Hex.java +++ b/craft3data/src/com/hiveworkshop/lang/Hex.java @@ -1,4 +1,5 @@ package com.hiveworkshop.lang; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.Arrays; @@ -52,7 +53,7 @@ public static byte[] decodeHex(final CharSequence hex) { for (int nibbleIndex = 0; nibbleIndex < nibbleCount; nibbleIndex += 1) { final byte nibble = decodeNibble(hex.charAt(nibbleIndex)); if (nibble == NO_VALUE) { - throw new NumberFormatException("non-hex character"); + throw new NumberFormatException(LocalizationManager.getInstance().get("exception.hex_decodehex_non_hex_character")); } value |= nibble << valueNibbleShift; diff --git a/craft3data/src/com/hiveworkshop/rms/editor/render3d/NGGLDP.java b/craft3data/src/com/hiveworkshop/rms/editor/render3d/NGGLDP.java index f9762c5ff..b1ac1e34a 100644 --- a/craft3data/src/com/hiveworkshop/rms/editor/render3d/NGGLDP.java +++ b/craft3data/src/com/hiveworkshop/rms/editor/render3d/NGGLDP.java @@ -287,12 +287,12 @@ public static final class SimpleDiffuseShaderPipeline implements Pipeline { " if(u_lightingEnabled != 0) {\r\n" + // " vec3 lightFactorContribution = vec3(clamp(dot(a_normal.xyz, u_lightDirection), 0.0, 1.0));\r\n" + // - " if(u_usingModelCamera != 0) {\r\n" + // - " v_color.rgb = v_color.rgb * clamp(lightFactorContribution + 0.3f, 0.0, 1.0);\r\n" + // - " } else {\r\n" + // - " v_color.rgb = v_color.rgb * clamp(lightFactorContribution * 1.3 + vec3(0.5f, 0.5f, 0.5f), 0.0, 1.0);\r\n" + " if(u_usingModelCamera != 0) {\r\n" + // + " v_color.rgb = v_color.rgb * clamp(lightFactorContribution + 0.3f, 0.0, 1.0);\r\n" + // + " } else {\r\n" + // + " v_color.rgb = v_color.rgb * clamp(lightFactorContribution * 1.3 + vec3(0.5f, 0.5f, 0.5f), 0.0, 1.0);\r\n" + // - " }\r\n" + // + " }\r\n" + // " }\r\n" + // "}\r\n\0"; private static final String fragmentShader = "#version 330 core\r\n" + // diff --git a/craft3data/src/com/hiveworkshop/wc3/casc/Cascket.java b/craft3data/src/com/hiveworkshop/wc3/casc/Cascket.java index f8752385f..44f618cdb 100644 --- a/craft3data/src/com/hiveworkshop/wc3/casc/Cascket.java +++ b/craft3data/src/com/hiveworkshop/wc3/casc/Cascket.java @@ -22,6 +22,7 @@ import com.hiveworkshop.wc3.gui.datachooser.CascDataSource; import com.hiveworkshop.wc3.mpq.Codebase; import com.hiveworkshop.wc3.user.WindowsRegistry; +import hiveworkshop.localizationmanager.LocalizationManager; /** * CASC was dangerously close to put Matrix Eater in a casket, so we named it @@ -192,13 +193,13 @@ public boolean has(String filepath) { return true; } } catch (final IOException e) { - throw new RuntimeException("CASC parser error for: " + tempFilepath, e); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.has_error") + tempFilepath, e); } } try { return rootFileSystem.isFile(filepath); } catch (final IOException e) { - throw new RuntimeException("CASC parser error for: " + filepath, e); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.has_error") + filepath, e); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/BLPHandler.java b/craft3data/src/com/hiveworkshop/wc3/gui/BLPHandler.java index 7973ba77d..12498cc31 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/BLPHandler.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/BLPHandler.java @@ -33,6 +33,7 @@ import com.hiveworkshop.wc3.mdl.Material; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.image.TgaFile; @@ -191,7 +192,7 @@ public static BufferedImage forceBufferedImagesRGB(final BufferedImage in) { return in; } if (inCS.getNumComponents() != sRGBCS.getNumComponents()) { - throw new IllegalArgumentException("Input color space has different number of components from sRGB."); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.blphandler_forcebufferedimagesrgb_color_space")); } // Draw input. @@ -217,7 +218,7 @@ public static BufferedImage forceBufferedImagesRGB(final BufferedImage in) { public static BufferedImage readCustom(final File file) throws IOException { final ImageInputStream stream = new FileImageInputStream(file); if (stream == null) { - throw new IllegalArgumentException("stream == null!"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.blphandler_readcustom_stream") + " == null!"); } final Iterator iter = ImageIO.getImageReaders(stream); @@ -307,7 +308,7 @@ public static void exportBitmapTextureFile(final Component component, final Mode final Bitmap selectedValue, final File file) { if (file.exists()) { final int confirmOption = JOptionPane.showConfirmDialog(component, - "File \"" + file.getPath() + "\" already exists. Continue?", "Confirm Export", + LocalizationManager.getInstance().get("dialog.blphandler_exportbitmaptexturefile_1") + " \"" + file.getPath() + "\" " + LocalizationManager.getInstance().get("dialog.blphandler_exportbitmaptexturefile_2"), LocalizationManager.getInstance().get("dialog.blphandler_exportbitmaptexturefile_3"), JOptionPane.YES_NO_OPTION); if (confirmOption == JOptionPane.NO_OPTION) { return; @@ -319,7 +320,7 @@ public static void exportBitmapTextureFile(final Component component, final Mode String fileExtension = file.getName().substring(file.getName().lastIndexOf('.') + 1).toUpperCase(); if (fileExtension.equals("BMP") || fileExtension.equals("JPG") || fileExtension.equals("JPEG")) { JOptionPane.showMessageDialog(component, - "Warning: Alpha channel was converted to black. Some data will be lost\nif you convert this texture back to Warcraft BLP."); + LocalizationManager.getInstance().get("dialog.blphandler_exportbitmaptexturefile_alpha_black")); bufferedImage = removeAlphaChannel(bufferedImage); } if (fileExtension.equals("BLP")) { @@ -359,7 +360,7 @@ else if (workingDirectory != null) { try { write = ImageIO.write(bufferedImage, fileExtension, file); if (!write) { - JOptionPane.showMessageDialog(component, "File type unknown or unavailable"); + JOptionPane.showMessageDialog(component, LocalizationManager.getInstance().get("dialog.blphandler_exportbitmaptexturefile_file_unknown")); } } catch (final IOException e) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/ExceptionPopup.java b/craft3data/src/com/hiveworkshop/wc3/gui/ExceptionPopup.java index e52dcc1ac..2ba8d3e4b 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/ExceptionPopup.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/ExceptionPopup.java @@ -9,6 +9,8 @@ import javax.swing.text.BadLocationException; import javax.swing.text.Document; +import hiveworkshop.localizationmanager.LocalizationManager; + public class ExceptionPopup { public static void display(final Throwable e) { @@ -20,7 +22,7 @@ public void updateStreamWith(final String s) { doc.insertString(doc.getLength(), s, null); } catch (final BadLocationException e) { - JOptionPane.showMessageDialog(null, "MDL open error popup failed to create info popup."); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.exceptionpopup_display_create_info_popup_failed")); e.printStackTrace(); } } @@ -41,7 +43,7 @@ public void write(final byte[] b) throws IOException { } }; final PrintStream ps = new PrintStream(stream); - ps.println("Unknown error occurred:"); + ps.println(LocalizationManager.getInstance().get("println.exceptionpopup_display_unknown")); e.printStackTrace(ps); JOptionPane.showMessageDialog(null, pane); } @@ -56,7 +58,7 @@ public void updateStreamWith(final String s) { doc.insertString(doc.getLength(), s, null); } catch (final BadLocationException e) { - JOptionPane.showMessageDialog(null, "MDL open error popup failed to create info popup."); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.exceptionpopup_display_create_info_popup_failed")); e.printStackTrace(); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/GUITheme.java b/craft3data/src/com/hiveworkshop/wc3/gui/GUITheme.java index b373ee85a..97ef11ba5 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/GUITheme.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/GUITheme.java @@ -1,9 +1,20 @@ package com.hiveworkshop.wc3.gui; +import hiveworkshop.localizationmanager.LocalizationManager; public enum GUITheme { - FOREST_GREEN("Forest Green"), DARK("Noire"), WINDOWS("Windows"), WINDOWS_CLASSIC("Windows Classic"), - SOFT_GRAY("Soft Gray"), JAVA_DEFAULT("Java Default"), BLUE_ICE("Blue Ice"), DARK_BLUE_GREEN("Dark Blue-Green"), - GRAY("Gray"), HIFI("HiFi"), ACRYL("Acryl"), ALUMINIUM("Aluminium"), DEMONIC_MEME("DemonicMeme"); + FOREST_GREEN(LocalizationManager.getInstance().get("string.guitheme_guitheme_forest_green")), + DARK(LocalizationManager.getInstance().get("string.guitheme_guitheme_noire")), + WINDOWS(LocalizationManager.getInstance().get("string.guitheme_guitheme_windows")), + WINDOWS_CLASSIC(LocalizationManager.getInstance().get("string.guitheme_guitheme_windows_lassic")), + SOFT_GRAY(LocalizationManager.getInstance().get("string.guitheme_guitheme_soft_gray")), + JAVA_DEFAULT(LocalizationManager.getInstance().get("string.guitheme_guitheme_java_default")), + BLUE_ICE(LocalizationManager.getInstance().get("string.guitheme_guitheme_blue_ice")), + DARK_BLUE_GREEN(LocalizationManager.getInstance().get("string.guitheme_guitheme_dark_blue_green")), + GRAY(LocalizationManager.getInstance().get("string.guitheme_guitheme_gray")), + HIFI(LocalizationManager.getInstance().get("string.guitheme_guitheme_hifi")), + ACRYL(LocalizationManager.getInstance().get("string.guitheme_guitheme_acryl")), + ALUMINIUM(LocalizationManager.getInstance().get("string.guitheme_guitheme_aluminium")), + DEMONIC_MEME(LocalizationManager.getInstance().get("string.guitheme_guitheme_demonicmeme")); private String displayName; diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/OldBLPHandler.java b/craft3data/src/com/hiveworkshop/wc3/gui/OldBLPHandler.java index e39298f09..d220ac506 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/OldBLPHandler.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/OldBLPHandler.java @@ -22,6 +22,7 @@ import javax.imageio.stream.ImageInputStream; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.image.TgaFile; @@ -69,8 +70,9 @@ public BufferedImage getTexture(final String workingDirectory, final String file // throw new RuntimeException("Failed to load game texture: " + filepath + " (in " + workingDirectory + ")"); } catch (final Exception exc2) { - throw new RuntimeException("Failed to load game texture: " + filepath + " (in " + workingDirectory + ")", - exc2); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.oldblphandler_getTexture_failed_load_texture_1") + + filepath + " (" + LocalizationManager.getInstance().get("exception.oldblphandler_getTexture_failed_load_texture_2") + workingDirectory + ")", + exc2); } } @@ -93,7 +95,7 @@ public static BufferedImage forceBufferedImagesRGB(final BufferedImage in) { return in; } if (inCS.getNumComponents() != sRGBCS.getNumComponents()) { - throw new IllegalArgumentException("Input color space has different number of components from sRGB."); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.oldblphandler_forcebufferedimagesrgb_color_different")); } // Draw input. @@ -188,7 +190,7 @@ public BufferedImage getGameTex(final String filepath) { public static BufferedImage readCustom(final File file) throws IOException { final ImageInputStream stream = new FileImageInputStream(file); if (stream == null) { - throw new IllegalArgumentException("stream == null!"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.oldblphandler_readcustom_stream") + " == null!"); } final Iterator iter = ImageIO.getImageReaders(stream); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/NodeAnimationModelEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/NodeAnimationModelEditor.java index b23a3f8e1..9fd8383b3 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/NodeAnimationModelEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/NodeAnimationModelEditor.java @@ -65,6 +65,7 @@ import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.timelines.InterpolationType; import com.hiveworkshop.wc3.mdl.v2.visitor.IdObjectVisitor; +import hiveworkshop.localizationmanager.LocalizationManager; public class NodeAnimationModelEditor extends AbstractSelectingEditor { private final ProgramPreferences programPreferences; @@ -88,22 +89,22 @@ public NodeAnimationModelEditor(final ModelView model, final ProgramPreferences @Override public UndoAction autoCenterSelectedBones() { - throw new WrongModeException("Unable to autocenter bones in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_autocenterselectedbones")); } @Override public UndoAction setSelectedBoneName(final String name) { - throw new WrongModeException("Unable to change bone names in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_setselectedbonename")); } @Override public UndoAction addSelectedBoneSuffix(final String name) { - throw new WrongModeException("Unable to change bone names in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_setselectedbonesuffix")); } @Override public UndoAction addTeamColor() { - throw new WrongModeException("Unable to add team color in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_addteamcolor")); } @Override @@ -180,7 +181,7 @@ public void attachment(final Attachment attachment) { @Override public UndoAction expandSelection() { - throw new WrongModeException("Unable to expand selection in Node Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("setselection.nodeanimationmodeleditor_invertselection")); } @Override @@ -191,7 +192,7 @@ public UndoAction invertSelection() { toggleSelection(invertedSelection, node); } selectionManager.setSelection(invertedSelection); - return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, "invert selection"); + return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("setselection.invertselection_invert")); } private void toggleSelection(final Set selection, final IdObject position) { @@ -211,7 +212,7 @@ public UndoAction selectAll() { allSelection.add(node); } selectionManager.setSelection(allSelection); - return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select all"); + return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("setselection.nodeanimationmodeleditor_selectall")); } @Override @@ -219,7 +220,7 @@ public UndoAction selectHDUnusedNodes() { final ArrayList oldSelection = new ArrayList<>(selectionManager.getSelection()); final Set allSelection = new HashSet<>(); selectionManager.setSelection(allSelection); - return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select HD unused"); + return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("setselection.selecthdunusednodes_unused")); } @Override @@ -403,7 +404,7 @@ public void collisionShape(final CollisionShape collisionShape) { @Override public void camera(final Camera camera) { - System.err.println("CAMERA processed in NodeAnimationModelEditor!!!"); + System.err.println(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_selectionatpointttester")); // if (hitTest(camera.getPosition(), CoordinateSystem.Util.geom(axes, point), // axes, // programPreferences.getVertexSize(), worldMatrix)) { @@ -511,7 +512,7 @@ public void collisionShape(final CollisionShape collisionShape) { @Override public void camera(final Camera camera) { - System.err.println("Attempted to process camera with Node Animation Editor generic selector!!!"); + System.err.println(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_genericselectorvisitor")); } @Override @@ -532,92 +533,92 @@ public void attachment(final Attachment attachment) { @Override public CopiedModelData copySelection() { - throw new WrongModeException("Unable to copy selection in animation editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_copyselection")); } @Override public UndoAction deleteSelectedComponents() { - throw new WrongModeException("Unable to delete selection in animation editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_deleteselectedcomponents")); } @Override public UndoAction setMatrix(final Collection bones) { - throw new WrongModeException("Unable to set Matrix in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_setmatrix")); } @Override public UndoAction snapNormals() { - throw new WrongModeException("Unable to modify normals in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_snapnormals")); } @Override public UndoAction recalcNormals() { - throw new WrongModeException("Unable to modify normals in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_recalcnormals")); } @Override public UndoAction recalcExtents(final boolean onlyIncludeEditableGeosets) { - throw new WrongModeException("Unable to modify extents in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_recalcextents")); } @Override public UndoAction mirror(final byte dim, final boolean flipModel, final double centerX, final double centerY, final double centerZ) { - throw new WrongModeException("Mirror has not yet been coded in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_mirror")); } @Override public UndoAction flipSelectedFaces() { - throw new WrongModeException("Unable to flip faces in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_flipselectedfaces")); } @Override public UndoAction flipSelectedNormals() { - throw new WrongModeException("Unable to flip normals in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_flipselectednormals")); } @Override public UndoAction snapSelectedVertices() { - throw new WrongModeException("Unable to snap vertices in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_snapselectedvertices")); } @Override public UndoAction snapSelectedNormals() { - throw new WrongModeException("Unable to modify normals in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_snapselectednormals")); } @Override public UndoAction beginExtrudingSelection() { - throw new WrongModeException("Unable to extrude in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_beginextrudingselection")); } @Override public UndoAction beginExtendingSelection() { - throw new WrongModeException("Unable to extrude in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_beginextendingselection")); } @Override public CloneAction cloneSelectedComponents(final ClonedNodeNamePicker clonedNodeNamePicker) { - throw new WrongModeException("Unable to clone components in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_cloneselectedcomponents")); } @Override public UndoAction addVertex(final double x, final double y, final double z, final Vertex preferredNormalFacingVector) { - throw new WrongModeException("Unable to add vertices in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_addvertex")); } @Override public GenericMoveAction addPlane(final double x, final double y, final double x2, final double y2, final byte dim1, final byte dim2, final Vertex facingVector, final int numberOfWidthSegments, final int numberOfHeightSegments) { - throw new WrongModeException("Unable to add plane in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_addplane")); } @Override public void rawScale(final double centerX, final double centerY, final double centerZ, final double scaleX, final double scaleY, final double scaleZ) { - throw new UnsupportedOperationException("Unable to scale directly in animation mode, use other system"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_rawscale")); } public void rawScale(final double centerX, final double centerY, final double centerZ, final double scaleX, @@ -646,7 +647,7 @@ public void rawTranslate(final double x, final double y, final double z, @Override public void rawRotate2d(final double centerX, final double centerY, final double centerZ, final double radians, final byte firstXYZ, final byte secondXYZ) { - throw new UnsupportedOperationException("Unable to rotate directly in animation mode, use other system"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_rawrotate2d")); } public void rawRotate2d(final double centerX, final double centerY, final double centerZ, final double radians, @@ -875,19 +876,19 @@ public UndoAction createKeyframe(final ModelEditorActionType actionType) { @Override public UndoAction createFaceFromSelection(final Vertex preferredFacingVector) { - throw new WrongModeException("Unable to create face in animation editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_createfacefromselection")); } @Override public GenericMoveAction addBox(final double x, final double y, final double x2, final double y2, final byte dim1, final byte dim2, final Vertex facingVector, final int numberOfLengthSegments, final int numberOfWidthSegments, final int numberOfHeightSegments) { - throw new WrongModeException("Unable to create box in animation editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_addbox")); } @Override public UndoAction splitGeoset() { - throw new WrongModeException("Unable to split geoset in animation editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_splitgeoset")); } @Override @@ -933,27 +934,27 @@ public GenericRotateAction beginSquatTool(final double centerX, final double cen @Override public UndoAction setParent(final IdObject node) { - throw new WrongModeException("Can't set parent in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_setparent")); } @Override public UndoAction reLinkRFBone(IdObject node) { - throw new WrongModeException("Can't set parent in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_reLinkrfbone")); } @Override public RigAction rig() { - throw new WrongModeException("Unable to rig in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_rig")); } @Override public UndoAction addBone(final double x, final double y, final double z) { - throw new WrongModeException("Unable to add bone in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_addbone")); } @Override public UndoAction deleteDownToOneTVerticesLayer() { - throw new WrongModeException("Unable to delete mesh in Animation Editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.nodeanimationmodeleditor_deletedowntoonetverticeslayer")); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeBoundChooserPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeBoundChooserPanel.java index 246880c91..a40683dd2 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeBoundChooserPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeBoundChooserPanel.java @@ -33,6 +33,7 @@ import com.hiveworkshop.wc3.mdl.EventObject; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.util.Callback; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -97,11 +98,11 @@ public void stateChanged(final ChangeEvent e) { } }; - animationTimeButton = new JRadioButton("Animation Sequence"); + animationTimeButton = new JRadioButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_animationtime")); // animationTimeButton.addChangeListener(buttonStatesChangeListener); - customTimeButton = new JRadioButton("Custom Time"); + customTimeButton = new JRadioButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_customtime")); // customTimeButton.addChangeListener(buttonStatesChangeListener); - globalSequencesButton = new JRadioButton("Global Sequence"); + globalSequencesButton = new JRadioButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_globalsequences")); // globalSequencesButton.addChangeListener(buttonStatesChangeListener); buttonGroup = new ButtonGroup(); buttonGroup.add(animationTimeButton); @@ -109,8 +110,8 @@ public void stateChanged(final ChangeEvent e) { buttonGroup.add(globalSequencesButton); timeStart = new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1)); timeEnd = new JSpinner(new SpinnerNumberModel(1000, 0, Integer.MAX_VALUE, 1)); - startLabel = new JLabel("Start:"); - endLabel = new JLabel("End:"); + startLabel = new JLabel(LocalizationManager.getInstance().get("label.timeboundchooserpanel_start")); + endLabel = new JLabel(LocalizationManager.getInstance().get("label.timeboundchooserpanel_end")); animationScrollPane = new JScrollPane(animationBox); globalSeqScrollPane = new JScrollPane(globalSeqBox); @@ -138,14 +139,16 @@ public void stateChanged(final ChangeEvent e) { animationScrollPane.setPreferredSize(new Dimension(640, 320)); globalSeqScrollPane.setPreferredSize(new Dimension(640, 320)); animationPanel.add(animationScrollPane, "cell 0 0 5 12"); - final JButton createAnimation = new JButton("Create"); - final JButton duplicateAnimation = new JButton("Duplicate"); + final JButton createAnimation = new JButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_createanimation")); + final JButton duplicateAnimation = new JButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_duplicateanimation")); duplicateAnimation.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { final Animation selectedAnimation = animationBox.getSelectedValue(); final String userChosenName = JOptionPane.showInputDialog(TimeBoundChooserPanel.this, - "Choose new animation name:", selectedAnimation.getName() + " Second"); + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_userchosenname_1"), + selectedAnimation.getName() + + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_userchosenname_2")); if (userChosenName != null) { final Animation copyAnimation = new Animation(selectedAnimation); final Animation lastAnim = modelView.getModel().getAnim(modelView.getModel().getAnimsSize() - 1); @@ -161,8 +164,8 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JButton deleteAnimation = new JButton("Delete"); - final JButton editAnimation = new JButton("Edit"); + final JButton deleteAnimation = new JButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_deleteanimation")); + final JButton editAnimation = new JButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_editanimation")); editAnimation.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -178,9 +181,9 @@ public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) { final JPanel createAnimQuestionPanel = new JPanel(); final JTextField nameField = new JTextField(24); - final JRadioButton lengthButton = new JRadioButton("Length"); + final JRadioButton lengthButton = new JRadioButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_length")); final JSpinner newAnimLength = new JSpinner(new SpinnerNumberModel(1000, 0, Integer.MAX_VALUE, 1)); - final JRadioButton timeRangeButton = new JRadioButton("Time Range"); + final JRadioButton timeRangeButton = new JRadioButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_timerange")); final Animation lastAnimation = modelView.getModel().getAnimsSize() == 0 ? null : modelView.getModel().getAnim(modelView.getModel().getAnimsSize() - 1); final int lastAnimationEnd = lastAnimation == null ? 0 : lastAnimation.getEnd(); @@ -222,33 +225,33 @@ public void actionPerformed(final ActionEvent e) { }); timeRangeButton.addActionListener(actions); createAnimQuestionPanel.setLayout(new MigLayout()); - createAnimQuestionPanel.add(new JLabel("Name: "), "cell 0 0"); + createAnimQuestionPanel.add(new JLabel(LocalizationManager.getInstance().get("label.timeboundchooserpanel_createanim_name")), "cell 0 0"); createAnimQuestionPanel.add(nameField, "cell 1 0"); createAnimQuestionPanel.add(lengthButton, "cell 0 1"); - createAnimQuestionPanel.add(new JLabel("Length: "), "cell 0 2"); + createAnimQuestionPanel.add(new JLabel(LocalizationManager.getInstance().get("label.timeboundchooserpanel_createanim_length")), "cell 0 2"); createAnimQuestionPanel.add(newAnimLength, "cell 1 2"); createAnimQuestionPanel.add(timeRangeButton, "cell 0 3"); - createAnimQuestionPanel.add(new JLabel("Start: "), "cell 0 4"); + createAnimQuestionPanel.add(new JLabel(LocalizationManager.getInstance().get("label.timeboundchooserpanel_createanim_start")), "cell 0 4"); createAnimQuestionPanel.add(newAnimTimeStart, "cell 1 4"); - createAnimQuestionPanel.add(new JLabel("End: "), "cell 2 4"); + createAnimQuestionPanel.add(new JLabel(LocalizationManager.getInstance().get("label.timeboundchooserpanel_createanim_end")), "cell 2 4"); createAnimQuestionPanel.add(newAnimTimeEnd, "cell 3 4"); final JPanel extraProperties = new JPanel(); createAnimQuestionPanel.add(extraProperties, "cell 0 5"); final JSpinner rarityChooser = new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1)); final JSpinner moveSpeedChooser = new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1)); - extraProperties.setBorder(BorderFactory.createTitledBorder("Misc")); + extraProperties.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("border.timeboundchooserpanel_extraproperties_misc"))); extraProperties.setLayout(new MigLayout()); - final JCheckBox nonLoopingChooser = new JCheckBox("NonLooping"); + final JCheckBox nonLoopingChooser = new JCheckBox(LocalizationManager.getInstance().get("checkbox.timeboundchooserpanel_nonloopingchooser_nonlooping")); extraProperties.add(nonLoopingChooser, "cell 0 0"); - extraProperties.add(new JLabel("Rarity"), "cell 0 1"); + extraProperties.add(new JLabel(LocalizationManager.getInstance().get("label.timeboundchooserpanel_extraproperties_rarity")), "cell 0 1"); extraProperties.add(rarityChooser, "cell 1 1"); - extraProperties.add(new JLabel("MoveSpeed"), "cell 0 2"); + extraProperties.add(new JLabel(LocalizationManager.getInstance().get("label.timeboundchooserpanel_extraproperties_movespeed")), "cell 0 2"); extraProperties.add(moveSpeedChooser, "cell 1 2"); lengthButton.doClick(); final int result = JOptionPane.showConfirmDialog(TimeBoundChooserPanel.this, createAnimQuestionPanel, - "Create Animation", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_result_create_animation"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (result == JOptionPane.OK_OPTION) { final Animation newAnimation = new Animation(nameField.getText(), ((Number) newAnimTimeStart.getValue()).intValue(), @@ -274,8 +277,8 @@ public void actionPerformed(final ActionEvent e) { deleteAnimation.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - final int result = JOptionPane.showConfirmDialog(TimeBoundChooserPanel.this, "Also delete keyframes?", - "Delete Animation", JOptionPane.YES_NO_CANCEL_OPTION); + final int result = JOptionPane.showConfirmDialog(TimeBoundChooserPanel.this, LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_deleteanimation_actionperformed_1"), + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_deleteanimation_actionperformed_2"), JOptionPane.YES_NO_CANCEL_OPTION); final Animation selectedValue = animationBox.getSelectedValue(); if (result == JOptionPane.YES_OPTION) { // del keys @@ -302,21 +305,21 @@ public void actionPerformed(final ActionEvent e) { customTimePanel.add(timeEnd, "cell 3 0"); tabs.addTab("Custom Time", customTimePanel); final JPanel globSeq = new JPanel(new MigLayout()); - final JButton createGlobalSeq = new JButton("Create"); + final JButton createGlobalSeq = new JButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_createglobalseq")); createGlobalSeq.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { final SpinnerNumberModel sModel = new SpinnerNumberModel(1000, 1, Integer.MAX_VALUE, 1); final JSpinner spinner = new JSpinner(sModel); final int userChoice = JOptionPane.showConfirmDialog(TimeBoundChooserPanel.this, spinner, - "Enter Length", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_createglobalseq_userchoice"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (userChoice != JOptionPane.OK_OPTION) { return; } if (globalSeqs.contains(spinner.getValue())) { JOptionPane.showMessageDialog(TimeBoundChooserPanel.this, - "A Global Sequence with that length already exists.\nThis program does not support multiple Global Sequences of the same length.\nInstead, simply add animation data to the sequence of that length which already exists.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_createglobalseq_globalseqs_1"), + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_createglobalseq_globalseqs_2"), JOptionPane.ERROR_MESSAGE); } else { globalSeqs.addElement((Integer) spinner.getValue()); @@ -324,12 +327,13 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JButton deleteGlobalSeq = new JButton("Delete"); + final JButton deleteGlobalSeq = new JButton(LocalizationManager.getInstance().get("button.timeboundchooserpanel_deleteglobalseq")); deleteGlobalSeq.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { final int result = JOptionPane.showConfirmDialog(TimeBoundChooserPanel.this, - "Also delete linked timelines and their keyframes?", "Delete Animation", + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_deleteglobalseq_result_1"), + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_deleteglobalseq_result_2"), JOptionPane.YES_NO_CANCEL_OPTION); final Integer selectedValue = globalSeqBox.getSelectedValue(); if (result == JOptionPane.YES_OPTION) { @@ -368,8 +372,10 @@ else if (tabs.getSelectedIndex() == 2) { timeEnvironmentImpl.setGlobalSeq(selectedValue); } else { - JOptionPane.showMessageDialog(this, "You didn't select a global sequence!", "Error", - JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_applyto_timeenvironmentimpl_1"), + LocalizationManager.getInstance().get("dialog.timeboundchooserpanel_applyto_timeenvironmentimpl_2"), + JOptionPane.ERROR_MESSAGE); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeSliderPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeSliderPanel.java index d8416003a..0387e9f23 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeSliderPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeSliderPanel.java @@ -68,6 +68,7 @@ import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.TimelineContainer; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class TimeSliderPanel extends JPanel implements TimeBoundChangeListener, SelectionListener { private static final Color GLASS_TICK_COVER_COLOR = new Color(100, 190, 255, 100); @@ -192,7 +193,7 @@ public void run() { timeIndicator.setEnabled(false); popupMenu.add(timeIndicator); popupMenu.addSeparator(); - final JMenuItem deleteAll = new JMenuItem("Delete All"); + final JMenuItem deleteAll = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_deleteall")); deleteAll.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -202,7 +203,7 @@ public void actionPerformed(final ActionEvent e) { }); popupMenu.add(deleteAll); popupMenu.addSeparator(); - final JMenuItem cutItem = new JMenuItem("Cut"); + final JMenuItem cutItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_cut")); cutItem.addActionListener(new ActionListener() { @Override @@ -213,7 +214,7 @@ public void actionPerformed(final ActionEvent e) { } }); popupMenu.add(cutItem); - final JMenuItem copyItem = new JMenuItem("Copy"); + final JMenuItem copyItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_copy")); copyItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -221,7 +222,7 @@ public void actionPerformed(final ActionEvent e) { } }); popupMenu.add(copyItem); - final JMenuItem copyFrameItem = new JMenuItem("Copy Frame (whole model)"); + final JMenuItem copyFrameItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_copyframe")); copyFrameItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -229,7 +230,7 @@ public void actionPerformed(final ActionEvent e) { } }); popupMenu.add(copyFrameItem); - final JMenuItem pasteItem = new JMenuItem("Paste"); + final JMenuItem pasteItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_paste")); pasteItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent ae) { @@ -245,7 +246,7 @@ public void actionPerformed(final ActionEvent ae) { && flag.getTimes().get(flooredTimeIndex).equals(timeAndKey.getKey())) { final JMenu subMenu = new JMenu(object.getName() + ": " + flag.getName()); popupMenu.add(subMenu); - final JMenuItem deleteSpecificItem = new JMenuItem("Delete"); + final JMenuItem deleteSpecificItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_delete")); deleteSpecificItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -255,7 +256,7 @@ public void actionPerformed(final ActionEvent e) { }); subMenu.add(deleteSpecificItem); subMenu.addSeparator(); - final JMenuItem cutSpecificItem = new JMenuItem("Cut"); + final JMenuItem cutSpecificItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_cut_specific")); cutSpecificItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -266,7 +267,7 @@ public void actionPerformed(final ActionEvent e) { } }); subMenu.add(cutSpecificItem); - final JMenuItem copySpecificItem = new JMenuItem("Copy"); + final JMenuItem copySpecificItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_copy_specific")); copySpecificItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -275,7 +276,7 @@ public void actionPerformed(final ActionEvent e) { } }); subMenu.add(copySpecificItem); - final JMenuItem pasteSpecificItem = new JMenuItem("Paste"); + final JMenuItem pasteSpecificItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_paste_specific")); pasteSpecificItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -296,7 +297,7 @@ public void actionPerformed(final ActionEvent e) { timeIndicator.setEnabled(false); popupMenu.add(timeIndicator); popupMenu.addSeparator(); - final JMenuItem copyItem = new JMenuItem("Copy"); + final JMenuItem copyItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_copy")); copyItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -304,7 +305,7 @@ public void actionPerformed(final ActionEvent e) { } }); popupMenu.add(copyItem); - final JMenuItem copyFrameItem = new JMenuItem("Copy Frame (whole model)"); + final JMenuItem copyFrameItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_copyframe")); copyFrameItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -312,7 +313,7 @@ public void actionPerformed(final ActionEvent e) { } }); popupMenu.add(copyFrameItem); - final JMenuItem pasteItem = new JMenuItem("Paste"); + final JMenuItem pasteItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.timesliderpanel_paste")); pasteItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent ae) { @@ -1203,7 +1204,7 @@ public void run() { } if (!foundCopiedMatch) { JOptionPane.showMessageDialog(TimeSliderPanel.this, - "Tell Retera to code in the ability to paste cross-node data!"); + LocalizationManager.getInstance().get("dialog.timesliderpanel_pastetospecifictimeline")); } revalidateKeyframeDisplay(); } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TSpline.java b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TSpline.java index 5dcc64036..7f1b4e71a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TSpline.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TSpline.java @@ -13,6 +13,7 @@ import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.QuaternionRotation; import com.hiveworkshop.wc3.mdl.v2.timelines.InterpolationType; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -33,19 +34,19 @@ public TSpline(final TTan der) { // der.next = new AnimFlag.Entry(null, null); // der.prev = new AnimFlag.Entry(null, null); // der.tang = new AnimFlag.Entry(null, null); - add(new JLabel("Curve properties"), "growx"); + add(new JLabel(LocalizationManager.getInstance().get("label.tspline_curve_properties")), "growx"); add(new JButton("-"), "wrap"); curveRenderer = new CurveRenderer(); curveRenderer.setBackground(Color.WHITE); add(curveRenderer, "wrap"); - add(new JLabel("Tension:"), "growx"); + add(new JLabel(LocalizationManager.getInstance().get("label.tspline_tension")), "growx"); tensionSpinner = new JSpinner(new SpinnerNumberModel(0.0, Long.MIN_VALUE, Long.MAX_VALUE, 0.01)); add(tensionSpinner, "wrap"); - add(new JLabel("Continuity:"), "growx"); + add(new JLabel(LocalizationManager.getInstance().get("label.tspline_continuity")), "growx"); continuitySpinner = new JSpinner(new SpinnerNumberModel(0.0, Long.MIN_VALUE, Long.MAX_VALUE, 0.01)); add(continuitySpinner, "wrap"); - add(new JLabel("Bias:"), "growx"); + add(new JLabel(LocalizationManager.getInstance().get("label.tspline_bias")), "growx"); biasSpinner = new JSpinner(new SpinnerNumberModel(0.0, Long.MIN_VALUE, Long.MAX_VALUE, 0.01)); add(biasSpinner, "wrap"); } @@ -119,7 +120,7 @@ public void setTCB(final float tension, final float continuity, final float bias } throw new UnsupportedOperationException( - "Not finished here, need to have shared access to storing keyframe data and UndoManager"); + LocalizationManager.getInstance().get("exception.settcb_not_finished")); } private final class CurveRenderer extends JPanel { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TTan.java b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TTan.java index b71718c52..92b9899b7 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TTan.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TTan.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.QuaternionRotation; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Aiming to copy some behaviors from Mdlvis with this @@ -241,7 +242,7 @@ public static Object assignSubscript(final Object value, final int index, final ((QuaternionRotation) value).setCoord((byte) index, ((Number) newValue).doubleValue()); return value; } - throw new IllegalArgumentException("Unknown subscripting (set): " + value + ", " + index + ", " + newValue); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.assignsubscript_unknown") + value + ", " + index + ", " + newValue); } public static Number getSubscript(final Object value, final int index) { @@ -252,7 +253,7 @@ public static Number getSubscript(final Object value, final int index) { } else if (value instanceof QuaternionRotation) { return ((QuaternionRotation) value).getCoord((byte) index); } - throw new IllegalArgumentException("Unknown subscripting (get): " + value + ", " + index); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.getsubscript_unknown") + value + ", " + index); } private static void getInverseQuaternion(final QuaternionRotation qsrc, final QuaternionRotation qdest) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/CascDataSource.java b/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/CascDataSource.java index 7e56157f7..fea76023d 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/CascDataSource.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/CascDataSource.java @@ -19,6 +19,7 @@ import com.hiveworkshop.json.JSONArray; import com.hiveworkshop.json.JSONObject; import com.hiveworkshop.json.JSONTokener; +import hiveworkshop.localizationmanager.LocalizationManager; public class CascDataSource implements DataSource { private final String[] prefixes; @@ -106,7 +107,7 @@ private InputStream internalGetResourceAsStream(final String tempFilepath) { return new ByteArrayInputStream(data); } } catch (final IOException e) { - throw new RuntimeException("CASC parser error for: " + tempFilepath, e); + throw new RuntimeException(LocalizationManager.getInstance().get("dialog.cascdatasource_internalgetresourceasstream") + tempFilepath, e); } return null; } @@ -135,7 +136,7 @@ private ByteBuffer internalRead(final String tempFilepath) { return buffer; } } catch (final IOException e) { - throw new RuntimeException("CASC parser error for: " + tempFilepath, e); + throw new RuntimeException(LocalizationManager.getInstance().get("dialog.cascdatasource_internalread") + tempFilepath, e); } return null; } @@ -177,7 +178,7 @@ private File internalGetFile(final String tempFilepath) { return tempProduct; } } catch (final IOException e) { - throw new RuntimeException("CASC parser error for: " + tempFilepath, e); + throw new RuntimeException(LocalizationManager.getInstance().get("dialog.cascdatasource_internalgetfile") + tempFilepath, e); } return null; } @@ -196,13 +197,13 @@ public boolean has(String filepath) { return true; } } catch (final IOException e) { - throw new RuntimeException("CASC parser error for: " + tempFilepath, e); + throw new RuntimeException(LocalizationManager.getInstance().get("dialog.cascdatasource_has_1") + tempFilepath, e); } } try { return rootFileSystem.isFile(filepath); } catch (final IOException e) { - throw new RuntimeException("CASC parser error for: " + filepath, e); + throw new RuntimeException(LocalizationManager.getInstance().get("dialog.cascdatasource_has_2") + filepath, e); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/DataSourceChooserPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/DataSourceChooserPanel.java index 6b4e62a58..03f9c160a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/DataSourceChooserPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/DataSourceChooserPanel.java @@ -64,6 +64,7 @@ import com.jtattoo.plaf.aluminium.AluminiumLookAndFeel; import com.jtattoo.plaf.hifi.HiFiLookAndFeel; import com.jtattoo.plaf.noire.NoireLookAndFeel; +import hiveworkshop.localizationmanager.LocalizationManager; public class DataSourceChooserPanel extends JPanel { private static final ImageIcon CASCIcon = RMSIcons.loadDataSourceImageIcon("CASC.png"); @@ -97,7 +98,7 @@ public DataSourceChooserPanel(final List dataSourceDescrip fileChooser.setCurrentDirectory(new File(wcDirectory)); } - final JButton clearList = new JButton("Clear All"); + final JButton clearList = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_clear_list")); clearList.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -105,7 +106,7 @@ public void actionPerformed(final ActionEvent e) { reloadTree(); } }); - final JButton addWarcraft3Installation = new JButton("Add War3 Install Directory"); + final JButton addWarcraft3Installation = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_add_war3_install")); addWarcraft3Installation.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -123,7 +124,7 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JButton addDefaultCascPrefixes = new JButton("Add Default CASC Mod"); + final JButton addDefaultCascPrefixes = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_add_default_casc")); addDefaultCascPrefixes.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -143,7 +144,7 @@ public void actionPerformed(final ActionEvent e) { } }); addDefaultCascPrefixes.setEnabled(false); - final JButton addSpecificCascPrefix = new JButton("Add Specific CASC Mod"); + final JButton addSpecificCascPrefix = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_add_specific_casc")); addSpecificCascPrefix.setEnabled(false); addSpecificCascPrefix.addActionListener(new ActionListener() { @Override @@ -170,7 +171,7 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JButton deleteSelection = new JButton("Delete Selection"); + final JButton deleteSelection = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_delete_selection")); deleteSelection.addActionListener(new ActionListener() { @Override @@ -202,7 +203,7 @@ public void actionPerformed(final ActionEvent e) { } }); deleteSelection.setEnabled(false); - final JButton moveSelectionUp = new JButton("Move Up"); + final JButton moveSelectionUp = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_move_up")); moveSelectionUp.addActionListener(new ActionListener() { @Override @@ -244,7 +245,7 @@ public void actionPerformed(final ActionEvent e) { } }); moveSelectionUp.setEnabled(false); - final JButton moveSelectionDown = new JButton("Move Down"); + final JButton moveSelectionDown = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_move_down")); moveSelectionDown.addActionListener(new ActionListener() { @Override @@ -287,7 +288,7 @@ public void actionPerformed(final ActionEvent e) { } }); moveSelectionDown.setEnabled(false); - final JButton enterHDMode = new JButton("Reforged Graphics Mode"); + final JButton enterHDMode = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_reforged_hd")); enterHDMode.addActionListener(new ActionListener() { @Override @@ -295,7 +296,7 @@ public void actionPerformed(final ActionEvent e) { enterHDMode(); } }); - final JButton enterSDMode = new JButton("Classic Graphics Mode"); + final JButton enterSDMode = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_classic_mode")); enterSDMode.addActionListener(new ActionListener() { @Override @@ -303,7 +304,7 @@ public void actionPerformed(final ActionEvent e) { enterSDMode(); } }); - final JButton enterHD2Mode = new JButton("Reforged2 Graphics Mode"); + final JButton enterHD2Mode = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_reforged_hd2_mode")); enterHD2Mode.addActionListener(new ActionListener() { @Override @@ -311,7 +312,7 @@ public void actionPerformed(final ActionEvent e) { enterHD2Mode(); } }); - final JButton enterSD2Mode = new JButton("Classic2 Graphics Mode"); + final JButton enterSD2Mode = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_classic2_mode")); enterSD2Mode.addActionListener(new ActionListener() { @Override @@ -319,7 +320,7 @@ public void actionPerformed(final ActionEvent e) { enterSD2Mode(); } }); - final JButton resetAllToDefaults = new JButton("Reset to Defaults"); + final JButton resetAllToDefaults = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_reset_defaults")); resetAllToDefaults.addActionListener(new ActionListener() { @Override @@ -327,7 +328,7 @@ public void actionPerformed(final ActionEvent e) { loadDefaults(null); } }); - final JButton addCASCButton = new JButton("Add CASC"); + final JButton addCASCButton = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_add_casc")); addCASCButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -339,9 +340,14 @@ public void actionPerformed(final ActionEvent e) { if (selectedFile != null) { CascDataSource.Product product = Product.WARCRAFT_III; final int optionChoice = JOptionPane.showOptionDialog(DataSourceChooserPanel.this, - "Choose version", "Version", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, - null, new Object[] { "Warcraft III", "Warcraft III Public Test" }, - "Warcraft III Public Test"); + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addCASC_choose_version_1"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addCASC_choose_version_2"), + JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, + new Object[] { + "Warcraft III", + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addCASC_public_test") + }, + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addCASC_public_test")); if ((optionChoice < 0) || (optionChoice > 1)) { return; } @@ -356,11 +362,11 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JButton addMPQButton = new JButton("Add MPQ"); + final JButton addMPQButton = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_add_mpq")); addMPQButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - fileChooser.setFileFilter(new FileNameExtensionFilter("MPQ Archive File", "mpq", "w3x", "w3m")); + fileChooser.setFileFilter(new FileNameExtensionFilter(LocalizationManager.getInstance().get("extensionfilter.datasourcechooserpanel_addmpq"), "mpq", "w3x", "w3m")); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); final int result = fileChooser.showOpenDialog(DataSourceChooserPanel.this); if (result == JFileChooser.APPROVE_OPTION) { @@ -372,7 +378,7 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JButton addFolderButton = new JButton("Add Folder"); + final JButton addFolderButton = new JButton(LocalizationManager.getInstance().get("button.datasourcechooserpanel_add_folder")); addFolderButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -394,8 +400,8 @@ public void actionPerformed(final ActionEvent e) { separatorLabel2.setAlignmentX(JLabel.CENTER_ALIGNMENT); final JLabel separatorLabelLeftHandSide = new JLabel("-----"); separatorLabelLeftHandSide.setAlignmentX(JLabel.CENTER_ALIGNMENT); - final JLabel warcraft3InstallLocated = new JLabel("'Path' Registry Key: "); - final JLabel warcraft3InstallPath = new JLabel(wcDirectory == null ? "Not found" : wcDirectory); + final JLabel warcraft3InstallLocated = new JLabel(LocalizationManager.getInstance().get("button.datasourcechooserpanel_not_found")); + final JLabel warcraft3InstallPath = new JLabel(wcDirectory == null ? LocalizationManager.getInstance().get("button.datasourcechooserpanel_not_found") : wcDirectory); warcraft3InstallLocated.setFont(new Font("Consolas", Font.BOLD, getFont().getSize())); warcraft3InstallPath.setFont(new Font("Consolas", Font.PLAIN, getFont().getSize())); if (wcDirectory == null) { @@ -518,14 +524,14 @@ private void enterSDMode() { reloadTree(); } else { - JOptionPane.showMessageDialog(this, "Your Warcraft III data CASC configuration is not in the HD mode.", - "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_entersdmode_not_hd_1"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_entersdmode_not_hd_2"), JOptionPane.ERROR_MESSAGE); } } else { JOptionPane.showMessageDialog(this, - "Your Warcraft III data configuration is not a standard Reforged CASC setup, so this automation feature is unavailable.\nTo use this feature, please press 'Clear All' and then 'Add War3 Install Directory' to choose a Reforged installation.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_entersdmode_not_hd_3"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_entersdmode_not_hd_2"), JOptionPane.ERROR_MESSAGE); } } @@ -548,19 +554,19 @@ private void enterHDMode() { } else { JOptionPane.showMessageDialog(this, - "Your Warcraft III data CASC configuration is not in the SD mode or is not configured in the expected way. You will need to apply HD mode manually by adding the appropriate CASC mods.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_enterhdmode_not_sd_1"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_enterhdmode_not_sd_2"), JOptionPane.ERROR_MESSAGE); } } else { - JOptionPane.showMessageDialog(this, "Your Warcraft III data CASC configuration is not in the SD mode.", - "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_enterhdmode_not_sd_3"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_enterhdmode_not_sd_2"), JOptionPane.ERROR_MESSAGE); } } else { JOptionPane.showMessageDialog(this, - "Your Warcraft III data configuration is not a standard Reforged CASC setup, so this automation feature is unavailable.\nTo use this feature, please press 'Clear All' and then 'Add War3 Install Directory' to choose a Reforged installation.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_enterhdmode_not_sd_1"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_enterhdmode_not_sd_2"), JOptionPane.ERROR_MESSAGE); } } @@ -583,8 +589,8 @@ private void enterSD2Mode() { } else { JOptionPane.showMessageDialog(this, - "Your Warcraft III data configuration is not a standard Reforged CASC setup, so this automation feature is unavailable.\nTo use this feature, please press 'Clear All' and then 'Add War3 Install Directory' to choose a Reforged installation.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_entersd2mode_not_hd_1"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_entersd2mode_not_hd_2"), JOptionPane.ERROR_MESSAGE); } } @@ -616,8 +622,8 @@ private void enterHD2Mode() { } else { JOptionPane.showMessageDialog(this, - "Your Warcraft III data configuration is not a standard Reforged CASC setup, so this automation feature is unavailable.\nTo use this feature, please press 'Clear All' and then 'Add War3 Install Directory' to choose a Reforged installation.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_enterhd2mode_not_sd_1"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_enterhd2mode_not_sd_2"), JOptionPane.ERROR_MESSAGE); } } @@ -625,9 +631,12 @@ private void addWarcraft3Installation(final Path installPathPath, final boolean if (Files.exists(installPathPath.resolve("Data/indices"))) { CascDataSource.Product product = Product.WARCRAFT_III; if (allowPopup) { - final int optionChoice = JOptionPane.showOptionDialog(this, "Choose version", "Version", + final int optionChoice = JOptionPane.showOptionDialog(this, + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addwar3installation_choose_ver"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addwar3installation_ver"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, - new Object[] { "Warcraft III", "Warcraft III Public Test" }, "Warcraft III Public Test"); + new Object[] { "Warcraft III", LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addwar3installation_ptr") }, + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addwar3installation_ptr")); if ((optionChoice < 0) || (optionChoice > 1)) { return; } @@ -715,7 +724,7 @@ private void reloadTree() { if (descriptor instanceof CascDataSourceDescriptor) { final CascDataSourceDescriptor cascDescriptor = (CascDataSourceDescriptor) descriptor; if (cascDescriptor.getPrefixes().isEmpty()) { - newChild.setUserObject(newChild.getUserObject() + " (WARNING: No Mods Selected)"); + newChild.setUserObject(newChild.getUserObject() + LocalizationManager.getInstance().get("descriptor.datasourcechooserpanel_reloadtree")); } for (final String prefix : cascDescriptor.getPrefixes()) { model.insertNodeInto(new DefaultMutableTreeNode(prefix), newChild, newChild.getChildCount()); @@ -756,7 +765,7 @@ private static enum SupportedCascPatchFormat { public static void main(final String[] args) { setupLookAndFeel("Aluminium"); - final JFrame dataSourceChooserFrame = new JFrame("DataSourceChooserPanel"); + final JFrame dataSourceChooserFrame = new JFrame(LocalizationManager.getInstance().get("frame.datasourcechooserpanel_datasourcechooserframe")); dataSourceChooserFrame.setContentPane(new DataSourceChooserPanel(null)); dataSourceChooserFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); dataSourceChooserFrame.pack(); @@ -786,8 +795,8 @@ private void addSpecificCASCPrefix(final Path installPathPath, final CascDataSou prefixChoiceComboBox.setEditable(true); final JPanel comboBoxPanel = new JPanel(new BorderLayout()); comboBoxPanel.add(prefixChoiceComboBox, BorderLayout.CENTER); - comboBoxPanel.add(new JLabel("Choose a .w3mod:"), BorderLayout.BEFORE_FIRST_LINE); - if (JOptionPane.showConfirmDialog(DataSourceChooserPanel.this, comboBoxPanel, "Choose Mod", + comboBoxPanel.add(new JLabel(LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addspecificCASC_1")), BorderLayout.BEFORE_FIRST_LINE); + if (JOptionPane.showConfirmDialog(DataSourceChooserPanel.this, comboBoxPanel, LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_addspecificCASC_2"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) { final Object selectedItem = prefixChoiceComboBox.getSelectedItem(); if (selectedItem != null) { @@ -895,14 +904,14 @@ else if (tempCascReader.getRootFileSystem().isFile("war3.w3mod\\units\\unitdata. } final JPanel userChooseLocalePanel = new JPanel(); userChooseLocalePanel.setLayout(new GridLayout(localeOptions.size() + 5, 1)); - userChooseLocalePanel.add(new JLabel("Originally installed locale: " + originalInstallLocale - + ", Launcher.db locale: " + launcherDbLocale)); + userChooseLocalePanel.add(new JLabel(LocalizationManager.getInstance().get("label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_1") + originalInstallLocale + + LocalizationManager.getInstance().get("label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_2") + launcherDbLocale)); userChooseLocalePanel.add( - new JLabel("Locale could not be determined automatically. Please choose your locale.")); + new JLabel(LocalizationManager.getInstance().get("label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_3"))); userChooseLocalePanel - .add(new JLabel("An incorrect choice may cause the Retera Model Studio to fail to start.")); + .add(new JLabel(LocalizationManager.getInstance().get("label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_4"))); userChooseLocalePanel.add(new JLabel( - "Any option is valid if you have started the game using that locale at least once.")); + LocalizationManager.getInstance().get("label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_5"))); final ButtonGroup buttonGroup = new ButtonGroup(); final List buttons = new ArrayList<>(); boolean firstGoodButton = true; @@ -945,7 +954,7 @@ else if (tempCascReader.getRootFileSystem().isFile("war3.w3mod\\units\\unitdata. } final int confirmationResult = allowPopup ? JOptionPane.showConfirmDialog(DataSourceChooserPanel.this, userChooseLocalePanel, - "Choose Locale", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_adddefaultCASC_confirmationresult"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) : JOptionPane.OK_OPTION; JRadioButton selectedButton = null; for (final JRadioButton button : buttons) { @@ -958,7 +967,9 @@ else if (tempCascReader.getRootFileSystem().isFile("war3.w3mod\\units\\unitdata. } if (selectedButton == null) { JOptionPane.showMessageDialog(DataSourceChooserPanel.this, - "User did not choose a locale! Aborting!", "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_adddefaultCASC_selected_1"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_adddefaultCASC_selected_2"), + JOptionPane.ERROR_MESSAGE); return; } locale = selectedButton.getText(); @@ -967,14 +978,14 @@ else if (tempCascReader.getRootFileSystem().isFile("war3.w3mod\\units\\unitdata. final List defaultPrefixes; switch (patchFormat) { case PATCH130: { - System.out.println("Detected Patch 1.30"); + System.out.println(LocalizationManager.getInstance().get("println.datasourcechooserpanel_adddefaultCASC_1.30")); // We used to have this, maybe some people still do? final String[] prefixes = { "war3.mpq", "deprecated.mpq", lowerLocale + "-war3local.mpq" }; defaultPrefixes = new ArrayList<>(Arrays.asList(prefixes)); break; } case PATCH131: { - System.out.println("Detected Patch 1.31"); + System.out.println(LocalizationManager.getInstance().get("println.datasourcechooserpanel_adddefaultCASC_1.31")); // This is what I have right now final String[] prefixes = { "war3.w3mod", "war3.w3mod\\_deprecated.w3mod", "war3.w3mod\\_locales\\" + lowerLocale + ".w3mod" }; @@ -982,7 +993,7 @@ else if (tempCascReader.getRootFileSystem().isFile("war3.w3mod\\units\\unitdata. break; } case PATCH132: { - System.out.println("Detected Patch 1.32+"); + System.out.println(LocalizationManager.getInstance().get("println.datasourcechooserpanel_adddefaultCASC_1.32")); // This is what I have right now final String[] prefixes = { "war3.w3mod", "war3.w3mod\\_deprecated.w3mod", "war3.w3mod\\_locales\\" + lowerLocale + ".w3mod", "war3.w3mod\\_hd.w3mod", @@ -996,8 +1007,8 @@ else if (tempCascReader.getRootFileSystem().isFile("war3.w3mod\\units\\unitdata. final String[] prefixes = { "war3.w3mod", "war3.w3mod", "war3.w3mod\\_deprecated.w3mod", "war3.w3mod\\_locales\\" + lowerLocale + ".w3mod" }; JOptionPane.showMessageDialog(DataSourceChooserPanel.this, - "The Warcraft III Installation you have selected seems to be too new, or is not a supported version. The suggested prefix list from Patch 1.31 will be used.\nThis will probably fail, and you will need more advanced configuration.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_adddefaultCASC_unknown_1"), + LocalizationManager.getInstance().get("dialog.datasourcechooserpanel_adddefaultCASC_unknown_2"), JOptionPane.ERROR_MESSAGE); defaultPrefixes = new ArrayList<>(Arrays.asList(prefixes)); break; } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/FolderDataSourceDescriptor.java b/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/FolderDataSourceDescriptor.java index c74b68760..9cccd1e95 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/FolderDataSourceDescriptor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/FolderDataSourceDescriptor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.gui.datachooser; +import hiveworkshop.localizationmanager.LocalizationManager; import java.nio.file.Paths; @@ -20,7 +21,7 @@ public DataSource createDataSource() { @Override public String getDisplayName() { - return "Folder: " + folderPath; + return LocalizationManager.getInstance().get("string.folderdatasourcedescriptor_getdisplayname") + folderPath; } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/MpqDataSourceDescriptor.java b/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/MpqDataSourceDescriptor.java index 79088c825..d9d207789 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/MpqDataSourceDescriptor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/datachooser/MpqDataSourceDescriptor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.gui.datachooser; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.nio.channels.SeekableByteChannel; @@ -36,7 +37,7 @@ public DataSource createDataSource() { @Override public String getDisplayName() { - return "MPQ Archive: " + mpqFilePath; + return LocalizationManager.getInstance().get("string.mpqdatasourcedescriptor_getdisplayname") + mpqFilePath; } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ImportPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ImportPanel.java index aa5022e42..6da8c4469 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ImportPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ImportPanel.java @@ -78,6 +78,7 @@ import com.hiveworkshop.wc3.mdl.VisibilitySource; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; /** * The panel to handle the import function. @@ -143,10 +144,10 @@ public class ImportPanel extends JTabbedPane implements ActionListener, ListSele ArrayList oldBones; ArrayList newBones; - JCheckBox displayParents = new JCheckBox("Display parent names"); - JButton allMatrOriginal = new JButton("Reset all Matrices"), - allMatrSameName = new JButton("Set all to available, original names"), - applySmartMapping = new JButton("Apply Smart Mapping"); + JCheckBox displayParents = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_displayparents")); + JButton allMatrOriginal = new JButton(LocalizationManager.getInstance().get("button.importpanel_allmatroriginal")), + allMatrSameName = new JButton(LocalizationManager.getInstance().get("button.importpanel_allmatrsamename")), + applySmartMapping = new JButton(LocalizationManager.getInstance().get("button.importpanel_applysmartmapping")); // Objects JPanel objectsPanel = new JPanel(); @@ -190,23 +191,23 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe super(); if (currentModel.getName().equals(importedModel.getName())) { importedModel.setFileRef(new File( - importedModel.getFile().getParent() + "/" + importedModel.getName() + " (Imported)" + ".mdl")); - frame = new JFrame("Importing " + currentModel.getName() + " into itself"); + importedModel.getFile().getParent() + "/" + importedModel.getName() + LocalizationManager.getInstance().get("string.importpanel_importpanel_imported") + ".mdl")); + frame = new JFrame(LocalizationManager.getInstance().get("frame.importpanel_importpanel_imported") + currentModel.getName() + LocalizationManager.getInstance().get("frame.importpanel_importpanel_into_itself")); } else { - frame = new JFrame("Importing " + importedModel.getName() + " into " + currentModel.getName()); + frame = new JFrame(LocalizationManager.getInstance().get("frame.importpanel_importpanel_imported") + importedModel.getName() + LocalizationManager.getInstance().get("frame.importpanel_importpanel_into") + currentModel.getName()); } currentModel.doSavePreps(preferences.isAlwaysUseMinimalMatricesInHD()); try { frame.setIconImage(RMSIcons.MDLIcon.getImage()); } catch (final Exception e) { JOptionPane.showMessageDialog(null, - "Error: Image files were not found! Due to bad programming, this might break the program!"); + LocalizationManager.getInstance().get("dialog.importpanel_importpanel_error")); } this.currentModel = currentModel; this.importedModel = importedModel; // Geoset Panel - addTab("Geosets", geoIcon, geosetsPanel, "Controls which geosets will be imported."); + addTab(LocalizationManager.getInstance().get("tab.importpanel_importpanel_geosets"), geoIcon, geosetsPanel, LocalizationManager.getInstance().get("tab.importpanel_importpanel_geosets_imported")); final DefaultListModel materials = new DefaultListModel(); for (int i = 0; i < currentModel.getMaterials().size(); i++) { @@ -227,20 +228,20 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe final GeosetPanel geoPanel = new GeosetPanel(false, currentModel, i, materials, materialsRenderer); geosetTabs.addTab(currentModel.getName() + " " + (i + 1), greenIcon, geoPanel, - "Click to modify material data for this geoset."); + LocalizationManager.getInstance().get("tab.importpanel_importpanel_modify_geoset")); } for (int i = 0; i < importedModel.getGeosets().size(); i++) { final GeosetPanel geoPanel = new GeosetPanel(true, importedModel, i, materials, materialsRenderer); geosetTabs.addTab(importedModel.getName() + " " + (i + 1), orangeIcon, geoPanel, - "Click to modify importing and material data for this geoset."); + LocalizationManager.getInstance().get("tab.importpanel_importpanel_modify_importing_geoset")); } - importAllGeos = new JButton("Import All"); + importAllGeos = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_importallgeos")); importAllGeos.addActionListener(this); geosetsPanel.add(importAllGeos); - uncheckAllGeos = new JButton("Leave All"); + uncheckAllGeos = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_uncheckallgeos")); uncheckAllGeos.addActionListener(this); geosetsPanel.add(uncheckAllGeos); @@ -258,7 +259,7 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe geosetsPanel.setLayout(geosetLayout); // Animation Panel - addTab("Animation", animIcon, animPanel, "Controls which animations will be imported."); + addTab(LocalizationManager.getInstance().get("tab.importpanel_importpanel_animation"), animIcon, animPanel, LocalizationManager.getInstance().get("tab.importpanel_importpanel_animations_imported")); existingAnims = new DefaultListModel(); for (int i = 0; i < currentModel.getAnims().size(); i++) { @@ -267,23 +268,23 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe final AnimListCellRenderer animsRenderer = new AnimListCellRenderer(); - importAllAnims = new JButton("Import All"); + importAllAnims = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_importallanims")); importAllAnims.addActionListener(this); animPanel.add(importAllAnims); - timescaleAllAnims = new JButton("Time-scale All"); + timescaleAllAnims = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_timescaleallanims")); timescaleAllAnims.addActionListener(this); animPanel.add(timescaleAllAnims); - renameAllAnims = new JButton("Import and Rename All"); + renameAllAnims = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_renameallanims")); renameAllAnims.addActionListener(this); animPanel.add(renameAllAnims); - uncheckAllAnims = new JButton("Leave All"); + uncheckAllAnims = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_uncheckallanims")); uncheckAllAnims.addActionListener(this); animPanel.add(uncheckAllAnims); - clearExistingAnims = new JCheckBox("Clear pre-existing animations"); + clearExistingAnims = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_importpanel_clearexistinganims")); // Build the animTabs list of AnimPanels for (int i = 0; i < importedModel.getAnims().size(); i++) { @@ -291,7 +292,7 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe final AnimPanel iAnimPanel = new AnimPanel(anim, existingAnims, animsRenderer); animTabs.addTab(anim.getName(), orangeIcon, iAnimPanel, - "Click to modify data for this animation sequence."); + LocalizationManager.getInstance().get("tab.importpanel_importpanel_modify_animation_sequence")); } animTabs.addChangeListener(this); @@ -311,7 +312,7 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe animPanel.setLayout(animLayout); // Bone Panel - addTab("Bones", boneIcon, bonesPanel, "Controls which bones will be imported."); + addTab(LocalizationManager.getInstance().get("tab.importpanel_importpanel_bones"), boneIcon, bonesPanel, LocalizationManager.getInstance().get("tab.importpanel_importpanel_bones_imported")); existingBones = new DefaultListModel(); final ArrayList currentMDLBones = currentModel.sortedIdObjects(Bone.class); final ArrayList currentMDLHelpers = currentModel.sortedIdObjects(Helper.class); @@ -325,7 +326,7 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe final ArrayList importedMDLBones = importedModel.sortedIdObjects(Bone.class); final ArrayList importedMDLHelpers = importedModel.sortedIdObjects(Helper.class); - clearExistingBones = new JCheckBox("Clear pre-existing bones and helpers"); + clearExistingBones = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_importpanel_clear_bones_helpers")); currentModelManager = new ModelViewManager(currentModel); importedModelManager = new ModelViewManager(importedModel); final BonePanelListCellRenderer bonePanelRenderer = new BonePanelListCellRenderer(currentModelManager, @@ -362,19 +363,19 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe boneTabs.setSelectedIndex(0); bonePanelCards.setBorder(BorderFactory.createLineBorder(Color.blue.darker())); - importAllBones = new JButton("Import All"); + importAllBones = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_importallbones")); importAllBones.addActionListener(this); bonesPanel.add(importAllBones); - uncheckAllBones = new JButton("Leave All"); + uncheckAllBones = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_uncheckAllBones")); uncheckAllBones.addActionListener(this); bonesPanel.add(uncheckAllBones); - motionFromBones = new JButton("Motion From All"); + motionFromBones = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_motionfrombones")); motionFromBones.addActionListener(this); bonesPanel.add(motionFromBones); - uncheckUnusedBones = new JButton("Uncheck Unused"); + uncheckUnusedBones = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_uncheckunusedbones")); uncheckUnusedBones.addActionListener(this); bonesPanel.add(uncheckUnusedBones); @@ -403,7 +404,7 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe bonesPanel.setLayout(boneLayout); // Matrices Panel - addTab("Matrices", greenIcon, geosetAnimPanel, "Controls which bones geosets are attached to."); + addTab(LocalizationManager.getInstance().get("tab.importpanel_importpanel_matrices"), greenIcon, geosetAnimPanel, LocalizationManager.getInstance().get("tab.importpanel_importpanel_bones_attached")); // addTab("Skin", orangeIcon, new JPanel(), "Edit SKIN chunk"); final ParentToggleRenderer ptr = new ParentToggleRenderer(displayParents, currentModelManager, @@ -421,14 +422,14 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe this); geosetAnimTabs.addTab(currentModel.getName() + " " + (i + 1), greenIcon, geoPanel, - "Click to modify animation data for Geoset " + i + " from " + currentModel.getName() + "."); + LocalizationManager.getInstance().get("tab.importpanel_importpanel_modify_animation") + i + LocalizationManager.getInstance().get("tab.importpanel_importpanel_from") + currentModel.getName() + "."); } for (int i = 0; i < importedModel.getGeosets().size(); i++) { final BoneAttachmentPane geoPanel = new BoneAttachmentPane(importedModel, importedModel.getGeoset(i), ptr, this); geosetAnimTabs.addTab(importedModel.getName() + " " + (i + 1), orangeIcon, geoPanel, - "Click to modify animation data for Geoset " + i + " from " + importedModel.getName() + "."); + LocalizationManager.getInstance().get("tab.importpanel_importpanel_modify_animation") + i + LocalizationManager.getInstance().get("tab.importpanel_importpanel_from") + importedModel.getName() + "."); } geosetAnimTabs.addChangeListener(this); @@ -443,7 +444,7 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe geosetAnimPanel.setLayout(gaLayout); // Objects Panel - addTab("Objects", objIcon, objectsPanel, "Controls which objects are imported."); + addTab(LocalizationManager.getInstance().get("tab.importpanel_importpanel_objects"), objIcon, objectsPanel, LocalizationManager.getInstance().get("tab.importpanel_importpanel_objects_imported")); getFutureBoneListExtended(false); // Build the objectTabs list of ObjectPanels @@ -480,11 +481,11 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe objectTabs.setSelectedIndex(0); objectPanelCards.setBorder(BorderFactory.createLineBorder(Color.blue.darker())); - importAllObjs = new JButton("Import All"); + importAllObjs = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_importallobjs")); importAllObjs.addActionListener(this); bonesPanel.add(importAllObjs); - uncheckAllObjs = new JButton("Leave All"); + uncheckAllObjs = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_uncheckallobjs")); uncheckAllObjs.addActionListener(this); bonesPanel.add(uncheckAllObjs); @@ -504,7 +505,7 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe objectsPanel.setLayout(objectLayout); // Visibility Panel - addTab("Visibility", orangeIcon, visPanel, "Controls the visibility of portions of the model."); + addTab(LocalizationManager.getInstance().get("tab.importpanel_importpanel_visibility"), orangeIcon, visPanel, LocalizationManager.getInstance().get("tab.importpanel_importpanel_visibility_model")); initVisibilityList(); visibilityList(); @@ -529,21 +530,21 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe visTabs.setSelectedIndex(0); visPanelCards.setBorder(BorderFactory.createLineBorder(Color.blue.darker())); - allInvisButton = new JButton("All Invisible in Exotic Anims"); + allInvisButton = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_invisible_exotic_anims")); allInvisButton.addActionListener(this); allInvisButton.setToolTipText( - "Forces everything to be always invisibile in animations other than their own original animations."); + LocalizationManager.getInstance().get("settooltiptext.importpanel_importpanel_forces_invisibile")); visPanel.add(allInvisButton); - allVisButton = new JButton("All Visible in Exotic Anims"); + allVisButton = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_visible_exotic_anims")); allVisButton.addActionListener(this); allVisButton.setToolTipText( - "Forces everything to be always visibile in animations other than their own original animations."); + LocalizationManager.getInstance().get("settooltiptext.importpanel_importpanel_forces_visibile")); visPanel.add(allVisButton); - selSimButton = new JButton("Select Similar Options"); + selSimButton = new JButton(LocalizationManager.getInstance().get("button.importpanel_importpanel_select_similar_options")); selSimButton.addActionListener(this); - selSimButton.setToolTipText("Similar components will be selected as visibility sources in exotic animations."); + selSimButton.setToolTipText(LocalizationManager.getInstance().get("settooltiptext.importpanel_importpanel_similar_options")); visPanel.add(selSimButton); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, visTabsPane, visPanelCards); @@ -560,9 +561,9 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe // Listen all addChangeListener(this); - okayButton = new JButton("Finish"); + okayButton = new JButton(LocalizationManager.getInstance().get("global.button.finish")); okayButton.addActionListener(this); - cancelButton = new JButton("Cancel"); + cancelButton = new JButton(LocalizationManager.getInstance().get("global.button.cancel")); cancelButton.addActionListener(this); final JPanel finalPanel = new JPanel(); @@ -583,8 +584,8 @@ public ImportPanel(final EditableModel currentModel, final EditableModel importe frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(final WindowEvent e) { - final Object[] options = { "Yes", "No" }; - final int n = JOptionPane.showOptionDialog(frame, "Really cancel this import?", "Confirmation", + final Object[] options = { LocalizationManager.getInstance().get("global.button.yes"), LocalizationManager.getInstance().get("global.button.no") }; + final int n = JOptionPane.showOptionDialog(frame, LocalizationManager.getInstance().get("dialog.importpanel_importpanel_really_cancel_import"), LocalizationManager.getInstance().get("global.button.confirmation"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); if (n == 0) { frame.setVisible(false); @@ -621,7 +622,7 @@ public void actionPerformed(final ActionEvent e) { } } else if (e.getSource() == renameAllAnims) { final String newTagString = JOptionPane.showInputDialog(this, - "Choose additional naming (i.e. swim or alternate)"); + LocalizationManager.getInstance().get("dialog.importpanel_importpanel_choose_naming")); if (newTagString != null) { for (int i = 0; i < animTabs.getTabCount(); i++) { final AnimPanel aniPanel = (AnimPanel) animTabs.getComponentAt(i); @@ -686,14 +687,14 @@ public void actionPerformed(final ActionEvent e) { for (int i = 0; i < objectPanels.size(); i++) { final ObjectPanel objectPanel = objectPanels.get(i); if (objectPanel.doImport.isSelected() && objectPanel.parentsList != null) { - // System.out.println("Performing check on base: - // "+objectPanel.object.getName()); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_check_base") + // +objectPanel.object.getName()); BoneShell shell = (BoneShell) objectPanel.parentsList.getSelectedValue(); if (shell != null && shell.bone != null) { BonePanel current = getPanelOf(shell.bone); if (!usedBonePanels.contains(current)) { - // System.out.println(" @adding base: - // "+current.bone.getName()); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_adding_base") + // +current.bone.getName()); usedBonePanels.add(current); } @@ -714,8 +715,8 @@ public void actionPerformed(final ActionEvent e) { if (usedBonePanels.contains(current)) { good = false; } else { - // System.out.println(" @Redirected + - // adding: "+current.bone.getName()); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_redirected_adding") + // +current.bone.getName()); // current.setSelectedIndex(0); usedBonePanels.add(current); } @@ -723,7 +724,7 @@ public void actionPerformed(final ActionEvent e) { k++; if (k > 1000) { JOptionPane.showMessageDialog(null, - "Unexpected error has occurred: IdObject to Bone parent loop, circular logic"); + LocalizationManager.getInstance().get("dialog.importpanel_importpanel_object_bone_parent_loop")); break; } } @@ -732,22 +733,22 @@ public void actionPerformed(final ActionEvent e) { } for (int i = 0; i < geosetAnimTabs.getTabCount(); i++) { if (geosetAnimTabs.isEnabledAt(i)) { - System.out.println("Performing check on geoset: " + i); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_check_geoset") + i); final BoneAttachmentPane bap = (BoneAttachmentPane) geosetAnimTabs.getComponentAt(i); for (int mk = 0; mk < bap.oldBoneRefs.size(); mk++) { final MatrixShell ms = bap.oldBoneRefs.get(mk); - // System.out.println("Performing check on MatrixShell: - // "+ms); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_check_matrixshell") + // +ms); for (final BoneShell bs : ms.newBones) { BoneShell shell = bs; BonePanel current = getPanelOf(shell.bone); if (!usedBonePanels.contains(current)) { - // System.out.println(" @adding base: - // "+current.bone.getName()); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_adding_base") + // +current.bone.getName()); usedBonePanels.add(current); } - // System.out.println("Performing check on - // MatrixShell's sub: "+ms+": "+bs); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_check_matrixshell_sub") + // +ms+": "+bs); boolean good = true; int k = 0; @@ -768,8 +769,8 @@ public void actionPerformed(final ActionEvent e) { if (usedBonePanels.contains(current)) { good = false; } else { - // System.out.println(" @Redirected + - // adding: "+current.bone.getName()); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_redirected_adding") + // +current.bone.getName()); // current.setSelectedIndex(0); usedBonePanels.add(current); } @@ -777,7 +778,7 @@ public void actionPerformed(final ActionEvent e) { k++; if (k > 1000) { JOptionPane.showMessageDialog(null, - "Unexpected error has occurred: IdObject to Bone parent loop, circular logic"); + LocalizationManager.getInstance().get("dialog.importpanel_importpanel_object_bone_parent_loop")); break; } } @@ -789,8 +790,8 @@ public void actionPerformed(final ActionEvent e) { final BonePanel bonePanel = bonePanels.get(i); if (bonePanel.getSelectedIndex() != 1) { if (usedBonePanels.contains(bonePanel)) { - // System.out.println("Performing check on base: - // "+bonePanel.bone.getName()); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_check_base") + // +bonePanel.bone.getName()); BonePanel current = bonePanel; boolean good = true; int k = 0; @@ -809,8 +810,8 @@ public void actionPerformed(final ActionEvent e) { if (usedBonePanels.contains(current)) { good = false; } else { - // System.out.println(" @Redirected + - // adding: "+current.bone.getName()); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_importpanel_redirected_adding") + // +current.bone.getName()); // current.setSelectedIndex(0); usedBonePanels.add(current); } @@ -818,7 +819,7 @@ public void actionPerformed(final ActionEvent e) { k++; if (k > 1000) { JOptionPane.showMessageDialog(null, - "Unexpected error has occurred: Bone parent loop, circular logic"); + LocalizationManager.getInstance().get("dialog.importpanel_importpanel_object_bone_parent_loop")); break; } } @@ -877,8 +878,8 @@ public void actionPerformed(final ActionEvent e) { doImport(); frame.setVisible(false); } else if (e.getSource() == cancelButton) { - final Object[] options = { "Yes", "No" }; - final int n = JOptionPane.showOptionDialog(frame, "Really cancel this import?", "Confirmation", + final Object[] options = { LocalizationManager.getInstance().get("global.button.yes"), LocalizationManager.getInstance().get("global.button.no") }; + final int n = JOptionPane.showOptionDialog(frame, LocalizationManager.getInstance().get("dialog.importpanel_importpanel_really_cancel_import"), LocalizationManager.getInstance().get("global.button.confirmation"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); if (n == 0) { frame.setVisible(false); @@ -901,7 +902,7 @@ public void actionPerformed(final ActionEvent e) { } else if (e.getSource() == applySmartMapping) { final SmartMappingChooserPanel smartMapChooserPanel = new SmartMappingChooserPanel(importedModelManager, currentModelManager, getFutureBoneListExtended(true)); - final int userResult = JOptionPane.showConfirmDialog(this, smartMapChooserPanel, "Apply Smart Mapping", + final int userResult = JOptionPane.showConfirmDialog(this, smartMapChooserPanel, LocalizationManager.getInstance().get("dialog.importpanel_importpanel_applysmartmapping"), JOptionPane.OK_CANCEL_OPTION); if (userResult == JOptionPane.OK_OPTION) { final DefaultListModel pairings = smartMapChooserPanel.getPairingListModel(); @@ -1326,12 +1327,12 @@ public DefaultListModel getFutureBoneListExtended(final boolean newSn } } if (addCount != 0) { - System.out.println("average add time: " + totalAddTime / addCount); - System.out.println("add count: " + addCount); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_getfutureboneListeextended_average_add_time") + totalAddTime / addCount); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_getfutureboneListeextended_add_count") + addCount); } if (removeCount != 0) { - System.out.println("average remove time: " + totalRemoveTime / removeCount); - System.out.println("remove count: " + removeCount); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_getfutureboneListeextended_average_remove_time") + totalRemoveTime / removeCount); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_getfutureboneListeextended_remove_count") + removeCount); } DefaultListModel listModelToReturn; @@ -1522,12 +1523,12 @@ public void initVisibilityList() { } } - System.out.println("allVisShells:"); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_getfutureboneListeextended_allvisshells")); for (final VisibilityShell vs : allVisShells) { System.out.println(vs.source.getName()); } - System.out.println("new/old:"); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_getfutureboneListeextended_new_old")); for (final Object o : currentModel.getAllVisibilitySources()) { if (o.getClass() != GeosetAnim.class) { visSourcesOld.add(shellFromObject(o)); @@ -1646,7 +1647,7 @@ public void setSelectedItem(final String what) { public void setParentMultiBones() { final JList list = new JList<>(getFutureBoneListExtended(true)); list.setCellRenderer(boneShellRenderer); - final int x = JOptionPane.showConfirmDialog(this, new JScrollPane(list), "Set Parent for All Selected Bones", + final int x = JOptionPane.showConfirmDialog(this, new JScrollPane(list), LocalizationManager.getInstance().get("dialog.importpanel_setparentmultibones_bones_set_parent"), JOptionPane.OK_CANCEL_OPTION); if (x == JOptionPane.OK_OPTION) { final Object[] selected = boneTabs.getSelectedValuesList().toArray(); @@ -1708,7 +1709,7 @@ public void doImport() { // The engine for actually performing the model to model import. if (currentModel == importedModel) { - JOptionPane.showMessageDialog(null, "The program has confused itself."); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.importpanel_doimport_confused")); } // ArrayList newGeosets = new ArrayList();//Just for @@ -1813,7 +1814,7 @@ public void doImport() { // "+animShell.anim.getStart()+", // "+animShell.anim.getEnd()); System.out.println( - "Attempting to clear animation for " + bs.bone.getName() + " values " + LocalizationManager.getInstance().get("println.importpanel_doimport_clear_animation") + bs.bone.getName() + LocalizationManager.getInstance().get("println.importpanel_doimport_values") + animShell.anim.getStart() + ", " + animShell.anim.getEnd()); bs.bone.clearAnimation(animShell.anim); } @@ -1890,16 +1891,16 @@ public void doImport() { if (currentModel.contains(bs.bone)) { if (bs.bone.getClass() == Helper.class) { JOptionPane.showMessageDialog(null, - "Error: Holy fo shizzle my grizzle! A geoset is trying to attach to a helper, not a bone!"); + LocalizationManager.getInstance().get("dialog.importpanel_doimport_geoset_attach_helper")); } ms.matrix.add(bs.bone); } else { - System.out.println("Boneshaving " + bs.bone.getName() + " out of use"); + System.out.println(LocalizationManager.getInstance().get("dialog.importpanel_doimport_bone_shaving") + bs.bone.getName() + LocalizationManager.getInstance().get("dialog.importpanel_doimport_out_use")); } } if (ms.matrix.size() == 0) { JOptionPane.showMessageDialog(null, - "Error: A matrix was functionally destroyed while importing, and may take the program with it!"); + LocalizationManager.getInstance().get("dialog.importpanel_doimport_matrix_destroyed")); } if (ms.matrix.getBones().size() < 1) { if (dummyBone == null) { @@ -1912,9 +1913,9 @@ public void doImport() { } if (!shownEmpty) { JOptionPane.showMessageDialog(null, - "Warning: You left some matrices empty. This was detected, and a dummy bone at { 0, 0, 0 } has been generated for them named " + LocalizationManager.getInstance().get("dialog.importpanel_doimport_matrices_empty_dummy_bone") + dummyBone.getName() - + "\nMultiple geosets may be attached to this bone, and the error will only be reported once for your convenience."); + + LocalizationManager.getInstance().get("dialog.importpanel_doimport_multiple_geosets_attached_bone")); shownEmpty = true; } if (!ms.matrix.getBones().contains(dummyBone)) { @@ -2235,11 +2236,11 @@ public void animTransferPartTwo(final boolean singleAnimation, final Animation p } } } else { - JOptionPane.showMessageDialog(null, "Bug in anim transfer: attempted unnecessary 2-part transfer"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.importpanel_animtransferparttwo_transfer_bug")); } for (int i = 0; i < visComponents.getSize(); i++) { final VisibilityPane vp = visComponents.get(i); - // JOptionPane.showMessageDialog(null,"Visibility component: "+i +", + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.importpanel_animtransferparttwo_visibility_component")+i +", // "+vp.sourceShell.source.getName()); vp.favorOld.doClick(); } @@ -2281,7 +2282,7 @@ public GeosetPanel(final boolean imported, // Is this Geoset an imported geoTitle = new JLabel(model.getName() + " " + (index + 1)); geoTitle.setFont(new Font("Arial", Font.BOLD, 26)); - doImport = new JCheckBox("Import this Geoset"); + doImport = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_geosetpanel_import_geoset")); doImport.setSelected(true); if (imported) { doImport.addChangeListener(this); @@ -2289,7 +2290,7 @@ public GeosetPanel(final boolean imported, // Is this Geoset an imported doImport.setEnabled(false); } - materialText = new JLabel("Material:"); + materialText = new JLabel(LocalizationManager.getInstance().get("label.importpanel_geosetpanel_material")); // Header for materials list materialList = new JList(materials); @@ -2368,7 +2369,7 @@ public Component getListCellRendererComponent(final JList list, final Object val final boolean iss, final boolean chf) { String name = ((Material) value).getName(); if (value == myMaterial) { - name = name + " (Original)"; + name = name + LocalizationManager.getInstance().get("string.importpanel_getListcellrenderercomponent_original"); } if (myModel.contains((Material) value)) { super.getListCellRendererComponent(list, name, index, iss, chf); @@ -2382,7 +2383,7 @@ public Component getListCellRendererComponent(final JList list, final Object val setIcon(myIcon); } else { - super.getListCellRendererComponent(list, "Import: " + name, index, iss, chf); + super.getListCellRendererComponent(list, LocalizationManager.getInstance().get("string.importpanel_getListcellrenderercomponent_import") + name, index, iss, chf); ImageIcon myIcon = map.get(value); if (myIcon == null) { myIcon = new ImageIcon(Material.mergeImageScaled(ImportPanel.orangeIcon.getImage(), @@ -2412,10 +2413,10 @@ class AnimPanel extends JPanel implements ChangeListener, ItemListener, ListSele // The animation for this panel Animation anim; - static final String IMPORTBASIC = "Import as-is"; - static final String CHANGENAME = "Change name to:"; - static final String TIMESCALE = "Time-scale into pre-existing:"; - static final String GLOBALSEQ = "Rebuild as global sequence"; + static final String IMPORTBASIC = LocalizationManager.getInstance().get("string.importpanel_animpanel_import"); + static final String CHANGENAME = LocalizationManager.getInstance().get("string.importpanel_animpanel_change"); + static final String TIMESCALE = LocalizationManager.getInstance().get("string.importpanel_animpanel_time_scale"); + static final String GLOBALSEQ = LocalizationManager.getInstance().get("string.importpanel_animpanel_rebuild"); String[] animOptions = { IMPORTBASIC, CHANGENAME, TIMESCALE, GLOBALSEQ }; @@ -2446,11 +2447,11 @@ public AnimPanel(final Animation anim, final DefaultListModel existingAnims, fin title = new JLabel(anim.getName()); title.setFont(new Font("Arial", Font.BOLD, 26)); - doImport = new JCheckBox("Import this Sequence"); + doImport = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_animpanel_animpanel_import_sequence")); doImport.setSelected(true); doImport.addChangeListener(this); - inReverse = new JCheckBox("Reverse"); + inReverse = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_animpanel_animpanel_reverse")); inReverse.setSelected(false); inReverse.addChangeListener(this); @@ -2680,9 +2681,9 @@ class BonePanel extends JPanel implements ListSelectionListener, ActionListener JLabel title; - static final String IMPORT = "Import this bone"; - static final String MOTIONFROM = "Import motion to pre-existing:"; - static final String LEAVE = "Do not import"; + static final String IMPORT = LocalizationManager.getInstance().get("string.importpanel_bonepanel_import_bone"); + static final String MOTIONFROM = LocalizationManager.getInstance().get("string.importpanel_bonepanel_import_motion"); + static final String LEAVE = LocalizationManager.getInstance().get("string.importpanel_bonepanel_not_import"); String[] impOptions = { IMPORT, MOTIONFROM, LEAVE }; @@ -2747,9 +2748,9 @@ public BonePanel(final Bone whichBone, final DefaultListModel existingBonesList, futureBonesList.setCellRenderer(renderer); futureBonesListPane = new JScrollPane(futureBonesList); if (bone.getParent() != null) { - parentTitle = new JLabel("Parent: (Old Parent: " + bone.getParent().getName() + ")"); + parentTitle = new JLabel(LocalizationManager.getInstance().get("string.importpanel_bonepanel_parent_old") + bone.getParent().getName() + ")"); } else { - parentTitle = new JLabel("Parent: (Old Parent: {no parent})"); + parentTitle = new JLabel(LocalizationManager.getInstance().get("string.importpanel_bonepanel_parent_old_no")); } add(importTypeBox); @@ -2892,7 +2893,7 @@ public void updateSelectionPicks() { final long nanoStart = System.nanoTime(); futureBones = getImportPanel().getFutureBoneListExtended(false); final long nanoEnd = System.nanoTime(); - System.out.println("updating future bone list took " + (nanoEnd - nanoStart) + " ns"); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_updateselectionpicks") + (nanoEnd - nanoStart) + " ns"); } // public void reorderToModel(DefaultListModel order) @@ -2936,7 +2937,7 @@ class MultiBonePanel extends BonePanel { JButton setAllParent; public MultiBonePanel(final DefaultListModel existingBonesList, final ListCellRenderer renderer) { - setAllParent = new JButton("Set Parent for All"); + setAllParent = new JButton(LocalizationManager.getInstance().get("button.importpanel_multibonepanel_setallparent")); setAllParent.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -2946,7 +2947,7 @@ public void actionPerformed(final ActionEvent e) { bone = null; existingBones = existingBonesList; - title = new JLabel("Multiple Selected"); + title = new JLabel(LocalizationManager.getInstance().get("label.importpanel_multibonepanel_multiple_selected")); title.setFont(new Font("Arial", Font.BOLD, 26)); importTypeBox.setEditable(false); @@ -3006,7 +3007,7 @@ public void setSelectedValue(final String value) { public void setMultiTypes() { listenForChange = false; importTypeBox.setEditable(true); - importTypeBox.setSelectedItem("Multiple selected"); + importTypeBox.setSelectedItem(LocalizationManager.getInstance().get("importtypebox.importpanel_setmultitypes")); importTypeBox.setEditable(false); // boneListPane.setVisible(false); // boneList.setVisible(false); @@ -3030,7 +3031,7 @@ public void actionPerformed(final ActionEvent e) { getImportPanel().setSelectedItem((String) importTypeBox.getSelectedItem()); } final long nanoEnd = System.nanoTime(); - System.out.println("MultiBonePanel.actionPerformed() took " + (nanoEnd - nanoStart) + " ns"); + System.out.println(LocalizationManager.getInstance().get("println.importpanel_actionperformed") + (nanoEnd - nanoStart) + " ns"); } } @@ -3124,7 +3125,7 @@ public Component getListCellRendererComponent(final JList list, final Object val if (((BoneShell) value).bone.getParent() != null) { comp.setText(value.toString() + "; " + ((BoneShell) value).bone.getParent().getName()); } else { - comp.setText(value.toString() + "; (no parent)"); + comp.setText(value.toString() + ";" + LocalizationManager.getInstance().get("settext.importpanel_getlistcellrenderercomponent")); } } else { super.getListCellRendererComponent(list, value, index, iss, chf); @@ -3227,12 +3228,11 @@ public GeosetAnimationPanel(final boolean imported, // Is this Geoset an isImported = imported; bap = new BoneAttachmentPane(model, geoset, null, getImportPanel()); - addTab("Bones", ImportPanel.boneIcon, bap, "Allows you to edit bone references."); + addTab(LocalizationManager.getInstance().get("tab.importpanel_geosetanimationpanel_bones"), ImportPanel.boneIcon, bap, LocalizationManager.getInstance().get("tab.importpanel_geosetanimationpanel_edit_bone_references")); // vp = new // VisibilityPane(thePanel.currentModel.m_geosets.size(),thePanel.currentModel.getName(),thePanel.importedModel.m_geosets.size(),thePanel.importedModel.getName(),geoIndex); - // addTab("Visibility",ImportPanel.animIcon,vp,"Allows you to edit - // visibility."); + // addTab(LocalizationManager.getInstance().get("tab.importpanel_geosetanimationpanel_visibility"),ImportPanel.animIcon,vp,ocalizationManager.getInstance().get("tab.importpanel_geosetanimationpanel_edit_visibility")); } public void refreshLists() { @@ -3287,7 +3287,7 @@ public BoneAttachmentPane(final EditableModel model, final Geoset whichGeoset, f geoset = whichGeoset; impPanel = thePanel; - bonesLabel = new JLabel("Bones"); + bonesLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_boneattachmentpane_bones")); updateBonesList(); // Built before oldBoneRefs, so that the MatrixShells can default to // using New Refs with the same name as their first bone @@ -3295,10 +3295,10 @@ public BoneAttachmentPane(final EditableModel model, final Geoset whichGeoset, f bonesList.setCellRenderer(renderer); bonesPane = new JScrollPane(bonesList); - useBone = new JButton("Use Bone(s)", ImportPanel.greenArrowIcon); + useBone = new JButton(LocalizationManager.getInstance().get("button.importpanel_boneattachmentpane_use_bones"), ImportPanel.greenArrowIcon); useBone.addActionListener(this); - oldBoneRefsLabel = new JLabel("Old Bone References"); + oldBoneRefsLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_boneattachmentpane_old_bone_references")); buildOldRefsList(); oldBoneRefsList = new JList(oldBoneRefs); oldBoneRefsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); @@ -3307,13 +3307,13 @@ public BoneAttachmentPane(final EditableModel model, final Geoset whichGeoset, f oldBoneRefsList.addListSelectionListener(this); oldBoneRefsPane = new JScrollPane(oldBoneRefsList); - newRefsLabel = new JLabel("New Refs"); + newRefsLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_boneattachmentpane_new_refs")); newRefs = new DefaultListModel<>(); newRefsList = new JList(newRefs); newRefsList.setCellRenderer(renderer); newRefsPane = new JScrollPane(newRefsList); - removeNewRef = new JButton("Remove", ImportPanel.redXIcon); + removeNewRef = new JButton(LocalizationManager.getInstance().get("button.importpanel_boneattachmentpane_remove"), ImportPanel.redXIcon); removeNewRef.addActionListener(this); moveUp = new JButton(ImportPanel.moveUpIcon); moveUp.addActionListener(this); @@ -3475,9 +3475,7 @@ public void buildOldRefsList() { // } // catch (NullPointerException e) // { - // System.out.println("We have a null in a matrix process, - // probably not good but it was assumed that this might - // happen."); + // System.out.println(LocalizationManager.getInstance().get("println.importpanel_buildoldrefslist")); // } } oldBoneRefs.addElement(ms); @@ -3595,13 +3593,13 @@ public ObjectPanel(final IdObject whichObject, final DefaultListModel title = new JLabel(object.getClass().getSimpleName() + " \"" + object.getName() + "\""); title.setFont(new Font("Arial", Font.BOLD, 26)); - doImport = new JCheckBox("Import this object"); + doImport = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_objectpanel_import_object")); doImport.setSelected(true); - parentLabel = new JLabel("Parent:"); + parentLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_objectpanel_parent")); if (object.getParent() != null) { - oldParentLabel = new JLabel("(Old Parent: " + object.getParent().getName() + ")"); + oldParentLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_objectpanel_old_parent") + object.getParent().getName() + ")"); } else { - oldParentLabel = new JLabel("(Old Parent: {no parent})"); + oldParentLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_objectpanel_old_parent_no")); } parents = possibleParents; @@ -3633,10 +3631,10 @@ public ObjectPanel(final Camera c) { title = new JLabel(c.getClass().getSimpleName() + " \"" + c.getName() + "\""); title.setFont(new Font("Arial", Font.BOLD, 26)); - doImport = new JCheckBox("Import this object"); + doImport = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_objectpanel_import_object")); doImport.setSelected(true); - parentLabel = new JLabel("Parent:"); - oldParentLabel = new JLabel("(Cameras don't have parents)"); + parentLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_objectpanel_parent")); + oldParentLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_objectpanel_cameras_no_parents")); final GroupLayout layout = new GroupLayout(this); layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER).addComponent(title) @@ -3650,14 +3648,14 @@ public ObjectPanel(final Camera c) { class MultiObjectPanel extends ObjectPanel implements ChangeListener { public MultiObjectPanel(final DefaultListModel possibleParents) { - title = new JLabel("Multiple Selected"); + title = new JLabel(LocalizationManager.getInstance().get("label.importpanel_multiobjectpanel_multiple_selected")); title.setFont(new Font("Arial", Font.BOLD, 26)); - doImport = new JCheckBox("Import these objects (click to apply to all)"); + doImport = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_multiobjectpanel_doImport")); doImport.setSelected(true); doImport.addChangeListener(this); - parentLabel = new JLabel("Parent:"); - oldParentLabel = new JLabel("(Old parent can only be displayed for a single object)"); + parentLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_multiobjectpanel_parent")); + oldParentLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_multiobjectpanel_parent_displayed")); parents = possibleParents; parentsList = new JList(parents); @@ -3754,8 +3752,8 @@ public Component getListCellRendererComponent(final JList list, final Object val } class VisibilityPane extends JPanel { - static final String NOTVISIBLE = "Not visible"; - static final String VISIBLE = "Always visible"; + static final String NOTVISIBLE = LocalizationManager.getInstance().get("string.importpanel_visibilitypane_not_visible"); + static final String VISIBLE = LocalizationManager.getInstance().get("string.importpanel_visibilitypane_always_visible"); JLabel oldAnimsLabel; JComboBox oldSourcesBox; JLabel newAnimsLabel; @@ -3775,7 +3773,7 @@ public VisibilityPane(final VisibilityShell sourceShell, final DefaultComboBoxMo title = new JLabel(sourceShell.model.getName() + ": " + sourceShell.source.getName()); title.setFont(new Font("Arial", Font.BOLD, 26)); - oldAnimsLabel = new JLabel("Existing animation visibility from: "); + oldAnimsLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_visibilitypane_existing_animation_visibility")); oldSourcesBox = new JComboBox(oldSources); oldSourcesBox.setEditable(false); oldSourcesBox.setMaximumSize(new Dimension(1000, 25)); @@ -3792,7 +3790,7 @@ public VisibilityPane(final VisibilityShell sourceShell, final DefaultComboBoxMo oldSourcesBox.setSelectedItem(VISIBLE); } - newAnimsLabel = new JLabel("Imported animation visibility from: "); + newAnimsLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_visibilitypane_imported_animation_visibility")); newSourcesBox = new JComboBox(newSources); newSourcesBox.setEditable(false); newSourcesBox.setMaximumSize(new Dimension(1000, 25)); @@ -3809,7 +3807,7 @@ public VisibilityPane(final VisibilityShell sourceShell, final DefaultComboBoxMo newSourcesBox.setSelectedItem(VISIBLE); } - favorOld = new JCheckBox("Favor component's original visibility when combining"); + favorOld = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_visibilitypane_original_visibility")); favorOld.setSelected(true); final GroupLayout layout = new GroupLayout(this); @@ -3851,24 +3849,24 @@ public void selectSimilarOptions() { class MultiVisibilityPane extends VisibilityPane implements ChangeListener, ItemListener { public MultiVisibilityPane(final DefaultComboBoxModel oldSources, final DefaultComboBoxModel newSources, final ListCellRenderer renderer) { - title = new JLabel("Multiple Selected"); + title = new JLabel(LocalizationManager.getInstance().get("label.importpanel_multivisibilitypane_multiple_selected")); title.setFont(new Font("Arial", Font.BOLD, 26)); - oldAnimsLabel = new JLabel("Existing animation visibility from: "); + oldAnimsLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_multivisibilitypane_existing_animation_visibilit")); oldSourcesBox = new JComboBox(oldSources); oldSourcesBox.setEditable(false); oldSourcesBox.setMaximumSize(new Dimension(1000, 25)); oldSourcesBox.setRenderer(renderer); oldSourcesBox.addItemListener(this); - newAnimsLabel = new JLabel("Imported animation visibility from: "); + newAnimsLabel = new JLabel(LocalizationManager.getInstance().get("label.importpanel_multivisibilitypane_imported_animation_visibility")); newSourcesBox = new JComboBox(newSources); newSourcesBox.setEditable(false); newSourcesBox.setMaximumSize(new Dimension(1000, 25)); newSourcesBox.setRenderer(renderer); newSourcesBox.addItemListener(this); - favorOld = new JCheckBox("Favor component's original visibility when combining"); + favorOld = new JCheckBox(LocalizationManager.getInstance().get("checkbox.importpanel_multivisibilitypane_original_visibility")); favorOld.setSelected(true); favorOld.addChangeListener(this); @@ -3905,13 +3903,13 @@ public void itemStateChanged(final ItemEvent e) { public void setMultipleOld() { oldSourcesBox.setEditable(true); - oldSourcesBox.setSelectedItem("Multiple selected"); + oldSourcesBox.setSelectedItem(LocalizationManager.getInstance().get("string.importpanel_setmultipleold")); oldSourcesBox.setEditable(false); } public void setMultipleNew() { newSourcesBox.setEditable(true); - newSourcesBox.setSelectedItem("Multiple selected"); + newSourcesBox.setSelectedItem(LocalizationManager.getInstance().get("string.importpanel_setmultiplenew")); newSourcesBox.setEditable(false); } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/MatrixPopup.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/MatrixPopup.java index 2b295c3a5..01b20da96 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/MatrixPopup.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/MatrixPopup.java @@ -22,6 +22,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; /** * The panel to handle re-assigning Matrices. @@ -48,7 +49,7 @@ public class MatrixPopup extends JPanel implements ActionListener, ListSelection JScrollPane bonesPane; JButton useBone; - JCheckBox displayParents = new JCheckBox("Display parents", false); + JCheckBox displayParents = new JCheckBox(LocalizationManager.getInstance().get("checkbox.matrixpopup_matrixpopup_displayparents"), false); EditableModel model; @@ -58,7 +59,7 @@ public MatrixPopup(final EditableModel model) { final ParentToggleRenderer renderer = new ParentToggleRenderer(displayParents, disp, null); displayParents.addChangeListener(this); - bonesLabel = new JLabel("Bones"); + bonesLabel = new JLabel(LocalizationManager.getInstance().get("label.matrixpopup_matrixpopup_boneslabel")); buildBonesList(); // Built before oldBoneRefs, so that the MatrixShells can default to // using New Refs with the same name as their first bone @@ -67,17 +68,17 @@ public MatrixPopup(final EditableModel model) { bonesPane = new JScrollPane(bonesList); bonesPane.setPreferredSize(new Dimension(400, 500)); - useBone = new JButton("Use Bone(s)", ImportPanel.greenArrowIcon); + useBone = new JButton(LocalizationManager.getInstance().get("label.matrixpopup_matrixpopup_usebone"), ImportPanel.greenArrowIcon); useBone.addActionListener(this); - newRefsLabel = new JLabel("New Refs"); + newRefsLabel = new JLabel(LocalizationManager.getInstance().get("label.matrixpopup_matrixpopup_newrefslabel")); newRefs = new DefaultListModel<>(); newRefsList = new JList(newRefs); newRefsList.setCellRenderer(renderer); newRefsPane = new JScrollPane(newRefsList); newRefsPane.setPreferredSize(new Dimension(400, 500)); - removeNewRef = new JButton("Remove", ImportPanel.redXIcon); + removeNewRef = new JButton(LocalizationManager.getInstance().get("button.matrixpopup_matrixpopup_removenewref"), ImportPanel.redXIcon); removeNewRef.addActionListener(this); moveUp = new JButton(ImportPanel.moveUpIcon); moveUp.addActionListener(this); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelComponentBrowserTree.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelComponentBrowserTree.java index bbadbbae8..eff1e4825 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelComponentBrowserTree.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelComponentBrowserTree.java @@ -50,6 +50,7 @@ import com.hiveworkshop.wc3.mdx.BindPoseChunk; import com.hiveworkshop.wc3.mdx.FaceEffectsChunk.FaceEffect; import com.hiveworkshop.wc3.util.IconUtils; +import hiveworkshop.localizationmanager.LocalizationManager; public final class ModelComponentBrowserTree extends JTree { private final ModelViewManager modelViewManager; @@ -223,14 +224,14 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM root.add(new DefaultMutableTreeNode(new ChooseableModelHeader(modelViewManager, undoActionListener, modelStructureChangeListener, modelViewManager.getModel()))); final DefaultMutableTreeNode sequences = new DefaultMutableTreeNode(new ChooseableDummyItem(modelViewManager, - undoActionListener, modelStructureChangeListener, "Sequences")); + undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_sequences"))); for (final Animation item : modelViewManager.getModel().getAnims()) { sequences.add(new DefaultMutableTreeNode(new ChooseableAnimationItem(modelViewManager, undoActionListener, modelStructureChangeListener, item))); } root.add(sequences); final DefaultMutableTreeNode globalSequences = new DefaultMutableTreeNode(new ChooseableDummyItem( - modelViewManager, undoActionListener, modelStructureChangeListener, "GlobalSequences")); + modelViewManager, undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_globalsequences"))); for (int globalSeqId = 0; globalSeqId < modelViewManager.getModel().getGlobalSeqs().size(); globalSeqId++) { globalSequences.add(new DefaultMutableTreeNode( new ChooseableGlobalSequenceItem(modelViewManager, undoActionListener, modelStructureChangeListener, @@ -238,35 +239,35 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM } root.add(globalSequences); final DefaultMutableTreeNode textures = new DefaultMutableTreeNode(new ChooseableDummyItem(modelViewManager, - undoActionListener, modelStructureChangeListener, "Textures")); + undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_textures"))); for (final Bitmap item : modelViewManager.getModel().getTextures()) { textures.add(new DefaultMutableTreeNode(new ChooseableBitmapItem(modelViewManager, undoActionListener, modelStructureChangeListener, item))); } root.add(textures); final DefaultMutableTreeNode materials = new DefaultMutableTreeNode(new ChooseableDummyItem(modelViewManager, - undoActionListener, modelStructureChangeListener, "Materials")); + undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_materials"))); for (final Material item : modelViewManager.getModel().getMaterials()) { materials.add(new DefaultMutableTreeNode(new ChooseableMaterialItem(modelViewManager, undoActionListener, modelStructureChangeListener, item))); } root.add(materials); final DefaultMutableTreeNode tVertexAnims = new DefaultMutableTreeNode(new ChooseableDummyItem(modelViewManager, - undoActionListener, modelStructureChangeListener, "TVertexAnims")); + undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_tvertexanims"))); for (final TextureAnim item : modelViewManager.getModel().getTexAnims()) { tVertexAnims.add(new DefaultMutableTreeNode(new ChooseableTextureAnimItem(modelViewManager, undoActionListener, modelStructureChangeListener, item))); } root.add(tVertexAnims); final DefaultMutableTreeNode geosets = new DefaultMutableTreeNode( - new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, "Geosets")); + new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_geosets"))); for (final Geoset item : modelViewManager.getModel().getGeosets()) { geosets.add(new DefaultMutableTreeNode(new ChooseableGeosetItem(modelViewManager, undoActionListener, modelStructureChangeListener, item))); } root.add(geosets); final DefaultMutableTreeNode geosetAnims = new DefaultMutableTreeNode(new ChooseableDummyItem(modelViewManager, - undoActionListener, modelStructureChangeListener, "GeosetAnims")); + undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_geosetsanims"))); for (final GeosetAnim item : modelViewManager.getModel().getGeosetAnims()) { geosetAnims.add(new DefaultMutableTreeNode(new ChooseableGeosetAnimItem(modelViewManager, undoActionListener, modelStructureChangeListener, item))); @@ -309,7 +310,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM final Map nodeToTreeElement = new HashMap<>(); final Map> nodeToChildrenAwaitingLink = new HashMap<>(); final DefaultMutableTreeNode nodes = new DefaultMutableTreeNode( - new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, "Nodes")); + new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_nodes"))); nodeToTreeElement.put(null, nodes); for (final IdObject object : modelViewManager.getModel().getIdObjects()) { object.apply(converter); @@ -344,7 +345,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM root.add(nodes); final DefaultMutableTreeNode cameras = new DefaultMutableTreeNode( - new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, "Cameras")); + new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_cameras"))); for (final Camera item : modelViewManager.getModel().getCameras()) { cameras.add(new DefaultMutableTreeNode(new ChooseableCameraItem(modelViewManager, undoActionListener, modelStructureChangeListener, item))); @@ -499,7 +500,7 @@ protected void select(final EditableModel item, final ModelViewManager modelView @Override protected String getName(final EditableModel item, final ModelViewManager modelViewManager) { - return "Model \"" + item.getHeaderName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablemodelroot_model") + " \"" + item.getHeaderName() + "\""; } @Override @@ -530,7 +531,7 @@ protected void select(final EditableModel item, final ModelViewManager modelView @Override protected String getName(final EditableModel item, final ModelViewManager modelViewManager) { - return "Comment"; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablemodelcomment_comment"); } @Override @@ -561,7 +562,7 @@ protected void select(final EditableModel item, final ModelViewManager modelView @Override protected String getName(final EditableModel item, final ModelViewManager modelViewManager) { - return "Header"; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablemodelheader_header"); } @Override @@ -591,7 +592,7 @@ protected void select(final Animation item, final ModelViewManager modelViewMana @Override protected String getName(final Animation item, final ModelViewManager modelViewManager) { - return "Anim \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableanimationitem_anim") + " \"" + item.getName() + "\""; } @Override @@ -626,7 +627,7 @@ protected void select(final Integer item, final ModelViewManager modelViewManage @Override protected String getName(final Integer item, final ModelViewManager modelViewManager) { - return "GlobalSequence " + globalSeqId + ": Duration " + item; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableglobalsequenceitem_globalsequence") + globalSeqId + LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableglobalsequenceitem_duration") + item; } @Override @@ -662,7 +663,7 @@ protected void select(final Bitmap item, final ModelViewManager modelViewManager @Override protected String getName(final Bitmap item, final ModelViewManager modelViewManager) { - return "Bitmap \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablebitmapitem_bitmap") + " \"" + item.getName() + "\""; } @Override @@ -693,7 +694,7 @@ protected void select(final Material item, final ModelViewManager modelViewManag @Override protected String getName(final Material item, final ModelViewManager modelViewManager) { - return "Material " + modelViewManager.getModel().getMaterials().indexOf(item); + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablematerialitem_material") + modelViewManager.getModel().getMaterials().indexOf(item); } @Override @@ -724,7 +725,7 @@ protected void select(final TextureAnim item, final ModelViewManager modelViewMa @Override protected String getName(final TextureAnim item, final ModelViewManager modelViewManager) { - return "TextureAnim " + modelViewManager.getModel().getTexAnims().indexOf(item); + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseabletextureanimitem_textureanim") + modelViewManager.getModel().getTexAnims().indexOf(item); } @Override @@ -788,7 +789,7 @@ protected void select(final GeosetAnim item, final ModelViewManager modelViewMan @Override protected String getName(final GeosetAnim item, final ModelViewManager modelViewManager) { - return "GeosetAnim " + modelViewManager.getModel().getGeosetAnims().indexOf(item); + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablegeosetanimitem_geosetanim") + modelViewManager.getModel().getGeosetAnims().indexOf(item); } @Override @@ -818,7 +819,7 @@ protected void select(final Bone item, final ModelViewManager modelViewManager, @Override protected String getName(final Bone item, final ModelViewManager modelViewManager) { - return "Bone \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableboneitem_bone") + " \"" + item.getName() + "\""; } @Override @@ -849,7 +850,7 @@ protected void select(final Helper item, final ModelViewManager modelViewManager @Override protected String getName(final Helper item, final ModelViewManager modelViewManager) { - return "Helper \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablehelperitem_helper") + " \"" + item.getName() + "\""; } @Override @@ -879,7 +880,7 @@ protected void select(final Light item, final ModelViewManager modelViewManager, @Override protected String getName(final Light item, final ModelViewManager modelViewManager) { - return "Light \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablelightitem_light") + " \"" + item.getName() + "\""; } @Override @@ -910,7 +911,7 @@ protected void select(final Attachment item, final ModelViewManager modelViewMan @Override protected String getName(final Attachment item, final ModelViewManager modelViewManager) { - return "Attachment \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableattachmentitem_attachment") + " \"" + item.getName() + "\""; } @Override @@ -941,7 +942,7 @@ protected void select(final ParticleEmitter item, final ModelViewManager modelVi @Override protected String getName(final ParticleEmitter item, final ModelViewManager modelViewManager) { - return "ParticleEmitter \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableparticleemitteritem_particleemitter") + " \"" + item.getName() + "\""; } @Override @@ -972,7 +973,7 @@ protected void select(final ParticleEmitter2 item, final ModelViewManager modelV @Override protected String getName(final ParticleEmitter2 item, final ModelViewManager modelViewManager) { - return "ParticleEmitter2 \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableparticleemitter2item_particleemitter") + " \"" + item.getName() + "\""; } @Override @@ -1004,7 +1005,7 @@ protected void select(final ParticleEmitterPopcorn item, final ModelViewManager @Override protected String getName(final ParticleEmitterPopcorn item, final ModelViewManager modelViewManager) { - return "ParticleEmitterPopcorn \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableparticleemitterpopcornitem_particleemitter") + " \"" + item.getName() + "\""; } @Override @@ -1035,7 +1036,7 @@ protected void select(final RibbonEmitter item, final ModelViewManager modelView @Override protected String getName(final RibbonEmitter item, final ModelViewManager modelViewManager) { - return "RibbonEmitter \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableribbonemitteritem_ribbonemitter") + " \"" + item.getName() + "\""; } @Override @@ -1066,7 +1067,7 @@ protected void select(final EventObject item, final ModelViewManager modelViewMa @Override protected String getName(final EventObject item, final ModelViewManager modelViewManager) { - return "EventObject \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseableeventobjectitem_eventobject") + " \"" + item.getName() + "\""; } @Override @@ -1096,7 +1097,7 @@ protected void select(final CollisionShape item, final ModelViewManager modelVie @Override protected String getName(final CollisionShape item, final ModelViewManager modelViewManager) { - return "CollisionShape \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablecollisionshapeitem_collisionshape") + " \"" + item.getName() + "\""; } @Override @@ -1126,7 +1127,7 @@ protected void select(final Camera item, final ModelViewManager modelViewManager @Override protected String getName(final Camera item, final ModelViewManager modelViewManager) { - return "Camera \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablecameraitem_camera") + " \"" + item.getName() + "\""; } @Override @@ -1156,7 +1157,7 @@ protected void select(final FaceEffect item, final ModelViewManager modelViewMan @Override protected String getName(final FaceEffect item, final ModelViewManager modelViewManager) { - return "FaceFX \"" + item.faceEffectTarget + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablefaceeffectschunkitem_facefx") + " \"" + item.faceEffectTarget + "\""; } @Override @@ -1187,7 +1188,7 @@ protected void select(final BindPoseChunk item, final ModelViewManager modelView @Override protected String getName(final BindPoseChunk item, final ModelViewManager modelViewManager) { - return "BindPoseChunk"; + return LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_chooseablebindposechunkitem_bindposechunk"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelPanel.java index 3945d5682..f7277f694 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelPanel.java @@ -44,6 +44,7 @@ import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.render3d.RenderModel; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; /** * The ModelPanel is a pane holding the display of a given MDL model. I plan to @@ -123,17 +124,17 @@ public void typeChanged(final SelectionItemTypes newType) { // dispModel = new MDLDisplay(model,this); loadModel(input); - frontArea = new DisplayPanel("Front", (byte) 1, (byte) 2, modelView, modelEditorManager.getModelEditor(), + frontArea = new DisplayPanel(LocalizationManager.getInstance().get("displayPanel.modelpanel_modelpanel_frontarea"), (byte) 1, (byte) 2, modelView, modelEditorManager.getModelEditor(), modelStructureChangeListener, viewportActivityManager, prefs, undoManager, coordDisplayListener, undoHandler, modelEditorChangeNotifier, viewportTransferHandler, editorRenderModel, viewportListener, animationModeDeleteListener); // frontArea.setViewport(1,2); - botArea = new DisplayPanel("Bottom", (byte) 1, (byte) 0, modelView, modelEditorManager.getModelEditor(), + botArea = new DisplayPanel(LocalizationManager.getInstance().get("displayPanel.modelpanel_modelpanel_botarea"), (byte) 1, (byte) 0, modelView, modelEditorManager.getModelEditor(), modelStructureChangeListener, viewportActivityManager, prefs, undoManager, coordDisplayListener, undoHandler, modelEditorChangeNotifier, viewportTransferHandler, editorRenderModel, viewportListener, animationModeDeleteListener); // botArea.setViewport(0,1); - sideArea = new DisplayPanel("Side", (byte) 0, (byte) 2, modelView, modelEditorManager.getModelEditor(), + sideArea = new DisplayPanel(LocalizationManager.getInstance().get("displayPanel.modelpanel_modelpanel_sidearea"), (byte) 0, (byte) 2, modelView, modelEditorManager.getModelEditor(), modelStructureChangeListener, viewportActivityManager, prefs, undoManager, coordDisplayListener, undoHandler, modelEditorChangeNotifier, viewportTransferHandler, editorRenderModel, viewportListener, animationModeDeleteListener); @@ -151,7 +152,7 @@ public void typeChanged(final SelectionItemTypes newType) { botArea.setControlsVisible(prefs.showVMControls()); sideArea.setControlsVisible(prefs.showVMControls()); - perspArea = new PerspDisplayPanel("Perspective", modelView, prefs, editorRenderModel); + perspArea = new PerspDisplayPanel(LocalizationManager.getInstance().get("displayPanel.modelpanel_modelpanel_persparea"), modelView, prefs, editorRenderModel); componentsPanel = new ComponentsPanel(textureExporter); modelComponentBrowserTree.addSelectListener(componentsPanel); @@ -261,9 +262,7 @@ public void actionPerformed(final ActionEvent e) { // frontArea.clearGeosets(); // sideArea.clearGeosets(); // botArea.clearGeosets(); - // modelMenu.getAccessibleContext().setAccessibleDescription("Allows the - // user to control which parts of the model are displayed for - // editing."); + // modelMenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("description.modelpanel_actionperformed_control_model_editing")); // modelMenu.setEnabled(true); // loadFile(currentFile); // } @@ -293,8 +292,8 @@ public void actionPerformed(final ActionEvent e) { // // } // // catch (Exception exc ) // // { - // // JOptionPane.showMessageDialog(this,"Opening command failed: - // "+exc.getLocalizedMessage()); + // // JOptionPane.showMessageDialog(this,LocalizationManager.getInstance().get("dialog.modelpanel_actionperformed_opening_command_failed") + // +exc.getLocalizedMessage()); // // } // // } // // @@ -306,8 +305,8 @@ public void actionPerformed(final ActionEvent e) { // // } // // catch (IOException exc) // // { - // // JOptionPane.showMessageDialog(this,"Problem opening file: - // "+exc.getLocalizedMessage()); + // // JOptionPane.showMessageDialog(this,LocalizationManager.getInstance().get("dialog.modelpanel_actionperformed_opening_file") + // +exc.getLocalizedMessage()); // // } // // } // } @@ -318,9 +317,7 @@ public void actionPerformed(final ActionEvent e) { // if( returnValue == JFileChooser.APPROVE_OPTION ) // { // currentFile = fc.getSelectedFile(); - // modelMenu.getAccessibleContext().setAccessibleDescription("Allows the - // user to control which parts of the model are displayed for - // editing."); + // modelMenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("description.modelpanel_actionperformed_control_model_editing")); // modelMenu.setEnabled(true); // loadFile(currentFile); // } @@ -350,8 +347,8 @@ public void actionPerformed(final ActionEvent e) { // // } // // catch (Exception exc ) // // { - // // JOptionPane.showMessageDialog(this,"Opening command failed: - // "+exc.getLocalizedMessage()); + // // JOptionPane.showMessageDialog(this,LocalizationManager.getInstance().get("dialog.modelpanel_actionperformed_opening_command_failed") + // +exc.getLocalizedMessage()); // // } // // } // // @@ -363,8 +360,8 @@ public void actionPerformed(final ActionEvent e) { // // } // // catch (IOException exc) // // { - // // JOptionPane.showMessageDialog(this,"Problem opening file: - // "+exc.getLocalizedMessage()); + // // JOptionPane.showMessageDialog(this,LocalizationManager.getInstance().get("dialog.modelpanel_actionperformed_opening_file") + // +exc.getLocalizedMessage()); // // } // // } // } @@ -386,11 +383,14 @@ public boolean close(final ModelPanelCloseListener listener)// MainPanel parent) boolean canceled = false; // int myIndex = parent.tabbedPane.indexOfComponent(this); if (!undoManager.isUndoListEmpty()) { - final Object[] options = { "Yes", "No", "Cancel" }; + final Object[] options = { + LocalizationManager.getInstance().get("global.button.yes"), + LocalizationManager.getInstance().get("global.button.no"), + LocalizationManager.getInstance().get("global.button.cancel") }; final int n = JOptionPane.showOptionDialog(parent, - "Would you like to save " + model.getName()/* parent.tabbedPane.getTitleAt(myIndex) */ + " (\"" - + model.getHeaderName() + "\") before closing?", - "Warning", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, options, + LocalizationManager.getInstance().get("dialog.modelpanel_close_1") + model.getName()/* parent.tabbedPane.getTitleAt(myIndex) */ + " (\"" + + model.getHeaderName() + "\")" + LocalizationManager.getInstance().get("dialog.modelpanel_close_2"), + LocalizationManager.getInstance().get("dialog.modelpanel_close_3"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[2]); switch (n) { case JOptionPane.YES_OPTION: @@ -508,7 +508,7 @@ public void viewMatrices() { String boneList = ""; for (int i = 0; i < boneRefs.size(); i++) { if (i == (boneRefs.size() - 2)) { - boneList = boneList + boneRefs.get(i).getName() + " and "; + boneList = boneList + boneRefs.get(i).getName() + LocalizationManager.getInstance().get("string.modelpanel_viewmatrices_1"); } else if (i == (boneRefs.size() - 1)) { boneList = boneList + boneRefs.get(i).getName(); @@ -518,7 +518,7 @@ else if (i == (boneRefs.size() - 1)) { } } if (boneRefs.size() == 0) { - boneList = "Nothing was selected that was attached to any bones."; + boneList = LocalizationManager.getInstance().get("string.modelpanel_viewmatrices_2"); } final JTextArea tpane = new JTextArea(boneList); tpane.setLineWrap(true); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelViewManagingTree.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelViewManagingTree.java index 08ec63857..190ae058c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelViewManagingTree.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelViewManagingTree.java @@ -25,6 +25,7 @@ import com.hiveworkshop.wc3.mdl.Geoset; import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; public final class ModelViewManagingTree extends JCheckBoxTree { private final ModelViewManager modelViewManager; @@ -128,7 +129,7 @@ private CheckableDisplayElement asElement(final Object userObject) { private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewManager) { final JCheckBoxTreeNode root = new JCheckBoxTreeNode(new CheckableModelElement(modelViewManager)); - final JCheckBoxTreeNode mesh = new JCheckBoxTreeNode(new CheckableDummyElement(modelViewManager, "Mesh")); + final JCheckBoxTreeNode mesh = new JCheckBoxTreeNode(new CheckableDummyElement(modelViewManager, LocalizationManager.getInstance().get("checkboxtreenode.modelviewmanagingtree_buildtreemodel_mesh"))); for (final Geoset geoset : modelViewManager.getModel().getGeosets()) { final boolean contains = modelViewManager.getEditableGeosets().contains(geoset); @@ -141,7 +142,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM final Map nodeToTreeElement = new HashMap<>(); final Map> nodeToChildrenAwaitingLink = new HashMap<>(); - final JCheckBoxTreeNode nodes = new JCheckBoxTreeNode(new CheckableDummyElement(modelViewManager, "Nodes")); + final JCheckBoxTreeNode nodes = new JCheckBoxTreeNode(new CheckableDummyElement(modelViewManager, LocalizationManager.getInstance().get("checkboxtreenode.modelviewmanagingtree_buildtreemodel_nodes"))); nodeToTreeElement.put(null, nodes); for (final IdObject object : modelViewManager.getModel().getIdObjects()) { final JCheckBoxTreeNode treeNode = new JCheckBoxTreeNode(new CheckableNodeElement(modelViewManager, object), @@ -175,7 +176,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM root.add(nodes); } - final JCheckBoxTreeNode cameras = new JCheckBoxTreeNode(new CheckableDummyElement(modelViewManager, "Cameras")); + final JCheckBoxTreeNode cameras = new JCheckBoxTreeNode(new CheckableDummyElement(modelViewManager, LocalizationManager.getInstance().get("checkboxtreenode.modelviewmanagingtree_buildtreemodel_cameras"))); for (final Camera camera : modelViewManager.getModel().getCameras()) { cameras.add(new JCheckBoxTreeNode(new CheckableCameraElement(modelViewManager, camera), modelViewManager.getEditableCameras().contains(camera))); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/PerspectiveViewport.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/PerspectiveViewport.java index de88aaee1..88643fa96 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/PerspectiveViewport.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/PerspectiveViewport.java @@ -92,6 +92,7 @@ import com.hiveworkshop.wc3.mdl.render3d.RenderRibbonEmitter; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.util.MathUtils; +import hiveworkshop.localizationmanager.LocalizationManager; public class PerspectiveViewport extends BetterAWTGLCanvas implements MouseListener, ActionListener, MouseWheelListener, RenderResourceAllocator { @@ -159,10 +160,10 @@ public PerspectiveViewport(final ModelView modelView, final ProgramPreferences p addMouseWheelListener(this); contextMenu = new JPopupMenu(); - reAssignMatrix = new JMenuItem("Re-assign Matrix"); + reAssignMatrix = new JMenuItem(LocalizationManager.getInstance().get("menuitem.perspectiveviewport_perspectiveviewport_reassign_matrix")); reAssignMatrix.addActionListener(this); contextMenu.add(reAssignMatrix); - cogBone = new JMenuItem("Auto-Center Bone(s)"); + cogBone = new JMenuItem(LocalizationManager.getInstance().get("menuitem.perspectiveviewport_perspectiveviewport_aAuto_center_bone")); cogBone.addActionListener(this); contextMenu.add(cogBone); @@ -367,7 +368,7 @@ public void initGL() { } } catch (final Throwable e) { - JOptionPane.showMessageDialog(null, "initGL failed because of this exact reason:\n" + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.perspectiveviewport_initgl_failed") + e.getClass().getSimpleName() + ": " + e.getMessage()); throw new RuntimeException(e); } @@ -455,7 +456,7 @@ public void paintGL() { } catch (final Exception e) { e.printStackTrace(); - ExceptionPopup.display("Error loading textures:", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("display.perspectiveviewport_paintgl_loading_textures"), e); } } else if (wantReload) { @@ -465,7 +466,7 @@ else if (wantReload) { } catch (final Exception e) { e.printStackTrace(); - ExceptionPopup.display("Error loading new texture:", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("display.perspectiveviewport_paintgl_loading_new_textures"), e); } } else if (!texLoaded && ((programPreferences == null) || programPreferences.textureModels())) { @@ -1103,20 +1104,20 @@ public void actionPerformed(final ActionEvent e) { } else if (e.getSource() == reAssignMatrix) { // MatrixPopup matrixPopup = new MatrixPopup(dispMDL.getMDL()); - // String[] words = { "Accept", "Cancel" }; + // String[] words = { LocalizationManager.getInstance().get("global.button.accept"), LocalizationManager.getInstance().get("global.button.cancel") }; // int i = JOptionPane.showOptionDialog(MainFrame.panel, // matrixPopup, - // "Rebuild Matrix", JOptionPane.PLAIN_MESSAGE, + // LocalizationManager.getInstance().get("dialog.perspectiveviewport_actionperformed_rebuild_matrix"), JOptionPane.PLAIN_MESSAGE, // JOptionPane.YES_NO_OPTION, null, words, words[1]); // if (i == 0) { - // // JOptionPane.showMessageDialog(null,"action approved"); + // // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.perspectiveviewport_actionperformed_approved")); // dispMDL.setMatrix(matrixPopup.newRefs); // } } else if (e.getSource() == cogBone) { // modelView.cogBones(); JOptionPane.showMessageDialog(this, - "Please use other viewport, this action is not implemented for this viewport."); + LocalizationManager.getInstance().get("dialog.perspectiveviewport_actionperformed_viewport_not_implemented")); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ProgramPreferencesPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ProgramPreferencesPanel.java index 87e64f987..26aa44edc 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ProgramPreferencesPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ProgramPreferencesPanel.java @@ -22,6 +22,7 @@ import com.hiveworkshop.wc3.gui.datachooser.DataSourceDescriptor; import com.hiveworkshop.wc3.gui.util.ColorChooserIcon; import com.hiveworkshop.wc3.gui.util.ColorChooserIcon.ColorListener; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -34,9 +35,9 @@ public ProgramPreferencesPanel(final ProgramPreferences programPreferences, this.programPreferences = programPreferences; final JPanel generalPrefsPanel = new JPanel(); - final JLabel viewModeLabel = new JLabel("3D View Mode"); - final JRadioButton wireframeViewMode = new JRadioButton("Wireframe"); - final JRadioButton solidViewMode = new JRadioButton("Solid"); + final JLabel viewModeLabel = new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_viewmodelabel")); + final JRadioButton wireframeViewMode = new JRadioButton(LocalizationManager.getInstance().get("radiobutton.programpreferencespanel_programpreferencespanel_wireframeviewmode")); + final JRadioButton solidViewMode = new JRadioButton(LocalizationManager.getInstance().get("radiobutton.programpreferencespanel_programpreferencespanel_solidviewmode")); final JCheckBox invertedDisplay = new JCheckBox(); final JCheckBox useBoxesForNodes = new JCheckBox(); final JCheckBox quickBrowse = new JCheckBox(); @@ -91,28 +92,28 @@ public void actionPerformed(final ActionEvent e) { generalPrefsPanel.add(viewModeLabel, "cell 0 0"); generalPrefsPanel.add(wireframeViewMode, "cell 0 1"); generalPrefsPanel.add(solidViewMode, "cell 0 2"); - generalPrefsPanel.add(new JLabel("Show Viewport Gridlines:"), "cell 0 3"); + generalPrefsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_gridlines")), "cell 0 3"); generalPrefsPanel.add(invertedDisplay, "cell 1 3"); - generalPrefsPanel.add(new JLabel("Use Boxes for Nodes:"), "cell 0 4"); + generalPrefsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_boxes")), "cell 0 4"); generalPrefsPanel.add(useBoxesForNodes, "cell 1 4"); - generalPrefsPanel.add(new JLabel("Quick Browse:"), "cell 0 5"); - quickBrowse.setToolTipText("When opening a new model, close old ones if they have not been modified."); + generalPrefsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_browse")), "cell 0 5"); + quickBrowse.setToolTipText(LocalizationManager.getInstance().get("settooltiptext.programpreferencespanel_programpreferencespanel_close_model")); generalPrefsPanel.add(quickBrowse, "cell 1 5"); - generalPrefsPanel.add(new JLabel("Allow Loading Non BLP Textures:"), "cell 0 6"); - allowLoadingNonBlpTextures.setToolTipText("Needed for opening PNGs with standard File Open"); + generalPrefsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_loading_blp")), "cell 0 6"); + allowLoadingNonBlpTextures.setToolTipText(LocalizationManager.getInstance().get("settooltiptext.programpreferencespanel_programpreferencespanel_opening_png")); generalPrefsPanel.add(allowLoadingNonBlpTextures, "cell 1 6"); - generalPrefsPanel.add(new JLabel("Render Particle Emitters:"), "cell 0 7"); + generalPrefsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_render")), "cell 0 7"); generalPrefsPanel.add(renderParticles, "cell 1 7"); - generalPrefsPanel.add(new JLabel("Auto Refresh MDL Text (enabled=more lag):"), "cell 0 8"); + generalPrefsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_mdl_text")), "cell 0 8"); generalPrefsPanel.add(autoPopulateMdlTextEditor, "cell 1 8"); - generalPrefsPanel.add(new JLabel("Force Use OpenGL (may fix Windows UI bugs):"), "cell 0 9"); + generalPrefsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_opengl")), "cell 0 9"); generalPrefsPanel.add(disableDirectXToPreventArtifacts, "cell 1 9"); - generalPrefsPanel.add(new JLabel("Always use minimal Matrices in HD (the \"4.5\" save format):"), "cell 0 10"); + generalPrefsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_minimal_matrices")), "cell 0 10"); generalPrefsPanel.add(alwaysUseMinimalMatricesInHD, "cell 1 10"); // final BoxLayout boxLayout = new BoxLayout(generalPrefsPanel, // BoxLayout.PAGE_AXIS); - addTab("General", generalPrefsPanel); + addTab(LocalizationManager.getInstance().get("addtab.programpreferencespanel_programpreferencespanel_general"), generalPrefsPanel); final JPanel modelEditorPanel = new JPanel(); modelEditorPanel.setLayout(new MigLayout()); @@ -307,73 +308,74 @@ public void actionPerformed(final ActionEvent e) { if (!hasWarned) { hasWarned = true; JOptionPane.showMessageDialog(ProgramPreferencesPanel.this, - "Some settings may not take effect until you restart the application.", "Warning", + LocalizationManager.getInstance().get("dialog.programpreferencespanel_programpreferencespanel_restart"), + LocalizationManager.getInstance().get("dialog.programpreferencespanel_programpreferencespanel_restart_1"), JOptionPane.WARNING_MESSAGE); } } }); int row = 0; - modelEditorPanel.add(new JLabel("Background Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_background_color")), "cell 0 " + row); modelEditorPanel.add(backgroundColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Vertex Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_vertex_color")), "cell 0 " + row); modelEditorPanel.add(vertexColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Triangle Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_triangle_color")), "cell 0 " + row); modelEditorPanel.add(triangleColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Select Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_select_color")), "cell 0 " + row); modelEditorPanel.add(selectColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Triangle Highlight Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_triangle_highlight_color")), "cell 0 " + row); modelEditorPanel.add(triangleHighlightColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Vertex Highlight Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_vertex_highlight_color")), "cell 0 " + row); modelEditorPanel.add(vertexHighlightColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Perspective Background Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_perspective_background_color")), "cell 0 " + row); modelEditorPanel.add(perspectiveBackgroundColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Visible Uneditable Mesh Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_visible_uneditable_mesh_color")), "cell 0 " + row); modelEditorPanel.add(visibleUneditableColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Animation Editor Bone Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_animation_bone_color")), "cell 0 " + row); modelEditorPanel.add(animtedBoneUnselectedColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Animation Editor Selected Bone Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_animation_selected_bone_color")), "cell 0 " + row); modelEditorPanel.add(animtedBoneSelectedColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Animation Editor Selected Upstream Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_animation_selected_upstream_color")), "cell 0 " + row); modelEditorPanel.add(animtedBoneSelectedUpstreamColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Pivot Point Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_pivot_color")), "cell 0 " + row); modelEditorPanel.add(pivotPointColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Pivot Point Selected Color:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_pivot_selected_color")), "cell 0 " + row); modelEditorPanel.add(pivotPointSelectedColorIcon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Button B Color 1:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_button_color_b1")), "cell 0 " + row); modelEditorPanel.add(buttonColorB1Icon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Button B Color 2:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_button_color_b2")), "cell 0 " + row); modelEditorPanel.add(buttonColorB2Icon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Button Color 1:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_button_color_1")), "cell 0 " + row); modelEditorPanel.add(buttonColor1Icon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Button Color 2:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_button_color_2")), "cell 0 " + row); modelEditorPanel.add(buttonColor2Icon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Button R Color 1:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_button_color_r1")), "cell 0 " + row); modelEditorPanel.add(buttonColorR1Icon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Button R Color 2:"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_button_color_r2")), "cell 0 " + row); modelEditorPanel.add(buttonColorR2Icon, "cell 1 " + row); row++; - modelEditorPanel.add(new JLabel("Window Borders (Theme):"), "cell 0 " + row); + modelEditorPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_theme")), "cell 0 " + row); modelEditorPanel.add(themeCheckBox, "cell 1 " + row); - addTab("Colors/Theme", new JScrollPane(modelEditorPanel)); + addTab(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_color_theme"), new JScrollPane(modelEditorPanel)); final JPanel hotkeysPanel = new JPanel(); hotkeysPanel.setLayout(new MigLayout()); @@ -394,16 +396,16 @@ public void actionPerformed(final ActionEvent e) { programPreferences.setThreeDCameraPanButton((MouseButtonPreference) cameraPanBox.getSelectedItem()); } }); - hotkeysPanel.add(new JLabel("3D Camera Spin"), "cell 0 " + row); + hotkeysPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_camera_spin")), "cell 0 " + row); hotkeysPanel.add(cameraSpinBox, "cell 1 " + row); row++; - hotkeysPanel.add(new JLabel("3D Camera Pan"), "cell 0 " + row); + hotkeysPanel.add(new JLabel(LocalizationManager.getInstance().get("label.programpreferencespanel_programpreferencespanel_camera_pan")), "cell 0 " + row); hotkeysPanel.add(cameraPanBox, "cell 1 " + row); row++; - addTab("Hotkeys", hotkeysPanel); + addTab(LocalizationManager.getInstance().get("addtab.programpreferencespanel_programpreferencespanel_hotkeys"), hotkeysPanel); dataSourceChooserPanel = new DataSourceChooserPanel(dataSources); - addTab("Warcraft Data", dataSourceChooserPanel); + addTab(LocalizationManager.getInstance().get("addtab.programpreferencespanel_programpreferencespanel_data"), dataSourceChooserPanel); } public List getDataSources() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/SmartMappingChooserPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/SmartMappingChooserPanel.java index 2cfbfac0b..d8e101e61 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/SmartMappingChooserPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/SmartMappingChooserPanel.java @@ -30,6 +30,7 @@ import com.hiveworkshop.wc3.mdl.Helper; import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -95,7 +96,7 @@ public SmartMappingChooserPanel(final ModelView importModelView, final ModelView setLayout(new MigLayout("fill", "[fill, grow][fill, grow][fill, grow]", "[][fill, grow]")); - final JCheckBox showParentsBox = new JCheckBox("Show parents"); + final JCheckBox showParentsBox = new JCheckBox(LocalizationManager.getInstance().get("checkbox.smartmappingchooserpanel_smartmappingchooserpanel_showparentsbox")); final ParentToggleRenderer parentToggleRenderer = new ParentToggleRenderer(showParentsBox, currentModelView, importModelView); showParentsBox.addChangeListener(new ChangeListener() { @@ -136,13 +137,13 @@ public Component getListCellRendererComponent(final JList list, final Object currentList.list.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(final ListSelectionEvent e) { - System.out.println("select"); + System.out.println(LocalizationManager.getInstance().get("println.smartmappingchooserpanel_smartmappingchooserpanel_select")); if (!e.getValueIsAdjusting()) { - System.out.println("select good"); + System.out.println(LocalizationManager.getInstance().get("println.smartmappingchooserpanel_smartmappingchooserpanel_select_good")); final BoneShell left = importList.list.getSelectedValue(); final BoneShell right = currentList.list.getSelectedValue(); if ((left != null) && (right != null)) { - System.out.println("select real stuff"); + System.out.println(LocalizationManager.getInstance().get("println.smartmappingchooserpanel_smartmappingchooserpanel_select_real")); int indexToRemove = -1; for (int i = 0; i < pairingListModel.size(); i++) { final Pairing existingPairing = pairingListModel.get(i); @@ -154,7 +155,7 @@ public void valueChanged(final ListSelectionEvent e) { pairingListModel.remove(indexToRemove); } - System.out.println("add"); + System.out.println(LocalizationManager.getInstance().get("println.smartmappingchooserpanel_smartmappingchooserpanel_add")); pairingListModel.addElement(new Pairing(left, right)); hasPairingSet.add(left); currentList.list.setSelectedValue(null, false); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/TextureAnimListCellRenderer.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/TextureAnimListCellRenderer.java index d1b9917df..2977df335 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/TextureAnimListCellRenderer.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/TextureAnimListCellRenderer.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdl.TextureAnim; +import hiveworkshop.localizationmanager.LocalizationManager; public class TextureAnimListCellRenderer extends DefaultListCellRenderer { Font theFont = new Font("Arial", Font.BOLD, 32); @@ -22,10 +23,10 @@ public Component getListCellRendererComponent(final JList list, final Object val final boolean iss, final boolean chf) { String name; if (value == null) { - name = "(No value)"; + name = LocalizationManager.getInstance().get("string.textureanimListcellrenderer_textureanimListcellrenderer_no_value"); } else { - name = "TextureAnim " + model.getTextureAnimId((TextureAnim) value); + name = LocalizationManager.getInstance().get("string.textureanimListcellrenderer_textureanimListcellrenderer_textureanim") + model.getTextureAnimId((TextureAnim) value); } super.getListCellRendererComponent(list, name, index, iss, chf); setFont(theFont); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVPanel.java index 39ca11c1c..c43db14ba 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVPanel.java @@ -84,6 +84,7 @@ import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.user.SaveProfile; import com.hiveworkshop.wc3.util.IconUtils; +import hiveworkshop.localizationmanager.LocalizationManager; import net.infonode.docking.View; @@ -125,7 +126,7 @@ public class UVPanel extends JPanel ModelEditorActionType actionType; View view; - AbstractAction selectAllAction = new AbstractAction("Select All") { + AbstractAction selectAllAction = new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_uvpanel_selectallaction")) { @Override public void actionPerformed(final ActionEvent e) { @@ -136,7 +137,7 @@ public void actionPerformed(final ActionEvent e) { repaint(); } }; - AbstractAction invertSelectAction = new AbstractAction("Invert Selection") { + AbstractAction invertSelectAction = new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_uvpanel_invertselectaction")) { @Override public void actionPerformed(final ActionEvent e) { final ModelPanel mpanel = currentModelPanel(); @@ -146,7 +147,7 @@ public void actionPerformed(final ActionEvent e) { repaint(); } }; - AbstractAction expandSelectionAction = new AbstractAction("Expand Selection") { + AbstractAction expandSelectionAction = new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_uvpanel_expandselectionaction")) { @Override public void actionPerformed(final ActionEvent e) { final ModelPanel mpanel = currentModelPanel(); @@ -156,7 +157,7 @@ public void actionPerformed(final ActionEvent e) { repaint(); } }; - AbstractAction selFromMainAction = new AbstractAction("Sel From Main") { + AbstractAction selFromMainAction = new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_uvpanel_selfrommainaction")) { @Override public void actionPerformed(final ActionEvent e) { final ModelPanel mpanel = currentModelPanel(); @@ -167,7 +168,7 @@ public void actionPerformed(final ActionEvent e) { repaint(); } }; - AbstractAction mirrorXAction = new AbstractAction("Mirror X") { + AbstractAction mirrorXAction = new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_uvpanel_mirrorxaction")) { @Override public void actionPerformed(final ActionEvent e) { final ModelPanel mpanel = currentModelPanel(); @@ -179,7 +180,7 @@ public void actionPerformed(final ActionEvent e) { repaint(); } }; - AbstractAction mirrorYAction = new AbstractAction("Mirror Y") { + AbstractAction mirrorYAction = new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_uvpanel_mirroryaction")) { @Override public void actionPerformed(final ActionEvent e) { final ModelPanel mpanel = currentModelPanel(); @@ -238,15 +239,15 @@ public UVPanel(final ModelPanel dispMDL, final ProgramPreferences prefs, this.dispMDL = dispMDL; // Copied from MainPanel - selectButton = new ModeButton("Select"); + selectButton = new ModeButton(LocalizationManager.getInstance().get("button.uvpanel_uvpanel_select")); modeToButton.put(selectionModeGroup.getToolbarButtonTypes()[0], selectButton); selectButton.addActionListener(new ButtonModeChangeListener(0)); selectionModeButtons.add(selectButton); - addButton = new ModeButton("Add"); + addButton = new ModeButton(LocalizationManager.getInstance().get("button.uvpanel_uvpanel_add")); modeToButton.put(selectionModeGroup.getToolbarButtonTypes()[1], addButton); addButton.addActionListener(new ButtonModeChangeListener(1)); selectionModeButtons.add(addButton); - deselectButton = new ModeButton("Deselect"); + deselectButton = new ModeButton(LocalizationManager.getInstance().get("button.uvpanel_uvpanel_deselect")); modeToButton.put(selectionModeGroup.getToolbarButtonTypes()[2], deselectButton); deselectButton.addActionListener(new ButtonModeChangeListener(2)); selectionModeButtons.add(deselectButton); @@ -260,15 +261,15 @@ public UVPanel(final ModelPanel dispMDL, final ProgramPreferences prefs, mouseCoordDisplay[i].setMinimumSize(new Dimension(50, 15)); mouseCoordDisplay[i].setEditable(false); } - loadImage = new ModeButton("Load Image"); - moveButton = new ModeButton("Move"); + loadImage = new ModeButton(LocalizationManager.getInstance().get("button.uvpanel_uvpanel_loadimage")); + moveButton = new ModeButton(LocalizationManager.getInstance().get("button.uvpanel_uvpanel_move")); moveButton.addActionListener(new ButtonActionChangeListener(0)); - rotateButton = new ModeButton("Rotate"); + rotateButton = new ModeButton(LocalizationManager.getInstance().get("button.uvpanel_uvpanel_rotate")); rotateButton.addActionListener(new ButtonActionChangeListener(1)); - scaleButton = new ModeButton("Scale"); + scaleButton = new ModeButton(LocalizationManager.getInstance().get("button.uvpanel_uvpanel_scale")); scaleButton.addActionListener(new ButtonActionChangeListener(2)); unwrapDirectionBox = new JComboBox<>(UnwrapDirection.values()); - unwrapButton = new ModeButton("Remap UVs"); + unwrapButton = new ModeButton(LocalizationManager.getInstance().get("button.uvpanel_uvpanel_unwrap")); unwrapButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -289,7 +290,7 @@ public void actionPerformed(final ActionEvent e) { } } else { - JOptionPane.showMessageDialog(UVPanel.this, "Please select a direction", "Error", + JOptionPane.showMessageDialog(UVPanel.this, LocalizationManager.getInstance().get("dialog.uvpanel_uvpanel_select_direction"), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } } @@ -311,7 +312,7 @@ public void actionPerformed(final ActionEvent e) { buttons.add(loadImage); buttons.add(unwrapButton); - final JLabel uvLayerIndexLabel = new JLabel("UV Layer Index:"); + final JLabel uvLayerIndexLabel = new JLabel(LocalizationManager.getInstance().get("label.uvpanel_uvpanel_uvlayerindexlabel")); uvLayerIndexSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 9999, 1)); uvLayerIndexSpinner.addChangeListener(new ChangeListener() { @Override @@ -463,8 +464,8 @@ public void typeChanged(final TVertexSelectionItemTypes newType) { // // if (newType == SelectionItemTypes.TPOSE) { // -// final Object[] settings = { "Move Linked", "Move Single" }; -// final Object dialogResult = JOptionPane.showInputDialog(null, "Choose settings:", "T-Pose Settings", +// final Object[] settings = { LocalizationManager.getInstance().get("string.uvpanel_uvpanel_move_linked"), LocalizationManager.getInstance().get("string.uvpanel_uvpanel_move_single") }; +// final Object dialogResult = JOptionPane.showInputDialog(null, LocalizationManager.getInstance().get("string.uvpanel_uvpanel_choose_settings"), LocalizationManager.getInstance().get("string.uvpanel_uvpanel_tpose_settings"), // JOptionPane.PLAIN_MESSAGE, null, settings, settings[0]); // final boolean moveLinked = dialogResult == settings[0]; // ModelEditorManager.MOVE_LINKED = moveLinked; @@ -491,7 +492,7 @@ public void typeChanged(final TVertexToolbarActionButtonType newType) { final JPanel menuHolderPanel = new JPanel(new BorderLayout()); menuHolderPanel.add(this, BorderLayout.CENTER); menuHolderPanel.add(createMenuBar(), BorderLayout.BEFORE_FIRST_LINE); - view = new View("Texture Coordinate Editor: " + currentModelPanel().getModel().getName(), UVIcon, + view = new View(LocalizationManager.getInstance().get("view.uvpanel_uvpanel_texture_coordinate_editor") + currentModelPanel().getModel().getName(), UVIcon, menuHolderPanel); } @@ -507,14 +508,14 @@ public JToolBar createJToolBar() { toolbar = new JToolBar(JToolBar.HORIZONTAL); toolbar.setFloatable(false); toolbar.addSeparator(); - undoAction = new AbstractAction("Undo", RMSIcons.loadToolBarImageIcon("undo.png")) { + undoAction = new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_createjtoolbar_undo"), RMSIcons.loadToolBarImageIcon("undo.png")) { @Override public void actionPerformed(final ActionEvent e) { try { currentModelPanel().getUndoManager().undo(); } catch (final NoSuchElementException exc) { - JOptionPane.showMessageDialog(UVPanel.this, "Nothing to undo!"); + JOptionPane.showMessageDialog(UVPanel.this, LocalizationManager.getInstance().get("dialog.uvpanel_createjtoolbar_nothing_undo")); } catch (final Exception exc) { ExceptionPopup.display(exc); @@ -524,14 +525,14 @@ public void actionPerformed(final ActionEvent e) { } }; toolbar.add(undoAction); - redoAction = new AbstractAction("Redo", RMSIcons.loadToolBarImageIcon("redo.png")) { + redoAction = new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_createjtoolbar_redo"), RMSIcons.loadToolBarImageIcon("redo.png")) { @Override public void actionPerformed(final ActionEvent e) { try { currentModelPanel().getUndoManager().redo(); } catch (final NoSuchElementException exc) { - JOptionPane.showMessageDialog(UVPanel.this, "Nothing to redo!"); + JOptionPane.showMessageDialog(UVPanel.this, LocalizationManager.getInstance().get("dialog.uvpanel_createjtoolbar_nothing_redo")); } catch (final Exception exc) { ExceptionPopup.display(exc); @@ -547,7 +548,7 @@ public void actionPerformed(final ActionEvent e) { selectionItemTypeGroup = new ToolbarButtonGroup<>(toolbar, TVertexSelectionItemTypes.values()); toolbar.addSeparator(); selectAndMoveDescriptor = new TVertexToolbarActionButtonType(RMSIcons.loadToolBarImageIcon("move2.png"), - "Select and Move") { + LocalizationManager.getInstance().get("string.uvpanel_createjtoolbar_selectandmovedescriptor")) { @Override public TVertexEditorViewportActivity createActivity(final TVertexEditorManager modelEditorManager, final ModelView modelView, final UndoActionListener undoActionListener) { @@ -559,7 +560,7 @@ public TVertexEditorViewportActivity createActivity(final TVertexEditorManager m } }; selectAndRotateDescriptor = new TVertexToolbarActionButtonType(RMSIcons.loadToolBarImageIcon("rotate.png"), - "Select and Rotate") { + LocalizationManager.getInstance().get("string.uvpanel_createjtoolbar_selectandrotatedescriptor")) { @Override public TVertexEditorViewportActivity createActivity(final TVertexEditorManager modelEditorManager, final ModelView modelView, final UndoActionListener undoActionListener) { @@ -571,7 +572,7 @@ public TVertexEditorViewportActivity createActivity(final TVertexEditorManager m } }; selectAndScaleDescriptor = new TVertexToolbarActionButtonType(RMSIcons.loadToolBarImageIcon("scale.png"), - "Select and Scale") { + LocalizationManager.getInstance().get("string.uvpanel_createjtoolbar_selectandscale")) { @Override public TVertexEditorViewportActivity createActivity(final TVertexEditorManager modelEditorManager, final ModelView modelView, final UndoActionListener undoActionListener) { @@ -586,7 +587,7 @@ public TVertexEditorViewportActivity createActivity(final TVertexEditorManager m selectAndMoveDescriptor, selectAndRotateDescriptor, selectAndScaleDescriptor }); currentActivity = actionTypeGroup.getActiveButtonType(); toolbar.addSeparator(); - snapButton = toolbar.add(new AbstractAction("Snap", RMSIcons.loadToolBarImageIcon("snap.png")) { + snapButton = toolbar.add(new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_createjtoolbar_snap"), RMSIcons.loadToolBarImageIcon("snap.png")) { @Override public void actionPerformed(final ActionEvent e) { try { @@ -602,7 +603,7 @@ public void actionPerformed(final ActionEvent e) { } }); toolbar.addSeparator(); - snapXButton = toolbar.add(new AbstractAction("SnapX", RMSIcons.loadToolBarImageIcon("snapX.png")) { + snapXButton = toolbar.add(new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_createjtoolbar_snapx"), RMSIcons.loadToolBarImageIcon("snapX.png")) { @Override public void actionPerformed(final ActionEvent e) { try { @@ -617,7 +618,7 @@ public void actionPerformed(final ActionEvent e) { } } }); - snapYButton = toolbar.add(new AbstractAction("SnapY", RMSIcons.loadToolBarImageIcon("snapY.png")) { + snapYButton = toolbar.add(new AbstractAction(LocalizationManager.getInstance().get("string.uvpanel_createjtoolbar_snapy"), RMSIcons.loadToolBarImageIcon("snapY.png")) { @Override public void actionPerformed(final ActionEvent e) { try { @@ -640,39 +641,39 @@ public JMenuBar createMenuBar() { // Create my menu bar menuBar = new JMenuBar(); - editMenu = new JMenu("Edit"); + editMenu = new JMenu(LocalizationManager.getInstance().get("menu.uvpanel_createmenubar_editmenu")); editMenu.setMnemonic(KeyEvent.VK_E); editMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to use various tools to edit the currently selected model's TVertices."); + LocalizationManager.getInstance().get("description.uvpanel_createmenubar_editmenu")); menuBar.add(editMenu); - dispMenu = new JMenu("View"); + dispMenu = new JMenu(LocalizationManager.getInstance().get("menu.uvpanel_createmenubar_dispmenu")); dispMenu.setMnemonic(KeyEvent.VK_V); dispMenu.getAccessibleContext() - .setAccessibleDescription("Control display settings for this Texture Coordinate Editor window."); + .setAccessibleDescription(LocalizationManager.getInstance().get("description.uvpanel_createmenubar_dispmenu")); menuBar.add(dispMenu); - selectAll = new JMenuItem("Select All"); + selectAll = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_selectall")); selectAll.setAccelerator(KeyStroke.getKeyStroke("control A")); selectAll.addActionListener(selectAllAction); editMenu.add(selectAll); - invertSelect = new JMenuItem("Invert Selection"); + invertSelect = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_invertselect")); invertSelect.setAccelerator(KeyStroke.getKeyStroke("control I")); invertSelect.addActionListener(invertSelectAction); editMenu.add(invertSelect); - expandSelection = new JMenuItem("Expand Selection"); + expandSelection = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_expandselection")); expandSelection.setAccelerator(KeyStroke.getKeyStroke("control E")); expandSelection.addActionListener(expandSelectionAction); editMenu.add(expandSelection); - selFromMain = new JMenuItem("Select from Viewer"); + selFromMain = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_selfrommain")); selFromMain.setAccelerator(KeyStroke.getKeyStroke("control V")); selFromMain.addActionListener(selFromMainAction); editMenu.add(selFromMain); - final JMenuItem splitVertex = new JMenuItem("Split Vertex"); + final JMenuItem splitVertex = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_splitvertex")); splitVertex.setAccelerator(KeyStroke.getKeyStroke("control V")); splitVertex.addActionListener(new ActionListener() { @Override @@ -719,33 +720,33 @@ public void actionPerformed(final ActionEvent e) { }); editMenu.add(splitVertex); - wrapImage = new JCheckBoxMenuItem("Wrap Image", false); + wrapImage = new JCheckBoxMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_wrapimage"), false); wrapImage.setToolTipText( - "Repeat the texture many times in a grid-like display. This feature does not edit the model in any way; only this viewing window."); + LocalizationManager.getInstance().get("settooltiptext.uvpanel_createmenubar_wrapimage")); // wrapImage.addActionListener(this); dispMenu.add(wrapImage); - setAspectRatio = new JMenuItem("Set Aspect Ratio"); + setAspectRatio = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_setaspectratio")); setAspectRatio.setMnemonic(KeyEvent.VK_S); setAspectRatio.setAccelerator(KeyStroke.getKeyStroke("control R")); setAspectRatio.setToolTipText( - "Sets the amount by which the texture display is stretched, for editing textures with non-uniform width and height."); + LocalizationManager.getInstance().get("settooltiptext.uvpanel_createmenubar_etaspectratio")); setAspectRatio.addActionListener(this); dispMenu.add(setAspectRatio); editMenu.add(new JSeparator()); - mirrorSubmenu = new JMenu("Mirror"); + mirrorSubmenu = new JMenu(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_mirrorsubmenu")); mirrorSubmenu.setMnemonic(KeyEvent.VK_M); - mirrorSubmenu.getAccessibleContext().setAccessibleDescription("Allows the user to mirror objects."); + mirrorSubmenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("description.uvpanel_createmenubar_mirrorsubmenu")); editMenu.add(mirrorSubmenu); - mirrorX = new JMenuItem("Mirror X"); + mirrorX = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_mirrorx")); mirrorX.setMnemonic(KeyEvent.VK_X); mirrorX.addActionListener(mirrorXAction); mirrorSubmenu.add(mirrorX); - mirrorY = new JMenuItem("Mirror Y"); + mirrorY = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvpanel_createmenubar_mirrory")); mirrorY.setMnemonic(KeyEvent.VK_Y); mirrorY.addActionListener(mirrorYAction); mirrorSubmenu.add(mirrorY); @@ -1043,8 +1044,8 @@ else if (e.getSource() == minusZoom) { else if (e.getSource() == loadImage) { final int x = JOptionPane.showConfirmDialog(this, - "Do you want to use the texture auto-loader to find available textures?\nIf you choose \"No\", then you will have to find a file on your hard drive instead.", - "Load Image", JOptionPane.YES_NO_CANCEL_OPTION); + LocalizationManager.getInstance().get("dialog.uvpanel_actionperformed_loadimage_1"), + LocalizationManager.getInstance().get("dialog.uvpanel_actionperformed_loadimage_2"), JOptionPane.YES_NO_CANCEL_OPTION); if (x == JOptionPane.YES_OPTION) { final DefaultListModel materials = new DefaultListModel<>(); for (int i = 0; i < dispMDL.getModel().getMaterials().size(); i++) { @@ -1104,7 +1105,7 @@ else if (extension.toLowerCase().equals("tga")) { } catch (final Exception e1) { e1.printStackTrace(); - ExceptionPopup.display("Unable to load (special case TGA) image file:", e1); + ExceptionPopup.display(LocalizationManager.getInstance().get("display.uvpanel_actionperformed_unable_load_tag"), e1); } } else { @@ -1114,7 +1115,7 @@ else if (extension.toLowerCase().equals("tga")) { } catch (final IOException e1) { e1.printStackTrace(); - ExceptionPopup.display("Unable to load image file:", e1); + ExceptionPopup.display(LocalizationManager.getInstance().get("display.uvpanel_actionperformed_unable_load_image"), e1); } } } @@ -1148,8 +1149,7 @@ else if (extension.toLowerCase().equals("tga")) { //// catch (Exception exc2) //// { //// exc2.printStackTrace(); - //// JOptionPane.showMessageDialog(this, "BLP texture-loader - // failed."); + //// JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("dialog.uvpanel_actionperformed_blp_loader_failed")); //// } //// } //// } @@ -1160,7 +1160,7 @@ else if (e.getSource() == setAspectRatio) { final JPanel panel = new JPanel(); final JSpinner widthVal = new JSpinner(new SpinnerNumberModel(1, 1, 10000, 1)); final JSpinner heightVal = new JSpinner(new SpinnerNumberModel(1, 1, 10000, 1)); - final JLabel toLabel = new JLabel(" to "); + final JLabel toLabel = new JLabel(LocalizationManager.getInstance().get("label.uvpanel_actionperformed_to")); panel.add(widthVal); panel.add(toLabel); panel.add(heightVal); @@ -1248,10 +1248,10 @@ public void actionPerformed(final ActionEvent e) { } public static enum UnwrapDirection { - FRONT("Front"), - RIGHT("Right"), - BOTTOM("Bottom"), - PERSPECTIVE("Perspective"); + FRONT(LocalizationManager.getInstance().get("label.uvpanel_unwrapdirection_front")), + RIGHT(LocalizationManager.getInstance().get("label.uvpanel_unwrapdirection_right")), + BOTTOM(LocalizationManager.getInstance().get("label.uvpanel_unwrapdirection_bottom")), + PERSPECTIVE(LocalizationManager.getInstance().get("label.uvpanel_unwrapdirection_perspective")); private final String displayText; diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVViewport.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVViewport.java index 900c1a77f..b2d112091 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVViewport.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVViewport.java @@ -38,6 +38,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.uv.viewport.UVViewportModelRenderer; import com.hiveworkshop.wc3.gui.modeledit.viewport.ViewportView; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class UVViewport extends JPanel implements MouseListener, ActionListener, MouseWheelListener, MouseMotionListener, CoordinateSystem, ViewportView, TVertexEditorChangeListener { @@ -89,7 +90,7 @@ public UVViewport(final ModelView modelView, final UVPanel parent, final Program addMouseWheelListener(this); contextMenu = new JPopupMenu(); - placeholderButton = new JMenuItem("Placeholder Button"); + placeholderButton = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uvviewport_uvviewport_placeholder")); placeholderButton.addActionListener(this); contextMenu.add(placeholderButton); @@ -300,7 +301,7 @@ public void actionPerformed(final ActionEvent e) { repaint(); } else if (e.getSource() == placeholderButton) { - JOptionPane.showMessageDialog(null, "Placeholder code."); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.uvviewport_uvviewport_placeholder")); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/Viewport.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/Viewport.java index f48bffa4f..f7cf09cd3 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/Viewport.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/Viewport.java @@ -80,6 +80,7 @@ import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.visitor.GeosetVisitor; import com.hiveworkshop.wc3.mdl.v2.visitor.ModelVisitor; +import hiveworkshop.localizationmanager.LocalizationManager; public class Viewport extends JPanel implements MouseListener, ActionListener, MouseWheelListener, CoordinateSystem, ViewportView, MouseMotionListener, ModelEditorChangeListener { @@ -175,43 +176,43 @@ public void preferencesChanged() { addMouseMotionListener(this); contextMenu = new JPopupMenu(); - createFace = new JMenuItem("Create Face"); + createFace = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_createface")); createFace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_DOWN_MASK)); createFace.addActionListener(this); contextMenu.add(createFace); - addTeamColor = new JMenuItem("Split Geoset and Add Team Color"); + addTeamColor = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_addteamcolor")); addTeamColor.addActionListener(this); contextMenu.add(addTeamColor); - splitGeo = new JMenuItem("Split Geoset"); + splitGeo = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_splitgeo")); splitGeo.addActionListener(this); contextMenu.add(splitGeo); contextMenu.addSeparator(); - manualMove = new JMenuItem("Translation Type-in"); + manualMove = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_manualmove")); manualMove.addActionListener(this); contextMenu.add(manualMove); - manualRotate = new JMenuItem("Rotate Type-in"); + manualRotate = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_manualrotate")); manualRotate.addActionListener(this); contextMenu.add(manualRotate); - manualSet = new JMenuItem("Position Type-in"); + manualSet = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_manualset")); manualSet.addActionListener(this); contextMenu.add(manualSet); - manualScale = new JMenuItem("Scale Type-in"); + manualScale = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_manualscale")); manualScale.addActionListener(this); contextMenu.add(manualScale); contextMenu.addSeparator(); - reAssignMatrix = new JMenuItem("Re-assign Matrix"); + reAssignMatrix = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_reassignmatrix")); reAssignMatrix.addActionListener(this); contextMenu.add(reAssignMatrix); - setParent = new JMenuItem("Set Parent"); + setParent = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_setparent")); setParent.addActionListener(this); contextMenu.add(setParent); - cogBone = new JMenuItem("Auto-Center Bone(s)"); + cogBone = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_cogbone")); cogBone.addActionListener(this); contextMenu.add(cogBone); - renameBone = new JMenuItem("Rename Bone"); + renameBone = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_renamebone")); renameBone.addActionListener(this); contextMenu.add(renameBone); - appendBoneBone = new JMenuItem("Append Bone Suffix"); + appendBoneBone = new JMenuItem(LocalizationManager.getInstance().get("menuitem.viewport_viewport_appendbonebone")); appendBoneBone.addActionListener(this); contextMenu.add(appendBoneBone); @@ -445,8 +446,7 @@ public void paintComponent(final Graphics g, final int vertexSize) { // } // } catch (final Exception exc) { // exc.printStackTrace(); - // // JOptionPane.showMessageDialog(null,"Error retrieving mouse - // // coordinates. (Probably not a major issue. Due to sleep mode?)"); + // // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.viewport_paintcomponent_mouse_coordinates")); // } final long renderEnd = System.nanoTime(); @@ -463,11 +463,11 @@ public void paintComponent(final Graphics g, final int vertexSize) { final long millis = runningSum / count / 1000000L + 1; if (millis > paintTimer.getDelay()) { final int millis2 = (int) (millis * 5); - System.out.println("delay=" + millis2); + System.out.println(LocalizationManager.getInstance().get("println.viewport_paintcomponent_delay") + "=" + millis2); paintTimer.setDelay(millis2); } else if (millis < paintTimer.getDelay()) { final int max2 = Math.max(16, (int) (millis * 5)); - System.out.println("delay=" + max2); + System.out.println(LocalizationManager.getInstance().get("println.viewport_paintcomponent_delay") + "=" + max2); paintTimer.setDelay(max2); } min = Long.MAX_VALUE; @@ -557,11 +557,11 @@ public void actionPerformed(final ActionEvent e) { // repaint(); } else if (e.getSource() == reAssignMatrix) { final MatrixPopup matrixPopup = new MatrixPopup(modelView.getModel()); - final String[] words = { "Accept", "Cancel" }; - final int i = JOptionPane.showOptionDialog(this, matrixPopup, "Rebuild Matrix", + final String[] words = { LocalizationManager.getInstance().get("global.button.accept"), LocalizationManager.getInstance().get("global.button.cancel") }; + final int i = JOptionPane.showOptionDialog(this, matrixPopup, LocalizationManager.getInstance().get("dialog.viewport_paintcomponent_rebuild_matrix"), JOptionPane.PLAIN_MESSAGE, JOptionPane.YES_NO_OPTION, null, words, words[1]); if (i == 0) { - // JOptionPane.showMessageDialog(null,"action approved"); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.viewport_paintcomponent_action_approved")); modelEditor.setMatrix(BoneShell.toBonesList(CollectionUtils.asList(matrixPopup.newRefs))); } } else if (e.getSource() == setParent) { @@ -579,7 +579,7 @@ public IdObject getNode() { @Override public String toString() { if (node == null) { - return "(No parent)"; + return LocalizationManager.getInstance().get("string.viewport_paintcomponent_no_parent"); } return node.getName(); } @@ -593,20 +593,20 @@ public String toString() { final IdObject node = idObjects.get(i); nodeOptions[i + 1] = new NodeShell(node); } - final NodeShell result = (NodeShell) JOptionPane.showInputDialog(this, "Choose a parent node", - "Set Parent Node", JOptionPane.PLAIN_MESSAGE, null, nodeOptions, defaultChoice); + final NodeShell result = (NodeShell) JOptionPane.showInputDialog(this, LocalizationManager.getInstance().get("dialog.viewport_paintcomponent_parent_node"), + LocalizationManager.getInstance().get("dialog.viewport_paintcomponent_set_parent_node"), JOptionPane.PLAIN_MESSAGE, null, nodeOptions, defaultChoice); final MatrixPopup matrixPopup = new MatrixPopup(modelView.getModel()); if (result != null) { - // JOptionPane.showMessageDialog(null,"action approved"); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.viewport_paintcomponent_action_approved")); modelEditor.setParent(result.getNode()); } } else if (e.getSource() == renameBone) { - final String name = JOptionPane.showInputDialog(this, "Enter bone name:"); + final String name = JOptionPane.showInputDialog(this, LocalizationManager.getInstance().get("dialog.viewport_paintcomponent_bone_name")); if (name != null) { modelEditor.setSelectedBoneName(name); } } else if (e.getSource() == appendBoneBone) { - final String name = JOptionPane.showInputDialog(this, "Enter bone suffix:"); + final String name = JOptionPane.showInputDialog(this, LocalizationManager.getInstance().get("dialog.viewport_paintcomponent_bone_suffix")); if (name != null) { modelEditor.addSelectedBoneSuffix(name); } @@ -628,7 +628,7 @@ public String toString() { try { undoListener.pushAction(modelEditor.createFaceFromSelection(facingVector)); } catch (final FaceCreationException exc) { - JOptionPane.showMessageDialog(this, exc.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, exc.getMessage(), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } } } catch (final Exception exc) { @@ -641,13 +641,13 @@ private void manualMove() { final GridLayout layout = new GridLayout(6, 1); inputPanel.setLayout(layout); final JSpinner[] spinners = new JSpinner[3]; - inputPanel.add(new JLabel("Move X:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualmove_move_x"))); inputPanel.add(spinners[0] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("Move Y:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualmove_move_y"))); inputPanel.add(spinners[1] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("Move Z:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualmove_move_z"))); inputPanel.add(spinners[2] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - final int x = JOptionPane.showConfirmDialog(getRootPane(), inputPanel, "Manual Translation", + final int x = JOptionPane.showConfirmDialog(getRootPane(), inputPanel, LocalizationManager.getInstance().get("dialog.viewport_manualmove_manual_translation"), JOptionPane.OK_CANCEL_OPTION); if (x != JOptionPane.OK_OPTION) { return; @@ -664,13 +664,13 @@ private void manualRotate() { final GridLayout layout = new GridLayout(6, 1); inputPanel.setLayout(layout); final JSpinner[] spinners = new JSpinner[3]; - inputPanel.add(new JLabel("Rotate X degrees (around axis facing front):")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualrotate_rotate_x"))); inputPanel.add(spinners[0] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("Rotate Y degrees (around axis facing left):")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualrotate_rotate_y"))); inputPanel.add(spinners[1] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("Rotate Z degrees (around axis facing up):")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualrotate_rotate_z"))); inputPanel.add(spinners[2] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - final int x = JOptionPane.showConfirmDialog(getRootPane(), inputPanel, "Manual Rotation", + final int x = JOptionPane.showConfirmDialog(getRootPane(), inputPanel, LocalizationManager.getInstance().get("dialog.viewport_manualrotate_manual_rotation"), JOptionPane.OK_CANCEL_OPTION); if (x != JOptionPane.OK_OPTION) { return; @@ -690,13 +690,13 @@ private void manualSet() { final GridLayout layout = new GridLayout(6, 1); inputPanel.setLayout(layout); final JSpinner[] spinners = new JSpinner[3]; - inputPanel.add(new JLabel("New Position X:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualset_new_position_x"))); inputPanel.add(spinners[0] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("New Position Y:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualset_new_position_y"))); inputPanel.add(spinners[1] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("New Position Z:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("Ndata.label.viewport_manualset_new_position_z"))); inputPanel.add(spinners[2] = new JSpinner(new SpinnerNumberModel(0.0, -100000.00, 100000.0, 0.0001))); - final int x = JOptionPane.showConfirmDialog(getRootPane(), inputPanel, "Manual Position", + final int x = JOptionPane.showConfirmDialog(getRootPane(), inputPanel, LocalizationManager.getInstance().get("dialog.viewport_manualset_manual_rotation"), JOptionPane.OK_CANCEL_OPTION); if (x != JOptionPane.OK_OPTION) { return; @@ -715,23 +715,23 @@ private void manualScale() { inputPanel.setLayout(layout); final JSpinner[] spinners = new JSpinner[3]; final JSpinner[] centerSpinners = new JSpinner[3]; - inputPanel.add(new JLabel("Scale X:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualscale_scale_x"))); inputPanel.add(spinners[0] = new JSpinner(new SpinnerNumberModel(1.0, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("Scale Y:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualscale_scale_y"))); inputPanel.add(spinners[1] = new JSpinner(new SpinnerNumberModel(1.0, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("Scale Z:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualscale_scale_z"))); inputPanel.add(spinners[2] = new JSpinner(new SpinnerNumberModel(1.0, -100000.00, 100000.0, 0.0001))); - final JCheckBox customOrigin = new JCheckBox("Custom Scaling Origin"); + final JCheckBox customOrigin = new JCheckBox(LocalizationManager.getInstance().get("checkbox.viewport_manualscale_scale_origin")); inputPanel.add(customOrigin); final Vertex selectionCenter = modelEditor.getSelectionCenter(); - inputPanel.add(new JLabel("Center X:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualscale_center_x"))); inputPanel.add(centerSpinners[0] = new JSpinner( new SpinnerNumberModel(selectionCenter.x, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("Center Y:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualscale_center_y"))); inputPanel.add(centerSpinners[1] = new JSpinner( new SpinnerNumberModel(selectionCenter.y, -100000.00, 100000.0, 0.0001))); - inputPanel.add(new JLabel("Center Z:")); + inputPanel.add(new JLabel(LocalizationManager.getInstance().get("label.viewport_manualscale_center_z"))); inputPanel.add(centerSpinners[2] = new JSpinner( new SpinnerNumberModel(selectionCenter.z, -100000.00, 100000.0, 0.0001))); for (final JSpinner spinner : centerSpinners) { @@ -746,7 +746,7 @@ public void actionPerformed(final ActionEvent e) { } }); - final int x = JOptionPane.showConfirmDialog(getRootPane(), inputPanel, "Manual Scaling", + final int x = JOptionPane.showConfirmDialog(getRootPane(), inputPanel, LocalizationManager.getInstance().get("dialog.viewport_manualscale_manual_scaling"), JOptionPane.OK_CANCEL_OPTION); if (x != JOptionPane.OK_OPTION) { return; diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/CloneAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/CloneAction.java index 26379fc46..5a59d68fc 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/CloneAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/CloneAction.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * CloneAction -- allowing you to undo clone! @@ -115,14 +116,15 @@ public void redo() { if (vert.getClass() == GeosetVertex.class) { final GeosetVertex gv = (GeosetVertex) vert; for (final Triangle t : gv.getTriangles()) { - System.out.println("SHOULD be one: " + Collections.frequency(gv.getTriangles(), t)); + System.out.println(LocalizationManager.getInstance().get("println.cloneaction_redo_1") + Collections.frequency(gv.getTriangles(), t)); if (!t.containsRef(gv)) { probs++; } } } } - System.out.println("Redo " + actionName() + " finished with " + probs + " inexplicable errors."); + System.out.println(LocalizationManager.getInstance().get("println.cloneaction_redo_2") + actionName() + + LocalizationManager.getInstance().get("println.cloneaction_redo_3") + probs + LocalizationManager.getInstance().get("println.cloneaction_redo_4")); } @Override @@ -202,22 +204,23 @@ public void undo() { if (vert.getClass() == GeosetVertex.class) { final GeosetVertex gv = (GeosetVertex) vert; for (final Triangle t : gv.getTriangles()) { - System.out.println("SHOULD be one: " + Collections.frequency(gv.getTriangles(), t)); + System.out.println(LocalizationManager.getInstance().get("println.cloneaction_undo_1") + Collections.frequency(gv.getTriangles(), t)); if (!t.containsRef(gv)) { probs++; } } } } - System.out.println("Undo " + actionName() + " finished with " + probs + " inexplicable errors."); + System.out.println(LocalizationManager.getInstance().get("println.cloneaction_undo_2") + actionName() + + LocalizationManager.getInstance().get("println.cloneaction_undo_3") + probs + LocalizationManager.getInstance().get("println.cloneaction_undo_4")); } @Override public String actionName() { if (type) { - return "extrude"; + return LocalizationManager.getInstance().get("string.cloneaction_actionname_1"); } else { - return "extrude"; + return LocalizationManager.getInstance().get("string.cloneaction_actionname_2"); } } } \ No newline at end of file diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/DeleteAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/DeleteAction.java index 143744ac3..2c7687ad8 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/DeleteAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/DeleteAction.java @@ -9,6 +9,7 @@ import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Something to undo when you deleted something important. @@ -65,6 +66,6 @@ public void undo() { @Override public String actionName() { - return "delete vertices"; + return LocalizationManager.getInstance().get("string.deleteaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/ExtrudeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/ExtrudeAction.java index 4f1d1d8e1..aaead4a06 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/ExtrudeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/ExtrudeAction.java @@ -7,6 +7,7 @@ import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * ExtrudeAction -- something extruded that you can undo! @@ -210,9 +211,9 @@ public void undo() { @Override public String actionName() { if (type) { - return "extrude"; + return LocalizationManager.getInstance().get("string.extrudeaction_actionname_1"); } else { - return "extrude"; + return LocalizationManager.getInstance().get("string.extrudeaction_actionname_2"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/MoveAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/MoveAction.java index 766399c2f..9f763cb4c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/MoveAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/MoveAction.java @@ -5,6 +5,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * MotionAction -- something for you to undo when you screw up with motion @@ -95,22 +96,22 @@ public String actionName() { String outName = ""; switch (actType) { case MOVE: - outName = "move"; + outName = LocalizationManager.getInstance().get("string.moveaction_actionname_move"); break; case ROTATE: - outName = "rotate"; + outName = LocalizationManager.getInstance().get("string.moveaction_actionname_rotate"); break; case SCALE: - outName = "scale"; + outName = LocalizationManager.getInstance().get("string.moveaction_actionname_scale"); break; case UNKNOWN: - outName = "unknown error-type action"; + outName = LocalizationManager.getInstance().get("string.moveaction_actionname_unknown"); break; } if (outName.equals("")) { - outName = "actionType_" + actType; + outName = LocalizationManager.getInstance().get("string.moveaction_actionname_actiontype") + actType; } - return outName + " vertices"; + return outName + LocalizationManager.getInstance().get("string.moveaction_actionname_vertices"); } public List getMoveVectors() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateExtentsAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateExtentsAction.java index f4b3c5f7f..6006fe4ac 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateExtentsAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateExtentsAction.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.mdl.Geoset; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class RecalculateExtentsAction implements UndoAction { private static boolean EACH_GEOSET_GETS_ITS_OWN_BOUNDS = false; @@ -107,7 +108,7 @@ public void redo() { @Override public String actionName() { - return "recalculate extents"; + return LocalizationManager.getInstance().get("string.recalculateextentsaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction.java index 6a2666b73..570908108 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction.java @@ -5,6 +5,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Undoable snap action. @@ -39,6 +40,6 @@ public void redo() { @Override public String actionName() { - return "recalculate normals"; + return LocalizationManager.getInstance().get("string.recalculatenormalsaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction2.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction2.java index b6f44c2e8..6f3a552bb 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction2.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction2.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Undoable snap action. @@ -56,7 +57,7 @@ public void redo() { @Override public String actionName() { - return "recalculate normals"; + return LocalizationManager.getInstance().get("string.recalculatenormalsaction2_actionname"); } private static final class Tuplet { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SetModelContentsAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SetModelContentsAction.java index 799a21b5d..21b0c1aa4 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SetModelContentsAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SetModelContentsAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.util.Callback; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetModelContentsAction implements UndoAction { private final EditableModel newModel; @@ -28,7 +29,7 @@ public void redo() { @Override public String actionName() { - return "Apply edits from text"; + return LocalizationManager.getInstance().get("string.setmodelcontentsaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapAction.java index 5cd367414..80150e365 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Undoable snap action. @@ -40,6 +41,6 @@ public void redo() { @Override public String actionName() { - return "snap verteces"; + return LocalizationManager.getInstance().get("string.snapaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapNormalsAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapNormalsAction.java index 5f8c658d9..4949e01a7 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapNormalsAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapNormalsAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Undoable snap action. @@ -38,6 +39,6 @@ public void redo() { @Override public String actionName() { - return "snap normals"; + return LocalizationManager.getInstance().get("string.snapnormalsaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SpecialDeleteAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SpecialDeleteAction.java index 300b18704..d6b08e60b 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SpecialDeleteAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SpecialDeleteAction.java @@ -9,6 +9,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class SpecialDeleteAction extends DeleteAction { @@ -53,6 +54,6 @@ public void undo() { @Override public String actionName() { - return "delete vertices and geoset"; + return LocalizationManager.getInstance().get("string.specialdeleteaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVMoveAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVMoveAction.java index d4e976212..e30700f84 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVMoveAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVMoveAction.java @@ -5,6 +5,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * MotionAction -- something for you to undo when you screw up with motion @@ -91,19 +92,19 @@ public String actionName() { String outName = ""; switch (actType) { case MOVE: - outName = "move"; + outName = LocalizationManager.getInstance().get("string.uvmoveaction_actionname_move"); break; case ROTATE: - outName = "rotate"; + outName = LocalizationManager.getInstance().get("string.uvmoveaction_actionname_rotate"); break; case SCALE: - outName = "scale"; + outName = LocalizationManager.getInstance().get("string.uvmoveaction_actionname_scale"); break; } if (outName.equals("")) { - outName = "actionType_" + actType; + outName = LocalizationManager.getInstance().get("string.uvmoveaction_actionname_actiontype") + actType; } - return outName + " TVertices"; + return outName + LocalizationManager.getInstance().get("string.uvmoveaction_actionname_vertices"); } public void setActType(final VertexActionType actType) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVRemapAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVRemapAction.java index 46d089599..dbbaf13aa 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVRemapAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVRemapAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UVPanel.UnwrapDirection; import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class UVRemapAction implements UndoAction { @@ -38,7 +39,7 @@ public void redo() { @Override public String actionName() { - return "remap TVertices " + direction; + return LocalizationManager.getInstance().get("string.uvremapaction_actionname") + direction; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapAction.java index 57082f590..aac27919f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Undoable snap action. @@ -40,6 +41,6 @@ public void redo() { @Override public String actionName() { - return "snap TVerteces"; + return LocalizationManager.getInstance().get("string.uvsnapaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapXAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapXAction.java index 2a4cf49df..6a0492384 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapXAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapXAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Undoable snap action. @@ -43,11 +44,11 @@ public void redo() { @Override public String actionName() { if (dim == 0) { - return "snapX TVertices"; + return LocalizationManager.getInstance().get("string.uvsnapxaction_actionname_snapxtvertices"); } else if (dim == 1) { - return "snapY TVertices"; + return LocalizationManager.getInstance().get("string.uvsnapxaction_actionname_snapytvertices"); } - return "snap TVerteces"; + return LocalizationManager.getInstance().get("string.uvsnapxaction_actionname_snaptvertices"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalEndAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalEndAction.java index b121c9c11..75e5c5e8e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalEndAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalEndAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Animation; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetAnimationIntervalEndAction implements UndoAction { private final int prevIntervalEnd; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "set animation IntervalEnd to " + newIntervalEnd; + return LocalizationManager.getInstance().get("string.setanimationintervalendaction_actionname") + newIntervalEnd; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalStartAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalStartAction.java index ef39f7e04..ce1c825c6 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalStartAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalStartAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Animation; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetAnimationIntervalStartAction implements UndoAction { private final int prevIntervalStart; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "set animation IntervalStart to " + newIntervalStart; + return LocalizationManager.getInstance().get("string.setanimationintervalstartaction_actionname") + newIntervalStart; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationMoveSpeedAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationMoveSpeedAction.java index fad2a0ba3..cc7276666 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationMoveSpeedAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationMoveSpeedAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Animation; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetAnimationMoveSpeedAction implements UndoAction { private final float prevMoveSpeed; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "set animation MoveSpeed to " + newMoveSpeed; + return LocalizationManager.getInstance().get("string.setanimationmovespeedaction_actionname") + newMoveSpeed; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNameAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNameAction.java index 0047251d9..11cbcab29 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNameAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNameAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Animation; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetAnimationNameAction implements UndoAction { private final String prevName; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "set animation name to \"" + newName + "\""; + return LocalizationManager.getInstance().get("string.setanimationnameaction_actionname") + "\"" + newName + "\""; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNonLoopingAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNonLoopingAction.java index fc55bcd60..c78789d38 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNonLoopingAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNonLoopingAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Animation; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetAnimationNonLoopingAction implements UndoAction { private final boolean prevValue; @@ -33,9 +34,9 @@ public void redo() { @Override public String actionName() { if (newValue) { - return "set animation looping"; + return LocalizationManager.getInstance().get("string.setanimationnonloopingaction_actionname_1") + newValue; } - return "set animation non looping"; + return LocalizationManager.getInstance().get("string.setanimationnonloopingaction_actionname_2"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationRarityAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationRarityAction.java index 98c1a7d16..68981b2ad 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationRarityAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationRarityAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Animation; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetAnimationRarityAction implements UndoAction { private final float prevRarity; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "set animation Rarity to " + newRarity; + return LocalizationManager.getInstance().get("string.setanimationrarityaction_actionname") + newRarity; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapPathAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapPathAction.java index fc85ac341..30e49e6ee 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapPathAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapPathAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Bitmap; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetBitmapPathAction implements UndoAction { private final Bitmap bitmap; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "change texture Path"; + return LocalizationManager.getInstance().get("string.setbitmappathaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapReplaceableIdAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapReplaceableIdAction.java index 3ed049781..57cba6c35 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapReplaceableIdAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapReplaceableIdAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Bitmap; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetBitmapReplaceableIdAction implements UndoAction { private final Bitmap bitmap; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "change texture ReplaceableId"; + return LocalizationManager.getInstance().get("string.setbitmapreplaceableidaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapHeightAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapHeightAction.java index ae81251bb..13cf11821 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapHeightAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapHeightAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Bitmap; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetBitmapWrapHeightAction implements UndoAction { private final Bitmap bitmap; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "change texture ReplaceableId"; + return LocalizationManager.getInstance().get("string.setbitmapwrapheightaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapWidthAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapWidthAction.java index 963289f82..4fc032535 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapWidthAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapWidthAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Bitmap; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetBitmapWrapWidthAction implements UndoAction { private final Bitmap bitmap; @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "change texture ReplaceableId"; + return LocalizationManager.getInstance().get("string.setbitmapwrapwidthaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/globalsequence/SetGlobalSequenceLengthAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/globalsequence/SetGlobalSequenceLengthAction.java index 03972e839..dc76a50aa 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/globalsequence/SetGlobalSequenceLengthAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/globalsequence/SetGlobalSequenceLengthAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.EditableModel; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetGlobalSequenceLengthAction implements UndoAction { private final EditableModel model; @@ -34,6 +35,6 @@ public void redo() { @Override public String actionName() { - return "change GlobalSequence length to " + newLength; + return LocalizationManager.getInstance().get("string.setglobalsequencelengthaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetBlendTimeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetBlendTimeAction.java index 206789d90..e07d668fa 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetBlendTimeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetBlendTimeAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetBlendTimeAction implements UndoAction { private final int prevBlendTime; @@ -32,7 +33,7 @@ public void redo() { @Override public String actionName() { - return "set BlendTime to " + newBlendTime; + return LocalizationManager.getInstance().get("string.setblendtimeaction_actionname") + newBlendTime; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetFormatVersionAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetFormatVersionAction.java index c41a10a80..4574979f0 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetFormatVersionAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetFormatVersionAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetFormatVersionAction implements UndoAction { private final int prevVersion; @@ -32,7 +33,7 @@ public void redo() { @Override public String actionName() { - return "set FormatVersion to " + newVersion; + return LocalizationManager.getInstance().get("string.setformatversionaction_actionname") + newVersion; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetHeaderExtentsAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetHeaderExtentsAction.java index 1a527df35..4e01586b1 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetHeaderExtentsAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetHeaderExtentsAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.ExtLog; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetHeaderExtentsAction implements UndoAction { private final ExtLog prevExtLog; @@ -34,6 +35,6 @@ public void redo() { @Override public String actionName() { - return "set extents"; + return LocalizationManager.getInstance().get("string.setheaderextentsaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetNameAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetNameAction.java index cd273f586..cc3a57489 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetNameAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetNameAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetNameAction implements UndoAction { private final String prevName; @@ -33,7 +34,7 @@ public void redo() { @Override public String actionName() { - return "set name to \"" + newName + "\""; + return LocalizationManager.getInstance().get("string.setnameaction_actionname") + newName; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerBitmapAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerBitmapAction.java index 6c6553587..af9dbe8b2 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerBitmapAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerBitmapAction.java @@ -5,6 +5,7 @@ import com.hiveworkshop.wc3.mdl.Bitmap; import com.hiveworkshop.wc3.mdl.Layer; import com.hiveworkshop.wc3.mdl.ShaderTextureTypeHD; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetLayerBitmapAction implements UndoAction { @@ -48,7 +49,7 @@ public void redo() { @Override public String actionName() { - return "set Layer Bitmap"; + return LocalizationManager.getInstance().get("string.setlayerbitmapaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerCoordIdAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerCoordIdAction.java index be1b36560..598a4c36a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerCoordIdAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerCoordIdAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Layer; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetLayerCoordIdAction implements UndoAction { private final Layer layer; @@ -32,7 +33,7 @@ public void redo() { @Override public String actionName() { - return "set Layer CoordId"; + return LocalizationManager.getInstance().get("string.setlayercoordidaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerFilterModeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerFilterModeAction.java index e3c3aa1cf..e825bd93f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerFilterModeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerFilterModeAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Layer; import com.hiveworkshop.wc3.mdl.Layer.FilterMode; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetLayerFilterModeAction implements UndoAction { private final Layer layer; @@ -33,7 +34,7 @@ public void redo() { @Override public String actionName() { - return "set Layer FilterMode"; + return LocalizationManager.getInstance().get("string.setlayerfiltermodeaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerShaderAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerShaderAction.java index 7937bdd36..62769a065 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerShaderAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerShaderAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Layer; import com.hiveworkshop.wc3.mdl.LayerShader; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetLayerShaderAction implements UndoAction { private final Layer layer; @@ -33,7 +34,7 @@ public void redo() { @Override public String actionName() { - return "set layer Shader"; + return LocalizationManager.getInstance().get("string.setlayershaderaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerTextureAnimAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerTextureAnimAction.java index c310ccb03..60f9cce9c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerTextureAnimAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerTextureAnimAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Layer; import com.hiveworkshop.wc3.mdl.TextureAnim; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetLayerTextureAnimAction implements UndoAction { private final Layer layer; @@ -33,7 +34,7 @@ public void redo() { @Override public String actionName() { - return "set Layer TVertexAnim"; + return LocalizationManager.getInstance().get("string.setlayertextureanimaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetMaterialPriorityPlaneAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetMaterialPriorityPlaneAction.java index 5ad009e5a..b51c12eb9 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetMaterialPriorityPlaneAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetMaterialPriorityPlaneAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Material; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetMaterialPriorityPlaneAction implements UndoAction { private final Material material; @@ -32,7 +33,7 @@ public void redo() { @Override public String actionName() { - return "set material PriorityPlane"; + return LocalizationManager.getInstance().get("string.setmaterialpriorityplaneaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloat3StaticValueAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloat3StaticValueAction.java index 19d720a87..d5f3d1aa0 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloat3StaticValueAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloat3StaticValueAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.util.Callback; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetFloat3StaticValueAction implements UndoAction { private final String valueTypeName; @@ -30,6 +31,6 @@ public void redo() { @Override public String actionName() { - return "set " + valueTypeName; + return LocalizationManager.getInstance().get("string.setfloat3staticvalueaction_actionname") + valueTypeName; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloatStaticValueAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloatStaticValueAction.java index 03649039e..cb140c512 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloatStaticValueAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloatStaticValueAction.java @@ -2,6 +2,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.util.Callback; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetFloatStaticValueAction implements UndoAction { private final String valueTypeName; @@ -29,6 +30,6 @@ public void redo() { @Override public String actionName() { - return "set " + valueTypeName; + return LocalizationManager.getInstance().get("string.setfloatstaticvalueaction_actionname") + valueTypeName; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitForUVAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitForUVAction.java index 369634767..0a7ab0c8a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitForUVAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitForUVAction.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.gui.modeledit.actions.newsys; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.selection.SelectionManager; @@ -99,7 +100,7 @@ public void redo() { @Override public String actionName() { - return "split geoset"; + return LocalizationManager.getInstance().get("string.splitforuvaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitGeosetAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitGeosetAction.java index 63a560d66..61aafc915 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitGeosetAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitGeosetAction.java @@ -19,6 +19,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class SplitGeosetAction implements UndoAction { @@ -144,7 +145,7 @@ public void redo() { @Override public String actionName() { - return "split geoset"; + return LocalizationManager.getInstance().get("string.splitgeosetaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/TeamColorAddAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/TeamColorAddAction.java index f665c68d6..09549edd0 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/TeamColorAddAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/TeamColorAddAction.java @@ -26,6 +26,7 @@ import com.hiveworkshop.wc3.mdl.ShaderTextureTypeHD; import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class TeamColorAddAction implements UndoAction { @@ -165,7 +166,7 @@ public void redo() { @Override public String actionName() { - return "add team color layer"; + return LocalizationManager.getInstance().get("string.teamcoloraddaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentAnimationPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentAnimationPanel.java index 07f4a2756..b34057863 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentAnimationPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentAnimationPanel.java @@ -19,6 +19,7 @@ import com.hiveworkshop.wc3.gui.modeledit.components.editors.ComponentEditorJSpinner; import com.hiveworkshop.wc3.gui.modeledit.components.editors.ComponentEditorTextField; import com.hiveworkshop.wc3.mdl.Animation; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -68,11 +69,11 @@ public void run() { }); setLayout(new MigLayout()); - add(new JLabel("Name: "), "cell 0 0"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentanimationpanel_componentanimationpanel_name")), "cell 0 0"); add(nameField, "cell 1 0"); - add(new JLabel("Start: "), "cell 0 1"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentanimationpanel_componentanimationpanel_start")), "cell 0 1"); add(newAnimTimeStart, "cell 1 1"); - add(new JLabel("End: "), "cell 2 1"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentanimationpanel_componentanimationpanel_end")), "cell 2 1"); add(newAnimTimeEnd, "cell 3 1"); rarityChooser = new ComponentEditorJSpinner(new SpinnerNumberModel(0d, 0d, Long.MAX_VALUE, 1d)); @@ -97,7 +98,7 @@ public void run() { undoListener.pushAction(setAnimationMoveSpeedAction); } }); - nonLoopingChooser = new JCheckBox("NonLooping"); + nonLoopingChooser = new JCheckBox(LocalizationManager.getInstance().get("checkbox.componentanimationpanel_componentanimationpanel_nonloopingchooser")); nonLoopingChooser.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -110,9 +111,9 @@ public void actionPerformed(final ActionEvent e) { }); add(nonLoopingChooser, "cell 0 2"); - add(new JLabel("Rarity"), "cell 0 3"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentanimationpanel_componentanimationpanel_rarity")), "cell 0 3"); add(rarityChooser, "cell 1 3"); - add(new JLabel("MoveSpeed"), "cell 0 4"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentanimationpanel_componentanimationpanel_movespeed")), "cell 0 4"); add(moveSpeedChooser, "cell 1 4"); } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentBitmapPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentBitmapPanel.java index ad1c31afc..c094b43ff 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentBitmapPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentBitmapPanel.java @@ -33,6 +33,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -70,7 +71,7 @@ public void run() { undoListener.pushAction(setBitmapReplaceableIdAction); } }); - wrapWidthBox = new JCheckBox("Wrap Width"); + wrapWidthBox = new JCheckBox(LocalizationManager.getInstance().get("checkbox.componentbitmappanel_componentbitmappanel_width")); wrapWidthBox.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -80,7 +81,7 @@ public void actionPerformed(final ActionEvent e) { undoListener.pushAction(setBitmapWrapWidthAction); } }); - wrapHeightBox = new JCheckBox("Wrap Height"); + wrapHeightBox = new JCheckBox(LocalizationManager.getInstance().get("checkbox.componentbitmappanel_componentbitmappanel_height")); wrapHeightBox.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -91,17 +92,17 @@ public void actionPerformed(final ActionEvent e) { } }); previewPanel = new JPanel(); - previewPanel.setBorder(new TitledBorder(null, "Previewer", TitledBorder.LEADING, TitledBorder.TOP, null, null)); + previewPanel.setBorder(new TitledBorder(null, LocalizationManager.getInstance().get("border.componentbitmappanel_componentbitmappanel_previewer"), TitledBorder.LEADING, TitledBorder.TOP, null, null)); previewPanel.setLayout(new BorderLayout()); setLayout(new MigLayout("fillx", "[][grow][]", "[][][][][grow]")); - add(new JLabel("Path: "), "cell 0 0"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentbitmappanel_componentbitmappanel_path")), "cell 0 0"); add(texturePathField, "cell 1 0 2, growx"); - add(new JLabel("ReplaceableId: "), "cell 0 1"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentbitmappanel_componentbitmappanel_replaceableId")), "cell 0 1"); add(replaceableIdSpinner, "cell 1 1 2"); add(wrapWidthBox, "cell 0 2 3"); add(wrapHeightBox, "cell 0 3"); - final JButton exportTextureImageFile = new JButton("Export Texture Image File"); + final JButton exportTextureImageFile = new JButton(LocalizationManager.getInstance().get("label.componentbitmappanel_componentbitmappanel_export_texture")); exportTextureImageFile.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentGlobalSequencePanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentGlobalSequencePanel.java index b7e9e09e5..5a3d59ce1 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentGlobalSequencePanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentGlobalSequencePanel.java @@ -9,6 +9,7 @@ import com.hiveworkshop.wc3.gui.modeledit.activity.UndoActionListener; import com.hiveworkshop.wc3.gui.modeledit.components.editors.ComponentEditorJSpinner; import com.hiveworkshop.wc3.mdl.EditableModel; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -34,10 +35,10 @@ public void run() { undoActionListener.pushAction(setGlobalSequenceLengthAction); } }); - add(new JLabel("GlobalSequence "), "cell 0 0"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentglobalsequencepanel_componentglobalsequencepanel_global_sequence")), "cell 0 0"); indexLabel = new JLabel(); add(indexLabel, "cell 1 0"); - add(new JLabel("Duration: "), "cell 0 1"); + add(new JLabel(LocalizationManager.getInstance().get("label.componentglobalsequencepanel_componentglobalsequencepanel_duration")), "cell 0 1"); add(lengthSpinner, "cell 1 1"); } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentHeaderPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentHeaderPanel.java index 028bad104..1b668c013 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentHeaderPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentHeaderPanel.java @@ -21,6 +21,7 @@ import com.hiveworkshop.wc3.gui.modeledit.components.editors.ComponentEditorTextField; import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; public class ComponentHeaderPanel extends JPanel implements ComponentPanel { private static final Dimension MAXIMUM_SIZE = new Dimension(99999, 25); @@ -33,7 +34,7 @@ public class ComponentHeaderPanel extends JPanel implements ComponentPanel { private ModelStructureChangeListener changeListener; public ComponentHeaderPanel() { - final JLabel modelNameLabel = new JLabel("Model Name:"); + final JLabel modelNameLabel = new JLabel(LocalizationManager.getInstance().get("label.componentheaderpanel_componentheaderpanel_model_name")); modelNameField = new ComponentEditorTextField(); modelNameField.setMaximumSize(MAXIMUM_SIZE); modelNameField.addActionListener(new ActionListener() { @@ -47,7 +48,7 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JLabel versionLabel = new JLabel("Format Version:"); + final JLabel versionLabel = new JLabel(LocalizationManager.getInstance().get("label.componentheaderpanel_componentheaderpanel_format_version")); formatVersionSpinner = new ComponentEditorJSpinner( new SpinnerNumberModel(800, Integer.MIN_VALUE, Integer.MAX_VALUE, 1)); formatVersionSpinner.setMaximumSize(MAXIMUM_SIZE); @@ -63,7 +64,7 @@ public void run() { } } }); - final JLabel blendTimeLabel = new JLabel("Blend Time:"); + final JLabel blendTimeLabel = new JLabel(LocalizationManager.getInstance().get("label.componentheaderpanel_componentheaderpanel_blend_time")); blendTimeSpinner = new ComponentEditorJSpinner( new SpinnerNumberModel(150, Integer.MIN_VALUE, Integer.MAX_VALUE, 1)); blendTimeSpinner.setMaximumSize(MAXIMUM_SIZE); @@ -81,7 +82,7 @@ public void run() { }); extLogEditor = new ExtLogEditor(); - extLogEditor.setBorder(BorderFactory.createTitledBorder("Extents")); + extLogEditor.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("border.componentheaderpanel_componentheaderpanel_extents"))); extLogEditor.addActionListener(new Runnable() { @Override public void run() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentMaterialPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentMaterialPanel.java index 7e35d4a95..82af7b1c0 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentMaterialPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentMaterialPanel.java @@ -12,6 +12,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdl.Material; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -43,7 +44,7 @@ public void run() { multipleLayersPanel = new ComponentMaterialLayersPanel(); setLayout(new MigLayout("fill", "[][grow][grow]", "[][][grow]")); - add(new JLabel("Priority Plane:")); + add(new JLabel(LocalizationManager.getInstance().get("label.componentmaterialpanel_componentmaterialpanel_priority"))); add(priorityPlaneSpinner, "wrap, growx, span 2"); add(multipleLayersPanel, "growx, growy, span 3"); } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentsPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentsPanel.java index ec9a60be3..2e2f4e50c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentsPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentsPanel.java @@ -32,6 +32,7 @@ import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; import com.hiveworkshop.wc3.mdx.BindPoseChunk; import com.hiveworkshop.wc3.mdx.FaceEffectsChunk.FaceEffect; +import hiveworkshop.localizationmanager.LocalizationManager; public class ComponentsPanel extends JPanel implements ModelComponentListener { private static final String BLANK = "BLANK"; @@ -55,7 +56,7 @@ public ComponentsPanel(final TextureExporter textureExporter) { cardLayout = new CardLayout(); setLayout(cardLayout); blankPanel = new JPanel(); - blankPanel.add(new JLabel("Select a model component to get started...")); + blankPanel.add(new JLabel(LocalizationManager.getInstance().get("label.componentspanel_componentspanel_blankpanel"))); add(blankPanel, BLANK); headerPanel = new ComponentHeaderPanel(); add(headerPanel, HEADER); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ExtLogEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ExtLogEditor.java index e3e38caea..d9855671e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ExtLogEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ExtLogEditor.java @@ -14,6 +14,7 @@ import com.hiveworkshop.wc3.gui.modeledit.components.editors.ComponentEditorJSpinner; import com.hiveworkshop.wc3.mdl.ExtLog; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class ExtLogEditor extends JPanel { private static final Dimension MAXIMUM_SIZE = new Dimension(99999, 25); @@ -29,7 +30,7 @@ public class ExtLogEditor extends JPanel { private final ComponentEditorJSpinner boundsRadius; public ExtLogEditor() { - minimumExtentBox = new JCheckBox("Minimum Extent"); + minimumExtentBox = new JCheckBox(LocalizationManager.getInstance().get("checkbox.extLogeditor_extLogeditor_minimum_extent")); minimumExtentX = new ComponentEditorJSpinner( new SpinnerNumberModel(0., -Integer.MAX_VALUE, Integer.MAX_VALUE, 1.0)); minimumExtentX.setMaximumSize(MAXIMUM_SIZE); @@ -45,7 +46,7 @@ public void actionPerformed(final ActionEvent e) { updateMinExtOptionsAvailable(); } }); - maximumExtentBox = new JCheckBox("Maximum Extent"); + maximumExtentBox = new JCheckBox(LocalizationManager.getInstance().get("checkbox.extLogeditor_extLogeditor_maximum_extent")); maximumExtentX = new ComponentEditorJSpinner( new SpinnerNumberModel(0., -Integer.MAX_VALUE, Integer.MAX_VALUE, 1.0)); maximumExtentX.setMaximumSize(MAXIMUM_SIZE); @@ -61,7 +62,7 @@ public void actionPerformed(final ActionEvent e) { updateMaxExtOptionsAvailable(); } }); - boundsRadiusBox = new JCheckBox("Bounds Radius"); + boundsRadiusBox = new JCheckBox(LocalizationManager.getInstance().get("checkbox.extLogeditor_extLogeditor_bounds_radius")); boundsRadius = new ComponentEditorJSpinner(new SpinnerNumberModel(0., -Long.MAX_VALUE, Long.MAX_VALUE, 1.0)); boundsRadius.setMaximumSize(MAXIMUM_SIZE); boundsRadiusBox.addActionListener(new ActionListener() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/ColorValuePanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/ColorValuePanel.java index 64291a896..25c86c873 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/ColorValuePanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/ColorValuePanel.java @@ -25,6 +25,7 @@ import com.hiveworkshop.wc3.mdl.v2.timelines.InterpolationType; import com.hiveworkshop.wc3.util.Callback; import com.hiveworkshop.wc3.util.IconUtils; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -44,17 +45,17 @@ public ColorValuePanel(final String title) { setBorder(BorderFactory.createTitledBorder(title)); setLayout(new MigLayout()); final ButtonGroup staticDynamicGroup = new ButtonGroup(); - staticButton = new JRadioButton("Static"); - dynamicButton = new JRadioButton("Dynamic"); + staticButton = new JRadioButton(LocalizationManager.getInstance().get("button.colorvaluepanel_static")); + dynamicButton = new JRadioButton(LocalizationManager.getInstance().get("button.colorvaluepanel_dynamic")); staticDynamicGroup.add(staticButton); staticDynamicGroup.add(dynamicButton); add(staticButton); - staticColorButton = new JButton("Choose Color"); + staticColorButton = new JButton(LocalizationManager.getInstance().get("button.colorvaluepanel_choose_color")); add(staticColorButton, "wrap"); staticColorButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - final Color newColor = JColorChooser.showDialog(ColorValuePanel.this.getRootPane(), "Choose " + title, + final Color newColor = JColorChooser.showDialog(ColorValuePanel.this.getRootPane(), LocalizationManager.getInstance().get("dialog.colorvaluepanel_choose") + title, new Color((float) lastLoadedStaticColor.z, (float) lastLoadedStaticColor.y, (float) lastLoadedStaticColor.x)); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/FloatValuePanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/FloatValuePanel.java index 02269ad4c..2e592ec22 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/FloatValuePanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/FloatValuePanel.java @@ -22,6 +22,7 @@ import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.v2.timelines.InterpolationType; import com.hiveworkshop.wc3.util.Callback; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -41,8 +42,8 @@ public FloatValuePanel(final String title) { setBorder(BorderFactory.createTitledBorder(title)); setLayout(new MigLayout()); final ButtonGroup staticDynamicGroup = new ButtonGroup(); - staticButton = new JRadioButton("Static"); - dynamicButton = new JRadioButton("Dynamic"); + staticButton = new JRadioButton(LocalizationManager.getInstance().get("button.floatvaluepanel_static")); + dynamicButton = new JRadioButton(LocalizationManager.getInstance().get("button.floatvaluepanel_dynamic")); staticDynamicGroup.add(staticButton); staticDynamicGroup.add(dynamicButton); add(staticButton); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentLayerPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentLayerPanel.java index c5a056a35..9b8834ecc 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentLayerPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentLayerPanel.java @@ -46,6 +46,7 @@ import com.hiveworkshop.wc3.util.Callback; import com.hiveworkshop.wc3.util.IconUtils; import com.hiveworkshop.wc3.util.ModelUtils; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -73,11 +74,11 @@ public ComponentLayerPanel() { setLayout(new MigLayout("fill", "", "[fill][fill]")); final JPanel leftHandSettingsPanel = new JPanel(); layerFlagsPanel = new LayerFlagsPanel(); - layerFlagsPanel.setBorder(BorderFactory.createTitledBorder("Flags")); + layerFlagsPanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("border.componentlayerpanel_setlayout_flags"))); add(leftHandSettingsPanel); add(layerFlagsPanel); leftHandSettingsPanel.setLayout(new MigLayout()); - leftHandSettingsPanel.add(new JLabel("Filter Mode:")); + leftHandSettingsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.componentlayerpanel_setlayout_filter"))); filterModeDropdown = new JComboBox(Layer.FilterMode.values()); filterModeDropdown.addActionListener(new ActionListener() { @Override @@ -108,17 +109,17 @@ public void actionPerformed(final ActionEvent e) { } } }); - leftHandSettingsPanel.add(new JLabel("Shader:")); + leftHandSettingsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.componentlayerpanel_setlayout_shader"))); leftHandSettingsPanel.add(shaderOptionComboBox, "wrap, growx, span 2"); textureTypeToButton = new EnumMap<>(ShaderTextureTypeHD.class); for (final ShaderTextureTypeHD shaderTextureTypeHD : ShaderTextureTypeHD.VALUES) { - final JLabel shaderTextureLabel = new JLabel(shaderTextureTypeHD.name() + " Texture:"); + final JLabel shaderTextureLabel = new JLabel(shaderTextureTypeHD.name() + LocalizationManager.getInstance().get("label.componentlayerpanel_setlayout_texture")); if (shaderTextureTypeHD != ShaderTextureTypeHD.Diffuse) { nonDiffuseTextureLabels.add(shaderTextureLabel); } leftHandSettingsPanel.add(shaderTextureLabel); - final JButton textureButton = new JButton("Choose Texture"); + final JButton textureButton = new JButton(LocalizationManager.getInstance().get("button.componentlayerpanel_setlayout_choose_texture")); textureButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -132,7 +133,7 @@ public void actionPerformed(final ActionEvent e) { final JList bitmapList = new JList<>(bitmapListModel); bitmapList.setCellRenderer(new BitmapListCellRenderer(model)); if (JOptionPane.showConfirmDialog(ComponentLayerPanel.this.getRootPane(), - new JScrollPane(bitmapList), "Choose BItmap", + new JScrollPane(bitmapList), LocalizationManager.getInstance().get("scrollpane.componentlayerpanel_setlayout_choose_bitmap"), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) { final Bitmap selectedValue = bitmapList.getSelectedValue(); final SetLayerBitmapAction setLayerBitmapAction = new SetLayerBitmapAction(layer, @@ -157,8 +158,8 @@ public void run() { undoActionListener.pushAction(setLayerCoordIdAction); } }); - leftHandSettingsPanel.add(new JLabel("TVertex Anim:")); - tVertexAnimButton = new JButton("Choose TVertex Anim"); + leftHandSettingsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.componentlayerpanel_setlayout_tvertex_anim"))); + tVertexAnimButton = new JButton(LocalizationManager.getInstance().get("button.componentlayerpanel_setlayout_choose_tvertex_anim")); tVertexAnimButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -172,7 +173,7 @@ public void actionPerformed(final ActionEvent e) { final JList textureAnimList = new JList<>(textureAnimsListModel); textureAnimList.setCellRenderer(new TextureAnimListCellRenderer(model)); if (JOptionPane.showConfirmDialog(ComponentLayerPanel.this.getRootPane(), - new JScrollPane(textureAnimList), "Choose TextureAnim", + new JScrollPane(textureAnimList), LocalizationManager.getInstance().get("scrollpane.componentlayerpanel_setlayout_choose_textureanim"), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) { final TextureAnim selectedValue = textureAnimList.getSelectedValue(); final SetLayerTextureAnimAction setLayerTextureAnimAction = new SetLayerTextureAnimAction(layer, @@ -183,18 +184,18 @@ public void actionPerformed(final ActionEvent e) { } }); leftHandSettingsPanel.add(tVertexAnimButton, "wrap, growx"); - leftHandSettingsPanel.add(new JLabel("CoordID:")); + leftHandSettingsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.componentlayerpanel_setlayout_coordid"))); leftHandSettingsPanel.add(coordIdSpinner, "wrap, growx"); - alphaPanel = new FloatValuePanel("Alpha"); + alphaPanel = new FloatValuePanel(LocalizationManager.getInstance().get("floatvaluepanel.componentlayerpanel_setlayout_alpha")); leftHandSettingsPanel.add(alphaPanel, "wrap, span 2"); - emissiveGainPanel = new FloatValuePanel("Emissive Gain"); + emissiveGainPanel = new FloatValuePanel(LocalizationManager.getInstance().get("floatvaluepanel.componentlayerpanel_setlayout_emissive_gain")); leftHandSettingsPanel.add(emissiveGainPanel, "wrap, span 2, hidemode 2"); - fresnelColorPanel = new ColorValuePanel("Fresnel Color"); + fresnelColorPanel = new ColorValuePanel(LocalizationManager.getInstance().get("floatvaluepanel.componentlayerpanel_setlayout_fresnel_color")); leftHandSettingsPanel.add(fresnelColorPanel, "wrap, span 2, hidemode 2"); - fresnelOpacityPanel = new FloatValuePanel("Fresnel Opacity"); + fresnelOpacityPanel = new FloatValuePanel(LocalizationManager.getInstance().get("floatvaluepanel.componentlayerpanel_setlayout_fresnel_opacity")); leftHandSettingsPanel.add(fresnelOpacityPanel, "wrap, span 2, hidemode 2"); - fresnelTeamColor = new FloatValuePanel("Fresnel Team Color"); + fresnelTeamColor = new FloatValuePanel(LocalizationManager.getInstance().get("floatvaluepanel.componentlayerpanel_setlayout_fresnel_team_color")); leftHandSettingsPanel.add(fresnelTeamColor, "wrap, span 2, hidemode 2"); } @@ -225,7 +226,7 @@ public void setLayer(final DataSource workingDirectory, final Layer layer, final if (!hasIcon) { textureButton.setIcon(null); } - textureButton.setText(layer.getTextureName(textureBitmap, "None")); + textureButton.setText(layer.getTextureName(textureBitmap, LocalizationManager.getInstance().get("text.componentlayerpanel_setlayer_texture"))); if (shaderTextureTypeHD != ShaderTextureTypeHD.Diffuse) { textureButton.setVisible(hdShader); } @@ -234,8 +235,8 @@ public void setLayer(final DataSource workingDirectory, final Layer layer, final label.setVisible(hdShader); } coordIdSpinner.reloadNewValue(layer.getCoordId()); - tVertexAnimButton.setText(layer.getTextureAnim() == null ? "None" - : "TextureAnim " + modelViewManager.getModel().getTextureAnimId(layer.getTextureAnim())); + tVertexAnimButton.setText(layer.getTextureAnim() == null ? LocalizationManager.getInstance().get("text.componentlayerpanel_setlayer_tvertexanim_1") + : LocalizationManager.getInstance().get("text.componentlayerpanel_setlayer_tvertexanim_2") + modelViewManager.getModel().getTextureAnimId(layer.getTextureAnim())); alphaPanel.reloadNewValue((float) layer.getStaticAlpha(), new Callback() { @Override public void run(final Float value) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentMaterialLayersPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentMaterialLayersPanel.java index 87ef2bd88..f63220c25 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentMaterialLayersPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentMaterialLayersPanel.java @@ -14,12 +14,19 @@ import com.hiveworkshop.wc3.mdl.Layer; import com.hiveworkshop.wc3.mdl.Material; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; public class ComponentMaterialLayersPanel extends JPanel { - public static final String[] REFORGED_LAYER_DEFINITIONS = { "Diffuse", "Normal", "ORM", "Emissive", "Team Color", - "Reflections" }; + public static final String[] REFORGED_LAYER_DEFINITIONS = { + LocalizationManager.getInstance().get("string.componentmateriallayerspanel_reforged_layer_definitions_diffuse"), + LocalizationManager.getInstance().get("string.componentmateriallayerspanel_reforged_layer_definitions_normal"), + LocalizationManager.getInstance().get("string.componentmateriallayerspanel_reforged_layer_definitions_orm"), + LocalizationManager.getInstance().get("string.componentmateriallayerspanel_reforged_layer_definitions_emissive"), + LocalizationManager.getInstance().get("string.componentmateriallayerspanel_reforged_layer_definitions_team_color"), + LocalizationManager.getInstance().get("string.componentmateriallayerspanel_reforged_layer_definitions_reflections") + }; private static final Color HIGHLIGHT_BUTTON_BACKGROUND_COLOR = new Color(100, 118, 135); private Material material; private UndoActionListener undoActionListener; @@ -32,7 +39,7 @@ public class ComponentMaterialLayersPanel extends JPanel { public ComponentMaterialLayersPanel() { setLayout(new MigLayout()); - addLayerButton = new JButton("Add Layer"); + addLayerButton = new JButton(LocalizationManager.getInstance().get("button.componentmateriallayerspanel_add_layer")); addLayerButton.setBackground(HIGHLIGHT_BUTTON_BACKGROUND_COLOR); addLayerButton.setForeground(Color.WHITE); } @@ -59,8 +66,8 @@ public void setMaterial(final Material material, final ModelViewManager modelVie } else { panel = new ComponentLayerPanel(); - layerLabel = new JLabel("Layer"); - layerDeleteButton = new JButton("Delete"); + layerLabel = new JLabel(LocalizationManager.getInstance().get("button.componentmateriallayerspanel_layer")); + layerDeleteButton = new JButton(LocalizationManager.getInstance().get("button.componentmateriallayerspanel_layerdelete")); layerDeleteButton.setBackground(Color.RED); layerDeleteButton.setForeground(Color.WHITE); cachedLayerPanels.add(panel); @@ -73,13 +80,13 @@ public void setMaterial(final Material material, final ModelViewManager modelVie reforgedDefintion = REFORGED_LAYER_DEFINITIONS[i]; } else { - reforgedDefintion = "Unknown"; + reforgedDefintion = LocalizationManager.getInstance().get("string.componentmateriallayerspanel_reforged_layer_definitions_unknown"); } - layerLabel.setText(reforgedDefintion + " Layer"); + layerLabel.setText(reforgedDefintion + " " + LocalizationManager.getInstance().get("text.componentmateriallayerspanel_layer")); layerLabel.setFont(layerLabel.getFont().deriveFont(Font.BOLD)); } else { - layerLabel.setText("Layer " + (i + 1)); + layerLabel.setText(LocalizationManager.getInstance().get("text.componentmateriallayerspanel_layer") + " " + (i + 1)); layerLabel.setFont(layerLabel.getFont().deriveFont(Font.PLAIN)); } panel.setLayer(modelViewManager.getModel().getWrappedDataSource(), layer, diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/FloatTrackTableModel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/FloatTrackTableModel.java index f2451d3fd..628580def 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/FloatTrackTableModel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/FloatTrackTableModel.java @@ -3,6 +3,7 @@ import javax.swing.table.AbstractTableModel; import com.hiveworkshop.wc3.mdl.AnimFlag; +import hiveworkshop.localizationmanager.LocalizationManager; public class FloatTrackTableModel extends AbstractTableModel { private AnimFlag track; @@ -16,24 +17,24 @@ public String getColumnName(final int column) { if ((track != null) && track.tans()) { switch (column) { case 0: - return "Keyframe"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getcolumnname_keyframe"); case 1: - return "Value"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getcolumnname_value"); case 2: - return "InTan"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getcolumnname_intan"); case 3: - return "OutTan"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getcolumnname_outtan"); case 4: - return "Delete"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getcolumnname_delete"); } } else { switch (column) { case 0: - return "Keyframe"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getcolumnname_keyframe"); case 1: - return "Value"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getcolumnname_value"); case 2: - return "Delete"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getcolumnname_delete"); } } return null; @@ -99,7 +100,7 @@ public Object getValueAt(final int rowIndex, final int columnIndex) { case 3: return track.getOutTans().get(rowIndex); case 4: - return "Delete"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getvalueat_delete"); } } else { switch (columnIndex) { @@ -108,7 +109,7 @@ public Object getValueAt(final int rowIndex, final int columnIndex) { case 1: return track.getValues().get(rowIndex); case 2: - return "Delete"; + return LocalizationManager.getInstance().get("string.floattracktablemodel_getvalueat_delete"); } } return null; diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/LayerFlagsPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/LayerFlagsPanel.java index 6e221b6fd..fdc1d700e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/LayerFlagsPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/LayerFlagsPanel.java @@ -4,6 +4,7 @@ import javax.swing.JPanel; import com.hiveworkshop.wc3.mdl.Layer; +import hiveworkshop.localizationmanager.LocalizationManager; import net.miginfocom.swing.MigLayout; @@ -18,19 +19,19 @@ public class LayerFlagsPanel extends JPanel { public LayerFlagsPanel() { setLayout(new MigLayout()); - unshaded = new JCheckBox("Unshaded"); + unshaded = new JCheckBox(LocalizationManager.getInstance().get("checkbox.layerflagspanel_unshaded")); add(unshaded, "wrap"); - sphereEnvMap = new JCheckBox("SphereEnvMap"); + sphereEnvMap = new JCheckBox(LocalizationManager.getInstance().get("checkbox.layerflagspanel_sphere_env_map")); add(sphereEnvMap, "wrap"); - twoSided = new JCheckBox("TwoSided"); + twoSided = new JCheckBox(LocalizationManager.getInstance().get("checkbox.layerflagspanel_two_sided")); add(twoSided, "wrap"); - unfogged = new JCheckBox("Unfogged"); + unfogged = new JCheckBox(LocalizationManager.getInstance().get("checkbox.layerflagspanel_unfogged")); add(unfogged, "wrap"); - noDepthTest = new JCheckBox("NoDepthTest"); + noDepthTest = new JCheckBox(LocalizationManager.getInstance().get("checkbox.layerflagspanel_no_depth_test")); add(noDepthTest, "wrap"); - noDepthSet = new JCheckBox("NoDepthSet"); + noDepthSet = new JCheckBox(LocalizationManager.getInstance().get("checkbox.layerflagspanel_no_depth_set")); add(noDepthSet, "wrap"); - unlit = new JCheckBox("Unlit"); + unlit = new JCheckBox(LocalizationManager.getInstance().get("checkbox.layerflagspanel_unlit")); add(unlit, "wrap"); } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/CreatorModelingPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/CreatorModelingPanel.java index b31ddd645..19eea58e9 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/CreatorModelingPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/CreatorModelingPanel.java @@ -44,6 +44,7 @@ import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class CreatorModelingPanel extends JPanel implements ModelEditorChangeActivityListener, TimeSliderTimeSelectionListener { @@ -116,10 +117,10 @@ public CreatorModelingPanel(final ModelEditorChangeActivityListener listener, animationChooserBoxModel = new DefaultComboBoxModel<>(); modeChooserBoxModel = new DefaultComboBoxModel<>(); - modeChooserBoxModel.addElement("Mesh Basics"); - modeChooserBoxModel.addElement("Standard Primitives"); - modeChooserBoxModel.addElement("Extended Primitives"); - modeChooserBoxModel.addElement("Animation Nodes"); + modeChooserBoxModel.addElement(LocalizationManager.getInstance().get("element.creatormodelingpanel_creatormodelingpanel_mesh_basics")); + modeChooserBoxModel.addElement(LocalizationManager.getInstance().get("element.creatormodelingpanel_creatormodelingpanel_standard_primitives")); + modeChooserBoxModel.addElement(LocalizationManager.getInstance().get("element.creatormodelingpanel_creatormodelingpanel_extended_primitives")); + modeChooserBoxModel.addElement(LocalizationManager.getInstance().get("element.creatormodelingpanel_creatormodelingpanel_animation_nodes")); modeChooserBox = new JComboBox<>(modeChooserBoxModel); animationChooserBox = new JComboBox<>(animationChooserBoxModel); animationChooserBox.setVisible(false); @@ -148,21 +149,21 @@ public void actionPerformed(final ActionEvent e) { final JPanel standardPrimitivesPanel = new JPanel(new BorderLayout()); final JPanel drawPrimitivesPanel = new JPanel(new GridLayout(16, 1)); - drawPrimitivesPanel.setBorder(BorderFactory.createTitledBorder("Draw")); - final ModeButton planeButton = new ModeButton("Plane"); + drawPrimitivesPanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("border.creatormodelingpanel_creatormodelingpanel_drawprimitivespanel"))); + final ModeButton planeButton = new ModeButton(LocalizationManager.getInstance().get("button.creatormodelingpanel_creatormodelingpanel_planebutton")); planeButton.addActionListener(new ActionListenerImplementation( new DrawPlaneActivityDescriptor(programPreferences, activeViewportWatcher), programPreferences, listener, planeButton)); modeButtons.add(planeButton); drawPrimitivesPanel.add(planeButton); - final ModeButton boxButton = new ModeButton("Box"); + final ModeButton boxButton = new ModeButton(LocalizationManager.getInstance().get("button.creatormodelingpanel_creatormodelingpanel_box")); boxButton.addActionListener(new ActionListenerImplementation( new DrawBoxActivityDescriptor(programPreferences, activeViewportWatcher), programPreferences, listener, boxButton)); modeButtons.add(boxButton); drawPrimitivesPanel.add(boxButton); final JPanel spOptionsPanel = new JPanel(new GridLayout(16, 1)); - spOptionsPanel.setBorder(BorderFactory.createTitledBorder("Options")); + spOptionsPanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("border.creatormodelingpanel_creatormodelingpanel_options"))); standardPrimitivesPanel.add(drawPrimitivesPanel, BorderLayout.NORTH); standardPrimitivesPanel.add(spOptionsPanel, BorderLayout.CENTER); @@ -186,9 +187,9 @@ public void makeMeshBasicsPanel(final ModelEditorChangeActivityListener listener final ToolbarButtonGroup actionTypeGroup, final ActiveViewportWatcher activeViewportWatcher, final DefaultComboBoxModel modeChooserBoxModel, final JPanel cardPanel) { - final ModeButton vertexButton = new ModeButton("Vertex"); - final ModeButton faceButton = new ModeButton("Face from Selection"); - final ModeButton boneButton = new ModeButton("Bone"); + final ModeButton vertexButton = new ModeButton(LocalizationManager.getInstance().get("button.creatormodelingpanel_makemeshbasicspanel_vertex")); + final ModeButton faceButton = new ModeButton(LocalizationManager.getInstance().get("button.creatormodelingpanel_makemeshbasicspanel_face_election")); + final ModeButton boneButton = new ModeButton(LocalizationManager.getInstance().get("button.creatormodelingpanel_makemeshbasicspanel_bone")); faceButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -203,15 +204,16 @@ public void actionPerformed(final ActionEvent e) { undoActionListener.pushAction(createFaceFromSelection); } catch (final WrongModeException exc) { JOptionPane.showMessageDialog(CreatorModelingPanel.this, - "Unable to create face, wrong selection mode", "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("dialog.creatormodelingpanel_makemeshbasicspanel_unable_create_face"), + LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } catch (final FaceCreationException exc) { - JOptionPane.showMessageDialog(CreatorModelingPanel.this, exc.getMessage(), "Error", + JOptionPane.showMessageDialog(CreatorModelingPanel.this, exc.getMessage(), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } } }); final JPanel drawToolsPanel = new JPanel(new GridLayout(2, 1)); - drawToolsPanel.setBorder(BorderFactory.createTitledBorder("Draw")); + drawToolsPanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("border.creatormodelingpanel_makemeshbasicspanel_draw"))); drawToolsPanel.add(vertexButton); drawToolsPanel.add(faceButton); drawToolsPanel.add(boneButton); @@ -221,7 +223,7 @@ public void actionPerformed(final ActionEvent e) { meshBasicsPanel.add(drawToolsPanel, BorderLayout.NORTH); final JPanel editToolsPanel = new JPanel(new GridLayout(16, 1)); - editToolsPanel.setBorder(BorderFactory.createTitledBorder("Manipulate")); + editToolsPanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("border.creatormodelingpanel_makemeshbasicspanel_manipulate"))); for (final ToolbarActionButtonType type : actionTypeGroup.getToolbarButtonTypes()) { final String typeName = type.getName(); @@ -271,7 +273,7 @@ public void makeAnimationBasicsPanel(final ModelEditorChangeActivityListener lis final JPanel meshBasicsPanel = new JPanel(new BorderLayout()); cardPanel.add(meshBasicsPanel, ANIMATIONBASICS); final JPanel editToolsPanel = new JPanel(new GridLayout(16, 1)); - editToolsPanel.setBorder(BorderFactory.createTitledBorder("Manipulate")); + editToolsPanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("border.creatormodelingpanel_makeanimationbasicspanel_manipulate"))); int index = 0; for (final ToolbarActionButtonType type : actionTypeGroup.getToolbarButtonTypes()) { @@ -372,9 +374,9 @@ public void reloadAnimationList() { final Object thingSelected = selectedItem == null ? null : selectedItem.getThing(); thingToChooseableItem.clear(); boolean sawLast = selectedItem == null; - final ChooseableDoNothing doNothingItem = new ChooseableDoNothing("Custom Timeframe"); + final ChooseableDoNothing doNothingItem = new ChooseableDoNothing(LocalizationManager.getInstance().get("println.creatormodelingpanel_reloadanimationlist_custom_timeframe")); animationChooserBoxModel.addElement(doNothingItem); - thingToChooseableItem.put("Custom Timeframe", doNothingItem); + thingToChooseableItem.put(LocalizationManager.getInstance().get("println.creatormodelingpanel_reloadanimationlist_custom_timeframe"), doNothingItem); for (final Animation animation : modelView.getModel().getAnims()) { final ChooseableAnimation choosableItem = new ChooseableAnimation(animation); thingToChooseableItem.put(animation, choosableItem); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/DrawVertexActivity.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/DrawVertexActivity.java index f2bdadaee..059967189 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/DrawVertexActivity.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/DrawVertexActivity.java @@ -21,6 +21,7 @@ import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.render3d.RenderModel; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class DrawVertexActivity implements ModelEditorViewportActivity { @@ -79,7 +80,7 @@ public void mousePressed(final MouseEvent e, final CoordinateSystem coordinateSy locationCalculator.z, facingVector); undoActionListener.pushAction(action); } catch (final WrongModeException exc) { - JOptionPane.showMessageDialog(null, exc.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(null, exc.getMessage(), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoneAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoneAction.java index f65c515fc..c72d9ded8 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoneAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoneAction.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.mdl.Bone; import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class DrawBoneAction implements UndoAction { private final ModelView modelView; @@ -38,7 +39,7 @@ public void redo() { @Override public String actionName() { - return "add " + bone.getName(); + return LocalizationManager.getInstance().get("string.drawboneaction_actionname") + bone.getName(); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoxAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoxAction.java index d52f1dd0d..fc82affc5 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoxAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoxAction.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.util.ModelUtils; import com.hiveworkshop.wc3.util.ModelUtils.Mesh; +import hiveworkshop.localizationmanager.LocalizationManager; public class DrawBoxAction implements GenericMoveAction { @@ -117,7 +118,7 @@ public void redo() { @Override public String actionName() { - return "create box"; + return LocalizationManager.getInstance().get("string.drawboxaction_actionname"); } public Mesh getPlane() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawCameraAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawCameraAction.java index 1bef24491..446241028 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawCameraAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawCameraAction.java @@ -7,6 +7,7 @@ import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Camera; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class DrawCameraAction implements UndoAction { private final ModelView modelView; @@ -37,7 +38,7 @@ public void redo() { @Override public String actionName() { - return "add " + camera.getName(); + return LocalizationManager.getInstance().get("string.drawcameraaction_actionname") + camera.getName(); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawPlaneAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawPlaneAction.java index f24395bec..ad767df6e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawPlaneAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawPlaneAction.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.util.ModelUtils; import com.hiveworkshop.wc3.util.ModelUtils.Mesh; +import hiveworkshop.localizationmanager.LocalizationManager; public class DrawPlaneAction implements GenericMoveAction { @@ -108,7 +109,7 @@ public void redo() { @Override public String actionName() { - return "create plane"; + return LocalizationManager.getInstance().get("string.drawplaneaction_actionname"); } public Mesh getPlane() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawVertexAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawVertexAction.java index 43cf969bf..4391efdb4 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawVertexAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawVertexAction.java @@ -2,6 +2,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.GeosetVertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class DrawVertexAction implements UndoAction { private final GeosetVertex vertex; @@ -22,7 +23,7 @@ public void redo() { @Override public String actionName() { - return "add vertex"; + return LocalizationManager.getInstance().get("string.drawvertexaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/NewGeosetAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/NewGeosetAction.java index 8bbc0ca7c..ae8aa058c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/NewGeosetAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/NewGeosetAction.java @@ -7,6 +7,7 @@ import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.Geoset; import com.hiveworkshop.wc3.mdl.EditableModel; +import hiveworkshop.localizationmanager.LocalizationManager; public class NewGeosetAction implements UndoAction { private final Geoset geoset; @@ -36,7 +37,7 @@ public void redo() { @Override public String actionName() { - return "create geoset"; + return LocalizationManager.getInstance().get("string.newgeosetaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/activity/DrawBoxActivity.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/activity/DrawBoxActivity.java index f2fe50111..2dfab49b2 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/activity/DrawBoxActivity.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/activity/DrawBoxActivity.java @@ -22,6 +22,7 @@ import com.hiveworkshop.wc3.mdl.render3d.RenderModel; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class DrawBoxActivity implements ModelEditorViewportActivity { @@ -158,7 +159,7 @@ public void updateBase(final Double mouseStart, final Double mouseEnd, final byt dim2, facingVector, numSegsX, numSegsY, numSegsZ); } catch (final WrongModeException exc) { drawingState = DrawingState.NOTHING; - JOptionPane.showMessageDialog(null, exc.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(null, exc.getMessage(), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } } else { boxAction.updateTranslation(mouseEnd.x - this.lastMousePoint.x, mouseEnd.y - this.lastMousePoint.y, 0); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/activity/DrawPlaneManipulator.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/activity/DrawPlaneManipulator.java index c6639b09c..a60c6ac0b 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/activity/DrawPlaneManipulator.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/activity/DrawPlaneManipulator.java @@ -14,6 +14,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericMoveAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.manipulator.AbstractManipulator; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class DrawPlaneManipulator extends AbstractManipulator { private final ModelEditor modelEditor; @@ -44,7 +45,7 @@ public void update(final Double mouseStart, final Double mouseEnd, final byte di addPlane = modelEditor.addPlane(activityStart.x, activityStart.y, mouseEnd.x, mouseEnd.y, dim1, dim2, facingVector, numberOfWidthSegments, numberOfHeightSegments); } catch (final WrongModeException exc) { - JOptionPane.showMessageDialog(null, exc.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(null, exc.getMessage(), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } } else { // TODO remove 0 arg @@ -57,7 +58,7 @@ public void update(final Double mouseStart, final Double mouseEnd, final byte di @Override public UndoAction finish(final Double mouseStart, final Double mouseEnd, final byte dim1, final byte dim2) { if (addPlane == null) { - return new DoNothingAction("do nothing"); + return new DoNothingAction(LocalizationManager.getInstance().get("println.drawplanemnipulator.undoaction")); } return addPlane; } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/cutpaste/ViewportTransferHandler.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/cutpaste/ViewportTransferHandler.java index 7a32d2e19..8cbf2f4f3 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/cutpaste/ViewportTransferHandler.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/cutpaste/ViewportTransferHandler.java @@ -34,6 +34,7 @@ import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; public class ViewportTransferHandler extends TransferHandler { @@ -57,10 +58,10 @@ public boolean importData(final TransferHandler.TransferSupport info) { data = (String) info.getTransferable().getTransferData(DataFlavor.stringFlavor); pastedModel = EditableModel.read(new ByteArrayInputStream(data.getBytes())); } catch (final UnsupportedFlavorException ufe) { - System.out.println("importData: unsupported data flavor"); + System.out.println(LocalizationManager.getInstance().get("println.viewporttransferhandler_importdata_unsupportedflavorexception")); return false; } catch (final IOException ioe) { - System.out.println("importData: I/O exception"); + System.out.println(LocalizationManager.getInstance().get("println.viewporttransferhandler_importdata_ioexception")); return false; } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractModelEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractModelEditor.java index 5537fd5d3..8ade86543 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractModelEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractModelEditor.java @@ -61,6 +61,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public abstract class AbstractModelEditor extends AbstractSelectingEditor implements ModelEditor { protected final ModelView model; @@ -274,7 +275,9 @@ public UndoAction beginExtrudingSelection() { } else { copies.add(null); - // System.out.println("GeosetVertex " + i + " was not found."); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_geosetvertex") + // + i + + // LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_not_found")); } } for (final Triangle tri : selTris) { @@ -286,15 +289,15 @@ public UndoAction beginExtrudingSelection() { tri.set(i, b); a.getTriangles().remove(tri); // if (a.getTriangles().contains(tri)) { - // System.out.println("It's a bloody war!"); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_bloody")); // } b.getTriangles().add(tri); } } } } - // System.out.println(selection.size() + " verteces cloned into " + - // copies.size() + " more."); + // System.out.println(selection.size() + LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_verteces") + + // copies.size() + LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_more")); final ArrayList newTriangles = new ArrayList<>(); for (int k = 0; k < selection.size(); k++) { final Vertex vert = selection.get(k); @@ -320,7 +323,7 @@ public UndoAction beginExtrudingSelection() { // for (final GeosetVertex copyVer : copies) { // if (copyVer != null) { // if (tri.containsRef(copyVer)) { - // System.out.println("holy brejeezers!"); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_holy")); // } // } // } @@ -343,10 +346,10 @@ public UndoAction beginExtrudingSelection() { final GeosetVertex gvCopy = copies.get(selection.indexOf(gv)); final GeosetVertex gvTempCopy = copies.get(selection.indexOf(gvTemp)); // if (gvCopy == null) { - // System.out.println("Vertex (gvCopy) copy found as null!"); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_vertex_gvcopy")); // } // if (gvTempCopy == null) { - // System.out.println("Vertex (gvTempCopy) copy found as null!"); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_vertex_gvtempcopy")); // } Triangle newFace = new Triangle(null, null, null, gv.getGeoset()); @@ -360,7 +363,8 @@ public UndoAction beginExtrudingSelection() { } } - // System.out.println(" Indeces: " + indexA + "," + indexB + "," + indexC); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_indeces") + // + indexA + "," + indexB + "," + indexC); newFace.set(indexA, gv); newFace.set(indexB, gvTemp); @@ -385,7 +389,7 @@ public UndoAction beginExtrudingSelection() { if (!bad) { newTriangles.add(newFace); - // System.out.println("New Face: "); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_new_face")); // System.out.println(newFace.get(0)); // System.out.println(newFace.get(1)); // System.out.println(newFace.get(2)); @@ -398,7 +402,7 @@ public UndoAction beginExtrudingSelection() { // Make sure it's included later newTriangles.add(newFace); - // System.out.println("New Alternate Face: "); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_new_alternate_face")); // System.out.println(newFace.get(0)); // System.out.println(newFace.get(1)); // System.out.println(newFace.get(2)); @@ -441,7 +445,7 @@ public UndoAction beginExtrudingSelection() { if (vert.getClass() == GeosetVertex.class) { final GeosetVertex gv = (GeosetVertex) vert; for (final Triangle t : gv.getTriangles()) { - // System.out.println("SHOULD be one: " + + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_should") + // Collections.frequency(gv.getTriangles(), t)); if (!t.containsRef(gv)) { probs++; @@ -449,8 +453,8 @@ public UndoAction beginExtrudingSelection() { } } } - // System.out.println("Extrude finished with " + probs + " inexplicable - // errors."); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_extrude") + probs + // + LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextrudingselection_inexplicable")); final ExtrudeAction tempe = new ExtrudeAction(); // TODO better code tempe.storeSelection(selection); tempe.setType(true); @@ -486,10 +490,12 @@ public UndoAction beginExtendingSelection() { } else { // copies.add(null); - // System.out.println("GeosetVertex " + i + " was not found."); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextendingselection_geosetvertex") + // + i + // + LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextendingselection_not_found")); } } - System.out.println(selection.size() + " verteces cloned into " + copies.size() + " more."); + System.out.println(selection.size() + " " + copies.size() + LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextendingselection_more")); final ArrayList copiedGroup = new ArrayList<>(); for (final Triangle tri : selTris) { if (!selection.contains(tri.get(0)) || !selection.contains(tri.get(1)) || !selection.contains(tri.get(2))) { @@ -520,10 +526,10 @@ else if (gvTemp == null) { } if (selVerts == 2) { // if (gvCopy == null) { - // System.out.println("Vertex (gvCopy) copy found as null!"); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextendingselection_vertex_gvcopy")); // } // if (gvTempCopy == null) { - // System.out.println("Vertex (gvTempCopy) copy found as null!"); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextendingselection_vertex_gvtempcopy")); // } Triangle newFace = new Triangle(null, null, null, gv.getGeoset()); @@ -537,7 +543,7 @@ else if (gvTemp == null) { } } - // System.out.println(" Indeces: " + indexA + "," + indexB + "," + indexC); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextendingselection_indeces") + indexA + "," + indexB + "," + indexC); newFace.set(indexA, gv); newFace.set(indexB, gvTemp); @@ -549,7 +555,7 @@ else if (gvTemp == null) { gv.getGeoset().addTriangle(newFace); newTriangles.add(newFace); - // System.out.println("New Face: "); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextendingselection_new_face")); // System.out.println(newFace.get(0)); // System.out.println(newFace.get(1)); // System.out.println(newFace.get(2)); @@ -566,7 +572,7 @@ else if (gvTemp == null) { gv.getGeoset().addTriangle(newFace); newTriangles.add(newFace); - // System.out.println("New Alternate Face: "); + // System.out.println(LocalizationManager.getInstance().get("println.abstractmodeleditor_beginextendingselection_new_alternate_face")); // System.out.println(newFace.get(0)); // System.out.println(newFace.get(1)); // System.out.println(newFace.get(2)); @@ -631,7 +637,7 @@ public CloneAction cloneSelectedComponents(final ClonedNodeNamePicker clonedNode final java.util.Map nodeToNamePicked = clonedNodeNamePicker.pickNames(newBones); if (nodeToNamePicked == null) { throw new RuntimeException( - "user does not wish to continue so we put in an error to interrupt clone so model is OK"); + LocalizationManager.getInstance().get("exception.abstractmodeleditor_cloneselectedcomponents")); } for (final IdObject node : nodeToNamePicked.keySet()) { node.setName(nodeToNamePicked.get(node)); @@ -754,7 +760,7 @@ public UndoAction setPosition(final Vertex center, final double x, final double @Override public UndoAction rotate(final Vertex center, final double rotateX, final double rotateY, final double rotateZ) { - final CompoundAction compoundAction = new CompoundAction("rotate", + final CompoundAction compoundAction = new CompoundAction(LocalizationManager.getInstance().get("action.abstractmodeleditor_rotate"), ListView.Util.of(new SimpleRotateAction(this, center, rotateX, (byte) 2, (byte) 1), new SimpleRotateAction(this, center, rotateY, (byte) 0, (byte) 2), new SimpleRotateAction(this, center, rotateZ, (byte) 1, (byte) 0))); @@ -786,7 +792,7 @@ public GenericRotateAction beginRotation(final double centerX, final double cent @Override public GenericRotateAction beginSquatTool(final double centerX, final double centerY, final double centerZ, final byte firstXYZ, final byte secondXYZ) { - throw new WrongModeException("Unable to use squat tool outside animation editor mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.abstractmodeleditor_beginsquattool")); } @Override @@ -796,7 +802,7 @@ public GenericScaleAction beginScaling(final double centerX, final double center @Override public UndoAction createKeyframe(final ModelEditorActionType actionType) { - throw new UnsupportedOperationException("Cannot create keyframe outside of animation mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.abstractmodeleditor_createkeyframe")); } @Override @@ -816,7 +822,7 @@ public GenericMoveAction addPlane(final double x, final double y, final double x boolean needsGeosetAction = false; if (solidWhiteGeoset == null) { solidWhiteGeoset = new Geoset(); - solidWhiteGeoset.setMaterial(new Material(new Layer("None", new Bitmap("Textures\\white.blp")))); + solidWhiteGeoset.setMaterial(new Material(new Layer(LocalizationManager.getInstance().get("layer.abstractmodeleditor_addplane_solidwhitegeoset"), new Bitmap("Textures\\white.blp")))); needsGeosetAction = true; } GenericMoveAction action; @@ -825,7 +831,7 @@ public GenericMoveAction addPlane(final double x, final double y, final double x if (needsGeosetAction) { final NewGeosetAction newGeosetAction = new NewGeosetAction(solidWhiteGeoset, model.getModel(), structureChangeListener); - action = new CompoundMoveAction("create plane", + action = new CompoundMoveAction(LocalizationManager.getInstance().get("action.abstractmodeleditor_addplane_create_plane"), ListView.Util.of(new DoNothingMoveActionAdapter(newGeosetAction), drawVertexAction)); } else { @@ -853,7 +859,7 @@ public GenericMoveAction addBox(final double x, final double y, final double x2, boolean needsGeosetAction = false; if (solidWhiteGeoset == null) { solidWhiteGeoset = new Geoset(); - solidWhiteGeoset.setMaterial(new Material(new Layer("None", new Bitmap("Textures\\white.blp")))); + solidWhiteGeoset.setMaterial(new Material(new Layer(LocalizationManager.getInstance().get("layer.abstractmodeleditor_addbox_solidwhitegeoset"), new Bitmap("Textures\\white.blp")))); needsGeosetAction = true; } GenericMoveAction action; @@ -862,7 +868,7 @@ public GenericMoveAction addBox(final double x, final double y, final double x2, if (needsGeosetAction) { final NewGeosetAction newGeosetAction = new NewGeosetAction(solidWhiteGeoset, model.getModel(), structureChangeListener); - action = new CompoundMoveAction("create plane", + action = new CompoundMoveAction(LocalizationManager.getInstance().get("action.abstractmodeleditor_addbox_create_plane"), ListView.Util.of(new DoNothingMoveActionAdapter(newGeosetAction), drawVertexAction)); } else { @@ -880,7 +886,7 @@ public RigAction rig() { @Override public UndoAction addBone(final double x, final double y, final double z) { - throw new WrongModeException("Unable to add bone outside of pivot point editor"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.abstractmodeleditor_addbone")); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractSelectingEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractSelectingEditor.java index 3908e9bf2..f76c7e8b6 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractSelectingEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractSelectingEditor.java @@ -15,6 +15,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.listener.EditabilityToggleHandler; import com.hiveworkshop.wc3.gui.modeledit.selection.SelectableComponent; import com.hiveworkshop.wc3.gui.modeledit.selection.SelectionManager; +import hiveworkshop.localizationmanager.LocalizationManager; public abstract class AbstractSelectingEditor implements ModelEditor { protected final SelectionManager selectionManager; @@ -44,7 +45,7 @@ public final UndoAction addSelectedRegion(final Rectangle2D region, final Coordi protected final UndoAction setSelectionWithAction(final List newSelection) { final Set previousSelection = new HashSet<>(selectionManager.getSelection()); selectionManager.setSelection(newSelection); - return (new SetSelectionAction<>(newSelection, previousSelection, selectionManager, "select")); + return (new SetSelectionAction<>(newSelection, previousSelection, selectionManager, LocalizationManager.getInstance().get("action.abstractselectingeditor_setselectionwithaction"))); } protected final UndoAction removeSelectionWithAction(final List newSelection) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/CloneContextHelper.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/CloneContextHelper.java index 0e896d764..19f045d2a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/CloneContextHelper.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/CloneContextHelper.java @@ -17,6 +17,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class CloneContextHelper { private final ModelView model; @@ -67,7 +68,7 @@ public AdvancedCloneAction cloneSelectedComponents(final ClonedNodeNamePicker cl final java.util.Map nodeToNamePicked = clonedNodeNamePicker.pickNames(newBones); if (nodeToNamePicked == null) { throw new RuntimeException( - "user does not wish to continue so we put in an error to interrupt clone so model is OK"); + LocalizationManager.getInstance().get("exception.clonecontexthelper_cloneselectedcomponents")); } for (final IdObject node : nodeToNamePicked.keySet()) { node.setName(nodeToNamePicked.get(node)); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/FaceModelEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/FaceModelEditor.java index f930b8721..0f963ed35 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/FaceModelEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/FaceModelEditor.java @@ -33,6 +33,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class FaceModelEditor extends AbstractModelEditor { private final ProgramPreferences programPreferences; @@ -46,17 +47,17 @@ public FaceModelEditor(final ModelView model, final ProgramPreferences programPr @Override public UndoAction autoCenterSelectedBones() { - throw new UnsupportedOperationException("This feature is not available in Face mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.facemodeleditor_autocenterselectedbones")); } @Override public UndoAction setSelectedBoneName(final String name) { - throw new UnsupportedOperationException("This feature is not available in Face mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.facemodeleditor_setselectedbonename")); } @Override public UndoAction addSelectedBoneSuffix(final String name) { - throw new UnsupportedOperationException("This feature is not available in Face mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.facemodeleditor_addselectedbonesuffix")); } @Override @@ -110,7 +111,7 @@ public UndoAction expandSelection() { expandSelection(triangle, expandedSelection); } selectionManager.addSelection(expandedSelection); - return new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, "expand selection"); + return new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.facemodeleditor_expandselection")); } private void expandSelection(final Triangle currentTriangle, final Set selection) { @@ -139,7 +140,7 @@ public UndoAction invertSelection() { } } selectionManager.setSelection(invertedSelection); - return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, "invert selection"); + return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.facemodeleditor_invertselection")); } @Override @@ -152,7 +153,7 @@ public UndoAction selectAll() { } } selectionManager.setSelection(allSelection); - return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select all"); + return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.facemodeleditor_selectall")); } @Override @@ -160,7 +161,7 @@ public UndoAction selectHDUnusedNodes() { final Set oldSelection = new HashSet<>(selectionManager.getSelection()); final Set allSelection = new HashSet<>(); selectionManager.setSelection(allSelection); - return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select HD unused"); + return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.facemodeleditor_selecthdunusednodes")); } @Override @@ -317,22 +318,22 @@ public CopiedModelData copySelection() { @Override public UndoAction addVertex(final double x, final double y, final double z, final Vertex preferredNormalFacingVector) { - throw new WrongModeException("Unable to add vertex in face selection mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.facemodeleditor_addvertex")); } @Override public UndoAction createFaceFromSelection(final Vertex preferredFacingVector) { - throw new WrongModeException("Unable to create face from vertices in face selection mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.facemodeleditor_createfacefromselection")); } @Override public UndoAction setParent(final IdObject node) { - throw new UnsupportedOperationException("This feature is not available in Face mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.facemodeleditor_setparent")); } @Override public UndoAction reLinkRFBone(IdObject node) { - throw new UnsupportedOperationException("This feature is not available in Face mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.facemodeleditor_relinkrfbone")); } public VertexSelectionHelper getVertexSelectionHelper() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/GeosetVertexModelEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/GeosetVertexModelEditor.java index b6d487e45..604893396 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/GeosetVertexModelEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/GeosetVertexModelEditor.java @@ -44,6 +44,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class GeosetVertexModelEditor extends AbstractModelEditor { private final ProgramPreferences programPreferences; @@ -57,17 +58,17 @@ public GeosetVertexModelEditor(final ModelView model, final ProgramPreferences p @Override public UndoAction autoCenterSelectedBones() { - throw new UnsupportedOperationException("This feature is not available in Geoset Vertex mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_autocenterselectedbones")); } @Override public UndoAction setSelectedBoneName(final String name) { - throw new UnsupportedOperationException("This feature is not available in Geoset Vertex mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_setselectedbonename")); } @Override public UndoAction addSelectedBoneSuffix(final String name) { - throw new UnsupportedOperationException("This feature is not available in Geoset Vertex mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_addselectedbonesuffix")); } @Override @@ -109,7 +110,7 @@ public UndoAction expandSelection() { expandSelection(v, expandedSelection); } selectionManager.setSelection(expandedSelection); - return (new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, "expand selection")); + return (new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.geosetvertexmodeleditor_expandselection"))); } private void expandSelection(final GeosetVertex currentVertex, final Set selection) { @@ -133,7 +134,7 @@ public UndoAction invertSelection() { } } selectionManager.setSelection(invertedSelection); - return (new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, "invert selection")); + return (new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.geosetvertexmodeleditor_invertselection"))); } private void toggleSelection(final Set selection, final GeosetVertex position) { @@ -155,7 +156,7 @@ public UndoAction selectAll() { } } selectionManager.setSelection(allSelection); - return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select all")); + return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.geosetvertexmodeleditor_selectall"))); } @Override @@ -163,7 +164,7 @@ public UndoAction selectHDUnusedNodes() { final ArrayList oldSelection = new ArrayList<>(selectionManager.getSelection()); final Set allSelection = new HashSet<>(); selectionManager.setSelection(allSelection); - return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select HD unused")); + return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.geosetvertexmodeleditor_selecthdunusednodes"))); } @Override @@ -331,7 +332,7 @@ public UndoAction addVertex(final double x, final double y, final double z, boolean needsGeosetAction = false; if (solidWhiteGeoset == null) { solidWhiteGeoset = new Geoset(); - solidWhiteGeoset.setMaterial(new Material(new Layer("None", new Bitmap("Textures\\white.blp")))); + solidWhiteGeoset.setMaterial(new Material(new Layer(LocalizationManager.getInstance().get("layer.geosetvertexmodeleditor_addVertex_none"), new Bitmap("Textures\\white.blp")))); needsGeosetAction = true; } final GeosetVertex geosetVertex = new GeosetVertex(x, y, z, new Normal(preferredNormalFacingVector.x, @@ -343,7 +344,7 @@ public UndoAction addVertex(final double x, final double y, final double z, if (needsGeosetAction) { final NewGeosetAction newGeosetAction = new NewGeosetAction(solidWhiteGeoset, model.getModel(), structureChangeListener); - action = new CompoundAction("add vertex", ListView.Util.of(newGeosetAction, drawVertexAction)); + action = new CompoundAction(LocalizationManager.getInstance().get("action.geosetvertexmodeleditor_addVertex_add_vertex"), ListView.Util.of(newGeosetAction, drawVertexAction)); } else { action = drawVertexAction; @@ -357,7 +358,8 @@ public UndoAction createFaceFromSelection(final Vertex preferredFacingVector) { final Set selection = selectionManager.getSelection(); if (selection.size() != 3) { throw new FaceCreationException( - "A face can only be created from exactly 3 vertices (you have " + selection.size() + " selected)"); + LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_createfacefromselection_create_vertices") + + selection.size() + LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_createfacefromselection_selected")); } int index = 0; final GeosetVertex[] verticesArray = new GeosetVertex[3]; @@ -369,13 +371,13 @@ public UndoAction createFaceFromSelection(final Vertex preferredFacingVector) { } else if (geoset != vertex.getGeoset()) { throw new FaceCreationException( - "All three vertices to create a face must be a part of the same Geoset"); + LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_createfacefromselection_all_create")); } } for (final Triangle existingTriangle : verticesArray[0].getTriangles()) { if (existingTriangle.contains(verticesArray[0]) && existingTriangle.contains(verticesArray[1]) && existingTriangle.contains(verticesArray[2])) { - throw new FaceCreationException("Triangle already exists"); + throw new FaceCreationException(LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_createfacefromselection_exists")); } } @@ -395,12 +397,12 @@ else if (geoset != vertex.getGeoset()) { @Override public UndoAction setParent(final IdObject node) { - throw new UnsupportedOperationException("This feature is not available in Geoset Vertex mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_setparent")); } @Override public UndoAction reLinkRFBone(IdObject node) { - throw new UnsupportedOperationException("This feature is not available in Geoset Vertex mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.geosetvertexmodeleditor_relinkrfbone")); } public VertexSelectionHelper getVertexSelectionHelper() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/PivotPointModelEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/PivotPointModelEditor.java index 2a1030334..e7bf0112f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/PivotPointModelEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/PivotPointModelEditor.java @@ -54,6 +54,7 @@ import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.visitor.IdObjectVisitor; +import hiveworkshop.localizationmanager.LocalizationManager; public class PivotPointModelEditor extends AbstractModelEditor { private final ProgramPreferences programPreferences; @@ -126,7 +127,7 @@ public UndoAction autoCenterSelectedBones() { @Override public UndoAction setSelectedBoneName(final String name) { if (selectionManager.getSelection().size() != 1) { - throw new IllegalStateException("Only one bone can be renamed at a time."); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.pivotpointmodeleditor_setselectedbonename_rename")); } final Vertex selectedVertex = selectionManager.getSelection().iterator().next(); IdObject node = null; @@ -134,13 +135,13 @@ public UndoAction setSelectedBoneName(final String name) { if (bone.getPivotPoint() == selectedVertex) { if (node != null) { throw new IllegalStateException( - "Flagrant error. Multiple bones are bound to the same memory addresses. Save your work and restart the application."); + LocalizationManager.getInstance().get("exception.pivotpointmodeleditor_setselectedbonename_error")); } node = bone; } } if (node == null) { - throw new IllegalStateException("Selection is not a node"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.pivotpointmodeleditor_setselectedbonename_selection")); } final RenameBoneAction renameBoneAction = new RenameBoneAction(node.getName(), name, node); renameBoneAction.redo(); @@ -159,17 +160,17 @@ public UndoAction addSelectedBoneSuffix(final String name) { actions.add(renameBoneAction); } } - return new CompoundAction("add selected bone suffix", actions); + return new CompoundAction(LocalizationManager.getInstance().get("action.pivotpointmodeleditor_addselectedbonesuffix"), actions); } @Override public UndoAction addTeamColor() { - return new DoNothingAction("add team color"); + return new DoNothingAction(LocalizationManager.getInstance().get("action.pivotpointmodeleditor_addteamcolor")); } @Override public UndoAction splitGeoset() { - return new DoNothingAction("split geoset"); + return new DoNothingAction(LocalizationManager.getInstance().get("action.pivotpointmodeleditor_split_geoset")); } @Override @@ -332,7 +333,7 @@ public void attachment(final Attachment attachment) { visitor.camera(camera); } selectionManager.setSelection(expandedSelection); - return new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, "expand selection"); + return new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.pivotpointmodeleditor_expandselection")); } @Override @@ -406,7 +407,7 @@ public void attachment(final Attachment attachment) { visitor.camera(object); } selectionManager.setSelection(invertedSelection); - return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, "invert selection"); + return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.pivotpointmodeleditor_invertselection")); } private void toggleSelection(final Set selection, final Vertex position) { @@ -489,7 +490,7 @@ public void attachment(final Attachment attachment) { visitor.camera(object); } selectionManager.setSelection(allSelection); - return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select all"); + return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.pivotpointmodeleditor_selectall")); } @Override @@ -507,13 +508,13 @@ public UndoAction selectHDUnusedNodes() { for (final IdObject node : model.getEditableIdObjects()) { if ((node instanceof Bone) && !usedBones.contains(node) && !(node instanceof Helper)) { if ((node.getChildrenNodes() != null) && !node.getChildrenNodes().isEmpty()) { - System.out.println("note: should maybe be helper: " + node.getName()); + System.out.println(LocalizationManager.getInstance().get("println.pivotpointmodeleditor_selecthdunusednodes") + node.getName()); } allSelection.add(node.getPivotPoint()); } } selectionManager.setSelection(allSelection); - return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select HD unused"); + return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.pivotpointmodeleditor_selecthdunusednodes")); } @Override @@ -1038,13 +1039,13 @@ public UndoAction deleteSelectedComponents() { @Override public UndoAction createFaceFromSelection(final Vertex preferredFacingVector) { - return new DoNothingAction("create face"); + return new DoNothingAction(LocalizationManager.getInstance().get("action.pivotpointmodeleditor_createfacefromselection")); } @Override public UndoAction addVertex(final double x, final double y, final double z, final Vertex preferredNormalFacingVector) { - return new DoNothingAction("add vertex"); + return new DoNothingAction(LocalizationManager.getInstance().get("action.pivotpointmodeleditor_addvertex")); } public VertexSelectionHelper getVertexSelectionHelper() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/TPoseModelEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/TPoseModelEditor.java index e9deeedb6..4f9f2e43c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/TPoseModelEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/TPoseModelEditor.java @@ -49,6 +49,7 @@ import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.visitor.IdObjectVisitor; +import hiveworkshop.localizationmanager.LocalizationManager; public class TPoseModelEditor extends AbstractModelEditor { private final ProgramPreferences programPreferences; @@ -121,11 +122,11 @@ public UndoAction autoCenterSelectedBones() { @Override public UndoAction setSelectedBoneName(final String name) { if (selectionManager.getSelection().size() != 1) { - throw new IllegalStateException("Only one bone can be renamed at a time."); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.tposemodeleditor_setselectedbonename")); } final IdObject node = selectionManager.getSelection().iterator().next(); if (node == null) { - throw new IllegalStateException("Selection is not a node"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.tposemodeleditor_setselectedbonename_selection")); } final RenameBoneAction renameBoneAction = new RenameBoneAction(node.getName(), name, node); renameBoneAction.redo(); @@ -141,17 +142,17 @@ public UndoAction addSelectedBoneSuffix(final String name) { renameBoneAction.redo(); actions.add(renameBoneAction); } - return new CompoundAction("add selected bone suffix", actions); + return new CompoundAction(LocalizationManager.getInstance().get("exception.tposemodeleditor_setselectedbonename_add_bone"), actions); } @Override public UndoAction addTeamColor() { - return new DoNothingAction("add team color"); + return new DoNothingAction(LocalizationManager.getInstance().get("exception.tposemodeleditor_addteamcolor")); } @Override public UndoAction splitGeoset() { - return new DoNothingAction("split geoset"); + return new DoNothingAction(LocalizationManager.getInstance().get("exception.tposemodeleditor_split_geoset")); } @Override @@ -226,12 +227,12 @@ public void attachment(final Attachment attachment) { @Override public UndoAction expandSelection() { - throw new WrongModeException("Not supported in T-Pose mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.tposemodeleditor_expandselection")); } @Override public UndoAction invertSelection() { - throw new WrongModeException("Not supported in T-Pose mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.tposemodeleditor_invertselection")); // final ArrayList oldSelection = new // ArrayList<>(selectionManager.getSelection()); // final Set invertedSelection = new @@ -313,7 +314,7 @@ private void toggleSelection(final Set selection, final Vertex position) @Override public UndoAction selectAll() { - throw new WrongModeException("Not supported in T-Pose mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.tposemodeleditor_selectall")); // final ArrayList oldSelection = new // ArrayList<>(selectionManager.getSelection()); // final Set allSelection = new HashSet<>(); @@ -385,7 +386,7 @@ public UndoAction selectAll() { @Override public UndoAction selectHDUnusedNodes() { - throw new WrongModeException("Not supported in T-Pose mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.tposemodeleditor_selecthdunusednodes")); } @Override @@ -798,13 +799,13 @@ public UndoAction deleteSelectedComponents() { @Override public UndoAction createFaceFromSelection(final Vertex preferredFacingVector) { - return new DoNothingAction("create face"); + return new DoNothingAction(LocalizationManager.getInstance().get("action.tposemodeleditor_createfacefromselection")); } @Override public UndoAction addVertex(final double x, final double y, final double z, final Vertex preferredNormalFacingVector) { - return new DoNothingAction("add vertex"); + return new DoNothingAction(LocalizationManager.getInstance().get("action.tposemodeleditor_addvertex")); } public VertexSelectionHelper getVertexSelectionHelper() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterModelEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterModelEditor.java index c739cbfdf..fa3a00ea7 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterModelEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterModelEditor.java @@ -35,6 +35,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public final class VertexClusterModelEditor extends AbstractModelEditor { private final ProgramPreferences programPreferences; @@ -106,17 +107,17 @@ else if (!geoset.equals(other.geoset)) { @Override public UndoAction autoCenterSelectedBones() { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclustermodeleditor_autocenterselectedbones")); } @Override public UndoAction setSelectedBoneName(final String name) { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclustermodeleditor_setselectedbonename")); } @Override public UndoAction addSelectedBoneSuffix(final String name) { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclustermodeleditor_addselectedbonesuffix")); } @Override @@ -139,7 +140,7 @@ public UndoAction splitGeoset() { @Override public UndoAction expandSelection() { - return new DoNothingAction("expand selection"); + return new DoNothingAction(LocalizationManager.getInstance().get("action.vertexclustermodeleditor_expandselection")); } @Override @@ -159,7 +160,7 @@ public UndoAction invertSelection() { } } selectionManager.setSelection(invertedSelection); - return (new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, "invert selection")); + return (new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.vertexclustermodeleditor_invertselection"))); } @Override @@ -174,7 +175,7 @@ public UndoAction selectAll() { } } selectionManager.setSelection(allSelection); - return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select all")); + return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.vertexclustermodeleditor_selectall"))); } @Override @@ -182,7 +183,7 @@ public UndoAction selectHDUnusedNodes() { final Set oldSelection = new HashSet<>(selectionManager.getSelection()); final Set allSelection = new HashSet<>(); selectionManager.setSelection(allSelection); - return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select HD unused")); + return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.vertexclustermodeleditor_selecthdunusednodes"))); } @Override @@ -348,23 +349,23 @@ public CopiedModelData copySelection() { @Override public UndoAction createFaceFromSelection(final Vertex preferredFacingVector) { - throw new WrongModeException("Unable to create face from vertices in vertex group selection mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.vertexclustermodeleditor_createfacefromselection")); } @Override public UndoAction addVertex(final double x, final double y, final double z, final Vertex preferredNormalFacingVector) { - throw new WrongModeException("Unable to draw vertices in vertex group selection mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.vertexclustermodeleditor_addvertex")); } @Override public UndoAction setParent(final IdObject node) { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclustermodeleditor_setparent")); } @Override public UndoAction reLinkRFBone(IdObject node) { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclustermodeleditor_relinkrfbone")); } public VertexSelectionHelper getVertexSelectionHelper() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterSelectionManager.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterSelectionManager.java index 3744eb505..61f1672c7 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterSelectionManager.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterSelectionManager.java @@ -19,6 +19,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public final class VertexClusterSelectionManager extends AbstractSelectionManager { private static final Color GROUP_SELECTED_COLOR = new Color(1f, 0.45f, 0.75f, 0.3f); @@ -120,22 +121,22 @@ public void renderSelection(final ModelElementRenderer renderer, final Coordinat @Override public TVertex getUVCenter(final int tvertexLayerId) { - throw new UnsupportedOperationException("Not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclusterselectionmanager_getuvcenter")); } @Override public Collection getSelectedTVertices(final int tvertexLayerId) { - throw new UnsupportedOperationException("Not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclusterselectionmanager_getselectedtvertices")); } @Override public double getCircumscribedSphereRadius(final TVertex center, final int tvertexLayerId) { - throw new UnsupportedOperationException("Not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclusterselectionmanager_getcircumscribedsphereradius")); } @Override public void renderUVSelection(final TVertexModelElementRenderer renderer, final ModelView modelView, final ProgramPreferences programPreferences, final int tvertexLayerId) { - throw new UnsupportedOperationException("Not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexclusterselectionmanager_rendeuvselection")); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupModelEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupModelEditor.java index bcd8dcc19..147c385f6 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupModelEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupModelEditor.java @@ -33,6 +33,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public final class VertexGroupModelEditor extends AbstractModelEditor { private final ProgramPreferences programPreferences; @@ -100,17 +101,17 @@ else if (!geoset.equals(other.geoset)) { @Override public UndoAction autoCenterSelectedBones() { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupmodeleditor_autocenterselectedbones")); } @Override public UndoAction setSelectedBoneName(final String name) { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupmodeleditor_setselectedbonename")); } @Override public UndoAction addSelectedBoneSuffix(final String name) { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupmodeleditor_addselectedbonesuffix")); } @Override @@ -133,7 +134,7 @@ public UndoAction splitGeoset() { @Override public UndoAction expandSelection() { - return new DoNothingAction("expand selection"); + return new DoNothingAction(LocalizationManager.getInstance().get("action.vertexgroupmodeleditor_expandselection")); } @Override @@ -152,7 +153,7 @@ public UndoAction invertSelection() { } } selectionManager.setSelection(invertedSelection); - return (new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, "invert selection")); + return (new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.vertexgroupmodeleditor_invertselection"))); } @Override @@ -166,7 +167,7 @@ public UndoAction selectAll() { } } selectionManager.setSelection(allSelection); - return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select all")); + return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.vertexgroupmodeleditor_selectall"))); } @Override @@ -174,7 +175,7 @@ public UndoAction selectHDUnusedNodes() { final Set oldSelection = new HashSet<>(selectionManager.getSelection()); final Set allSelection = new HashSet<>(); selectionManager.setSelection(allSelection); - return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select HD unused")); + return (new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("action.vertexgroupmodeleditor_selecthdunusednodes"))); } @Override @@ -339,23 +340,23 @@ public CopiedModelData copySelection() { @Override public UndoAction createFaceFromSelection(final Vertex preferredFacingVector) { - throw new WrongModeException("Unable to create face from vertices in vertex group selection mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.vertexgroupmodeleditor_createfacefromselection")); } @Override public UndoAction addVertex(final double x, final double y, final double z, final Vertex preferredNormalFacingVector) { - throw new WrongModeException("Unable to draw vertices in vertex group selection mode"); + throw new WrongModeException(LocalizationManager.getInstance().get("exception.vertexgroupmodeleditor_addvertex")); } @Override public UndoAction setParent(final IdObject node) { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupmodeleditor_setparent")); } @Override public UndoAction reLinkRFBone(IdObject node) { - throw new UnsupportedOperationException("This feature is not available in Vertex Group mode"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupmodeleditor_relinkrfbone")); } public VertexSelectionHelper getVertexSelectionHelper() { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupSelectionManager.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupSelectionManager.java index 2a80e08d3..6f3dc5af2 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupSelectionManager.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupSelectionManager.java @@ -19,6 +19,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public final class VertexGroupSelectionManager extends AbstractSelectionManager { private static final Color GROUP_SELECTED_COLOR = new Color(1f, 0.75f, 0.45f, 0.3f); @@ -108,22 +109,22 @@ public void renderSelection(final ModelElementRenderer renderer, final Coordinat @Override public TVertex getUVCenter(final int tvertexLayerId) { - throw new UnsupportedOperationException("Not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupselectionmanager_getuvcenter")); } @Override public Collection getSelectedTVertices(final int tvertexLayerId) { - throw new UnsupportedOperationException("Not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupselectionmanager_getselectedtvertices")); } @Override public double getCircumscribedSphereRadius(final TVertex center, final int tvertexLayerId) { - throw new UnsupportedOperationException("Not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupselectionmanager_getcircumscribedsphereradius")); } @Override public void renderUVSelection(final TVertexModelElementRenderer renderer, final ModelView modelView, final ProgramPreferences programPreferences, final int tvertexLayerId) { - throw new UnsupportedOperationException("Not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.vertexgroupselectionmanager_renderuvselection")); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddKeyframeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddKeyframeAction.java index 8ebfaf2f7..ed0a3c49d 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddKeyframeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddKeyframeAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.TimelineContainer; +import hiveworkshop.localizationmanager.LocalizationManager; public class AddKeyframeAction implements UndoAction { private final TimelineContainer node; @@ -42,7 +43,7 @@ public void redo() { if (timeline.tans()) { if (keyframeInTan == null) { throw new IllegalStateException( - "Cannot add interpolation information (inTan/outTan) for keyframe, animation data was \"Linear\" or \"DontInterp\" during previous user action"); + LocalizationManager.getInstance().get("exception.addkeyframeaction_redo")); } timeline.addKeyframe(trackTime, keyframeValue, keyframeInTan, keyframeOutTan); } else { @@ -53,7 +54,7 @@ public void redo() { @Override public String actionName() { - return "add keyframe"; + return LocalizationManager.getInstance().get("string.addkeyframeaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelineAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelineAction.java index 98026a113..18aea1493 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelineAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelineAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.TimelineContainer; +import hiveworkshop.localizationmanager.LocalizationManager; public class AddTimelineAction implements UndoAction { private final AnimFlag timeline; @@ -31,7 +32,7 @@ public void redo() { @Override public String actionName() { - return "add timeline"; + return LocalizationManager.getInstance().get("string.addtimelineaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelinesAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelinesAction.java index eff7c135e..71fd2e809 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelinesAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelinesAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.TimelineContainer; +import hiveworkshop.localizationmanager.LocalizationManager; public class AddTimelinesAction implements UndoAction { private final Collection> containersAndTimelines; @@ -30,7 +31,7 @@ public void redo() { @Override public String actionName() { - return "add timeline"; + return LocalizationManager.getInstance().get("string.addtimelinesaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/RotationKeyframeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/RotationKeyframeAction.java index cdf33a672..778979ddb 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/RotationKeyframeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/RotationKeyframeAction.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericRotateAction; import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class RotationKeyframeAction implements GenericRotateAction { private final UndoAction addingTimelinesOrKeyframesAction; @@ -61,7 +62,7 @@ public void redo() { @Override public String actionName() { - return "edit rotation"; + return LocalizationManager.getInstance().get("string.rotationkeyframeaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/ScalingKeyframeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/ScalingKeyframeAction.java index 9f6636d2f..3bd280601 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/ScalingKeyframeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/ScalingKeyframeAction.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericScaleAction; import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class ScalingKeyframeAction implements GenericScaleAction { private final UndoAction addingTimelinesOrKeyframesAction; @@ -61,7 +62,7 @@ public void redo() { @Override public String actionName() { - return "edit rotation"; + return LocalizationManager.getInstance().get("string.scalingkeyframeaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SetKeyframeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SetKeyframeAction.java index 320e7f40e..cc615096a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SetKeyframeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SetKeyframeAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.TimelineContainer; +import hiveworkshop.localizationmanager.LocalizationManager; public class SetKeyframeAction implements UndoAction { private final TimelineContainer node; @@ -43,7 +44,7 @@ public void undo() { if (timeline.tans()) { if (keyframeOldInTan == null) { throw new IllegalStateException( - "Cannot add interpolation information (inTan/outTan) for keyframe, animation data was \"Linear\" or \"DontInterp\" during previous user action"); + LocalizationManager.getInstance().get("exception.setkeyframeaction_undo")); } timeline.setKeyframe(trackTime, keyframeOldValue, keyframeOldInTan, keyframeOldOutTan); } else { @@ -57,7 +58,7 @@ public void redo() { if (timeline.tans()) { if (keyframeInTan == null) { throw new IllegalStateException( - "Cannot set interpolation information (inTan/outTan) for keyframe, animation data was \"Linear\" or \"DontInterp\" during previous user action"); + LocalizationManager.getInstance().get("exception.setkeyframeaction_redo")); } timeline.setKeyframe(trackTime, keyframeValue, keyframeInTan, keyframeOutTan); } else { @@ -68,7 +69,7 @@ public void redo() { @Override public String actionName() { - return "set keyframe"; + return LocalizationManager.getInstance().get("string.setkeyframeaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeAction.java index eebd9dec5..fa0084045 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.AnimFlag; +import hiveworkshop.localizationmanager.LocalizationManager; public class SlideKeyframeAction implements UndoAction { private final int startTrackTime; @@ -37,7 +38,7 @@ public void redo() { @Override public String actionName() { - return "slide keyframe"; + return LocalizationManager.getInstance().get("string.slidekeyframeaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeByIndexAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeByIndexAction.java index 5a752a2bf..b6b6e47fd 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeByIndexAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeByIndexAction.java @@ -2,6 +2,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.AnimFlag; +import hiveworkshop.localizationmanager.LocalizationManager; public class SlideKeyframeByIndexAction implements UndoAction { @@ -34,7 +35,7 @@ public void redo() { @Override public String actionName() { - return "slide keyframe"; + return LocalizationManager.getInstance().get("string.slidekeyframebyiindexaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SquatToolKeyframeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SquatToolKeyframeAction.java index 417b7d3b1..23d977fcf 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SquatToolKeyframeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SquatToolKeyframeAction.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericRotateAction; import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class SquatToolKeyframeAction implements GenericRotateAction { private final UndoAction addingTimelinesOrKeyframesAction; @@ -61,7 +62,7 @@ public void redo() { @Override public String actionName() { - return "edit rotation w/ squat"; + return LocalizationManager.getInstance().get("string.squattoolkeyframeaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/TranslationKeyframeAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/TranslationKeyframeAction.java index 7fa1e69bb..b08fc8e81 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/TranslationKeyframeAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/TranslationKeyframeAction.java @@ -10,6 +10,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericMoveAction; import com.hiveworkshop.wc3.mdl.IdObject; +import hiveworkshop.localizationmanager.LocalizationManager; public class TranslationKeyframeAction implements GenericMoveAction { private final UndoAction addingTimelinesOrKeyframesAction; @@ -55,7 +56,7 @@ public void redo() { @Override public String actionName() { - return "edit translation"; + return LocalizationManager.getInstance().get("string.translationkeyframeaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/ScaleAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/ScaleAction.java index eccc4c9aa..968f7f8d5 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/ScaleAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/ScaleAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.ModelEditor; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class ScaleAction implements UndoAction { private final ModelEditor modelEditor; @@ -32,7 +33,7 @@ public void redo() { @Override public String actionName() { - return "scale"; + return LocalizationManager.getInstance().get("string.scaleaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/SimpleRotateAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/SimpleRotateAction.java index b23114ad7..78a716150 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/SimpleRotateAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/SimpleRotateAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.ModelEditor; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class SimpleRotateAction implements UndoAction { private final ModelEditor modelEditor; @@ -32,7 +33,7 @@ public void redo() { @Override public String actionName() { - return "rotate"; + return LocalizationManager.getInstance().get("string.simplerotateaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshMoveAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshMoveAction.java index d8002e8dc..ff334f6df 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshMoveAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshMoveAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.ModelEditor; import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericMoveAction; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class StaticMeshMoveAction implements UndoAction, GenericMoveAction { private final ModelEditor modelEditor; @@ -26,7 +27,7 @@ public void redo() { @Override public String actionName() { - return "move"; + return LocalizationManager.getInstance().get("string.staticmeshmoveaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshRotateAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshRotateAction.java index 538d10583..14d6cbfbd 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshRotateAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshRotateAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.ModelEditor; import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericRotateAction; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class StaticMeshRotateAction implements GenericRotateAction { private final ModelEditor modelEditor; @@ -32,7 +33,7 @@ public void redo() { @Override public String actionName() { - return "rotate"; + return LocalizationManager.getInstance().get("string.staticmeshrotateaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshScaleAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshScaleAction.java index a1828f4ab..e4fa0a63e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshScaleAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshScaleAction.java @@ -2,6 +2,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.ModelEditor; import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericScaleAction; +import hiveworkshop.localizationmanager.LocalizationManager; public class StaticMeshScaleAction implements GenericScaleAction { private final ModelEditor modelEditor; @@ -35,7 +36,7 @@ public void redo() { @Override public String actionName() { - return "scale"; + return LocalizationManager.getInstance().get("string.staticmeshscaleaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/nodes/DeleteNodesAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/nodes/DeleteNodesAction.java index 5f1414577..d0fde0931 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/nodes/DeleteNodesAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/nodes/DeleteNodesAction.java @@ -16,6 +16,7 @@ import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class DeleteNodesAction implements UndoAction { private final List objects; @@ -93,7 +94,7 @@ public void redo() { @Override public String actionName() { - return "delete nodes"; + return LocalizationManager.getInstance().get("string.deletenodesaction_actionname"); } private static final class GeosetVertexNodeDeleteOperation { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/AddSelectionAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/AddSelectionAction.java index 253011b34..fdf9d4271 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/AddSelectionAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/AddSelectionAction.java @@ -5,6 +5,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.selection.SelectionManager; +import hiveworkshop.localizationmanager.LocalizationManager; public final class AddSelectionAction implements UndoAction { @@ -31,6 +32,6 @@ public void redo() { @Override public String actionName() { - return "add selection"; + return LocalizationManager.getInstance().get("string.addselectionaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/HideGeosetsAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/HideGeosetsAction.java index 0aeb6cd2f..b4fdce96f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/HideGeosetsAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/HideGeosetsAction.java @@ -5,6 +5,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.Geoset; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; +import hiveworkshop.localizationmanager.LocalizationManager; public final class HideGeosetsAction implements UndoAction { private final List geosets; @@ -36,7 +37,7 @@ public void redo() { @Override public String actionName() { - return "hide geosets"; + return LocalizationManager.getInstance().get("string.hidegeosetsaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeEditableAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeEditableAction.java index 332dc40ce..eb686a79b 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeEditableAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeEditableAction.java @@ -2,6 +2,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.listener.EditabilityToggleHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public final class MakeEditableAction implements UndoAction { private final EditabilityToggleHandler editabilityToggleHandler; @@ -22,7 +23,7 @@ public void redo() { @Override public String actionName() { - return "toggle visibility"; + return LocalizationManager.getInstance().get("string.makeeditableaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeNotEditableAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeNotEditableAction.java index e493168a8..99191e04d 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeNotEditableAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeNotEditableAction.java @@ -2,6 +2,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.listener.EditabilityToggleHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public final class MakeNotEditableAction implements UndoAction { private final EditabilityToggleHandler editabilityToggleHandler; @@ -34,7 +35,7 @@ public void redo() { @Override public String actionName() { - return "toggle visibility"; + return LocalizationManager.getInstance().get("string.makenoteditableaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/RemoveSelectionAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/RemoveSelectionAction.java index 79cd0bc64..f66585ddd 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/RemoveSelectionAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/RemoveSelectionAction.java @@ -5,6 +5,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.selection.SelectionManager; +import hiveworkshop.localizationmanager.LocalizationManager; public final class RemoveSelectionAction implements UndoAction { @@ -32,6 +33,6 @@ public void redo() { @Override public String actionName() { - return "deselect"; + return LocalizationManager.getInstance().get("string.removeselectionaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AddTriangleAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AddTriangleAction.java index 259c23453..8e039924f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AddTriangleAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AddTriangleAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.mdl.Geoset; import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.Triangle; +import hiveworkshop.localizationmanager.LocalizationManager; public class AddTriangleAction implements UndoAction { private final Geoset geoset; @@ -38,7 +39,7 @@ public void redo() { @Override public String actionName() { - return "add faces"; + return LocalizationManager.getInstance().get("string.addtriangleaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AdvancedCloneAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AdvancedCloneAction.java index bf5058c6b..04e5e8720 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AdvancedCloneAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AdvancedCloneAction.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public final class AdvancedCloneAction implements UndoAction { private final ModelView model; @@ -81,7 +82,7 @@ public void redo() { @Override public String actionName() { - return "clone"; + return LocalizationManager.getInstance().get("string.advancedcloneaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AutoCenterBonesAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AutoCenterBonesAction.java index 7d767a8be..11439d8c2 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AutoCenterBonesAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AutoCenterBonesAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.Bone; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class AutoCenterBonesAction implements UndoAction { private final Map boneToOldPosition; @@ -37,7 +38,7 @@ public void redo() { @Override public String actionName() { - return "auto-center bones"; + return LocalizationManager.getInstance().get("string.autocenterbonesaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/CloneAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/CloneAction.java index 33dbfa1a8..ed55e6cc0 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/CloneAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/CloneAction.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public final class CloneAction implements UndoAction { private final ModelView model; @@ -73,7 +74,7 @@ public void redo() { @Override public String actionName() { - return "clone"; + return LocalizationManager.getInstance().get("string.cloneaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/DeleteDownToOneTVerticesLayerAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/DeleteDownToOneTVerticesLayerAction.java index 863718631..fc81d1ccf 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/DeleteDownToOneTVerticesLayerAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/DeleteDownToOneTVerticesLayerAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class DeleteDownToOneTVerticesLayerAction implements UndoAction { private final Map> vertexToTVertexRemoved; @@ -36,7 +37,7 @@ public void redo() { @Override public String actionName() { - return "delete down to one TVertices layer"; + return LocalizationManager.getInstance().get("string.deletedowntoonetverticeslayeraction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/EditAnimationLengthsAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/EditAnimationLengthsAction.java index 058e7e9e1..95bd8ad3a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/EditAnimationLengthsAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/EditAnimationLengthsAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.Animation; import com.hiveworkshop.wc3.mdl.EditableModel; +import hiveworkshop.localizationmanager.LocalizationManager; public final class EditAnimationLengthsAction implements UndoAction { private final EditableModel mdl; @@ -101,7 +102,7 @@ private void doEdit(final Map lengthUpdates, final int[] new @Override public String actionName() { - return "edit animation length(s)"; + return LocalizationManager.getInstance().get("string.editanimationlengthsaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipFacesAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipFacesAction.java index c6b84ec66..82318bfe0 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipFacesAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipFacesAction.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class FlipFacesAction implements UndoAction { private final List selection; @@ -64,7 +65,7 @@ private void doFlip() { @Override public String actionName() { - return "flip faces"; + return LocalizationManager.getInstance().get("string.flipfacesaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipNormalsAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipNormalsAction.java index 89c10cf97..726ba5742 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipNormalsAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipNormalsAction.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.Normal; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class FlipNormalsAction implements UndoAction { private final List selection; @@ -42,7 +43,7 @@ private void doFlip() { @Override public String actionName() { - return "flip normals"; + return LocalizationManager.getInstance().get("string.flipnormalsaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/MirrorModelAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/MirrorModelAction.java index a8be1231f..ac04ba3b0 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/MirrorModelAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/MirrorModelAction.java @@ -9,6 +9,7 @@ import com.hiveworkshop.wc3.mdl.IdObject; import com.hiveworkshop.wc3.mdl.Normal; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class MirrorModelAction implements UndoAction { private final char[] DIMENSION_NAMES = { 'Z', 'X', 'Y' }; @@ -74,7 +75,7 @@ private void doMirror() { @Override public String actionName() { - return "mirror " + DIMENSION_NAMES[mirrorDim]; + return LocalizationManager.getInstance().get("string.mirrormodelaction_actionname") + DIMENSION_NAMES[mirrorDim]; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/ReLinkRFBoneAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/ReLinkRFBoneAction.java index dfbb9fe49..002fc10b8 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/ReLinkRFBoneAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/ReLinkRFBoneAction.java @@ -26,6 +26,7 @@ import com.hiveworkshop.wc3.mdl.render3d.RenderResourceAllocator; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; import com.hiveworkshop.wc3.util.MathUtils; +import hiveworkshop.localizationmanager.LocalizationManager; public final class ReLinkRFBoneAction implements UndoAction { private EditableModel model; @@ -137,7 +138,7 @@ public void redo() { @Override public String actionName() { - return "re-link bone probably for RF"; + return LocalizationManager.getInstance().get("string.reLinkrfboneaction_actionname"); } Quaternion tempQuatDelta = new Quaternion(); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RenameBoneAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RenameBoneAction.java index 3f539e3e1..ff81361b6 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RenameBoneAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RenameBoneAction.java @@ -2,6 +2,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.IdObject; +import hiveworkshop.localizationmanager.LocalizationManager; public final class RenameBoneAction implements UndoAction { private final String oldName; @@ -26,6 +27,6 @@ public void redo() { @Override public String actionName() { - return "rename " + oldName + " to " + newName; + return LocalizationManager.getInstance().get("string.renameboneaction_actionname_rename") + oldName + LocalizationManager.getInstance().get("string.renameboneaction_actionname_to") + newName; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RigAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RigAction.java index 09c119cb3..906bdfc19 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RigAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RigAction.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.GeosetVertexBoneLink; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class RigAction implements UndoAction { private final List selectedVertices; @@ -68,7 +69,7 @@ public void redo() { @Override public String actionName() { - return "rig"; + return LocalizationManager.getInstance().get("string.rigaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetMatrixAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetMatrixAction.java index 558daaf7e..a23eff49d 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetMatrixAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetMatrixAction.java @@ -10,6 +10,7 @@ import com.hiveworkshop.wc3.mdl.Bone; import com.hiveworkshop.wc3.mdl.GeosetVertex; import com.hiveworkshop.wc3.mdl.GeosetVertexBoneLink; +import hiveworkshop.localizationmanager.LocalizationManager; public final class SetMatrixAction implements UndoAction { private final Map> vertexToOldBoneReferences; @@ -37,7 +38,7 @@ public void redo() { @Override public String actionName() { - return "re-assign matrix"; + return LocalizationManager.getInstance().get("string.setmatrixaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetParentAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetParentAction.java index f056f1e23..288266b20 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetParentAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetParentAction.java @@ -8,6 +8,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; import com.hiveworkshop.wc3.mdl.IdObject; +import hiveworkshop.localizationmanager.LocalizationManager; public final class SetParentAction implements UndoAction { private final Map nodeToOldParent; @@ -46,7 +47,7 @@ public void redo() { @Override public String actionName() { - return "set parent"; + return LocalizationManager.getInstance().get("string.setparentaction_actionname"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/manipulator/AbstractExtrudeManipulator.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/manipulator/AbstractExtrudeManipulator.java index 6aff57ab0..6adb0dbc6 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/manipulator/AbstractExtrudeManipulator.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/manipulator/AbstractExtrudeManipulator.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.ModelEditor; import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.CompoundAction; +import hiveworkshop.localizationmanager.LocalizationManager; public abstract class AbstractExtrudeManipulator extends AbstractMoveManipulator { @@ -23,7 +24,7 @@ protected void onStart(final Double mouseStart, final byte dim1, final byte dim2 @Override public UndoAction finish(final Double mouseStart, final Double mouseEnd, final byte dim1, final byte dim2) { - return new CompoundAction("extrude", + return new CompoundAction(LocalizationManager.getInstance().get("string.abstractextrudemanipulator_undoAction"), ListView.Util.of(beginExtrudingSelection, super.finish(mouseStart, mouseEnd, dim1, dim2))); } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/AbstractTVertexEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/AbstractTVertexEditor.java index d82514273..bafc9e072 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/AbstractTVertexEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/AbstractTVertexEditor.java @@ -27,6 +27,7 @@ import com.hiveworkshop.wc3.mdl.TVertex; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public abstract class AbstractTVertexEditor extends AbstractSelectingTVertexEditor implements TVertexEditor { protected final ModelView model; @@ -211,7 +212,7 @@ public UndoAction selectFromViewer(final SelectionView viewerSelectionView) { final Set previousSelection = selectionManager.getSelection(); selectByVertices(viewerSelectionView.getSelectedVertices()); final SetSelectionAction setSelectionAction = new SetSelectionAction<>(selectionManager.getSelection(), - previousSelection, selectionManager, "select UV from viewer"); + previousSelection, selectionManager, LocalizationManager.getInstance().get("string.abstracttvertexeditor_selectfromviewer")); return setSelectionAction; } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/FaceTVertexEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/FaceTVertexEditor.java index 1ffc3753b..c4bb5e576 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/FaceTVertexEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/FaceTVertexEditor.java @@ -29,6 +29,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class FaceTVertexEditor extends AbstractTVertexEditor { private final ProgramPreferences programPreferences; @@ -67,7 +68,7 @@ public UndoAction expandSelection() { expandSelection(triangle, expandedSelection); } selectionManager.addSelection(expandedSelection); - return new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, "expand selection"); + return new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("string.facetvertexeditor_expandselection")); } private void expandSelection(final Triangle currentTriangle, final Set selection) { @@ -95,7 +96,7 @@ public UndoAction invertSelection() { } } selectionManager.setSelection(invertedSelection); - return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, "invert selection"); + return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("string.facetvertexeditor_invertselection")); } @Override @@ -108,7 +109,7 @@ public UndoAction selectAll() { } } selectionManager.setSelection(allSelection); - return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select all"); + return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("string.facetvertexeditor_selectall")); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/GeosetVertexTVertexEditor.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/GeosetVertexTVertexEditor.java index 8534d9e1a..42d4f64e4 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/GeosetVertexTVertexEditor.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/GeosetVertexTVertexEditor.java @@ -29,6 +29,7 @@ import com.hiveworkshop.wc3.mdl.Triangle; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class GeosetVertexTVertexEditor extends AbstractTVertexEditor { private final ProgramPreferences programPreferences; @@ -61,7 +62,7 @@ public UndoAction expandSelection() { expandSelection(v, expandedSelection); } selectionManager.setSelection(expandedSelection); - return new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, "expand selection"); + return new SetSelectionAction<>(expandedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("string.geosetvertextvertexeditor_expandselection")); } private void expandSelection(final GeosetVertex currentVertex, final Set selection) { @@ -85,7 +86,7 @@ public UndoAction invertSelection() { } } selectionManager.setSelection(invertedSelection); - return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, "invert selection"); + return new SetSelectionAction<>(invertedSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("string.geosetvertextvertexeditor_invertselection")); } private void toggleSelection(final Set selection, final GeosetVertex position) { @@ -106,7 +107,7 @@ public UndoAction selectAll() { } } selectionManager.setSelection(allSelection); - return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, "select all"); + return new SetSelectionAction<>(allSelection, oldSelection, selectionManager, LocalizationManager.getInstance().get("string.geosetvertextvertexeditor_selectall")); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/TVertexEditorNotifier.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/TVertexEditorNotifier.java index 93c912150..c0713a4c4 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/TVertexEditorNotifier.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/TVertexEditorNotifier.java @@ -25,6 +25,7 @@ import com.hiveworkshop.wc3.gui.modeledit.selection.SelectionView; import com.hiveworkshop.wc3.mdl.TVertex; import com.hiveworkshop.wc3.mdl.Vertex; +import hiveworkshop.localizationmanager.LocalizationManager; public class TVertexEditorNotifier extends SubscriberSetNotifier implements TVertexEditor { private CloneContextHelper cloneContextHelper; @@ -288,7 +289,7 @@ public int getUVLayerIndex() { uvLayerIndex = handler.getUVLayerIndex(); } else if (uvLayerIndex != handler.getUVLayerIndex()) { - throw new IllegalStateException("Differing UV Layer Indices between editors: " + uvLayerIndex + " != " + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.tvertexeditornotifier_getuvlayerindex") + uvLayerIndex + " != " + handler.getUVLayerIndex()); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/MirrorTVerticesAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/MirrorTVerticesAction.java index 717ec2b4f..1565a52bc 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/MirrorTVerticesAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/MirrorTVerticesAction.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class MirrorTVerticesAction implements UndoAction { private final char[] DIMENSION_NAMES = { 'X', 'Y' }; @@ -41,7 +42,7 @@ private void doMirror() { @Override public String actionName() { - return "mirror UV " + DIMENSION_NAMES[mirrorDim]; + return LocalizationManager.getInstance().get("string.mirrortverticesaction_actionname") + " UV " + DIMENSION_NAMES[mirrorDim]; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/SimpleRotateUVAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/SimpleRotateUVAction.java index 9b56ea228..0294d97e7 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/SimpleRotateUVAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/SimpleRotateUVAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.UndoAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.uv.TVertexEditor; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class SimpleRotateUVAction implements UndoAction { private final TVertexEditor modelEditor; @@ -27,7 +28,7 @@ public void redo() { @Override public String actionName() { - return "rotate UV"; + return LocalizationManager.getInstance().get("string.simplerotateuvaction_actionname") + " UV"; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVMoveAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVMoveAction.java index 734e331ee..fb782a503 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVMoveAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVMoveAction.java @@ -4,6 +4,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericMoveAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.uv.TVertexEditor; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class StaticMeshUVMoveAction implements UndoAction, GenericMoveAction { private final TVertexEditor modelEditor; @@ -26,7 +27,7 @@ public void redo() { @Override public String actionName() { - return "move UV"; + return LocalizationManager.getInstance().get("string.staticmeshuvmoveaction_actionname") + " UV"; } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVRotateAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVRotateAction.java index b43ea15f6..18a0a98c6 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVRotateAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVRotateAction.java @@ -3,6 +3,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericRotateAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.uv.TVertexEditor; import com.hiveworkshop.wc3.mdl.TVertex; +import hiveworkshop.localizationmanager.LocalizationManager; public final class StaticMeshUVRotateAction implements GenericRotateAction { private final TVertexEditor modelEditor; @@ -32,7 +33,7 @@ public void redo() { @Override public String actionName() { - return "rotate"; + return LocalizationManager.getInstance().get("string.staticmeshuvrotateaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVScaleAction.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVScaleAction.java index 6834cf2c7..a2a5fd185 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVScaleAction.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVScaleAction.java @@ -2,6 +2,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.util.GenericScaleAction; import com.hiveworkshop.wc3.gui.modeledit.newstuff.uv.TVertexEditor; +import hiveworkshop.localizationmanager.LocalizationManager; public class StaticMeshUVScaleAction implements GenericScaleAction { private final TVertexEditor modelEditor; @@ -30,7 +31,7 @@ public void redo() { @Override public String actionName() { - return "scale"; + return LocalizationManager.getInstance().get("string.staticmeshuvscaleaction_actionname"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionItemTypes.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionItemTypes.java index e8d4bb58e..1ef3ad6a1 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionItemTypes.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionItemTypes.java @@ -4,14 +4,15 @@ import com.hiveworkshop.wc3.gui.icons.RMSIcons; import com.hiveworkshop.wc3.gui.modeledit.toolbar.ToolbarButtonType; +import hiveworkshop.localizationmanager.LocalizationManager; public enum SelectionItemTypes implements ToolbarButtonType { - VERTEX("Select Vertices", RMSIcons.loadToolBarImageIcon("vertex.png")), - FACE("Select Faces", RMSIcons.loadToolBarImageIcon("poly.png")), - GROUP("Select Groups", RMSIcons.loadToolBarImageIcon("bundle.png")), - ANIMATE("Select Nodes and Animate", RMSIcons.loadToolBarImageIcon("animate.png")), - CLUSTER("Select Cluster", RMSIcons.loadToolBarImageIcon("bundle.png")), - TPOSE("Select and T-Pose", RMSIcons.loadToolBarImageIcon("T.png")); + VERTEX(LocalizationManager.getInstance().get("string.selectionitemtypes_select_vertices"), RMSIcons.loadToolBarImageIcon("vertex.png")), + FACE(LocalizationManager.getInstance().get("string.selectionitemtypes_select_faces"), RMSIcons.loadToolBarImageIcon("poly.png")), + GROUP(LocalizationManager.getInstance().get("string.selectionitemtypes_select_groups"), RMSIcons.loadToolBarImageIcon("bundle.png")), + ANIMATE(LocalizationManager.getInstance().get("string.selectionitemtypes_select_nodes_animate"), RMSIcons.loadToolBarImageIcon("animate.png")), + CLUSTER(LocalizationManager.getInstance().get("string.selectionitemtypes_select_cluster"), RMSIcons.loadToolBarImageIcon("bundle.png")), + TPOSE(LocalizationManager.getInstance().get("string.selectionitemtypes_sSelect_tpose"), RMSIcons.loadToolBarImageIcon("T.png")); private final String name; private final ImageIcon imageIcon; diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionMode.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionMode.java index 71fcb6a3e..7f612778f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionMode.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionMode.java @@ -4,11 +4,12 @@ import com.hiveworkshop.wc3.gui.icons.RMSIcons; import com.hiveworkshop.wc3.gui.modeledit.toolbar.ToolbarButtonType; +import hiveworkshop.localizationmanager.LocalizationManager; public enum SelectionMode implements ToolbarButtonType { - SELECT("Select", RMSIcons.loadToolBarImageIcon("selectSingle.png")), - ADD("Add Selection", RMSIcons.loadToolBarImageIcon("selectAdd.png")), - DESELECT("Deselect", RMSIcons.loadToolBarImageIcon("selectRemove.png")); + SELECT(LocalizationManager.getInstance().get("string.selectionmode_select"), RMSIcons.loadToolBarImageIcon("selectSingle.png")), + ADD(LocalizationManager.getInstance().get("string.selectionmode_add_selection"), RMSIcons.loadToolBarImageIcon("selectAdd.png")), + DESELECT(LocalizationManager.getInstance().get("string.selectionmode_deselect"), RMSIcons.loadToolBarImageIcon("selectRemove.png")); private final String name; private final ImageIcon imageIcon; diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/TVertexSelectionItemTypes.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/TVertexSelectionItemTypes.java index 5aea1af32..ede2084ca 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/TVertexSelectionItemTypes.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/TVertexSelectionItemTypes.java @@ -4,10 +4,11 @@ import com.hiveworkshop.wc3.gui.icons.RMSIcons; import com.hiveworkshop.wc3.gui.modeledit.toolbar.ToolbarButtonType; +import hiveworkshop.localizationmanager.LocalizationManager; public enum TVertexSelectionItemTypes implements ToolbarButtonType { - VERTEX("Select Vertices", RMSIcons.loadToolBarImageIcon("vertex.png")), - FACE("Select Faces", RMSIcons.loadToolBarImageIcon("poly.png")); + VERTEX(LocalizationManager.getInstance().get("string.tvertexselectionitemtypes_select_vertices"), RMSIcons.loadToolBarImageIcon("vertex.png")), + FACE(LocalizationManager.getInstance().get("string.tvertexselectionitemtypes_select_faces"), RMSIcons.loadToolBarImageIcon("poly.png")); private final String name; private final ImageIcon imageIcon; diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/ModelComponentAnimFlagTree.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/ModelComponentAnimFlagTree.java index e85fdd88c..74663b937 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/ModelComponentAnimFlagTree.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/ModelComponentAnimFlagTree.java @@ -53,6 +53,7 @@ import com.hiveworkshop.wc3.mdx.BindPoseChunk; import com.hiveworkshop.wc3.mdx.FaceEffectsChunk.FaceEffect; import com.hiveworkshop.wc3.util.IconUtils; +import hiveworkshop.localizationmanager.LocalizationManager; public final class ModelComponentAnimFlagTree extends JTree { private static boolean TREEIFY_NODES = false; @@ -125,7 +126,7 @@ public void valueChanged(final TreeSelectionEvent e) { } public void reloadFromModelView() { - System.out.println("Reloading ModelComponentBrowserTree"); + System.out.println(LocalizationManager.getInstance().get("println.modelcomponentanimflagtree")); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -229,7 +230,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM undoActionListener, modelStructureChangeListener, modelViewManager.getModel())); final DefaultMutableTreeNode materials = new DefaultMutableTreeNode(new ChooseableDummyItem(modelViewManager, - undoActionListener, modelStructureChangeListener, "Materials")); + undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentbrowsertree_buildtreemodel_materials"))); for (final Material item : modelViewManager.getModel().getMaterials()) { final DefaultMutableTreeNode materialNode = new DefaultMutableTreeNode(new ChooseableMaterialItem( modelViewManager, undoActionListener, modelStructureChangeListener, item)); @@ -247,7 +248,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM } root.add(materials); final DefaultMutableTreeNode tVertexAnims = new DefaultMutableTreeNode(new ChooseableDummyItem(modelViewManager, - undoActionListener, modelStructureChangeListener, "TVertexAnims")); + undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_buildtreemodel_tvertexanims"))); for (final TextureAnim item : modelViewManager.getModel().getTexAnims()) { final DefaultMutableTreeNode tvertexAnimNode = new DefaultMutableTreeNode(new ChooseableTextureAnimItem( modelViewManager, undoActionListener, modelStructureChangeListener, item)); @@ -260,7 +261,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM } root.add(tVertexAnims); final DefaultMutableTreeNode geosetAnims = new DefaultMutableTreeNode(new ChooseableDummyItem(modelViewManager, - undoActionListener, modelStructureChangeListener, "GeosetAnims")); + undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_buildtreemodel_geosetanims"))); for (final GeosetAnim item : modelViewManager.getModel().getGeosetAnims()) { final DefaultMutableTreeNode geosetAnimNode = new DefaultMutableTreeNode(new ChooseableGeosetAnimItem( modelViewManager, undoActionListener, modelStructureChangeListener, item)); @@ -309,7 +310,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM final Map nodeToTreeElement = new HashMap<>(); final Map> nodeToChildrenAwaitingLink = new HashMap<>(); final DefaultMutableTreeNode nodes = new DefaultMutableTreeNode( - new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, "Nodes")); + new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_buildtreemodel_nodes"))); nodeToTreeElement.put(null, nodes); for (final IdObject object : modelViewManager.getModel().getIdObjects()) { object.apply(converter); @@ -352,7 +353,7 @@ private static DefaultTreeModel buildTreeModel(final ModelViewManager modelViewM root.add(nodes); final DefaultMutableTreeNode cameras = new DefaultMutableTreeNode( - new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, "Cameras")); + new ChooseableDummyItem(modelViewManager, undoActionListener, modelStructureChangeListener, LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_buildtreemodel_cameras"))); for (final Camera item : modelViewManager.getModel().getCameras()) { cameras.add(new DefaultMutableTreeNode(new ChooseableCameraItem(modelViewManager, undoActionListener, modelStructureChangeListener, item))); @@ -509,7 +510,7 @@ protected void select(final EditableModel item, final ModelViewManager modelView @Override protected String getName(final EditableModel item, final ModelViewManager modelViewManager) { - return "Model \"" + item.getHeaderName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablemodelroot_model") + " \"" + item.getHeaderName() + "\""; } @Override @@ -540,7 +541,7 @@ protected void select(final EditableModel item, final ModelViewManager modelView @Override protected String getName(final EditableModel item, final ModelViewManager modelViewManager) { - return "Comment"; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablemodelcomment_comment"); } @Override @@ -571,7 +572,7 @@ protected void select(final EditableModel item, final ModelViewManager modelView @Override protected String getName(final EditableModel item, final ModelViewManager modelViewManager) { - return "Header"; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablemodelheader_header"); } @Override @@ -601,7 +602,7 @@ protected void select(final Animation item, final ModelViewManager modelViewMana @Override protected String getName(final Animation item, final ModelViewManager modelViewManager) { - return "Anim \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableanimationitem_anim") + " \"" + item.getName() + "\""; } @Override @@ -636,7 +637,9 @@ protected void select(final Integer item, final ModelViewManager modelViewManage @Override protected String getName(final Integer item, final ModelViewManager modelViewManager) { - return "GlobalSequence " + globalSeqId + ": Duration " + item; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableglobalsequenceitem_1") + + globalSeqId + + LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableglobalsequenceitem_2") + item; } @Override @@ -672,7 +675,7 @@ protected void select(final Bitmap item, final ModelViewManager modelViewManager @Override protected String getName(final Bitmap item, final ModelViewManager modelViewManager) { - return "Bitmap \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablebitmapitem") + " \"" + item.getName() + "\""; } @Override @@ -703,7 +706,7 @@ protected void select(final Material item, final ModelViewManager modelViewManag @Override protected String getName(final Material item, final ModelViewManager modelViewManager) { - return "Material " + modelViewManager.getModel().getMaterials().indexOf(item); + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablematerialitem") + modelViewManager.getModel().getMaterials().indexOf(item); } @Override @@ -787,7 +790,7 @@ protected void select(final AnimFlag item, final ModelViewManager modelViewManag @Override protected String getName(final AnimFlag item, final ModelViewManager modelViewManager) { - return item.getName() + " Track"; + return item.getName() + LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableanimflagitem"); } @Override @@ -822,7 +825,7 @@ protected void select(final TextureAnim item, final ModelViewManager modelViewMa @Override protected String getName(final TextureAnim item, final ModelViewManager modelViewManager) { - return "TextureAnim " + modelViewManager.getModel().getTexAnims().indexOf(item); + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseabletextureanimitem") + modelViewManager.getModel().getTexAnims().indexOf(item); } @Override @@ -853,7 +856,7 @@ protected void select(final Geoset item, final ModelViewManager modelViewManager @Override protected String getName(final Geoset item, final ModelViewManager modelViewManager) { - final String numberName = "Geoset " + (modelViewManager.getModel().getGeosetId(item) + 1); + final String numberName = LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablegeosetitem") + (modelViewManager.getModel().getGeosetId(item) + 1); if (item.getLevelOfDetailName() != null && item.getLevelOfDetailName().length() > 0) { return numberName + ": " + item.getLevelOfDetailName(); } @@ -891,8 +894,9 @@ protected void select(final GeosetAnim item, final ModelViewManager modelViewMan @Override protected String getName(final GeosetAnim item, final ModelViewManager modelViewManager) { final Geoset geoset = item.getGeoset(); - return "GeosetAnim " + modelViewManager.getModel().getGeosetAnims().indexOf(item) + ": " - + (geoset == null ? "GeosetId " + item.getGeosetId() + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablegeosetanimitem_1") + + modelViewManager.getModel().getGeosetAnims().indexOf(item) + ": " + + (geoset == null ? LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablegeosetanimitem_2") + item.getGeosetId() : geoset.getUIName(modelViewManager.getModel())); } @@ -923,7 +927,7 @@ protected void select(final Bone item, final ModelViewManager modelViewManager, @Override protected String getName(final Bone item, final ModelViewManager modelViewManager) { - return "Bone \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableboneitem") + " \"" + item.getName() + "\""; } @Override @@ -954,7 +958,7 @@ protected void select(final Helper item, final ModelViewManager modelViewManager @Override protected String getName(final Helper item, final ModelViewManager modelViewManager) { - return "Helper \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablehelperitem") + " \"" + item.getName() + "\""; } @Override @@ -984,7 +988,7 @@ protected void select(final Light item, final ModelViewManager modelViewManager, @Override protected String getName(final Light item, final ModelViewManager modelViewManager) { - return "Light \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablelightiItem") + " \"" + item.getName() + "\""; } @Override @@ -1015,7 +1019,7 @@ protected void select(final Attachment item, final ModelViewManager modelViewMan @Override protected String getName(final Attachment item, final ModelViewManager modelViewManager) { - return "Attachment \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableattachmentitem") + " \"" + item.getName() + "\""; } @Override @@ -1046,7 +1050,7 @@ protected void select(final ParticleEmitter item, final ModelViewManager modelVi @Override protected String getName(final ParticleEmitter item, final ModelViewManager modelViewManager) { - return "ParticleEmitter \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableparticleemitteritem") + " \"" + item.getName() + "\""; } @Override @@ -1077,7 +1081,7 @@ protected void select(final ParticleEmitter2 item, final ModelViewManager modelV @Override protected String getName(final ParticleEmitter2 item, final ModelViewManager modelViewManager) { - return "ParticleEmitter2 \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableparticleemitter2item") + " \"" + item.getName() + "\""; } @Override @@ -1109,7 +1113,7 @@ protected void select(final ParticleEmitterPopcorn item, final ModelViewManager @Override protected String getName(final ParticleEmitterPopcorn item, final ModelViewManager modelViewManager) { - return "ParticleEmitterPopcorn \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableparticleemitterpopcornitem") + " \"" + item.getName() + "\""; } @Override @@ -1140,7 +1144,7 @@ protected void select(final RibbonEmitter item, final ModelViewManager modelView @Override protected String getName(final RibbonEmitter item, final ModelViewManager modelViewManager) { - return "RibbonEmitter \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableribbonemitteritem") + " \"" + item.getName() + "\""; } @Override @@ -1171,7 +1175,7 @@ protected void select(final EventObject item, final ModelViewManager modelViewMa @Override protected String getName(final EventObject item, final ModelViewManager modelViewManager) { - return "EventObject \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseableeventobjectitem") + " \"" + item.getName() + "\""; } @Override @@ -1201,7 +1205,7 @@ protected void select(final CollisionShape item, final ModelViewManager modelVie @Override protected String getName(final CollisionShape item, final ModelViewManager modelViewManager) { - return "CollisionShape \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablecollisionshapeitem") + " \"" + item.getName() + "\""; } @Override @@ -1231,7 +1235,7 @@ protected void select(final Camera item, final ModelViewManager modelViewManager @Override protected String getName(final Camera item, final ModelViewManager modelViewManager) { - return "Camera \"" + item.getName() + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablecameraitem") + " \"" + item.getName() + "\""; } @Override @@ -1261,7 +1265,7 @@ protected void select(final FaceEffect item, final ModelViewManager modelViewMan @Override protected String getName(final FaceEffect item, final ModelViewManager modelViewManager) { - return "FaceFX \"" + item.faceEffectTarget + "\""; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablefaceeffectschunkitem") + " \"" + item.faceEffectTarget + "\""; } @Override @@ -1292,7 +1296,7 @@ protected void select(final BindPoseChunk item, final ModelViewManager modelView @Override protected String getName(final BindPoseChunk item, final ModelViewManager modelViewManager) { - return "BindPoseChunk"; + return LocalizationManager.getInstance().get("string.modelcomponentanimflagtree_chooseablebindposechunkitem"); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/TracksEditorPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/TracksEditorPanel.java index 4e919c352..02fb5d52b 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/TracksEditorPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/TracksEditorPanel.java @@ -57,6 +57,7 @@ import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.ModelViewManager; import com.hiveworkshop.wc3.mdl.v2.timelines.InterpolationType; +import hiveworkshop.localizationmanager.LocalizationManager; public class TracksEditorPanel extends JPanel { private static final float TIME_SCALE_SETTING_DIVISOR = 1000.0f; @@ -95,9 +96,9 @@ public void stateChanged(final ChangeEvent e) { final JPanel controlsPanel = new JPanel(); mouseTimeField.setEditable(false); - controlsPanel.add(new JLabel("Scale:")); + controlsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.trackseditorpanel_trackseditorpanel_scale"))); controlsPanel.add(scaleSlider); - controlsPanel.add(new JLabel("Mouse:")); + controlsPanel.add(new JLabel(LocalizationManager.getInstance().get("label.trackseditorpanel_trackseditorpanel_mouse"))); controlsPanel.add(mouseTimeField); timelinePanel.addMouseMotionListener(new MouseMotionListener() { @Override @@ -259,12 +260,12 @@ public void deleteKeyframes() { // (Copy&Paste cannot use this optimization, and must create deep copies // of the keyframe values) if (track.tans()) { - deleteFrameAction = new ReversedAction("delete keyframe", + deleteFrameAction = new ReversedAction(LocalizationManager.getInstance().get("label.trackseditorpanel_deletekeyframes_delete_keyframe"), new AddKeyframeAction(container, track, time, track.getValues().get(index), track.getInTans().get(index), track.getOutTans().get(index), modelStructureChangeListener)); } else { - deleteFrameAction = new ReversedAction("delete keyframe", + deleteFrameAction = new ReversedAction(LocalizationManager.getInstance().get("label.trackseditorpanel_deletekeyframes_delete_keyframe"), new AddKeyframeAction(container, track, time, track.getValues().get(index), modelStructureChangeListener)); } @@ -278,7 +279,7 @@ public void deleteKeyframes() { } - final CompoundAction compoundAction = new CompoundAction("Delete Keyframe(s)", actions); + final CompoundAction compoundAction = new CompoundAction(LocalizationManager.getInstance().get("label.trackseditorpanel_deletekeyframes_delete_keyframe_s"), actions); compoundAction.redo(); undoActionListener.pushAction(compoundAction); repaint(); @@ -354,7 +355,7 @@ public void run() { actions.add(new SlideKeyframeByIndexAction(track, index, timeDelta, repainter)); } } - final CompoundAction compoundAction = new CompoundAction("Slide Keyframe(s)", actions); + final CompoundAction compoundAction = new CompoundAction(LocalizationManager.getInstance().get("label.trackseditorpanel_mousereleased"), actions); compoundAction.redo(); undoActionListener.pushAction(compoundAction); } else { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/AnimatedViewportModelRenderer.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/AnimatedViewportModelRenderer.java index c5ab44ebd..622abca74 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/AnimatedViewportModelRenderer.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/AnimatedViewportModelRenderer.java @@ -33,6 +33,7 @@ import com.hiveworkshop.wc3.mdl.v2.MaterialView; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.visitor.VertexVisitor; +import hiveworkshop.localizationmanager.LocalizationManager; public class AnimatedViewportModelRenderer implements ModelRenderer { private Graphics2D graphics; @@ -263,7 +264,7 @@ public VertexVisitor vertex(final double x, final double y, final double z, fina firstCoord = vertexSumHeap.z; break; default: - throw new IllegalStateException("Invalid x dimension"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.animatedviewportmodelrenderer_trianglerendererimpl_x")); } switch (yDimension) { case 0: @@ -276,7 +277,7 @@ public VertexVisitor vertex(final double x, final double y, final double z, fina secondCoord = vertexSumHeap.z; break; default: - throw new IllegalStateException("Invalid y dimension"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.animatedviewportmodelrenderer_trianglerendererimpl_y")); } final Point point = new Point((int) coordinateSystem.convertX(firstCoord), (int) coordinateSystem.convertY(secondCoord)); @@ -303,7 +304,7 @@ public VertexVisitor vertex(final double x, final double y, final double z, fina firstNormalCoord = normalSumHeap.z; break; default: - throw new IllegalStateException("Invalid x dimension"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.animatedviewportmodelrenderer_trianglerendererimpl_x")); } switch (yDimension) { case 0: @@ -316,7 +317,7 @@ public VertexVisitor vertex(final double x, final double y, final double z, fina secondNormalCoord = normalSumHeap.z; break; default: - throw new IllegalStateException("Invalid y dimension"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.animatedviewportmodelrenderer_trianglerendererimpl_y")); } graphics.setColor(programPreferences.getNormalsColor()); final double zoom = CoordinateSystem.Util.getZoom(coordinateSystem); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/ViewportModelRenderer.java b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/ViewportModelRenderer.java index 746ad7b6d..6935b3938 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/ViewportModelRenderer.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/ViewportModelRenderer.java @@ -37,6 +37,7 @@ import com.hiveworkshop.wc3.mdl.v2.MaterialView; import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.mdl.v2.visitor.VertexVisitor; +import hiveworkshop.localizationmanager.LocalizationManager; public class ViewportModelRenderer implements ModelRenderer { private Graphics2D graphics; @@ -208,7 +209,7 @@ public VertexVisitor vertex(final double x, final double y, final double z, fina firstCoord = z; break; default: - throw new IllegalStateException("Invalid x dimension"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.viewportmodelrenderer_trianglerendererimpl_x")); } switch (yDimension) { case 0: @@ -221,7 +222,7 @@ public VertexVisitor vertex(final double x, final double y, final double z, fina secondCoord = z; break; default: - throw new IllegalStateException("Invalid y dimension"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.viewportmodelrenderer_trianglerendererimpl_y")); } final Point point = new Point((int) coordinateSystem.convertX(firstCoord), (int) coordinateSystem.convertY(secondCoord)); @@ -248,7 +249,7 @@ public VertexVisitor vertex(final double x, final double y, final double z, fina firstNormalCoord = normalZ; break; default: - throw new IllegalStateException("Invalid x dimension"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.viewportmodelrenderer_trianglerendererimpl_x")); } switch (yDimension) { case 0: @@ -261,7 +262,7 @@ public VertexVisitor vertex(final double x, final double y, final double z, fina secondNormalCoord = normalZ; break; default: - throw new IllegalStateException("Invalid y dimension"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.viewportmodelrenderer_trianglerendererimpl_y")); } graphics.setColor(programPreferences.getNormalsColor()); final double zoom = CoordinateSystem.Util.getZoom(coordinateSystem); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimatedPerspectiveViewport.java b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimatedPerspectiveViewport.java index 515c9dec2..737184867 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimatedPerspectiveViewport.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimatedPerspectiveViewport.java @@ -101,6 +101,7 @@ import com.hiveworkshop.wc3.mdl.v2.ModelView; import com.hiveworkshop.wc3.util.MathUtils; import com.hiveworkshop.wc3.util.ModelUtils; +import hiveworkshop.localizationmanager.LocalizationManager; public class AnimatedPerspectiveViewport extends BetterAWTGLCanvas implements MouseListener, ActionListener, MouseWheelListener, AnimatedRenderEnvironment, RenderResourceAllocator { @@ -485,7 +486,7 @@ public void initGL() { // to query that information yet, though. } catch (final Throwable e) { - JOptionPane.showMessageDialog(null, "initGL failed because of this exact reason:\n" + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.animatedperspectiveviewport_initgl_failed") + e.getClass().getSimpleName() + ": " + e.getMessage()); throw new RuntimeException(e); } @@ -586,7 +587,7 @@ public void paintGL(final boolean autoRepainting) { NGGLDP.setPipeline(pipeline); setSize(getParent().getSize()); if ((System.currentTimeMillis() - lastExceptionTimeMillis) < 5000) { - System.err.println("AnimatedPerspectiveViewport omitting frames due to avoid Exception log spam"); + System.err.println(LocalizationManager.getInstance().get("println.animatedperspectiveviewport_paintgl_omitting_frames")); return; } if (wantReloadAll) { @@ -600,7 +601,7 @@ public void paintGL(final boolean autoRepainting) { } catch (final Exception e) { e.printStackTrace(); - ExceptionPopup.display("Error loading textures:", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("display.animatedperspectiveviewport_paintgl_loading_textures"), e); } } else if (wantReload) { @@ -610,7 +611,7 @@ else if (wantReload) { } catch (final Exception e) { e.printStackTrace(); - ExceptionPopup.display("Error loading new texture:", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("display.animatedperspectiveviewport_paintgl_loading_new_textures"), e); } } else if (!texLoaded && ((programPreferences == null) || programPreferences.textureModels())) { @@ -656,8 +657,8 @@ else if ((programPreferences == null) || (programPreferences.viewMode() == 1)) { NGGLDP.pipeline.glEnableIfNeeded(GL_LIGHT1); NGGLDP.pipeline.glEnableIfNeeded(GL_NORMALIZE); GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE); - // System.out.println("max: - // "+GL11.glGetInteger(GL11.GL_MAX_TEXTURE_SIZE)); + // System.out.println(LocalizationManager.getInstance().get("println.animatedperspectiveviewport_paintgl_max") + // +GL11.glGetInteger(GL11.GL_MAX_TEXTURE_SIZE)); if (renderTextures()) { NGGLDP.pipeline.glEnableIfNeeded(GL11.GL_TEXTURE_2D); } @@ -876,7 +877,7 @@ else if (!showing && running) { // initGL(); // initialized = true; // } - // System.out.println("printingGL"); + // System.out.println(LocalizationManager.getInstance().get("println.animatedperspectiveviewport_paintgl_printinggl")); //// makeCurrent(); // GL11.glBegin(GL11.GL_QUADS); // GL11.glColor3f(0f,1f,1f); @@ -1320,8 +1321,7 @@ public void bindLayer(final ParticleEmitter2 particle2, final Bitmap tex, final // } // catch (Exception exc) // { - // JOptionPane.showMessageDialog(null,"Error retrieving mouse coordinates. - // (Probably not a major issue. Due to sleep mode?)"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.animatedperspectiveviewport_paintcomponent_retrieving_mouse")); // } // } @@ -1744,4 +1744,4 @@ public Camera createCameraFromCurrentView() { (viewerCamera.getFov() * 4.0f) / 3.0f, viewerCamera.getFarClipPlane(), viewerCamera.getNearClipPlane()); } -} +} \ No newline at end of file diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationController.java b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationController.java index d4bb1b3f6..9ec407d77 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationController.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationController.java @@ -26,6 +26,7 @@ import com.hiveworkshop.wc3.gui.modelviewer.AnimationControllerListener.LoopType; import com.hiveworkshop.wc3.mdl.Animation; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class AnimationController extends JPanel { private ModelView mdlDisp; @@ -57,7 +58,7 @@ public AnimationController(final ModelView mdlDisp, final boolean allowUnanimate @Override public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { - Object display = value == null ? "(Unanimated)" : value; + Object display = value == null ? LocalizationManager.getInstance().get("object.animationcontroller_animationcontroller_unanimated") : value; if (value != null) { display = "(" + mdlDisp.getModel().getAnims().indexOf(value) + ") " + display; } @@ -98,16 +99,16 @@ else if (newIndex < 0) { } }); final JSlider speedSlider = new JSlider(0, 100, 50); - final JLabel speedSliderLabel = new JLabel("Speed: 100%"); + final JLabel speedSliderLabel = new JLabel(LocalizationManager.getInstance().get("label.animationcontroller_animationcontroller_speed") + "100%"); speedSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(final ChangeEvent e) { - speedSliderLabel.setText("Speed: " + (speedSlider.getValue() * 2) + "%"); + speedSliderLabel.setText(LocalizationManager.getInstance().get("label.animationcontroller_animationcontroller_speed") + (speedSlider.getValue() * 2) + "%"); listener.setSpeed(speedSlider.getValue() / 50f); } }); - final JButton playAnimationButton = new JButton("Play Animation"); + final JButton playAnimationButton = new JButton(LocalizationManager.getInstance().get("button.animationcontroller_animationcontroller_playanimation")); final ActionListener playAnimationActionListener = new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -116,9 +117,9 @@ public void actionPerformed(final ActionEvent e) { }; playAnimationButton.addActionListener(playAnimationActionListener); - final JRadioButton defaultLoopButton = new JRadioButton("Default Loop"); - final JRadioButton alwaysLoopButton = new JRadioButton("Always Loop"); - final JRadioButton neverLoopButton = new JRadioButton("Never Loop"); + final JRadioButton defaultLoopButton = new JRadioButton(LocalizationManager.getInstance().get("button.animationcontroller_animationcontroller_defaultloop")); + final JRadioButton alwaysLoopButton = new JRadioButton(LocalizationManager.getInstance().get("button.animationcontroller_animationcontroller_alwaysloop")); + final JRadioButton neverLoopButton = new JRadioButton(LocalizationManager.getInstance().get("button.animationcontroller_animationcontroller_neverloop")); final ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(defaultLoopButton); @@ -148,7 +149,7 @@ else if (neverLoopButton.isSelected()) { alwaysLoopButton.addActionListener(setLoopTypeActionListener); neverLoopButton.addActionListener(setLoopTypeActionListener); - final JLabel levelOfDetailLabel = new JLabel("Level of Detail"); + final JLabel levelOfDetailLabel = new JLabel(LocalizationManager.getInstance().get("label.animationcontroller_animationcontroller_levelofdetail")); final JSpinner levelOfDetailSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 5, 1)); levelOfDetailSpinner.addChangeListener(new ChangeListener() { @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationViewer.java b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationViewer.java index 90fdfc2dd..1e7d0df04 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationViewer.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationViewer.java @@ -19,6 +19,7 @@ import com.hiveworkshop.wc3.gui.ProgramPreferences; import com.hiveworkshop.wc3.mdl.Animation; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class AnimationViewer extends JPanel { private ModelView mdlDisp; @@ -53,7 +54,7 @@ public AnimationViewer(final ModelView mdlDisp, final ProgramPreferences program @Override public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { - return super.getListCellRendererComponent(list, value == null ? "(Unanimated)" : value, index, + return super.getListCellRendererComponent(list, value == null ? LocalizationManager.getInstance().get("string.animationviewer_animationviewer_unanimated") : value, index, isSelected, cellHasFocus); } }); diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/CameraManagerPanel.java b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/CameraManagerPanel.java index af93bfc4b..51b333800 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/CameraManagerPanel.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/CameraManagerPanel.java @@ -20,6 +20,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.ModelEditor; import com.hiveworkshop.wc3.mdl.Camera; import com.hiveworkshop.wc3.mdl.v2.ModelView; +import hiveworkshop.localizationmanager.LocalizationManager; public class CameraManagerPanel extends JPanel { private ModelView mdlDisp; @@ -49,7 +50,7 @@ public CameraManagerPanel(final ModelView mdlDisp, final CameraManagerPanelListe @Override public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { - Object display = value == null ? "(Free)" : value; + Object display = value == null ? LocalizationManager.getInstance().get("string.cameramanagerpanel_cameramanagerpanel_free") : value; if (value != null) { String displayToString; if (display instanceof Camera) { @@ -80,7 +81,7 @@ public void valueChanged(final ListSelectionEvent e) { final JScrollPane cameraScroll = new JScrollPane(cameraBox); - final JButton createCameraFromView = new JButton("Create Camera from Current View"); + final JButton createCameraFromView = new JButton(LocalizationManager.getInstance().get("button.cameramanagerpanel_cameramanagerpanel_createcamerafromview")); createCameraFromView.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/ViewerCamera.java b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/ViewerCamera.java index 1d5ac4521..025b42b30 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/ViewerCamera.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/ViewerCamera.java @@ -9,6 +9,7 @@ import org.lwjgl.util.vector.Vector4f; import com.hiveworkshop.wc3.util.MathUtils; +import hiveworkshop.localizationmanager.LocalizationManager; /** * A camera class, ported from Warsmash which was ported from mdx-m3-viewer @@ -189,7 +190,7 @@ public void setRotationAngles(final float horizontalAngle, final float verticalA this.rotation.setIdentity(); // this.rotateAngles(horizontalAngle, verticalAngle); throw new UnsupportedOperationException( - "Ghostwolf called a function that does not exist, so I did not know what to do here"); + LocalizationManager.getInstance().get("exception.viewercamera_setrotationangles_function_not_exist")); } public void face(final Vector3f point, final Vector3f worldUp) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/mpqbrowser/MPQBrowser.java b/craft3data/src/com/hiveworkshop/wc3/gui/mpqbrowser/MPQBrowser.java index 0c11a84df..9fb8991bd 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/mpqbrowser/MPQBrowser.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/mpqbrowser/MPQBrowser.java @@ -44,6 +44,7 @@ import com.hiveworkshop.wc3.mpq.MpqCodebase; import com.hiveworkshop.wc3.user.SaveProfile; import com.hiveworkshop.wc3.util.Callback; +import hiveworkshop.localizationmanager.LocalizationManager; public final class MPQBrowser extends JPanel { private final class MouseAdapterExtension extends MouseAdapter { @@ -80,22 +81,22 @@ public MPQBrowser(final MpqCodebase mpqCodebase, final Callback fileOpen final Callback useAsTextureCallback) { this.mpqCodebase = mpqCodebase; final JMenuBar menuBar = new JMenuBar(); - final JMenu fileMenu = new JMenu("File"); + final JMenu fileMenu = new JMenu(LocalizationManager.getInstance().get("menu.mpqbrowser_mpqbrowser_filemenu")); fileMenu.setEnabled(false); menuBar.add(fileMenu); - final JMenu filtersMenu = new JMenu("Filters"); + final JMenu filtersMenu = new JMenu(LocalizationManager.getInstance().get("menu.mpqbrowser_mpqbrowser_filtersmenu")); menuBar.add(filtersMenu); filters = new ArrayList<>(); - filters.add(new Filter("Text", new String[] { ".txt" })); - filters.add(new Filter("Sylk", new String[] { ".slk" })); - filters.add(new Filter("Script", new String[] { ".ai", ".wai", ".j", ".js", ".pld" })); - filters.add(new Filter("Html", new String[] { ".htm", ".html" })); - filters.add(new Filter("Models", new String[] { ".mdl", ".mdx" })); - filters.add(new Filter("Images", new String[] { ".bmp", ".tga", ".jpg", ".jpeg", ".pcx", ".blp", ".dds" })); - filters.add(new Filter("Maps", new String[] { ".w3m", ".w3x", ".w3n" })); - filters.add(new Filter("Sounds", new String[] { ".wav", ".flac" })); - filters.add(new Filter("Music", new String[] { ".mp3", ".mid" })); - otherFilter = new Filter("Other", true); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_text"), new String[] { ".txt" })); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_sylk"), new String[] { ".slk" })); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_script"), new String[] { ".ai", ".wai", ".j", ".js", ".pld" })); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_html"), new String[] { ".htm", ".html" })); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_models"), new String[] { ".mdl", ".mdx" })); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_images"), new String[] { ".bmp", ".tga", ".jpg", ".jpeg", ".pcx", ".blp", ".dds" })); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_maps"), new String[] { ".w3m", ".w3x", ".w3n" })); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_sounds"), new String[] { ".wav", ".flac" })); + filters.add(new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_music"), new String[] { ".mp3", ".mid" })); + otherFilter = new Filter(LocalizationManager.getInstance().get("filter.mpqbrowser_mpqbrowser_other"), true); filters.add(otherFilter); for (final Filter filter : filters) { filtersMenu.add(filter.getFilterCheckBoxItem()); @@ -110,7 +111,7 @@ public void actionPerformed(final ActionEvent e) { } } filtersMenu.addSeparator(); - final JMenuItem allItem = new JMenuItem("All"); + final JMenuItem allItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.mpqbrowser_mpqbrowser_allitem")); filtersMenu.add(allItem); allItem.addActionListener(new ActionListener() { @Override @@ -121,7 +122,7 @@ public void actionPerformed(final ActionEvent e) { refreshTree(); } }); - final JMenuItem noneItem = new JMenuItem("None"); + final JMenuItem noneItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.mpqbrowser_mpqbrowser_noneitem")); filtersMenu.add(noneItem); noneItem.addActionListener(new ActionListener() { @Override @@ -191,7 +192,7 @@ public void mouseClicked(final MouseEvent e) { exportFileChooser = new JFileChooser(SaveProfile.get().getPath()); final JPopupMenu contextMenu = new JPopupMenu(); - final JMenuItem openItem = new JMenuItem("Open"); + final JMenuItem openItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.mpqbrowser_mpqbrowser_openitem")); openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -199,7 +200,7 @@ public void actionPerformed(final ActionEvent e) { .run(((MPQTreeNode) mouseAdapterExtension.getClickedPath().getLastPathComponent()).getPath()); } }); - final JMenuItem extractItem = new JMenuItem("Export"); + final JMenuItem extractItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.mpqbrowser_mpqbrowser_extractitem")); extractItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -212,8 +213,9 @@ public void actionPerformed(final ActionEvent e) { if (selectedFile != null) { if (selectedFile.exists()) { if (JOptionPane.showConfirmDialog(MPQBrowser.this, - "File \"" + selectedFile.getName() + "\" already exists. Overwrite anyway?", - "Export File", JOptionPane.WARNING_MESSAGE, + LocalizationManager.getInstance().get("dialog.mpqbrowser_exportfilechooser_1") + "\"" + selectedFile.getName() + "\" " + + LocalizationManager.getInstance().get("dialog.mpqbrowser_exportfilechooser_2"), + LocalizationManager.getInstance().get("dialog.mpqbrowser_exportfilechooser_3"), JOptionPane.WARNING_MESSAGE, JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION) { return; } @@ -235,7 +237,7 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JMenuItem copyPathToClipboardItem = new JMenuItem("Copy Path to Clipboard"); + final JMenuItem copyPathToClipboardItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.mpqbrowser_mpqbrowser_copypathtoclipboarditem")); copyPathToClipboardItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -250,7 +252,7 @@ public void actionPerformed(final ActionEvent e) { contextMenu.add(extractItem); contextMenu.addSeparator(); contextMenu.add(copyPathToClipboardItem); - final JMenuItem useAsTextureItem = new JMenuItem("Use as Texture"); + final JMenuItem useAsTextureItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.mpqbrowser_mpqbrowser_useastextureitem")); useAsTextureItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { diff --git a/craft3data/src/com/hiveworkshop/wc3/gui/util/ColorChooserIcon.java b/craft3data/src/com/hiveworkshop/wc3/gui/util/ColorChooserIcon.java index 77c268e44..fd5452440 100644 --- a/craft3data/src/com/hiveworkshop/wc3/gui/util/ColorChooserIcon.java +++ b/craft3data/src/com/hiveworkshop/wc3/gui/util/ColorChooserIcon.java @@ -9,6 +9,7 @@ import javax.swing.JColorChooser; import javax.swing.JLabel; import javax.swing.JOptionPane; +import hiveworkshop.localizationmanager.LocalizationManager; public final class ColorChooserIcon extends JLabel { private Color currentColor; @@ -20,7 +21,7 @@ public ColorChooserIcon(final Color color, final ColorListener colorListener) { addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { - final Color chosenColor = JColorChooser.showDialog(ColorChooserIcon.this, "Choose Background Color", + final Color chosenColor = JColorChooser.showDialog(ColorChooserIcon.this, "data.dialog.colorchoosericon_colorchoosericon_choose_background_color", currentColor); if (chosenColor != null) { setCurrentColor(chosenColor); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/AbstractAnimatedNode.java b/craft3data/src/com/hiveworkshop/wc3/mdl/AbstractAnimatedNode.java index 3eb15fda0..4b61f2d5f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/AbstractAnimatedNode.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/AbstractAnimatedNode.java @@ -13,6 +13,7 @@ import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.animation.AddKeyframeAction; import com.hiveworkshop.wc3.mdl.render3d.RenderModel; import com.hiveworkshop.wc3.mdl.render3d.RenderNode; +import hiveworkshop.localizationmanager.LocalizationManager; public abstract class AbstractAnimatedNode implements AnimatedNode { private static final Vector4f translationHeap = new Vector4f(); @@ -154,7 +155,7 @@ public void updateTranslationKeyframe(final RenderModel renderModel, final doubl // impl final TimeEnvironmentImpl timeEnvironmentImpl = (TimeEnvironmentImpl) renderModel .getAnimatedRenderEnvironment(); - final AnimFlag translationFlag = AnimFlag.find(getAnimFlags(), "Translation", + final AnimFlag translationFlag = AnimFlag.find(getAnimFlags(), LocalizationManager.getInstance().get("string.abstractanimatednode_updatetranslationkeyframe_translation"), timeEnvironmentImpl.getGlobalSeq()); if (translationFlag == null) { return; @@ -236,7 +237,7 @@ public void updateRotationKeyframe(final RenderModel renderModel, final double c // impl final TimeEnvironmentImpl timeEnvironmentImpl = (TimeEnvironmentImpl) renderModel .getAnimatedRenderEnvironment(); - final AnimFlag rotationTimeline = AnimFlag.find(getAnimFlags(), "Rotation", timeEnvironmentImpl.getGlobalSeq()); + final AnimFlag rotationTimeline = AnimFlag.find(getAnimFlags(), LocalizationManager.getInstance().get("string.abstractanimatednode_updaterotationkeyframe_rotation"), timeEnvironmentImpl.getGlobalSeq()); if (rotationTimeline == null) { return; } @@ -363,7 +364,7 @@ public void updateScalingKeyframe(final RenderModel renderModel, final double sc // impl final TimeEnvironmentImpl timeEnvironmentImpl = (TimeEnvironmentImpl) renderModel .getAnimatedRenderEnvironment(); - final AnimFlag translationFlag = AnimFlag.find(getAnimFlags(), "Scaling", timeEnvironmentImpl.getGlobalSeq()); + final AnimFlag translationFlag = AnimFlag.find(getAnimFlags(), LocalizationManager.getInstance().get("string.abstractanimatednode_updatescalingkeyframe_scaling"), timeEnvironmentImpl.getGlobalSeq()); if (translationFlag == null) { return; } @@ -427,7 +428,7 @@ public void updateLocalRotationKeyframe(final int trackTime, final Integer track // TODO global seqs, needs separate check on AnimRendEnv, and also we must // make AnimFlag.find seek on globalSeqId - final AnimFlag rotationTimeline = AnimFlag.find(getAnimFlags(), "Rotation", trackGlobalSeq); + final AnimFlag rotationTimeline = AnimFlag.find(getAnimFlags(), LocalizationManager.getInstance().get("string.abstractanimatednode_updatelocalrotationkeyframe_rotation"), trackGlobalSeq); if (rotationTimeline == null) { return; } @@ -483,7 +484,7 @@ public void updateLocalRotationKeyframeInverse(final int trackTime, final Intege // TODO global seqs, needs separate check on AnimRendEnv, and also we must // make AnimFlag.find seek on globalSeqId - final AnimFlag rotationTimeline = AnimFlag.find(getAnimFlags(), "Rotation", trackGlobalSeq); + final AnimFlag rotationTimeline = AnimFlag.find(getAnimFlags(), LocalizationManager.getInstance().get("string.abstractanimatednode_updateLocalrotationkeyframeinverse_rotation"), trackGlobalSeq); if (rotationTimeline == null) { return; } @@ -542,7 +543,7 @@ public void updateLocalTranslationKeyframe(final int trackTime, final Integer tr final double newDeltaX, final double newDeltaY, final double newDeltaZ) { // TODO global seqs, needs separate check on AnimRendEnv, and also we must // make AnimFlag.find seek on globalSeqId - final AnimFlag translationFlag = AnimFlag.find(getAnimFlags(), "Translation", trackGlobalSeq); + final AnimFlag translationFlag = AnimFlag.find(getAnimFlags(), LocalizationManager.getInstance().get("string.abstractanimatednode_updatelocaltranslationkeyframe_translation"), trackGlobalSeq); if (translationFlag == null) { return; } @@ -576,7 +577,7 @@ public void updateLocalScalingKeyframe(final int trackTime, final Integer trackG final Vector3f localScaling) { // TODO global seqs, needs separate check on AnimRendEnv, and also we must // make AnimFlag.find seek on globalSeqId - final AnimFlag translationFlag = AnimFlag.find(getAnimFlags(), "Scaling", trackGlobalSeq); + final AnimFlag translationFlag = AnimFlag.find(getAnimFlags(), LocalizationManager.getInstance().get("string.abstractanimatednode_updatelocalscalingkeyframe_scaling"), trackGlobalSeq); if (translationFlag == null) { return; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/AnimFlag.java b/craft3data/src/com/hiveworkshop/wc3/mdl/AnimFlag.java index 36a5e1e9b..77dc3800a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/AnimFlag.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/AnimFlag.java @@ -63,6 +63,7 @@ import com.hiveworkshop.wc3.mdx.TextureScaling; import com.hiveworkshop.wc3.mdx.TextureTranslation; import com.hiveworkshop.wc3.util.MathUtils; +import hiveworkshop.localizationmanager.LocalizationManager; /** * A java class for MDL "motion flags," such as Alpha, Translation, Scaling, or @@ -1340,7 +1341,7 @@ public static AnimFlag createEmpty2018(final String title, final InterpolationTy } public void setInterpType(final InterpolationType interpolationType) { - System.err.println("Unsafe call to setInterpType, please rewrite code in AnimFlag class"); + System.err.println(LocalizationManager.getInstance().get("println.animflag_setinterptype")); tags.clear();// we're pretty sure this is just interp type now switch (interpolationType) { case BEZIER: @@ -1648,7 +1649,7 @@ public static AnimFlag parseText(final String[] line) { typeid = 3; } else if (!aflg.title.equals("Alpha")) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse \"" + aflg.title + "\": Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.animflag_parsetext_1") + " \"" + aflg.title + "\": " + LocalizationManager.getInstance().get("dialog.animflag_parsetext_2")); } aflg.typeid = typeid; for (int i = 1; i < line.length; i++) { @@ -1709,8 +1710,8 @@ public static AnimFlag parseText(final String[] line) { aflg.globalSeqId = MDLReader.readInt(line[i]); aflg.hasGlobalSeq = true; } else { - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "Error while parsing " + aflg.title - + ": More than one Global Sequence Id is present in the same " + aflg.title + "!"); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("dialog.animflag_parsetext_3") + aflg.title + + LocalizationManager.getInstance().get("dialog.animflag_parsetext_4") + aflg.title + "!"); } } else { aflg.tags.add(MDLReader.readFlag(line[i])); @@ -1843,8 +1844,8 @@ public static AnimFlag read(final BufferedReader mdl) { aflg.globalSeqId = MDLReader.readInt(line); aflg.hasGlobalSeq = true; } else { - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "Error while parsing " + aflg.title - + ": More than one Global Sequence Id is present in the same " + aflg.title + "!"); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("dialog.animflag_read_1") + aflg.title + + LocalizationManager.getInstance().get("dialog.animflag_read_2") + aflg.title + "!"); } } else { aflg.tags.add(MDLReader.readFlag(line)); @@ -2178,7 +2179,7 @@ public AnimFlag getMostVisible(final AnimFlag partner) { } } else { JOptionPane.showMessageDialog(null, - "Error: Program attempted to compare visibility with non-visibility animation component.\nThis... probably means something is horribly wrong. Save your work, if you can."); + LocalizationManager.getInstance().get("dialog.animflag_getmostvisible")); } } return null; @@ -2206,7 +2207,7 @@ public void copyFrom(final AnimFlag source) { outTans.addAll(source.outTans); } else if (mtans) { JOptionPane.showMessageDialog(null, - "Some animations will lose complexity due to transfer incombatibility. There will probably be no visible change."); + LocalizationManager.getInstance().get("dialog.animflag_copyfrom")); inTans.clear(); outTans.clear(); tags = source.tags; @@ -2234,7 +2235,7 @@ public void deleteAnim(final Animation anim) { } } } else { - System.out.println("KeyFrame deleting was blocked by a GlobalSequence"); + System.out.println(LocalizationManager.getInstance().get("println.animflag_deleteanim")); } // BOOM magic happens @@ -2268,9 +2269,9 @@ public void copyFrom(final AnimFlag source, final int sourceStart, final int sou boolean tans = source.tans(); if (tans && tags.contains("Linear")) { final int x = JOptionPane.showConfirmDialog(null, - "ERROR! A source was found to have Linear and Nonlinear motion simultaneously. Does the following have non-zero data? " + LocalizationManager.getInstance().get("dialog.animflag_copyfrom_source_1") + source.inTans, - "Help This Program!", JOptionPane.YES_NO_OPTION); + LocalizationManager.getInstance().get("dialog.animflag_copyfrom_source_2"), JOptionPane.YES_NO_OPTION); if (x == JOptionPane.NO_OPTION) { tans = false; } @@ -2509,7 +2510,7 @@ private Object identity(final int typeid) { case TEXTUREID: // Integer { - System.err.println("Texture identity used in renderer... TODO make this function more intelligent."); + System.err.println(LocalizationManager.getInstance().get("println.animflag_identity")); return 0; } default: @@ -2818,8 +2819,8 @@ public Object interpolateAt(final AnimatedRenderEnvironment animatedRenderEnviro public void removeKeyframe(final int trackTime) { final int keyframeIndex = floorIndex(trackTime); if (keyframeIndex >= size() || times.get(keyframeIndex) != trackTime) { - throw new IllegalStateException("Attempted to remove keyframe, but no keyframe was found (" + keyframeIndex - + " @ time " + trackTime + ")"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.animflag_removekeyframe_1") + " (" + keyframeIndex + + " @ " + LocalizationManager.getInstance().get("exception.animflag_removekeyframe_2") + trackTime + ")"); } else { times.remove(keyframeIndex); values.remove(keyframeIndex); @@ -2885,12 +2886,12 @@ public void setKeyframe(final Integer time, final Object value, final Object inT public void slideKeyframe(final int startTrackTime, final int endTrackTime) { if (times.size() < 1) { - throw new IllegalStateException("Unable to slide keyframe: no frames exist"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.animflag_slidekeyframe_1")); } final int startIndex = floorIndex(startTrackTime); final int endIndex = floorIndex(endTrackTime); if (endIndex >= 0 && times.get(endIndex) == endTrackTime) { - throw new IllegalStateException("Sliding this keyframe would create duplicate entries at one time!"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.animflag_slidekeyframe_2")); } times.set(startIndex, endTrackTime); sort(); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Animation.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Animation.java index 03f735441..4062593d8 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Animation.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Animation.java @@ -7,6 +7,7 @@ import com.hiveworkshop.wc3.gui.animedit.BasicTimeBoundProvider; import com.hiveworkshop.wc3.mdx.SequenceChunk; +import hiveworkshop.localizationmanager.LocalizationManager; /** * A java object to represent MDL "Sequences" ("Animations"). @@ -61,13 +62,13 @@ public Animation(final SequenceChunk.Sequence seq) { this(seq.name, seq.intervalStart, seq.intervalEnd); setExtents(new ExtLog(seq.minimumExtent, seq.maximumExtent, seq.boundsRadius)); if (seq.moveSpeed != 0) { - addTag("MoveSpeed " + seq.moveSpeed); + addTag(LocalizationManager.getInstance().get("addtag.animation_animation_movespeed") + seq.moveSpeed); } if (seq.nonLooping == 1) { - addTag("NonLooping"); + addTag(LocalizationManager.getInstance().get("addtag.animation_animation_nonlooping")); } if (seq.rarity > 0) { - addTag("Rarity " + seq.rarity); + addTag(LocalizationManager.getInstance().get("addtag.animation_animation_rarity") + seq.rarity); } } @@ -85,12 +86,12 @@ public void setRarity(final float newRarity) { for (int i = 0; (i < tags.size()) && !foundTag; i++) { final String tag = tags.get(i); if (tag.startsWith("Rarity")) { - tags.set(i, "Rarity " + MDLReader.doubleToString(newRarity)); + tags.set(i, LocalizationManager.getInstance().get("addtag.animation_setrarity_rarity") + MDLReader.doubleToString(newRarity)); foundTag = true; } } if (!foundTag) { - tags.add("Rarity " + MDLReader.doubleToString(newRarity)); + tags.add(LocalizationManager.getInstance().get("addtag.animation_setrarity_rarity") + MDLReader.doubleToString(newRarity)); } } @@ -99,12 +100,12 @@ public void setMoveSpeed(final float newMoveSpeed) { for (int i = 0; (i < tags.size()) && !foundTag; i++) { final String tag = tags.get(i); if (tag.startsWith("MoveSpeed")) { - tags.set(i, "MoveSpeed " + MDLReader.doubleToString(newMoveSpeed)); + tags.set(i, LocalizationManager.getInstance().get("addtag.animation_setmovespeed_movespeed") + MDLReader.doubleToString(newMoveSpeed)); foundTag = true; } } if (!foundTag) { - tags.add("MoveSpeed " + MDLReader.doubleToString(newMoveSpeed)); + tags.add(LocalizationManager.getInstance().get("addtag.animation_setmovespeed_movespeed") + MDLReader.doubleToString(newMoveSpeed)); } } @@ -154,17 +155,17 @@ public String getName() { } public boolean isNonLooping() { - return tags.contains("NonLooping"); + return tags.contains(LocalizationManager.getInstance().get("Naddtag.animation_isnonlooping_nonlooping")); } public void setNonLooping(final boolean nonLooping) { if (isNonLooping()) { if (!nonLooping) { - tags.remove("NonLooping"); + tags.remove(LocalizationManager.getInstance().get("addtag.animation_setnonlooping_nonlooping")); } } else { if (nonLooping) { - tags.add("NonLooping"); + tags.add(LocalizationManager.getInstance().get("addtag.animation_setnonlooping_nonlooping")); } } } @@ -292,17 +293,17 @@ public static Animation read(final BufferedReader mdl) { anim.name = " "; } } catch (final Exception e) { - // System.out.println("Throwing nameless anim from: - // "+MDLReader.nextLine(mdl));//Read the word "Anim" from the top + // System.out.println(LocalizationManager.getInstance().get("println.animation_read_nameless") + // +MDLReader.nextLine(mdl));//Read the word "Anim" from the top limited = true; } if (!limited) { - // JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),"This - // popup means Anims were interpreted as outside geoset!"); + // JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), + // LocalizationManager.getInstance().get("dialog.animation_read_outside_geoset")); // try // { - // String [] entries = MDLReader.nextLine(mdl).split("Interval - // ")[1].split(",");//Split the line into pieces, forming two + // String [] entries = MDLReader.nextLine(mdl).split(LocalizationManager.getInstance().get("string.animation_read_interval")) + // [1].split(",");//Split the line into pieces, forming two // entries that are before and after the comma in "{ , // }" // entries[0] = entries[0].substring(2,entries[0].length());//Shave @@ -315,9 +316,8 @@ public static Animation read(final BufferedReader mdl) { // } // catch (NumberFormatException e) // { - // JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),"Unable - // to parse animation: Interval could not be interpreted - // numerically.\nThis may break lots of things."); + // JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), + // LocalizationManager.getInstance().get("dialog.animation_read_interval")); // } } MDLReader.mark(mdl); @@ -341,12 +341,12 @@ public void printTo(final PrintWriter writer, final int tabHeight) { tabs = tabs + "\t"; } if (!this.name.equals("")) { - writer.println(tabs + "Anim \"" + this.name + "\" {"); + writer.println(tabs + LocalizationManager.getInstance().get("println.animation_printto_anim") + " \"" + this.name + "\" {"); } else { - writer.println(tabs + "Anim {"); + writer.println(tabs + LocalizationManager.getInstance().get("println.animation_printto_anim") + " {"); } if ((intervalEnd - intervalStart) > 0) { - writer.println(tabs + "\tInterval { " + intervalStart + ", " + intervalEnd + " },"); + writer.println(tabs + "\t" + LocalizationManager.getInstance().get("println.animation_printto_interval") + " { " + intervalStart + ", " + intervalEnd + " },"); } for (int i = 0; i < tags.size(); i++) { writer.println(tabs + "\t" + tags.get(i) + ","); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Attachment.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Attachment.java index fa0a60393..124e0d282 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Attachment.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Attachment.java @@ -10,6 +10,7 @@ import com.hiveworkshop.wc3.gui.modelviewer.AnimatedRenderEnvironment; import com.hiveworkshop.wc3.mdl.v2.visitor.IdObjectVisitor; import com.hiveworkshop.wc3.mdx.AttachmentChunk; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Write a description of class Attachment here. @@ -39,7 +40,7 @@ public Attachment(final AttachmentChunk.Attachment attachment) { // Integer.toBinaryString(bone.node.flags)); if ((attachment.node.flags & 2048) != 2048) { System.err.println( - "MDX -> MDL error: An attachment '" + attachment.node.name + "' not flagged as attachment in MDX!"); + "MDX -> MDL " + LocalizationManager.getInstance().get("println.attachment_attachment_1") + " '" + attachment.node.name + "' " + LocalizationManager.getInstance().get("println.attachment_attachment_2")); } // ----- Convert Base NODE to "IDOBJECT" ----- loadFrom(attachment.node); @@ -47,7 +48,7 @@ public Attachment(final AttachmentChunk.Attachment attachment) { if (attachment.unknownNull != 0) { System.err - .println("Surprise! This model has a special attachment data point worthy of documenting! " + name); + .println(LocalizationManager.getInstance().get("println.attachment_attachment_3") + name); } // System.out.println(attachment.node.name + ": " + // Integer.toBinaryString(attachment.unknownNull)); @@ -113,7 +114,7 @@ public static Attachment read(final BufferedReader mdl) { return at; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Attachment: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.attachment_read")); } return null; } @@ -128,16 +129,16 @@ public void printTo(final PrintWriter writer, final int version) { // -- uses geosetId writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.attachment_printto_object") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.attachment_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } if (path != null) { - writer.println("\tPath \"" + path + "\","); + writer.println(LocalizationManager.getInstance().get("println.attachment_printto_path") + path + "\","); } if (AttachmentID != 0) { - writer.println("\tAttachmentID " + AttachmentID + ","); + writer.println(LocalizationManager.getInstance().get("println.attachment_printto_attachment") + AttachmentID + ","); } for (int i = 0; i < flags.size(); i++) { writer.println("\t" + flags.get(i) + ","); @@ -166,7 +167,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.attachment_setvisibilityflag") + getName() + "."); } } @@ -182,7 +183,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { System.err.println( - "Some visiblity animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.attachment_getvisibilityflag") + getName() + "."); } return output; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Bitmap.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Bitmap.java index a76f3fbac..ec7a1508f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Bitmap.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Bitmap.java @@ -10,6 +10,7 @@ import com.hiveworkshop.wc3.gui.BLPHandler; import com.hiveworkshop.wc3.gui.datachooser.DataSource; import com.hiveworkshop.wc3.mdx.TextureChunk; +import hiveworkshop.localizationmanager.LocalizationManager; /** * A class to represent MDL texture references. (Not materials) @@ -33,17 +34,17 @@ public String getName() { return bits[bits.length - 1].split("\\.")[0]; } catch (final Exception e) { - return "bad blp path"; + return LocalizationManager.getInstance().get("string.bitmap_getpath_blp_path"); } } else if (replaceableId == 1) { - return "Team Color"; + return LocalizationManager.getInstance().get("string.bitmap_getpath_team_color"); } else if (replaceableId == 2) { - return "Team Glow"; + return LocalizationManager.getInstance().get("string.bitmap_getpath_team_glow"); } else { - return "Replaceable" + replaceableId; + return LocalizationManager.getInstance().get("string.bitmap_getpath_replaceable") + replaceableId; } } @@ -203,14 +204,14 @@ else if (line.contains("WrapHeight")) { } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error parsing Bitmap: Unrecognized statement '" + line + "'."); + LocalizationManager.getInstance().get("dialog.bitmap_read_parsing_bitmap") + " '" + line + "'."); } } return tex; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Bitmap: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.bitmap_read_parse_bitmap")); } return null; } @@ -241,23 +242,23 @@ public void printTo(final PrintWriter writer, final int tabHeight) { for (int i = 0; i < tabHeight; i++) { tabs = tabs + "\t"; } - writer.println(tabs + "Bitmap {"); - writer.println(tabs + "\tImage \"" + imagePath + "\","); + writer.println(tabs + LocalizationManager.getInstance().get("println.bitmap_printto_bitmap") + " {"); + writer.println(tabs + LocalizationManager.getInstance().get("println.bitmap_printto_image") + " \"" + imagePath + "\","); if (replaceableId != -1) { - writer.println(tabs + "\tReplaceableId " + replaceableId + ","); + writer.println(tabs + LocalizationManager.getInstance().get("\tReplaceableId ") + replaceableId + ","); } switch (wrapStyle) { case 0: break; case 1: - writer.println(tabs + "\tWrapWidth,"); + writer.println(tabs + LocalizationManager.getInstance().get("println.bitmap_printto_wrapwidth")); break; case 2: - writer.println(tabs + "\tWrapHeight,"); + writer.println(tabs + LocalizationManager.getInstance().get("println.bitmap_printto_wrapheight")); break; case 3: - writer.println(tabs + "\tWrapWidth,"); - writer.println(tabs + "\tWrapHeight,"); + writer.println(tabs + LocalizationManager.getInstance().get("println.bitmap_printto_wrapwidth")); + writer.println(tabs + LocalizationManager.getInstance().get("println.bitmap_printto_wrapheight")); break; } writer.println(tabs + "}"); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Bone.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Bone.java index 10b56d7a8..7ed039224 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Bone.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Bone.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.gui.modelviewer.AnimatedRenderEnvironment; import com.hiveworkshop.wc3.mdl.v2.visitor.IdObjectVisitor; import com.hiveworkshop.wc3.mdx.BoneChunk; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Bones that make geometry animate. @@ -62,7 +63,7 @@ public Bone(final BoneChunk.Bone bone) { // System.out.println(mdlBone.getName() + ": " + // Integer.toBinaryString(bone.node.flags)); if ((bone.node.flags & 256) != 256) { - System.err.println("MDX -> MDL error: A bone '" + bone.node.name + "' not flagged as bone in MDX!"); + System.err.println("MDX -> MDL" + LocalizationManager.getInstance().get("println.bone_bone_bone_error") + " '" + bone.node.name + "' " + LocalizationManager.getInstance().get("println.bone_bone_flagged")); } // ----- Convert Base NODE to "IDOBJECT" ----- loadFrom(bone.node); @@ -93,7 +94,7 @@ public static Bone read(final BufferedReader mdl) { b.multiGeoId = true; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error while parsing: Could not interpret integer from: " + line); + LocalizationManager.getInstance().get("println.bone_read_interpret_integer") + line); } } } else if (line.contains("GeosetAnimId")) { @@ -107,7 +108,7 @@ public static Bone read(final BufferedReader mdl) { b.geosetAnim = null; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error while parsing: Could not interpret integer from: " + line); + LocalizationManager.getInstance().get("println.bone_read_interpret_integer") + line); } } } else if (line.contains("Parent")) { @@ -127,7 +128,7 @@ public static Bone read(final BufferedReader mdl) { return b; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Bone: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("println.bone_read_parse_bone")); } return null; } @@ -142,33 +143,33 @@ public void printTo(final PrintWriter writer, final int version) { // -- uses geosetId writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.bone_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.bone_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } for (int i = 0; i < flags.size(); i++) { writer.println("\t" + flags.get(i) + ","); } if (multiGeoId) { - writer.println("\tGeosetId Multiple,"); + writer.println(LocalizationManager.getInstance().get("println.bone_printto_geosetid_multiple")); } else if (geosetId != -1) { - writer.println("\tGeosetId " + geosetId + ","); + writer.println(LocalizationManager.getInstance().get("println.bone_printto_geosetid") + geosetId + ","); } if (this.getClass() == Bone.class)// hasGeoAnim ) HELPERS DONT SEEM TO // HAVE GEOSET ANIM ID { if (geosetAnim == null || geosetAnimId == -1) { - writer.println("\tGeosetAnimId None,"); + writer.println(LocalizationManager.getInstance().get("println.bone_printto_geosetanimid_none")); } else { - writer.println("\tGeosetAnimId " + geosetAnimId + ","); + writer.println(LocalizationManager.getInstance().get("println.bone_printto_geosetanimid") + geosetAnimId + ","); } } // if( this.getClass() == Bone.class ) // { - // // writer.println("\tGeosetId Multiple,"); - // writer.println("\tGeosetAnimId None,"); + // // writer.println(LocalizationManager.getInstance().get("println.bone_printto_geosetid_multiple")); + // writer.println(LocalizationManager.getInstance().get("println.bone_printto_geosetanimid_none")); // } for (int i = 0; i < animFlags.size(); i++) { animFlags.get(i).printTo(writer, 1); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Camera.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Camera.java index af68fd37f..fe2cf056f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Camera.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Camera.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.gui.modelviewer.AnimatedRenderEnvironment; import com.hiveworkshop.wc3.mdl.IdObject.NodeFlags; import com.hiveworkshop.wc3.mdx.CameraChunk; +import hiveworkshop.localizationmanager.LocalizationManager; /** * Camera class, these are the things most people would think of as a particle @@ -116,15 +117,15 @@ public static Camera read(final BufferedReader mdl) { MDLReader.reset(mdl); c.targetAnimFlags.add(AnimFlag.read(mdl)); } else { - JOptionPane.showMessageDialog(null, "Camera target did not recognize data at: " + line - + "\nThis is probably not a major issue?"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.camera_read_target_not_recognize") + line + + LocalizationManager.getInstance().get("dialog.camera_read_major_issue")); } MDLReader.mark(mdl); line = MDLReader.nextLine(mdl); } } else { JOptionPane.showMessageDialog(null, - "Camera did not recognize data at: " + line + "\nThis is probably not a major issue?"); + LocalizationManager.getInstance().get("dialog.camera_read_camera_not_recognize") + line + LocalizationManager.getInstance().get("dialog.camera_read_major_issue")); } MDLReader.mark(mdl); @@ -133,7 +134,7 @@ public static Camera read(final BufferedReader mdl) { return c; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Camera: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.camera_read_parse_camera")); } return null; } @@ -144,7 +145,7 @@ public void printTo(final PrintWriter writer) { // -- uses parentId value of idObject superclass // -- uses the parent (java Object reference) of idObject superclass writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); - writer.println("\tPosition " + Position.toString() + ","); + writer.println(LocalizationManager.getInstance().get("println.camera_printto_position") + Position.toString() + ","); for (int i = 0; i < animFlags.size(); i++) { if (animFlags.get(i).getName().equals("Translation")) { animFlags.get(i).printTo(writer, 1); @@ -155,11 +156,11 @@ public void printTo(final PrintWriter writer) { animFlags.get(i).printTo(writer, 1); } } - writer.println("\tFieldOfView " + MDLReader.doubleToString(FieldOfView) + ","); - writer.println("\tFarClip " + MDLReader.doubleToString(FarClip) + ","); - writer.println("\tNearClip " + MDLReader.doubleToString(NearClip) + ","); - writer.println("\tTarget {"); - writer.println("\t\tPosition " + targetPosition.toString() + ","); + writer.println(LocalizationManager.getInstance().get("println.camera_printto_view") + MDLReader.doubleToString(FieldOfView) + ","); + writer.println(LocalizationManager.getInstance().get("println.camera_printto_farclip") + MDLReader.doubleToString(FarClip) + ","); + writer.println(LocalizationManager.getInstance().get("println.camera_printto_nearclip") + MDLReader.doubleToString(NearClip) + ","); + writer.println(LocalizationManager.getInstance().get("println.camera_printto_target")); + writer.println(LocalizationManager.getInstance().get("println.camera_printto_position_t") + targetPosition.toString() + ","); for (int i = 0; i < targetAnimFlags.size(); i++) { targetAnimFlags.get(i).printTo(writer, 2); } @@ -277,7 +278,7 @@ public List getChildrenNodes() { @Override public String getName() { - return "Source of: " + parent.name; + return LocalizationManager.getInstance().get("string.camera_sourcenode") + parent.name; } @Override @@ -387,7 +388,7 @@ public List getChildrenNodes() { @Override public String getName() { - return "Target of: " + parent.name; + return LocalizationManager.getInstance().get("string.camera_target") + parent.name; } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/CollisionShape.java b/craft3data/src/com/hiveworkshop/wc3/mdl/CollisionShape.java index 445387761..e5fa9f715 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/CollisionShape.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/CollisionShape.java @@ -12,6 +12,7 @@ import com.hiveworkshop.wc3.mdl.v2.visitor.IdObjectVisitor; import com.hiveworkshop.wc3.mdx.CollisionShapeChunk; import com.hiveworkshop.wc3.mdx.Node; +import hiveworkshop.localizationmanager.LocalizationManager; /** * A class for CollisionShapes, which handle unit selection and related matters @@ -27,8 +28,8 @@ public class CollisionShape extends IdObject { public CollisionShape(final CollisionShapeChunk.CollisionShape mdxSource) { this.name = mdxSource.node.name; if ((mdxSource.node.flags & 8192) != 8192) { - System.err.println("MDX -> MDL error: A collisionshape '" + mdxSource.node.name - + "' not flagged as collisionshape in MDX!"); + System.err.println("MDX -> MDL" + LocalizationManager.getInstance().get("println.collisionshape_collisionshape_error") + " '" + mdxSource.node.name + + "' " + LocalizationManager.getInstance().get("println.collisionshape_collisionshape_flagged")); } if (mdxSource.type == 0) { add("Box"); @@ -137,7 +138,7 @@ public static CollisionShape read(final BufferedReader mdl) { return e; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse CollisionShape: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.collisionshape_read_parse")); } return null; } @@ -150,15 +151,15 @@ public void printTo(final PrintWriter writer, final int version) { // -- uses the parent (java Object reference) of idObject superclass writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.collisionshape_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.collisionshape_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } for (final String s : flags) { writer.println("\t" + s + ","); } - writer.println("\tVertices " + vertices.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.collisionshape_printto_vertices") + vertices.size() + " {"); for (final Vertex v : vertices) { writer.println("\t\t" + v.toString() + ","); } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/EditableModel.java b/craft3data/src/com/hiveworkshop/wc3/mdl/EditableModel.java index aaef89ff3..3f93ffaf3 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/EditableModel.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/EditableModel.java @@ -74,6 +74,7 @@ import de.wc3data.stream.BlizzardDataInputStream; import de.wc3data.stream.BlizzardDataOutputStream; +import hiveworkshop.localizationmanager.LocalizationManager; /** * A java object to represent and store an MDL 3d model (Warcraft III file @@ -305,7 +306,7 @@ public EditableModel(final MdxModel mdx) { // For MDL api, this is currently embedded right inside the // MDL class setName(mdx.modelChunk.name); - addToHeader("//This model was converted from MDX by ogre-lord's Java MDX API and Retera's Java MDL API"); + addToHeader(LocalizationManager.getInstance().get("addtoheader.editablemodel_editablemodel_converted")); setBlendTime(mdx.modelChunk.blendTime); setExtents(new ExtLog(mdx.modelChunk.minimumExtent, mdx.modelChunk.maximumExtent, mdx.modelChunk.boundsRadius)); setFormatVersion(mdx.versionChunk.version); @@ -427,10 +428,10 @@ public EditableModel(final MdxModel mdx) { || (mdlCam.getName().length() > 20) || (mdlCam.getName().length() <= 0))) { corruptedCameraWarningGiven = true; JOptionPane.showMessageDialog(null, "--- " + this.getName() - + " ---\nWARNING: Java Warcraft Libraries thinks we are loading a camera with corrupted data due to bug in Native MDX Parser.\nPlease DISABLE \"View > Use Native MDX Parser\" if you want to correctly edit \"" + + LocalizationManager.getInstance().get("dialog.editablemodel_editablemodel_bug") + getName() - + "\".\nYou may continue to work, but portions of the model's data have been lost, and will be missing if you save.", - "Warning", JOptionPane.WARNING_MESSAGE); + + LocalizationManager.getInstance().get("dialog.editablemodel_editablemodel_continue"), + LocalizationManager.getInstance().get("dialog.editablemodel_editablemodel_warning"), JOptionPane.WARNING_MESSAGE); } add(mdlCam); } @@ -470,7 +471,7 @@ public void parseVertex(final String input, final Geoset geoset) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error (on line " + c + "): Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("dialog.editablemodel_parsevertex_error") + c + LocalizationManager.getInstance().get("dialog.editablemodel_parsevertex_interpreted")); } } @@ -491,7 +492,7 @@ public void parseTriangles(final String input, final Geoset g) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error: Unable to interpret information in Triangles: " + s[t] + ", " + s[t + 1] + ", or " + LocalizationManager.getInstance().get("dialog.editablemodel_parsevertex_triangles") + s[t] + ", " + s[t + 1] + ", or " + s[t + 2]); } } @@ -503,7 +504,7 @@ public String nextLine(final BufferedReader reader) { output = reader.readLine(); } catch (final IOException e) { - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "Error reading file."); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("dialog.editablemodel_nextline_error")); } c++; if (output == null) { @@ -651,7 +652,7 @@ public Bone getBone(final int index) { } } catch (final Exception e) { - JOptionPane.showMessageDialog(null, "Bone reference broken or invalid!"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.editablemodel_getbone_reference")); } return null; } @@ -855,7 +856,7 @@ public void addAnimationsFrom(EditableModel other) { public List addAnimationsFrom(EditableModel other, final List anims) { // this process destroys the "other" model inside memory, so destroy // a copy instead - other = EditableModel.deepClone(other, "animation source file"); + other = EditableModel.deepClone(other, LocalizationManager.getInstance().get("string.editablemodel_addanimationsfrom_animation_source_file")); final List flags = getAllAnimFlags(); final List eventObjs = sortedIdObjects(EventObject.class); @@ -993,10 +994,10 @@ public static EditableModel read(final File f) { return mdlObject; } catch (final FileNotFoundException e) { - JOptionPane.showMessageDialog(null, "The file chosen was not found: " + e.getMessage()); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.editablemodel_read_not_found") + e.getMessage()); } catch (final IOException e) { - JOptionPane.showMessageDialog(null, "The file chosen could not be read: " + e.getMessage()); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.editablemodel_read_not_read") + e.getMessage()); } return null; } @@ -1023,19 +1024,19 @@ public static EditableModel read(final InputStream f) { } } if (!line.contains("Version")) { - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "The file version is missing!"); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("dialog.editablemodel_read_version_missing")); } line = MDLReader.nextLine(mdl); mdlr.formatVersion = MDLReader.readInt(line); if ((mdlr.formatVersion != 800) && (mdlr.formatVersion != 900) && (mdlr.formatVersion != 1000) && (mdlr.formatVersion != 1100) && (mdlr.formatVersion != 1200)) { - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "The format version was confusing!"); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("dialog.editablemodel_read_format_confusing")); } line = MDLReader.nextLine(mdl);// this is "}" for format version if (!line.startsWith("}")) // now I'll prove it { // gotta have that sense of humor, right? JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Model could not be understood. Program does not understand this type of file."); + LocalizationManager.getInstance().get("dialog.editablemodel_read_understood")); } line = MDLReader.nextLine(mdl); mdlr.setName(MDLReader.readName(line)); @@ -1209,7 +1210,7 @@ else if (trimmedLine.startsWith("Matrices")) { } } else { - throw new IllegalStateException("Bad tokens in BindPose chunk: " + line); + throw new IllegalStateException(LocalizationManager.getInstance().get("dialog.editablemodel_read_bindpose") + line); } } mdlr.bindPoseChunk.bindPose = new float[bindPoseElements.size()][]; @@ -1265,7 +1266,7 @@ public static void parse4FloatBPos(final String input, final float[] output, fin } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: BindPose Matrix could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.editablemodel_parse4floatbpos_interpreted")); } for (int i = 1; i < 3; i++) { try { @@ -1273,7 +1274,7 @@ public static void parse4FloatBPos(final String input, final float[] output, fin } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: BindPose Matrix could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.editablemodel_parse4floatbpos_interpreted")); } } try { @@ -1281,7 +1282,7 @@ public static void parse4FloatBPos(final String input, final float[] output, fin } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: BindPose Matrix could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.editablemodel_parse4floatbpos_interpreted")); } } @@ -1292,7 +1293,7 @@ public static void parse12FloatBPos(final String input, final float[] output) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: BindPose Matrix could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.editablemodel_parse12floatbpos_interpreted")); } for (int i = 1; i < 11; i++) { try { @@ -1300,7 +1301,7 @@ public static void parse12FloatBPos(final String input, final float[] output) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: BindPose Matrix could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.editablemodel_parse12floatbpos_interpreted")); } } try { @@ -1308,7 +1309,7 @@ public static void parse12FloatBPos(final String input, final float[] output) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: BindPose Matrix could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.editablemodel_parse12floatbpos_interpreted")); } } @@ -1332,7 +1333,7 @@ public void doPostRead() { } if (badAnims.size() > 0) { JOptionPane.showMessageDialog(null, - "We discovered GeosetAnim data pointing to an invalid GeosetID! Bad data will be deleted. Please backup your model file."); + LocalizationManager.getInstance().get("dialog.editablemodel_dopostread_invalid_geosetid")); } for (final GeosetAnim bad : badAnims) { this.geosetAnims.remove(bad); @@ -1407,66 +1408,66 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini writer = new PrintWriter(outputStream); } catch (final Exception e) { - JOptionPane.showMessageDialog(null, "Unable to save MDL to file."); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.editablemodel_printto_unable_to_save")); } for (final String s : header) { writer.println(s); } - writer.println("// Saved by Retera's MDL Toolkit on " + new Date(System.currentTimeMillis()).toString()); - writer.println("Version {"); - writer.println("\tFormatVersion " + formatVersion + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_save_mdl_toolkit") + new Date(System.currentTimeMillis()).toString()); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_version")); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_format_version") + formatVersion + ","); writer.println("}"); - writer.println("Model \"" + name + "\" {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_model") + " \"" + name + "\" {"); int sz = geosets.size(); if (sz > 0) { - writer.println("\tNumGeosets " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numgeosets") + sz + ","); } sz = geosetAnims.size(); if (sz > 0) { - writer.println("\tNumGeosetAnims " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numgeosetanims") + sz + ","); } sz = countIdObjectsOfClass(Helper.class); if (sz > 0) { - writer.println("\tNumHelpers " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numhelpers") + sz + ","); } sz = countIdObjectsOfClass(Light.class); if (sz > 0) { - writer.println("\tNumLights " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numlights") + sz + ","); } sz = countIdObjectsOfClass(Bone.class); if (sz > 0) { - writer.println("\tNumBones " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numbones") + sz + ","); } sz = countIdObjectsOfClass(Attachment.class); if (sz > 0) { - writer.println("\tNumAttachments " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numattachments") + sz + ","); } sz = countIdObjectsOfClass(ParticleEmitter.class); if (sz > 0) { - writer.println("\tNumParticleEmitters " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numparticleemitters") + sz + ","); } sz = countIdObjectsOfClass(ParticleEmitter2.class); if (sz > 0) { - writer.println("\tNumParticleEmitters2 " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numparticleemitters2") + sz + ","); } sz = countIdObjectsOfClass(ParticleEmitterPopcorn.class); if (sz > 0) { - writer.println("\tNumParticleEmittersPopcorn " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numparticleemitterspopcorn") + sz + ","); } sz = countIdObjectsOfClass(RibbonEmitter.class); if (sz > 0) { - writer.println("\tNumRibbonEmitters " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numribbonemitters") + sz + ","); } sz = countIdObjectsOfClass(EventObject.class); if (sz > 0) { - writer.println("\tNumEvents " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numevents") + sz + ","); } sz = faceEffects.size(); if (sz > 0) { - writer.println("\tNumFaceFX " + sz + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_numfacefx") + sz + ","); } - writer.println("\tBlendTime " + BlendTime + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_blendtime") + BlendTime + ","); if (extents != null) { extents.printTo(writer, 1); } @@ -1475,7 +1476,7 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini // Animations if (anims != null) { if (anims.size() > 0) { - writer.println("Sequences " + anims.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_sequences") + anims.size() + " {"); for (int i = 0; i < anims.size(); i++) { anims.get(i).printTo(writer, 1); } @@ -1486,9 +1487,9 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini // Global Sequences if (globalSeqs != null) { if (globalSeqs.size() > 0) { - writer.println("GlobalSequences " + globalSeqs.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_globalsequences") + globalSeqs.size() + " {"); for (int i = 0; i < globalSeqs.size(); i++) { - writer.println("\tDuration " + globalSeqs.get(i).toString() + ","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_duration") + globalSeqs.get(i).toString() + ","); } writer.println("}"); } @@ -1497,7 +1498,7 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini // Textures if (textures != null) { if (textures.size() > 0) { - writer.println("Textures " + textures.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_textures") + textures.size() + " {"); for (int i = 0; i < textures.size(); i++) { textures.get(i).printTo(writer, 1); } @@ -1508,7 +1509,7 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini // Materials if (materials != null) { if (materials.size() > 0) { - writer.println("Materials " + materials.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_materials") + materials.size() + " {"); for (int i = 0; i < materials.size(); i++) { materials.get(i).printTo(writer, 1, formatVersion); } @@ -1519,7 +1520,7 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini // TextureAnims if (texAnims != null) { if (texAnims.size() > 0) { - writer.println("TextureAnims " + texAnims.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_texture_anims") + texAnims.size() + " {"); for (int i = 0; i < texAnims.size(); i++) { texAnims.get(i).printTo(writer, 1); } @@ -1594,7 +1595,7 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini || (obj.getClass() == ParticleEmitter2.class) || (obj.getClass() == ParticleEmitterPopcorn.class) || (obj.getClass() == RibbonEmitter.class) || (obj.getClass() == EventObject.class) || (obj.getClass() == CollisionShape.class))) { - writer.println("PivotPoints " + pivots.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_pivotpoints") + pivots.size() + " {"); for (int p = 0; p < pivots.size(); p++) { writer.println("\t" + pivots.get(p).toString() + ","); } @@ -1612,7 +1613,7 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini } if (!pivotsPrinted) { - writer.println("PivotPoints " + pivots.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_pivotpoints") + pivots.size() + " {"); for (int p = 0; p < pivots.size(); p++) { writer.println("\t" + pivots.get(p).toString() + ","); } @@ -1628,15 +1629,15 @@ public void printTo(final OutputStream outputStream, final boolean alwaysUseMini if (ModelUtils.isBindPoseSupported(formatVersion)) { for (int i = 0; i < faceEffects.size(); i++) { final FaceEffect faceEffect = faceEffects.get(i); - writer.println("FaceFX \"" + faceEffect.faceEffectTarget + "\" {"); - writer.println("\tPath \"" + faceEffect.faceEffect + "\","); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_facefx") + " \"" + faceEffect.faceEffectTarget + "\" {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_path") + " \"" + faceEffect.faceEffect + "\","); writer.println("}"); } } if ((bindPoseChunk != null) && ModelUtils.isBindPoseSupported(formatVersion)) { if (RETERA_FORMAT_BPOS_MATRICES) { - writer.println("BindPose " + bindPoseChunk.bindPose.length + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_bindpose") + bindPoseChunk.bindPose.length + " {"); final StringBuilder matrixStringBuilder = new StringBuilder(); for (int i = 0; i < bindPoseChunk.bindPose.length; i++) { Named matrixPredictedParent = null; @@ -1647,10 +1648,10 @@ else if (i < (idObjects.size() + cameras.size())) { matrixPredictedParent = cameras.get(i - idObjects.size()); } if (matrixPredictedParent != null) { - writer.println("\tMatrix { // for \"" + matrixPredictedParent.getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_matrix") + " { //" + LocalizationManager.getInstance().get("println.editablemodel_printto_for") + " \"" + matrixPredictedParent.getName() + "\""); } else { - writer.println("\tMatrix {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_matrix") + " {"); } final float[] matrix = bindPoseChunk.bindPose[i]; for (int j = 0; j < 3; j++) { @@ -1670,8 +1671,8 @@ else if (i < (idObjects.size() + cameras.size())) { writer.println("}"); } else { - writer.println("BindPose {"); - writer.println("\tMatrices " + bindPoseChunk.bindPose.length + " {"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_bindpose") + "{"); + writer.println(LocalizationManager.getInstance().get("println.editablemodel_printto_matrices") + bindPoseChunk.bindPose.length + " {"); final StringBuilder matrixStringBuilder = new StringBuilder(); for (int i = 0; i < bindPoseChunk.bindPose.length; i++) { Named matrixPredictedParent = null; @@ -1692,7 +1693,7 @@ else if (i < (idObjects.size() + cameras.size())) { } matrixStringBuilder.append(" },"); if (matrixPredictedParent != null) { - matrixStringBuilder.append("// for \""); + matrixStringBuilder.append("// " + LocalizationManager.getInstance().get("println.editablemodel_printto_for") + " \""); matrixStringBuilder.append(matrixPredictedParent.getName()); matrixStringBuilder.append("\""); } @@ -1707,7 +1708,7 @@ else if (i < (idObjects.size() + cameras.size())) { writer.close(); } catch (final Exception e) { - JOptionPane.showMessageDialog(null, "Unable to close MDL writer -- did you run out of hard drive space?"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.editablemodel_printto_close_mdl")); ExceptionPopup.display(e); } } @@ -1915,7 +1916,7 @@ public void updateIdObjectReferences() { } if (i >= pivots.size()) { JOptionPane.showMessageDialog(null, - "Error: More objects than PivotPoints were found.\nAdditional pivot at {0,0,0} will be added."); + LocalizationManager.getInstance().get("dialog.editablemodel_updateIdobjectreferences_additional_pivot")); pivots.add(new Vertex(0, 0, 0)); } obj.setPivotPoint(pivots.get(i)); @@ -1954,7 +1955,7 @@ public void updateObjectIds() { } } for (final AnimFlag badFlag : bad) { - System.err.println("Gleaning out " + badFlag.getName() + " chunk with size of 0"); + System.err.println(LocalizationManager.getInstance().get("dialog.editablemodel_updateobjectIds_gleaning") + badFlag.getName() + LocalizationManager.getInstance().get("dialog.editablemodel_updateobjectIds_chunk_with_size")); animFlags.remove(badFlag); } } @@ -2056,7 +2057,7 @@ public List getAllAnimFlags() { } else { JOptionPane.showMessageDialog(null, - "WARNING: Error with processing time-scale from TextureAnims! Program will attempt to proceed."); + LocalizationManager.getInstance().get("dialog.editablemodel_getallanimflags_time_scale_textureanims")); } } } @@ -2067,7 +2068,7 @@ public List getAllAnimFlags() { } else { JOptionPane.showMessageDialog(null, - "WARNING: Error with processing time-scale from GeosetAnims! Program will attempt to proceed."); + LocalizationManager.getInstance().get("dialog.editablemodel_getallanimflags_time_scale_geosetanims")); } } } @@ -2415,7 +2416,7 @@ public int animTrackEnd() { public void add(final Animation x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null Anim component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_anim")); } anims.add(x); } @@ -2423,7 +2424,7 @@ public void add(final Animation x) { public void add(final Integer x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null GlobalSeq component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_globalseq")); } globalSeqs.add(x); } @@ -2431,7 +2432,7 @@ public void add(final Integer x) { public void add(final Bitmap x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null Bitmap component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_bitmap")); } textures.add(x); } @@ -2439,7 +2440,7 @@ public void add(final Bitmap x) { public void add(final Material x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null Material component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_material")); } materials.add(x); } @@ -2447,7 +2448,7 @@ public void add(final Material x) { public void add(final TextureAnim x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null TextureAnim component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_textureanim")); } texAnims.add(x); } @@ -2455,7 +2456,7 @@ public void add(final TextureAnim x) { public void add(final Geoset x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null Geoset component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_geoset")); } x.parentModel = this; geosets.add(x); @@ -2464,7 +2465,7 @@ public void add(final Geoset x) { public void add(final GeosetVertex x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null GeosetVertex component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_geosetvertex")); } if (!contains(x.geoset)) { add(x.geoset); @@ -2478,7 +2479,7 @@ public void add(final GeosetVertex x) { public void add(final Triangle x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null Triangle component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_triangle")); } if (!contains(x.geoset)) { add(x.geoset); @@ -2492,7 +2493,7 @@ public void add(final Triangle x) { public void add(final GeosetAnim x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null GeosetAnim component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_geosetanim")); } geosetAnims.add(x); } @@ -2500,7 +2501,7 @@ public void add(final GeosetAnim x) { public void add(final IdObject x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null IdObject component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_idobject")); } idObjects.add(x); if ((x.pivotPoint != null) && !pivots.contains(x.pivotPoint)) { @@ -2516,7 +2517,7 @@ public void add(final IdObject x) { public void add(final Camera x) { if (x == null) { JOptionPane.showMessageDialog(null, - "Added null Camera component to model, which is really bad. Tell Retera you saw this once you have errors."); + LocalizationManager.getInstance().get("dialog.editablemodel_add_camera")); } cameras.add(x); if (ModelUtils.isBindPoseSupported(formatVersion) && (bindPoseChunk != null)) { @@ -2941,7 +2942,7 @@ public void removeAllTimelinesForGlobalSeq(final Integer selectedValue) { } else { JOptionPane.showMessageDialog(null, - "WARNING: Error with processing time-scale from TextureAnims! Program will attempt to proceed."); + LocalizationManager.getInstance().get("dialog.editablemodel_removealltimelinesforglobalseq_time_scale_textureanims")); } } } @@ -2958,7 +2959,7 @@ public void removeAllTimelinesForGlobalSeq(final Integer selectedValue) { } else { JOptionPane.showMessageDialog(null, - "WARNING: Error with processing time-scale from GeosetAnims! Program will attempt to proceed."); + LocalizationManager.getInstance().get("dialog.editablemodel_removealltimelinesforglobalseq_time_scale_geosetanims")); } } } @@ -3193,7 +3194,7 @@ public static void convertToV800(final int targetLevelOfDetail, final EditableMo if (idObject instanceof ParticleEmitterPopcorn) { incompatibleObjects.add(idObject); if (((ParticleEmitterPopcorn) idObject).getPath().toLowerCase().contains("hero_glow")) { - System.out.println("HERO HERO HERO"); + System.out.println(LocalizationManager.getInstance().get("dialog.editablemodel_converttov800_hero")); final Bone dummyHeroGlowNode = new Bone("hero_reforged"); // this model needs hero glow final Geoset heroGlow = new Geoset(); @@ -3461,7 +3462,7 @@ public MaterialReference(final Material material) { if (idObject instanceof ParticleEmitterPopcorn) { incompatibleObjects.add(idObject); if (((ParticleEmitterPopcorn) idObject).getPath().toLowerCase().contains("hero_glow")) { - System.out.println("HERO HERO HERO"); + System.out.println(LocalizationManager.getInstance().get("dialog.editablemodel_converttov800_hero")); final Bone dummyHeroGlowNode = new Bone("hero_reforged"); // this model needs hero glow final Geoset heroGlow = new Geoset(); @@ -3800,11 +3801,11 @@ public static void recalculateTangents(final EditableModel currentMDL, final Com } if (parent != null) { JOptionPane.showMessageDialog(parent, - "Tangent generation completed.\nGood tangents: " + goodTangents + ", bad tangents: " + badTangents); + LocalizationManager.getInstance().get("dialog.editablemodel_recalculatetangents_tangent_generation") + goodTangents + ", " + LocalizationManager.getInstance().get("dialog.editablemodel_recalculatetangents_tangent_bad") + ": " + badTangents); } else { System.out.println( - "Tangent generation completed.\nGood tangents: " + goodTangents + ", bad tangents: " + badTangents); + LocalizationManager.getInstance().get("dialog.editablemodel_recalculatetangents_tangent_generation") + goodTangents + ", " + LocalizationManager.getInstance().get("dialog.editablemodel_recalculatetangents_tangent_bad") + ": " + badTangents); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/EventObject.java b/craft3data/src/com/hiveworkshop/wc3/mdl/EventObject.java index 28e948136..4cf6d40da 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/EventObject.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/EventObject.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -44,8 +45,8 @@ public EventObject(final EventObjectChunk.EventObject mdxSource) { // System.out.println(getName() + ": " + // Integer.toBinaryString(mdxSource.node.flags)); if ((mdxSource.node.flags & 1024) != 1024) { - System.err.println("MDX -> MDL error: An eventobject '" + mdxSource.node.name - + "' not flagged as eventobject in MDX!"); + System.err.println(LocalizationManager.getInstance().get("println.eventobject_eventobject_error") + " '" + mdxSource.node.name + + "' " + LocalizationManager.getInstance().get("println.eventobject_eventobject_not_flagged")); } // System.out.println(emitter.node.name + ": " + // Integer.toBinaryString(emitter.node.flags)); @@ -129,7 +130,7 @@ public static EventObject read(final BufferedReader mdl) { e.hasGlobalSeq = true; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error while parsing event object: More than one Global Sequence Id is present in the same object!"); + LocalizationManager.getInstance().get("dialog.eventobject_eventobject_more_global_sequence")); } } else if (!line.contains("{") && !line.contains("}")) { e.eventTrack.add(new Integer(MDLReader.readInt(line))); @@ -140,7 +141,7 @@ public static EventObject read(final BufferedReader mdl) { return e; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse EventObject: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.eventobject_eventobject_unable_parse")); } return null; } @@ -154,21 +155,21 @@ public void printTo(final PrintWriter writer, final int version) { final ArrayList pAnimFlags = new ArrayList<>(this.animFlags); writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.eventobject_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.eventobject_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } if (eventTrack.size() <= 0) { - writer.println("\tEventTrack " + 1 + " {"); + writer.println(LocalizationManager.getInstance().get("println.eventobject_printto_eventtrack") + 1 + " {"); if (hasGlobalSeq) { - writer.println("\t\tGlobalSeqId " + globalSeqId + ","); + writer.println(LocalizationManager.getInstance().get("println.eventobject_printto_globalseqid") + globalSeqId + ","); } writer.println("\t\t" + 0 + ","); } else { - writer.println("\tEventTrack " + eventTrack.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.eventobject_printto_eventtrack") + eventTrack.size() + " {"); if (hasGlobalSeq) { - writer.println("\t\tGlobalSeqId " + globalSeqId + ","); + writer.println(LocalizationManager.getInstance().get("println.eventobject_printto_globalseqid") + globalSeqId + ","); } for (int i = 0; i < eventTrack.size(); i++) { writer.println("\t\t" + eventTrack.get(i).toString() + ","); @@ -319,7 +320,7 @@ public void add(final AnimFlag af) { @Override public void add(final String flag) { - System.err.println("ERROR: EventObject given unknown flag: " + flag); + System.err.println(LocalizationManager.getInstance().get("println.eventobject_add") + flag); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/ExtLog.java b/craft3data/src/com/hiveworkshop/wc3/mdl/ExtLog.java index 4f7e138ee..da947cc16 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/ExtLog.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/ExtLog.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -84,17 +85,17 @@ public static ExtLog parseText(final String[] line) { extLog.setBounds(Double.parseDouble(s)); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + s + "}: BoundsRadius could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + s + "}: " + LocalizationManager.getInstance().get("dialog.extLog_parsetext_bounds_radius")); } } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse ExtLog; unrecognized input: " + line[i]); + LocalizationManager.getInstance().get("dialog.extLog_parsetext_unrecognized_input") + line[i]); } } return extLog; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse ExtLog: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.extLog_parsetext_open_statement")); } return null; } @@ -117,11 +118,11 @@ public static ExtLog read(final BufferedReader mdl) { extLog.setBounds(Double.parseDouble(s)); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + s + "}: BoundsRadius could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + s + "}: " + LocalizationManager.getInstance().get("dialog.extLog_parsetext_bounds_radius")); } } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse ExtLog; unrecognized input: " + line); + LocalizationManager.getInstance().get("dialog.extLog_parsetext_unrecognized_input") + line); } MDLReader.mark(mdl); line = MDLReader.nextLine(mdl); @@ -130,7 +131,7 @@ public static ExtLog read(final BufferedReader mdl) { return extLog; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse ExtLog: Missing or unrecognized open statement: " + line); + LocalizationManager.getInstance().get("dialog.extLog_parsetext_open_statement") + line); } return null; } @@ -141,13 +142,13 @@ public void printTo(final PrintWriter writer, final int tabHeight) { tabs = tabs + "\t"; } if (minimumExtent != null) { - writer.println(tabs + "MinimumExtent " + minimumExtent.toString() + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.extLog_printto_minimum_extent") + minimumExtent.toString() + ","); } if (maximumExtent != null) { - writer.println(tabs + "MaximumExtent " + maximumExtent.toString() + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.extLog_printto_maximum_extent") + maximumExtent.toString() + ","); } if (boundsRadius != NO_BOUNDS_RADIUS) { - writer.println(tabs + "BoundsRadius " + MDLReader.doubleToString(boundsRadius) + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.extLog_printto_bounds_radius") + MDLReader.doubleToString(boundsRadius) + ","); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Geoset.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Geoset.java index 7ea0929d1..9492033b6 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Geoset.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Geoset.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.geom.Rectangle2D; import java.io.BufferedReader; @@ -141,7 +142,7 @@ private int convertPossiblyBuggedShort(final short x) { @Override public String getName() { - return "Geoset " + (parentModel.getGeosetId(this) + 1);// parentModel.getName() + return LocalizationManager.getInstance().get("string.geoset_getname_geoset") + (parentModel.getGeosetId(this) + 1);// parentModel.getName() // + " } @@ -150,7 +151,7 @@ public String getUIName(final EditableModel model) { if (getLevelOfDetailName() != null && getLevelOfDetailName().length() > 0) { return "(" + uiNumber + ") " + getLevelOfDetailName(); } - return "Geoset " + uiNumber; + return LocalizationManager.getInstance().get("string.geoset_getuiname_geoset") + uiNumber; } public void addVertex(final GeosetVertex v) { @@ -242,7 +243,7 @@ public void add(final Triangle p) { if (!triangles.contains(p)) { triangles.add(p); } else { - System.out.println("2x triangles"); + System.out.println(LocalizationManager.getInstance().get("string.geoset_add_riangles")); } } @@ -373,21 +374,21 @@ public static byte[] parse8ByteSkin(final String input) { temp[0] = (byte) Short.parseShort(entries[0].split("\\{")[1].trim()); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Skin data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geoset_parse8byteskin_skin_data")); } for (int i = 1; i < 7; i++) { try { temp[i] = (byte) Short.parseShort(entries[i].trim()); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Skin data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geoset_parse8byteskin_skin_data")); } } try { temp[7] = (byte) Short.parseShort(entries[7].split("}")[0].trim()); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Skin data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geoset_parse8byteskin_skin_data")); } return temp; } @@ -399,21 +400,21 @@ public static float[] parse4FloatTangent(final String input) { temp[0] = Float.parseFloat(entries[0].split("\\{")[1].trim()); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Tangent data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geoset_parse4floattangent_tangent_data")); } for (int i = 1; i < 3; i++) { try { temp[i] = Float.parseFloat(entries[i].trim()); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Tangent data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geoset_parse4floattangent_tangent_data")); } } try { temp[3] = Float.parseFloat(entries[3].split("}")[0].trim()); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Tangent data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geoset_parse4floattangent_tangent_data")); } return temp; } @@ -425,7 +426,7 @@ public static Geoset read(final BufferedReader mdl) { final Geoset geo = new Geoset(); if (!line.contains("Vertices")) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error: Vertices not found at beginning of Geoset!"); + LocalizationManager.getInstance().get("dialog.geoset_read_geoset_vertices")); } while (!(line = MDLReader.nextLine(mdl)).contains("\t}")) { geo.addVertex(GeosetVertex.parseText(line)); @@ -463,7 +464,7 @@ public static Geoset read(final BufferedReader mdl) { } if (!line.contains("VertexGroup")) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error: VertexGroups missing or invalid!"); + LocalizationManager.getInstance().get("dialog.geoset_read_vertex_groups")); } int i = 0; while (!(line = MDLReader.nextLine(mdl)).contains("\t}")) { @@ -492,12 +493,12 @@ public static Geoset read(final BufferedReader mdl) { } if (!line.contains("Faces")) { - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "Error: Faces missing or invalid!"); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("dialog.geoset_read_faces")); } line = MDLReader.nextLine(mdl); if (!line.contains("Triangles")) { - System.out.println("No triangles: " + line); - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "Error: Triangles missing or invalid!"); + System.out.println(LocalizationManager.getInstance().get("println.geoset_read_no_triangles") + line); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("dialog.geoset_read_triangles")); } geo.setTriangles(Triangle.read(mdl, geo)); line = MDLReader.nextLine(mdl);// Throw away the \t} closer for @@ -505,7 +506,7 @@ public static Geoset read(final BufferedReader mdl) { line = MDLReader.nextLine(mdl); if (!line.contains("Groups")) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error: Groups (Matrices) missing or invalid!"); + LocalizationManager.getInstance().get("dialog.geoset_read_groups")); } while (!(line = MDLReader.nextLine(mdl)).contains("\t}")) { geo.addMatrix(Matrix.parseText(line)); @@ -544,7 +545,7 @@ public static Geoset read(final BufferedReader mdl) { return geo; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Geoset: Missing or unrecognized open statement '" + line + "'."); + LocalizationManager.getInstance().get("dialog.geoset_read_parse_geoset") + line + "'."); } return null; } @@ -609,7 +610,7 @@ public void updateToObjects(final EditableModel mdlr) { gv.addTVertex(uvlayers.get(l).getTVertex(i)); } catch (final Exception e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error: Length of TVertices and Vertices chunk differ (Or some other unknown error has occurred)!"); + LocalizationManager.getInstance().get("dialog.geoset_updatetoobjects_tvertices_and_vertices_length")); } } Matrix mx; @@ -648,7 +649,7 @@ public void updateToObjects(final EditableModel mdlr) { try { material = mdlr.getMaterial(materialID); } catch (final ArrayIndexOutOfBoundsException e) { - JOptionPane.showMessageDialog(null, "Error: Material index out of bounds for geoset!"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.geoset_updatetoobjects_material_index")); } parentModel = mdlr; } @@ -700,8 +701,8 @@ public void applyVerticesToMatrices(final EditableModel mdlr, final boolean alwa } } if (anyVerticesCantBeSkinned && anyVerticesSkinned) { - throw new IllegalStateException("Geoset \"" + getUIName(mdlr) - + "\": Both complex SD matrices that cannot convert to HD, and also HD weights that cannot be expressed in SD, have been used. This merged geoset cannot save this way without losing data. Please Split Geoset or reduce complexity and retry."); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.geoset_applyverticestomatrices_geoset") + getUIName(mdlr) + + LocalizationManager.getInstance().get("exception.geoset_applyverticestomatrices_convert")); } final MatrixGeneratorStrategy matrixGeneratorStrategy; if (anyVerticesSkinned) { @@ -823,8 +824,8 @@ public boolean isEmpty() { public void printTo(final PrintWriter writer, final EditableModel mdlr, final boolean trianglesTogether, final boolean alwaysUseMinimalMatricesHD) { purifyFaces(); - writer.println("Geoset {"); - writer.println("\tVertices " + vertex.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_geoset" + " {")); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_vertices") + vertex.size() + " {"); final String tabs = "\t\t"; // Normals cleared here, in case that becomes a problem later. @@ -844,7 +845,7 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo } if (littleNum != bigNum) { JOptionPane.showMessageDialog(null, - "Error: Attempting to save a Geoset with Verteces that have differing numbers of TVertices! Empty TVertices will be autogenerated."); + LocalizationManager.getInstance().get("println.geoset_printto_empty_tvertices")); } for (int i = 0; i < bigNum; i++) { uvlayers.add(new UVLayer()); @@ -872,9 +873,9 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo if (hasNormals) { if (normals.size() != vertex.size()) { JOptionPane.showMessageDialog(null, - "Number of normals differs from number of vertices. The model file will be corrupt.\nTo fix it, delete or fix the Normals chunk in MDL."); + LocalizationManager.getInstance().get("println.geoset_printto_normals_vertices")); } - writer.println("\tNormals " + normals.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_normals") + normals.size() + " {"); for (int i = 0; i < normals.size(); i++) { writer.println(tabs + normals.get(i).toString() + ","); } @@ -889,7 +890,7 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo && vertex.size() > 0 && vertex.get(0).getTangent() != null; final boolean printSkinToFile = ModelUtils.isTangentAndSkinSupported(mdlr.getFormatVersion()) && vertex.size() > 0 && vertex.get(0).getSkinBoneIndexes() != null; - writer.println("\tVertexGroup {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_vertexgroup" + " {")); if (!printSkinToFile) { for (int i = 0; i < vertex.size(); i++) { final GeosetVertex geosetVertex = vertex.get(i); @@ -898,7 +899,7 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo } writer.println("\t}"); if (printTangentsToFile) { - writer.println("\tTangents " + vertex.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_tangents") + vertex.size() + " {"); final StringBuilder tangentBuilder = new StringBuilder(); for (int i = 0; i < vertex.size(); i++) { tangentBuilder.setLength(0); @@ -912,7 +913,7 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo writer.println("\t}"); } if (printSkinToFile) { - writer.println("\tSkinWeights " + vertex.size() + " {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_skinweights") + vertex.size() + " {"); final StringBuilder skinBuilder = new StringBuilder(); for (int i = 0; i < vertex.size(); i++) { skinBuilder.setLength(0); @@ -934,8 +935,8 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo writer.println("\t}"); } if (trianglesTogether) { - writer.println("\tFaces 1 " + triangles.size() * 3 + " {"); - writer.println("\t\tTriangles {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_faces") + "1 " + triangles.size() * 3 + " {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_triangles") + " {"); String triangleOut = "\t\t\t{ "; for (int i = 0; i < triangles.size(); i++) { triangles.get(i).updateVertexIds(this); @@ -948,8 +949,8 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo writer.println(triangleOut + "},"); writer.println("\t\t}"); } else { - writer.println("\tFaces " + triangles.size() + " " + triangles.size() * 3 + " {"); - writer.println("\t\tTriangles {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_faces") + triangles.size() + " " + triangles.size() * 3 + " {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_triangles") + " {"); final String triangleOut = "\t\t\t{ "; for (int i = 0; i < triangles.size(); i++) { triangles.get(i).updateVertexIds(this); @@ -962,7 +963,7 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo for (int i = 0; i < matrix.size(); i++) { boneRefCount += matrix.get(i).bones.size(); } - writer.println("\tGroups " + matrix.size() + " " + boneRefCount + " {"); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_groups") + matrix.size() + " " + boneRefCount + " {"); for (int i = 0; i < matrix.size(); i++) { matrix.get(i).updateIds(mdlr); matrix.get(i).printTo(writer, 2);// 2 is the tab height @@ -975,11 +976,11 @@ public void printTo(final PrintWriter writer, final EditableModel mdlr, final bo anims.get(i).printTo(writer, 1); } - writer.println("\tMaterialID " + materialID + ","); - writer.println("\tSelectionGroup " + selectionGroup + ","); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_materialid") + materialID + ","); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_selectiongroup") + selectionGroup + ","); if (levelOfDetailName != null && ModelUtils.isLevelOfDetailSupported(mdlr.getFormatVersion())) { - writer.println("\tLevelOfDetail " + levelOfDetail + ","); - writer.println("\tName \"" + levelOfDetailName + "\","); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_levelofdetail") + levelOfDetail + ","); + writer.println(LocalizationManager.getInstance().get("println.geoset_printto_name") + levelOfDetailName + "\","); } for (int i = 0; i < flags.size(); i++) { writer.println("\t" + flags.get(i) + ","); @@ -1008,7 +1009,7 @@ public void doSavePrep(final EditableModel mdlr, final boolean alwaysUseMinimalM } if (littleNum != bigNum) { JOptionPane.showMessageDialog(null, - "Error: Attempting to save a Geoset with Verteces that have differing numbers of TVertices! Empty TVertices will be autogenerated."); + LocalizationManager.getInstance().get("dialog.geoset_dosaveprep_empty_tvertices")); } for (int i = 0; i < bigNum; i++) { uvlayers.add(new UVLayer()); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/GeosetAnim.java b/craft3data/src/com/hiveworkshop/wc3/mdl/GeosetAnim.java index 0bb0d3bf1..f0f25c973 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/GeosetAnim.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/GeosetAnim.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -104,7 +105,7 @@ public static GeosetAnim read(final BufferedReader mdl) { return geo; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse GeosetAnim: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.geosetanim_read_parse_geosetanim")); } return null; } @@ -117,21 +118,21 @@ public void printTo(final PrintWriter writer, final int tabHeight) { } String inTabs = tabs; inTabs = inTabs + "\t"; - writer.println(tabs + "GeosetAnim {"); + writer.println(tabs + LocalizationManager.getInstance().get("println.geosetanim_printto_geosetanim") + " {"); if (dropShadow) { - writer.println(inTabs + "DropShadow,"); + writer.println(inTabs + LocalizationManager.getInstance().get("println.geosetanim_printto_dropshadow")); } for (int i = 0; i < animFlags.size(); i++) { animFlags.get(i).printTo(writer, 1); } if (staticAlpha != -1) { - writer.println(inTabs + "static Alpha " + staticAlpha + ","); + writer.println(inTabs + LocalizationManager.getInstance().get("println.geosetanim_printto_static_alpha") + staticAlpha + ","); } if (staticColor != null) { - writer.println(inTabs + "static Color " + staticColor + ","); + writer.println(inTabs + LocalizationManager.getInstance().get("println.geosetanim_printto_static_color") + staticColor + ","); } if (geosetId != -1) { - writer.println("\tGeosetId " + geosetId + ","); + writer.println(LocalizationManager.getInstance().get("println.geosetanim_printto_geosetid") + geosetId + ","); } writer.println(tabs + "}"); } @@ -154,7 +155,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getVisTagname() + "."); + LocalizationManager.getInstance().get("dialog.geosetanim_setvisibilityflag_overwrite") + getVisTagname() + "."); } } @@ -170,7 +171,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during retrieval in " + getVisTagname() + "."); + LocalizationManager.getInstance().get("dialog.geosetanim_getvisibilityflag_retrieval") + getVisTagname() + "."); } return output; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/GeosetVertex.java b/craft3data/src/com/hiveworkshop/wc3/mdl/GeosetVertex.java index f8ef16a9f..ffef64ee5 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/GeosetVertex.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/GeosetVertex.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.ArrayList; import java.util.List; @@ -147,7 +148,7 @@ public void updateMatrixRef(final ArrayList list) { } catch (final Exception e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error in Matrices: VertexGroup does not reference a real matrix id!"); + LocalizationManager.getInstance().get("dialog.geosetvertex_updatematrixref_real_matrix_id")); } } @@ -174,21 +175,21 @@ public static GeosetVertex parseText(final String input) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geosetvertex_parsetext_interpreted")); } try { y = Double.parseDouble(entries[1]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geosetvertex_parsetext_interpreted")); } try { z = Double.parseDouble(entries[2].split("}")[0]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.geosetvertex_parsetext_interpreted")); } temp = new GeosetVertex(x, y, z); return temp; diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Helper.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Helper.java index ac2b35f51..8349e5e4a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Helper.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Helper.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; @@ -37,7 +38,7 @@ public Helper(final HelperChunk.Helper helper) { // System.out.println(mdlBone.getName() + ": " + // Integer.toBinaryString(bone.node.flags)); if ((helper.node.flags & 1) != 0) { - System.err.println("MDX -> MDL error: A helper '" + helper.node.name + "' not flagged as helper in MDX!"); + System.err.println(LocalizationManager.getInstance().get("println.helper_helper_error") + helper.node.name + LocalizationManager.getInstance().get("println.helper_helper_not_flagged")); } // ----- Convert Base NODE to "IDOBJECT" ----- loadFrom(helper.node); @@ -66,7 +67,7 @@ public static Helper read(final BufferedReader mdl) { b.multiGeoId = true; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error while parsing: Could not interpret integer from: " + line); + LocalizationManager.getInstance().get("println.helper_read_error") + line); } } } else if (line.contains("GeosetAnimId")) { @@ -80,7 +81,7 @@ public static Helper read(final BufferedReader mdl) { b.geosetAnim = null; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error while parsing: Could not interpret integer from: " + line); + LocalizationManager.getInstance().get("println.helper_read_error") + line); } } } else if (line.contains("Parent")) { @@ -100,7 +101,7 @@ public static Helper read(final BufferedReader mdl) { return b; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Bone: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("println.helper_read_parse_bone")); } return null; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Layer.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Layer.java index b5e3d64e8..b6ab35f89 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Layer.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Layer.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -30,13 +31,13 @@ public class Layer implements Named, VisibilitySource, LayerView, TimelineContai // 5: modulate // 6: modulate 2x public static enum FilterMode { - NONE("None"), - TRANSPARENT("Transparent"), - BLEND("Blend"), - ADDITIVE("Additive"), - ADDALPHA("AddAlpha"), - MODULATE("Modulate"), - MODULATE2X("Modulate2x"); + NONE(LocalizationManager.getInstance().get("string.layer_layer_none")), + TRANSPARENT(LocalizationManager.getInstance().get("string.layer_layer_transparent")), + BLEND(LocalizationManager.getInstance().get("string.layer_layer_blend")), + ADDITIVE(LocalizationManager.getInstance().get("string.layer_layer_additive")), + ADDALPHA(LocalizationManager.getInstance().get("string.layer_layer_addalpha")), + MODULATE(LocalizationManager.getInstance().get("string.layer_layer_modulate")), + MODULATE2X(LocalizationManager.getInstance().get("string.layer_layer_modulate2x")); String mdlText; @@ -745,7 +746,7 @@ else if (line.contains("TextureID") && line.contains("{")) { } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Layer: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.layer_read_parse_layer")); } return null; } @@ -768,31 +769,31 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean for (int i = 0; i < tabHeight; i++) { tabs = tabs + "\t"; } - writer.println(tabs + "Layer {"); - writer.println(tabs + "\tFilterMode " + filterMode + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_layer") + " {"); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_filtermode") + filterMode + ","); for (int i = 0; i < flags.size(); i++) { writer.println(tabs + "\t" + flags.get(i) + ","); } if (ModelUtils.isCombinedHDLayerSupported(version)) { if (layerShader == null) { - writer.println(tabs + "\tShaderTypeId 0, // null"); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_shadertypeid") + " 0, // null"); } else { - writer.println(tabs + "\tShaderTypeId " + layerShader.ordinal() + ", //" + layerShader.name()); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_shadertypeid") + layerShader.ordinal() + ", //" + layerShader.name()); } for (final ShaderTextureTypeHD shaderTextureTypeHD : ShaderTextureTypeHD.VALUES) { final Integer textureId = shaderTextureIds.get(shaderTextureTypeHD); if ((textureId != null) && (textureId != -1)) { final String name = shaderTextureTypeHD == ShaderTextureTypeHD.Diffuse ? "" : shaderTextureTypeHD.name(); - writer.println(tabs + "\tstatic " + name + "TextureID " + textureId + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_static") + name + LocalizationManager.getInstance().get("println.layer_printto_textureid") + textureId + ","); } } } else { final Integer textureId = shaderTextureIds.get(ShaderTextureTypeHD.Diffuse); if ((textureId != null) && (textureId != -1)) { - writer.println(tabs + "\tstatic TextureID " + textureId + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_static_textureid") + textureId + ","); } } for (int i = 0; i < anims.size(); i++) { @@ -804,10 +805,10 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean } } if (hasTexAnim()) { - writer.println(tabs + "\tTVertexAnimId " + TVertexAnimId + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_tvertexanimid") + TVertexAnimId + ","); } if (useCoords) { - writer.println(tabs + "\tCoordId " + CoordId + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_coordid") + CoordId + ","); } boolean foundAlpha = false; for (int i = 0; i < anims.size(); i++) { @@ -818,7 +819,7 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean } } if ((staticAlpha != -1) && !foundAlpha) { - writer.println(tabs + "\tstatic Alpha " + staticAlpha + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_static_alpha") + staticAlpha + ","); } if (ModelUtils.isEmissiveLayerSupported(version)) { boolean foundEmissive = false; @@ -830,7 +831,7 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean } } if (!Double.isNaN(emissiveGain) && (emissiveGain != 1.0) && !foundEmissive) { - writer.println(tabs + "\tstatic EmissiveGain " + MDLReader.doubleToString(emissiveGain) + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_static_emissivegain") + MDLReader.doubleToString(emissiveGain) + ","); } } if (ModelUtils.isFresnelColorLayerSupported(version)) { @@ -845,7 +846,7 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean if ((fresnelColor != null) && ((fresnelColor.x != 1.0) || (fresnelColor.y != 1.0) || (fresnelColor.z != 1.0)) && !foundFresnelColor) { - writer.println(tabs + "\tstatic FresnelColor " + fresnelColor + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_static_fresnelcolor") + fresnelColor + ","); } boolean foundFresnelOpacity = false; for (int i = 0; i < anims.size(); i++) { @@ -856,7 +857,7 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean } } if (!Double.isNaN(fresnelOpacity) && (fresnelOpacity != 0) && !foundFresnelOpacity) { - writer.println(tabs + "\tstatic FresnelOpacity " + MDLReader.doubleToString(fresnelOpacity) + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_static_fresnelopacity") + MDLReader.doubleToString(fresnelOpacity) + ","); } boolean foundFresnelTeamColor = false; for (int i = 0; i < anims.size(); i++) { @@ -867,7 +868,7 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean } } if (!Double.isNaN(fresnelTeamColor) && (fresnelTeamColor != 0) && !foundFresnelTeamColor) { - writer.println(tabs + "\tstatic FresnelTeamColor " + MDLReader.doubleToString(fresnelTeamColor) + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.layer_printto_static_fresnelteamcolor") + MDLReader.doubleToString(fresnelTeamColor) + ","); } } writer.println(tabs + "}"); @@ -876,12 +877,12 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean @Override public String getName() { final Bitmap texture = shaderTextures.get(ShaderTextureTypeHD.Diffuse); - return getTextureName(texture, "multi-textured layer (mode " + filterMode + ") "); + return getTextureName(texture, LocalizationManager.getInstance().get("string.layer_getname_multi_textured") + filterMode + ") "); } public String getTextureName(final Bitmap texture, final String nullText) { if (texture != null) { - return texture.getName() + " layer (mode " + filterMode + ") "; + return texture.getName() + LocalizationManager.getInstance().get("string.layer_gettexturename_layer") + filterMode + ") "; } return nullText; } @@ -897,7 +898,7 @@ public AnimFlag getFlag(final String what) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some " + what + " animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.layer_getflag_some") + what + LocalizationManager.getInstance().get("dialog.layer_getflag_retrieval") + getName() + "."); } return output; } @@ -919,7 +920,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.layer_setvisibilityflag_overwrite") + getName() + "."); } } @@ -935,7 +936,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.layer_getvisibilityflag_retrieval") + getName() + "."); } return output; } @@ -1079,12 +1080,12 @@ public void setEmissive(final double emissive) { @Override public Animatable getTexture() { - throw new UnsupportedOperationException("not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.layer_animatable")); } @Override public Animatable getAlpha() { - throw new UnsupportedOperationException("not yet implemented"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.layer_animatable")); } public Vertex getFresnelColor() { diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/LayerShader.java b/craft3data/src/com/hiveworkshop/wc3/mdl/LayerShader.java index e430a42a6..2f3b283a6 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/LayerShader.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/LayerShader.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; public enum LayerShader { SD, @@ -8,7 +9,7 @@ public enum LayerShader { public static LayerShader fromId(final int id) { if ((id < 0) || (id >= VALUES.length)) { - throw new IllegalArgumentException("Unknown LayerShader ID: " + id); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.layershader_layershader") + id); } return VALUES[id]; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Light.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Light.java index 80a87ddfc..1a766fe9c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Light.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Light.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -43,7 +44,7 @@ public Light(final LightChunk.Light light) { // System.out.println(mdlBone.getName() + ": " + // Integer.toBinaryString(bone.node.flags)); if ((light.node.flags & 512) != 512) { - System.err.println("MDX -> MDL error: A light '" + light.node.name + "' not flagged as light in MDX!"); + System.err.println(LocalizationManager.getInstance().get("println.light_light_error") + light.node.name + LocalizationManager.getInstance().get("println.light_light_not_flagged")); } // ----- Convert Base NODE to "IDOBJECT" ----- loadFrom(light.node); @@ -192,7 +193,7 @@ else if (line.contains("Color")) { } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Light: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.light_read_parse_light")); } return null; } @@ -206,10 +207,10 @@ public void printTo(final PrintWriter writer, final int version) { final ArrayList pAnimFlags = new ArrayList<>(this.animFlags); writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.light_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.light_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } // for( int i = 0; i < flags.size(); i++ ) // { @@ -222,9 +223,9 @@ public void printTo(final PrintWriter writer, final int version) { } // AttenuationStart - String currentFlag = "AttenuationStart"; + String currentFlag = LocalizationManager.getInstance().get("string.light_printto_attenuationstart"); if (AttenuationStart != -1) { - writer.println("\tstatic " + currentFlag + " " + AttenuationStart + ","); + writer.println(LocalizationManager.getInstance().get("println.light_printto_static") + currentFlag + " " + AttenuationStart + ","); } else { boolean set = false; @@ -236,9 +237,9 @@ public void printTo(final PrintWriter writer, final int version) { } } } - currentFlag = "AttenuationEnd"; + currentFlag = LocalizationManager.getInstance().get("string.light_printto_attenuationend"); if (AttenuationEnd != -1) { - writer.println("\tstatic " + currentFlag + " " + AttenuationEnd + ","); + writer.println(LocalizationManager.getInstance().get("println.light_printto_static") + currentFlag + " " + AttenuationEnd + ","); } else { boolean set = false; @@ -250,9 +251,9 @@ public void printTo(final PrintWriter writer, final int version) { } } } - currentFlag = "Intensity"; + currentFlag = LocalizationManager.getInstance().get("string.light_printto_intensity"); if (Intensity != -1) { - writer.println("\tstatic " + currentFlag + " " + Intensity + ","); + writer.println(LocalizationManager.getInstance().get("println.light_printto_static") + currentFlag + " " + Intensity + ","); } else { boolean set = false; @@ -264,9 +265,9 @@ public void printTo(final PrintWriter writer, final int version) { } } } - currentFlag = "Color"; + currentFlag = LocalizationManager.getInstance().get("string.light_printto_color"); if (staticColor != null) { - writer.println("\tstatic " + currentFlag + " " + staticColor.toString() + ","); + writer.println(LocalizationManager.getInstance().get("println.light_printto_static") + currentFlag + " " + staticColor.toString() + ","); } else { boolean set = false; @@ -278,9 +279,9 @@ public void printTo(final PrintWriter writer, final int version) { } } } - currentFlag = "AmbIntensity"; + currentFlag = LocalizationManager.getInstance().get("string.light_printto_ambintensity"); if (AmbIntensity != -1) { - writer.println("\tstatic " + currentFlag + " " + AmbIntensity + ","); + writer.println(LocalizationManager.getInstance().get("println.light_printto_static") + currentFlag + " " + AmbIntensity + ","); } else { boolean set = false; @@ -293,9 +294,9 @@ public void printTo(final PrintWriter writer, final int version) { } } if (ModelUtils.isLightShadowIntensitySupported(version)) { - currentFlag = "ShadowIntensity"; + currentFlag = LocalizationManager.getInstance().get("string.light_printto_shadowintensity"); if (ShadowIntensity != -1) { - writer.println("\tstatic " + currentFlag + " " + ShadowIntensity + ","); + writer.println(LocalizationManager.getInstance().get("println.light_printto_static") + currentFlag + " " + ShadowIntensity + ","); } else { // TODO: Does shadow intensity have animations? Most likely does @@ -309,9 +310,9 @@ public void printTo(final PrintWriter writer, final int version) { } } } - currentFlag = "AmbColor"; + currentFlag = LocalizationManager.getInstance().get("string.light_printto_ambcolor"); if (staticAmbColor != null) { - writer.println("\tstatic " + currentFlag + " " + staticAmbColor.toString() + ","); + writer.println(LocalizationManager.getInstance().get("println.light_printto_static") + currentFlag + " " + staticAmbColor.toString() + ","); } else { boolean set = false; @@ -348,7 +349,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.light_setvisibilityflag_overwrite") + getName() + "."); } } @@ -364,7 +365,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.light_getvisibilityflag_retrieval") + getName() + "."); } return output; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/MDLFilter.java b/craft3data/src/com/hiveworkshop/wc3/mdl/MDLFilter.java index e8060b453..76f223db5 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/MDLFilter.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/MDLFilter.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.util.Locale; @@ -30,6 +31,6 @@ public boolean accept(final File f) { @Override public String getDescription() { - return "Warcraft III Model Files \"-.mdl\""; + return LocalizationManager.getInstance().get("exception.mdlfilter_mdlfilter_files") + " \"-.mdl\""; } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/MDLReader.java b/craft3data/src/com/hiveworkshop/wc3/mdl/MDLReader.java index f8dc3724e..f8d155aad 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/MDLReader.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/MDLReader.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Component; import java.io.BufferedReader; @@ -47,7 +48,7 @@ public static int readInt(final String line) { // } // catch (NumberFormatException exce) // { -// JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),"Error while parsing: Could not interpret integer from: "+line); +// JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),LocalizationManager.getInstance().get("dialog.mdlreader_readint_parsing")+line); // } // } if (line.contains(".")) { @@ -75,7 +76,7 @@ public static int readBeforeColon(final String line) { // } // catch (NumberFormatException e) // { -// JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),"Error while parsing: Could not interpret integer from: "+line); +// JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),LocalizationManager.getInstance().get("dialog.mdlreader_readbeforecolon_parsing")+line); // } // return -99999;//give them the feeling that there was a mistake return splitToInts(line)[0]; @@ -89,7 +90,7 @@ public static double readDouble(final String line) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error while parsing: Could not interpret double from: " + line); + LocalizationManager.getInstance().get("dialog.mdlreader_readdouble_parsing") + line); } return out; } @@ -163,15 +164,15 @@ public static void rmain(final String[] args) { " InTan { 0.00423933, 0.112796, 0.0302428, 0.993149 },", " OutTan { 0.00423933, 0.112796, 0.0302428, 0.993149 },", " }", " john", " aup", " jones" }; - final Vertex vez = Vertex.parseText(" MaximumExtent { -3.40282e+038, -3.40282e+038, -3.40282e+038 },"); - final Matrix mrx = Matrix.parseText(" Matrices { 2 },"); + final Vertex vez = Vertex.parseText(" " + LocalizationManager.getInstance().get("println.mdlreader_rmain_maximum_extent") + " { -3.40282e+038, -3.40282e+038, -3.40282e+038 },"); + final Matrix mrx = Matrix.parseText(" " + LocalizationManager.getInstance().get("println.mdlreader_rmain_matrices") + " { 2 },"); System.out.println(vez.getX() + "," + vez.getY() + "," + vez.getZ());// mrx.size()+":"+mrx.getBoneId(0));//+","+mrx.getBoneId(1)+","+mrx.getBoneId(2)+","+mrx.getBoneId(3)+","+mrx.getBoneId(4));// final String[] eatTest = breakElement(test, 1); System.out.println(readIntTitle(test[1])); for (int i = 0; i < eatTest.length; i++) { System.out.println(eatTest[i]); } - System.out.println((occurrencesIn("yo", "yo mana so low yo dun know it you dog you"))); + System.out.println((occurrencesIn("yo", LocalizationManager.getInstance().get("println.mdlreader_rmain_dog")))); System.out.println((new Double(5.3)).toString()); final ArrayList testList = new ArrayList(); testList.add(new Helper(5)); @@ -180,8 +181,8 @@ public static void rmain(final String[] args) { System.out.println(Bone.class.isAssignableFrom((testList.get(1).getClass()))); final String name[] = String.class.getName().split("\\."); - System.out.println("The name of a String is: " + name[name.length - 1]); - System.out.println("It is: " + (new Date(System.currentTimeMillis())).toString()); + System.out.println(LocalizationManager.getInstance().get("println.mdlreader_rmain_name") + name[name.length - 1]); + System.out.println(LocalizationManager.getInstance().get("println.mdlreader_rmain_it") + (new Date(System.currentTimeMillis())).toString()); } public static String getClassName(final Class what) { @@ -197,10 +198,10 @@ public static String nextLineSpecial(final BufferedReader reader) { // System.out.println(output); } catch (final IOException e) { - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "Error reading file."); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("println.mdlreader_nextlinespecial_error")); } if (output == null) { - output = "COMPLETED PARSING"; + output = LocalizationManager.getInstance().get("string.mdlreader_nextlinespecial_parsing"); } return output; } @@ -212,10 +213,10 @@ public static String nextLine(final BufferedReader reader) { output = reader.readLine(); } catch (final IOException e) { - JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), "Error reading file."); + JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), LocalizationManager.getInstance().get("println.mdlreader_nextline_error")); } if (output == null) { - output = "COMPLETED PARSING"; + output = LocalizationManager.getInstance().get("string.mdlreader_nextline_parsing"); } else { output = output.replace(" ", "\t"); @@ -227,7 +228,7 @@ public static String nextLine(final BufferedReader reader) { } public static void reset(final BufferedReader reader) { - // System.out.println("Line reset from line "+c+" back to line "+markc); + // System.out.println(LocalizationManager.getInstance().get("println.mdlreader_reset_reset")+c+LocalizationManager.getInstance().get("println.mdlreader_reset_back")+markc); if ((c == (markc + 1)) && (markc == lastMark)) { lastMark = markc; followMarks++; @@ -237,16 +238,16 @@ public static void reset(final BufferedReader reader) { } // if (followMarks > 30) { // throw new RuntimeException( -// "Program detected infinite loop in file reading sequence. Probably bad model, or error in interpreter!"); +// LocalizationManager.getInstance().get("exception.mdlreader_reset_infinite_loop")); // } try { reader.reset(); } catch (final IOException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Critical error in IO: Maybe length between line " + markc + " and line " + c - + " got longer than expected?\nPortions of model data will be lost."); - System.out.println("Line reset error: " + e); + LocalizationManager.getInstance().get("dialog.mdlreader_reset_io") + markc + LocalizationManager.getInstance().get("dialog.mdlreader_reset_line") + c + + LocalizationManager.getInstance().get("dialog.mdlreader_reset_expected")); + System.out.println(LocalizationManager.getInstance().get("println.mdlreader_reset_error") + e); } c = markc; } @@ -259,11 +260,11 @@ public static void mark(final BufferedReader reader, final int m) { } catch (final IOException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Critical error: Read/write abilities lost. Loading will possibly be severely damaged and disfunctional."); - System.out.println("Mark error: " + e); + LocalizationManager.getInstance().get("dialog.mdlreader_mark_read_write")); + System.out.println(LocalizationManager.getInstance().get("println.mdlreader_mark_mark") + e); // System.out.println(e); -// System.out.println("did not mark "+nextLine(reader)); -// JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),"Critical error: Read/write abilities lost. Loading will be severely damaged and disfunctional."); +// System.out.println(LocalizationManager.getInstance().get("println.mdlreader_not_mark")+nextLine(reader)); +// JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),LocalizationManager.getInstance().get("dialog.mdlreader_mark_read_write_will")); } // lastMark = markc; @@ -481,7 +482,7 @@ else if (!wasInt) { public static String doubleToString(final double n) { String base = ((float) n + "").toLowerCase(); if (base.equals("nan")) { - JOptionPane.showMessageDialog(null, "Major problems with numeric data."); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.mdlreader_doubletostring_numeric")); new Exception().printStackTrace(); base = "0"; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Material.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Material.java index 4a4fed860..300bca138 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Material.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Material.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Graphics; import java.awt.Image; @@ -64,28 +65,28 @@ public String getName() { if (layer1DiffuseTexture != null) { name = layer1DiffuseTexture.getName(); if (layers.get(layers.size() - 1).getFlag("Alpha") != null) { - name = name + " (animated Alpha)"; + name = name + LocalizationManager.getInstance().get("string.material_getname_animated"); } } else { - name = "animated texture layers"; + name = LocalizationManager.getInstance().get("string.material_getname_texture"); } for (int i = layers.size() - 2; i >= 0; i--) { try { - name = name + " over " + name = name + LocalizationManager.getInstance().get("string.material_getname_over") + layers.get(i).getShaderTextures().get(ShaderTextureTypeHD.Diffuse).getName(); if (layers.get(i).getFlag("Alpha") != null) { - name = name + " (animated Alpha)"; + name = name + LocalizationManager.getInstance().get("string.material_getname_animated"); } } catch (final NullPointerException e) { - name = name + " over " + "animated texture layers (" + layers.get(i).textures.get(0).getName() + name = name + LocalizationManager.getInstance().get("string.material_getname_over") + LocalizationManager.getInstance().get("string.material_getname_texture") + " (" + layers.get(i).textures.get(0).getName() + ")"; } } } else { - name = "(Material with no layers)"; + name = LocalizationManager.getInstance().get("string.material_getname_material"); } return name; } @@ -171,7 +172,7 @@ public Material(final MaterialChunk.Material mat, final EditableModel mdlObject) } for (final Layer layer : layers) { if (layer.getLayerShader() == null) { - throw new IllegalStateException("Null layer shader"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.material_material_null")); } } setPriorityPlane(mat.priorityPlane); @@ -336,7 +337,7 @@ else if (line.contains("Shader")) { } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse Material: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.material_read_parse_material")); } return null; } @@ -356,8 +357,8 @@ public static ArrayList readAll(final BufferedReader mdl, final Editab } else { MDLReader.reset(mdl); - // JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(),"Unable - // to parse Materials: Missing or unrecognized open statement."); + // JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), + // LocalizationManager.getInstance().get("dialog.material_read_parse_material")); } return outputs; } @@ -367,7 +368,7 @@ public void printTo(final PrintWriter writer, final int tabHeight, final int ver for (int i = 0; i < tabHeight; i++) { tabs = tabs + "\t"; } - writer.println(tabs + "Material {"); + writer.println(tabs + LocalizationManager.getInstance().get("println.material_printto_material") + " {"); if (ModelUtils.isShaderStringSupported(version)) { String shaderString; if ((layers.size() > 0) && (layers.get(0).getLayerShader() == LayerShader.HD)) { @@ -376,10 +377,10 @@ public void printTo(final PrintWriter writer, final int tabHeight, final int ver else { shaderString = ""; } - writer.println(tabs + "\tShader \"" + shaderString + "\","); + writer.println(tabs + LocalizationManager.getInstance().get("println.material_printto_Shader") + shaderString + "\","); } if (priorityPlane != 0) { - writer.println(tabs + "\tPriorityPlane " + priorityPlane + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.material_printto_priorityplane") + priorityPlane + ","); } for (int i = 0; i < flags.size(); i++) { writer.println(tabs + "\t" + flags.get(i) + ","); @@ -475,25 +476,25 @@ class BakingCell { getRenderableTexturePath(zeroLayer.getShaderTextures().get(ShaderTextureTypeHD.Reflections))); final int diffuseTextureDataWidth = diffuseTextureData.getWidth(); final int diffuseTextureDataHeight = diffuseTextureData.getHeight(); - System.out.println("Diffuse: " + diffuseTextureDataWidth + " x " + diffuseTextureDataHeight); + System.out.println(LocalizationManager.getInstance().get("println.material_getbakedhdnonemissivebufferedimage_diffuse") + diffuseTextureDataWidth + " x " + diffuseTextureDataHeight); final int normalTextureDataWidth = normalTextureData.getWidth(); final int normalTextureDataHeight = normalTextureData.getHeight(); - System.out.println("Normal: " + normalTextureDataWidth + " x " + normalTextureDataHeight); + System.out.println(LocalizationManager.getInstance().get("println.material_getbakedhdnonemissivebufferedimage_normal") + normalTextureDataWidth + " x " + normalTextureDataHeight); final int ormTextureDataWidth = ormTextureData.getWidth(); final int ormTextureDataHeight = ormTextureData.getHeight(); - System.out.println("Orm: " + ormTextureDataWidth + " x " + ormTextureDataHeight); + System.out.println(LocalizationManager.getInstance().get("println.material_getbakedhdnonemissivebufferedimage_orm") + ormTextureDataWidth + " x " + ormTextureDataHeight); System.out.println( - "Reflections: " + reflectionsTextureData.getWidth() + " x " + reflectionsTextureData.getHeight()); + LocalizationManager.getInstance().get("println.material_getbakedhdnonemissivebufferedimage_reflections") + reflectionsTextureData.getWidth() + " x " + reflectionsTextureData.getHeight()); // if (diffuseTextureDataWidth != normalTextureDataWidth || normalTextureDataWidth != ormTextureDataWidth) { // new IllegalStateException( -// "Baking failed because of differing texture widths; maybe we should update the algorithm?") +// LocalizationManager.getInstance().get("exception.material_getbakedhdnonemissivebufferedimage_texture_widths")) // .printStackTrace(); // return null; // } // if (diffuseTextureDataHeight != normalTextureDataHeight // || normalTextureDataHeight != ormTextureDataHeight) { // new IllegalStateException( -// "Baking failed because of differing texture heights; maybe we should update the algorithm?") +// LocalizationManager.getInstance().get("exception.material_getbakedhdnonemissivebufferedimage_texture_heights")) // .printStackTrace(); // return null; // } @@ -776,8 +777,8 @@ public VertexData(final Vector3f tangentLightPos, final Vector3f tangentViewPos, bakedImg.setRGB(j, i, bakingCell.outputARGB); } } - System.out.println("baked texture with " + nShadedPixels + " pixels loading shader data and " - + nDiffusePixels + " pixels defaulting back to diffuse data"); + System.out.println(LocalizationManager.getInstance().get("println.material_getbakedhdnonemissivebufferedimage_bake_texture") + nShadedPixels + LocalizationManager.getInstance().get("println.material_getbakedhdnonemissivebufferedimage_pixels") + + nDiffusePixels + LocalizationManager.getInstance().get("println.material_getbakedhdnonemissivebufferedimage_defaulting")); try { final String diffusePath = zeroLayer.firstTexture().getPath(); @@ -796,7 +797,7 @@ public VertexData(final Vector3f tangentLightPos, final Vector3f tangentViewPos, } else { - throw new RuntimeException("Failed to begin baking HD -> SD texture, did not find 6 layers!"); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.material_getbakedhdnonemissivebufferedimage_baking_texture")); } } @@ -897,7 +898,7 @@ public static BufferedImage mergeImageScaled(final Image source, final Image ove // catch (Exception exc2) // { // exc2.printStackTrace(); - // JOptionPane.showMessageDialog(null, "BLP texture-loader failed."); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.material_bufferediimage_blp")); // } // } // } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Matrix.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Matrix.java index a8acaa38f..43cc690d7 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Matrix.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Matrix.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.PrintWriter; import java.util.ArrayList; @@ -43,7 +44,7 @@ public String getName() { } } else { - out = "Error bad bone list"; + out = LocalizationManager.getInstance().get("string.matrix_getname_list"); } } else if (m_boneIds != null) { @@ -54,7 +55,7 @@ else if (m_boneIds != null) { } } else { - out = "Error bad bone ids"; + out = LocalizationManager.getInstance().get("string.matrix_getname_ids"); } } return out; @@ -76,19 +77,19 @@ public void updateIds(final EditableModel mdlr) { m_boneIds.add(newId); } else { - new Exception("Matrix error").printStackTrace(); + new Exception("exception.matrix_updateids_matrix").printStackTrace(); if ((System.currentTimeMillis() - lastPopupTimeHack) > 2000) { JOptionPane.showMessageDialog(null, - "Error: A matrix's bone reference was missing in the model!\nDid you move geometry between models and forget to update bones?"); + LocalizationManager.getInstance().get("dialog.matrix_updateids_model")); lastPopupTimeHack = System.currentTimeMillis(); } } } if ((m_boneIds.size() < sz1) || ((sz1 != 0) && (m_boneIds.size() == 0))) { - new Exception("Matrix error").printStackTrace(); + new Exception("exception.matrix_updateids_matrix").printStackTrace(); if ((System.currentTimeMillis() - lastPopupTimeHack) > 2000) { - JOptionPane.showMessageDialog(null, "Error: bad sizes in matrix (" + (sz1 - m_boneIds.size()) - + " as difference, should be same size)"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.matrix_updateids_bad_sizes") + (sz1 - m_boneIds.size()) + + LocalizationManager.getInstance().get("dialog.matrix_updateids_same_size")); lastPopupTimeHack = System.currentTimeMillis(); } } @@ -105,16 +106,15 @@ public void updateBones(final EditableModel mdlr) { final Bone b = mdlr.getBone((Integer) m_boneIds.get(i)); // if( b.getClass() == Helper.class ) // { - // JOptionPane.showMessageDialog(null,"Error: Holy fo shizzle my - // grizzle! There's geometry attached to Helper "+b.getName()+" and - // that is very bad!"); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.matrix_updatebones_attached")+b.getName()+ + // LocalizationManager.getInstance().get("dialog.matrix_updatebones_bad")); // } if (b != null) { bones.add(b); } else { -// JOptionPane.showMessageDialog(null, "Error: A matrix's bone id was not referencing a real bone!"); - System.err.println("Error: A matrix's bone id was not referencing a real bone! " + m_boneIds.get(i)); +// JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.matrix_updatebones_referencing")); + System.err.println(LocalizationManager.getInstance().get("dialog.matrix_updatebones_referencing") + m_boneIds.get(i)); } } } @@ -161,9 +161,8 @@ public int size() { else if ((bones != null) && (bones.size() > 0)) { return bones.size(); } - // JOptionPane.showMessageDialog(null,"Warning: A matrix with no - // contents was used!"); - // System.out.println("Warning: A matrix with no contents was used!"); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.matrix_size_warning")); + // System.out.println(LocalizationManager.getInstance().get("dialog.matrix_size_warning")); return -1;// bad stuff } @@ -180,7 +179,7 @@ public static Matrix parseText(final String input) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error \"" + input + "\": Matrix data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " \"" + input + "\": " + LocalizationManager.getInstance().get("dialog.matrix_parsetext_interpreted")); } } else { @@ -189,7 +188,7 @@ public static Matrix parseText(final String input) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error \"" + input + "\": Matrix data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " \"" + input + "\": " + LocalizationManager.getInstance().get("dialog.matrix_parsetext_interpreted")); } for (int i = 1; i < size; i++) { try { @@ -197,7 +196,7 @@ public static Matrix parseText(final String input) { } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error \"" + input + "\": Matrix data could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " \"" + input + "\": " + LocalizationManager.getInstance().get("dialog.matrix_parsetext_interpreted")); } } } @@ -216,12 +215,12 @@ public void printTo(final PrintWriter writer, final int tabHeight) { tabs = tabs + "\t"; } if (m_boneIds.size() > 0) { - writer.print(tabs + "Matrices { " + m_boneIds.get(0).toString()); + writer.print(tabs + LocalizationManager.getInstance().get("println.matrix_printto_matrices") + " { " + m_boneIds.get(0).toString()); } else { - writer.print(tabs + "Matrices { -1"); + writer.print(tabs + LocalizationManager.getInstance().get("println.matrix_printto_matrices") + " { -1"); } - // writer.print(tabs+"Matrices { "+bones.get(0).getClass().getName()); + // writer.print(tabs+LocalizationManager.getInstance().get("println.matrix_printto_matrices") + " { "+bones.get(0).getClass().getName()); for (int i = 1; i < bones.size(); i++) { writer.print(", " + m_boneIds.get(i)); // writer.print(", "+bones.get(i).getClass().getName()); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Normal.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Normal.java index 28ff25301..3f7e64225 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Normal.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Normal.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import javax.swing.JOptionPane; @@ -21,19 +22,19 @@ public static Normal parseText(final String input) { x = Double.parseDouble(entries[0].split("\\{")[1]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") +" {" + input + "}: " + LocalizationManager.getInstance().get("dialog.normal_parsetext_coordinates")); } try { y = Double.parseDouble(entries[1]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.normal_parsetext_coordinates")); } try { z = Double.parseDouble(entries[2].split("}")[0]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.normal_parsetext_coordinates")); } temp = new Normal(x, y, z); return temp; diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter.java b/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter.java index 340c868af..9608b955f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -73,8 +74,8 @@ public ParticleEmitter(final ParticleEmitterChunk.ParticleEmitter emitter) { this(emitter.node.name); // debug print: if ((emitter.node.flags & 4096) != 4096) { - System.err.println("MDX -> MDL error: A particle emitter '" + emitter.node.name - + "' not flagged as particle emitter in MDX!"); + System.err.println(LocalizationManager.getInstance().get("println.particleemitter_particleemitter_particle_emitter") + emitter.node.name + + LocalizationManager.getInstance().get("println.particleemitter_particleemitter_not_flagged")); } // System.out.println(emitter.node.name + ": " + // Integer.toBinaryString(emitter.node.flags)); @@ -83,7 +84,7 @@ public ParticleEmitter(final ParticleEmitterChunk.ParticleEmitter emitter) { // ----- End Base NODE to "IDOBJECT" ----- if (emitter.unknownNull != 0) { - System.err.println("Surprise! This model has a special emitter data point worthy of documenting! " + name); + System.err.println(LocalizationManager.getInstance().get("println.particleemitter_particleemitter_special_emitter") + name); } // System.out.println(attachment.node.name + ": " + // Integer.toBinaryString(attachment.unknownNull)); @@ -124,7 +125,7 @@ public ParticleEmitter(final ParticleEmitterChunk.ParticleEmitter emitter) { setMDLEmitter(((emitter.node.flags >> 15) & 1) == 1); if (!isMDLEmitter() && (((emitter.node.flags >> 8) & 1) == 1)) { System.err.println( - "WARNING in MDX -> MDL: ParticleEmitter of unknown type! Defaults to EmitterUsesTGA in my MDL code!"); + LocalizationManager.getInstance().get("println.particleemitter_particleemitter_unknown_type")); } setPath(emitter.spawnModelFileName); // if( emitter. != null ) { @@ -210,7 +211,7 @@ public static ParticleEmitter read(final BufferedReader mdl) { return pe; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse ParticleEmitter: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.particleemitter_read_parse")); } return null; } @@ -224,21 +225,21 @@ public void printTo(final PrintWriter writer, final int version) { final ArrayList pAnimFlags = new ArrayList<>(this.animFlags); writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitter_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.particleemitter_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } if (MDLEmitter) { - writer.println("\tEmitterUsesMDL,"); + writer.println(LocalizationManager.getInstance().get("println.particleemitter_printto_emitterusesmdl")); } else { - writer.println("\tEmitterUsesTGA,"); + writer.println(LocalizationManager.getInstance().get("println.particleemitter_printto_emitterusestga")); } String currentFlag = ""; for (int i = 0; i < 4; i++) { currentFlag = timeDoubleNames[i]; if (timeDoubleData[i] != 0) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitter_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } else { boolean set = false; for (int a = 0; (a < pAnimFlags.size()) && !set; a++) { @@ -249,7 +250,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!set) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitter_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } } } @@ -260,11 +261,11 @@ public void printTo(final PrintWriter writer, final int version) { pAnimFlags.remove(i); } } - writer.println("\tParticle {"); + writer.println(LocalizationManager.getInstance().get("println.particleemitter_printto_particle") + " {"); for (int i = 4; i < 6; i++) { currentFlag = timeDoubleNames[i]; if (timeDoubleData[i] != 0) { - writer.println("\t\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println("\t" + LocalizationManager.getInstance().get("println.particleemitter_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } else { boolean set = false; for (int a = 0; (a < pAnimFlags.size()) && !set; a++) { @@ -276,12 +277,12 @@ public void printTo(final PrintWriter writer, final int version) { } if (!set) { writer.println( - "\t\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + "\t" + LocalizationManager.getInstance().get("println.particleemitter_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } } } if (path != null) { - writer.println("\t\tPath \"" + path + "\","); + writer.println("\t" + LocalizationManager.getInstance().get("println.particleemitter_printto_path") + " \"" + path + "\","); } writer.println("\t}"); @@ -327,7 +328,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("println.particleemitter_setvisibilityflag_overwrite") + getName() + "."); } } @@ -343,7 +344,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("println.particleemitter_getvisibilityflag_retrieval") + getName() + "."); } return output; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter2.java b/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter2.java index d8c59ae8c..9405bdf93 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter2.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter2.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -148,8 +149,8 @@ public ParticleEmitter2(final ParticleEmitter2Chunk.ParticleEmitter2 emitter) { final ParticleEmitter2 mdlEmitter = this; // debug print: if ((emitter.node.flags & 4096) != 4096) { - System.err.println("MDX -> MDL error: A particle emitter '" + emitter.node.name - + "' not flagged as particle emitter in MDX!"); + System.err.println(LocalizationManager.getInstance().get("println.particleemitter2_particleemitter2_particle_emitter") + emitter.node.name + + LocalizationManager.getInstance().get("println.particleemitter_particleemitter2_not_flagged")); } // System.out.println(emitter.node.name + ": " + // Integer.toBinaryString(emitter.node.flags)); @@ -240,7 +241,7 @@ public ParticleEmitter2(final ParticleEmitter2Chunk.ParticleEmitter2 emitter) { add("AlphaKey"); break; default: - System.err.println("Unkown filter mode error"); + System.err.println(LocalizationManager.getInstance().get("println.particleemitter2_particleemitter2_filter")); add("UnknownFilterMode"); break; } @@ -257,7 +258,7 @@ public ParticleEmitter2(final ParticleEmitter2Chunk.ParticleEmitter2 emitter) { add("Both"); break; default: - System.err.println("Unkown head or tail error"); + System.err.println(LocalizationManager.getInstance().get("println.particleemitter2_particleemitter2_head_tail")); add("UnknownHeadOrTail"); break; } @@ -338,24 +339,24 @@ public static ParticleEmitter2 read(final BufferedReader mdl) { && !line.equals("COMPLETED PARSING")) { boolean foundType = false; if (line.contains("ObjectId")) { - // JOptionPane.showMessageDialog(null,"Read an object id!"); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.particleemitter2_read_read")); pe.objectId = MDLReader.readInt(line); foundType = true; - // JOptionPane.showMessageDialog(null,"ObjectId from line: - // "+line); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.particleemitter2_read_objectid_from") + // +line); } else if (line.contains("Parent")) { pe.parentId = MDLReader.splitToInts(line)[0]; foundType = true; - // JOptionPane.showMessageDialog(null,"Parent from line: - // "+line); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.particleemitter2_read_parent_from") + // +line); // lit.parent = mdlr.getIdObject(lit.parentId); } else if (line.contains("SegmentColor")) { boolean reading = true; foundType = true; - // JOptionPane.showMessageDialog(null,"SegmentColor from - // line: "+line); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.particleemitter2_read_segmentcolor_from") + // +line); for (int i = 0; reading && (i < 3); i++) { line = MDLReader.nextLine(mdl); if (line.contains("Color")) { @@ -373,39 +374,39 @@ else if (line.contains("SegmentColor")) { if (line.contains("\t" + vertexDataNames[i] + " ")) { foundType = true; pe.vertexData[i] = Vertex.parseText(line); - // JOptionPane.showMessageDialog(null,vertexDataNames[i]+" - // from line: "+line); + // JOptionPane.showMessageDialog(null,vertexDataNames[i]+LocalizationManager.getInstance().get("dialog.particleemitter2_read_from") + // +line); } } for (int i = 0; (i < loneDoubleNames.length) && !foundType; i++) { if (line.contains(loneDoubleNames[i])) { foundType = true; pe.loneDoubleData[i] = MDLReader.readDouble(line); - // JOptionPane.showMessageDialog(null,loneDoubleNames[i]+" - // from line: "+line); + // JOptionPane.showMessageDialog(null,loneDoubleNames[i]+LocalizationManager.getInstance().get("dialog.particleemitter2_read_from") + // +line); } } for (int i = 0; (i < loneIntNames.length) && !foundType; i++) { if (line.contains(loneIntNames[i])) { foundType = true; pe.loneIntData[i] = MDLReader.readInt(line); - // JOptionPane.showMessageDialog(null,loneIntNames[i]+" - // from line: "+line); + // JOptionPane.showMessageDialog(null,loneIntNames[i]+LocalizationManager.getInstance().get("dialog.particleemitter2_read_from") + // +line); } } for (int i = 0; (i < knownFlagNames.length) && !foundType; i++) { if (line.contains(knownFlagNames[i])) { foundType = true; pe.knownFlags[i] = true; - // JOptionPane.showMessageDialog(null,knownFlagNames[i]+" - // from line: "+line); + // JOptionPane.showMessageDialog(null,knownFlagNames[i]+LocalizationManager.getInstance().get("dialog.particleemitter2_read_from") + // +line); } } for (int i = 0; (i < timeDoubleNames.length) && !foundType; i++) { if (line.contains(timeDoubleNames[i])) { foundType = true; - // JOptionPane.showMessageDialog(null,timeDoubleNames[i]+" - // from line: "+line); + // JOptionPane.showMessageDialog(null,timeDoubleNames[i]+LocalizationManager.getInstance().get("dialog.particleemitter2_read_from") + // +line); if (line.contains("static")) { pe.timeDoubleData[i] = MDLReader.readDouble(line); } @@ -420,13 +421,12 @@ else if (line.contains("SegmentColor")) { MDLReader.reset(mdl); pe.animFlags.add(AnimFlag.read(mdl)); foundType = true; - // JOptionPane.showMessageDialog(null,"AnimFlag from line: - // "+line); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.particleemitter2_read_animflag_from") + // +line); } if (!foundType) { - // JOptionPane.showMessageDialog(null,"Particle emitter 2 - // did not recognize data at: "+line+"\nThis is probably not - // a major issue?"); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("dialog.particleemitter2_read_recognize")) + // +line+LocalizationManager.getInstance().get("dialog.particleemitter2_read_issue")); pe.unknownFlags.add(MDLReader.readFlag(line)); } MDLReader.mark(mdl); @@ -436,7 +436,7 @@ else if (line.contains("SegmentColor")) { } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse ParticleEmitter2: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.particleemitter2_read_parse")); } return null; } @@ -451,10 +451,10 @@ public void printTo(final PrintWriter writer, final int version) { final ArrayList pAnimFlags = new ArrayList<>(animFlags); writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitter2_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.particleemitter2_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } for (int i = 0; i < 9; i++) { if (knownFlags[i]) { @@ -465,7 +465,7 @@ public void printTo(final PrintWriter writer, final int version) { for (int i = 0; i < 4; i++) { currentFlag = timeDoubleNames[i]; if (timeDoubleData[i] != 0) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitter2_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } else { boolean set = false; @@ -477,7 +477,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!set) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitter2_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } } } @@ -499,7 +499,7 @@ public void printTo(final PrintWriter writer, final int version) { for (int i = 4; i < 7; i++) { currentFlag = timeDoubleNames[i]; if (timeDoubleData[i] != 0) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitter2_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } else { boolean set = false; @@ -511,7 +511,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!set) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitter2_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } } } @@ -531,9 +531,9 @@ public void printTo(final PrintWriter writer, final int version) { for (int i = 1; i < 3; i++) { writer.println("\t" + loneDoubleNames[i] + " " + MDLReader.doubleToString(loneDoubleData[i]) + ","); } - writer.println("\tSegmentColor {"); + writer.println(LocalizationManager.getInstance().get("println.particleemitter2_printto_segmentcolor") + " {"); for (int i = 0; i < segmentColor.length; i++) { - writer.println("\t\tColor " + segmentColor[i].toString() + ","); + writer.println("\t" + LocalizationManager.getInstance().get("println.particleemitter2_printto_color") + segmentColor[i].toString() + ","); } writer.println("\t},"); for (int i = 0; i < vertexData.length; i++) { @@ -589,7 +589,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("println.particleemitter2_setvisibilityflag_overwrite") + getName() + "."); } } @@ -605,7 +605,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("println.particleemitter2_getvisibilityflag_retrieval") + getName() + "."); } return output; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitterPopcorn.java b/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitterPopcorn.java index bbbdb0c71..f60889218 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitterPopcorn.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitterPopcorn.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -220,7 +221,7 @@ else if (line.contains("Color")) { { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse ParticleEmitterPopcorn: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.particleemitterpopcorn_read_parse")); } return null; } @@ -234,10 +235,10 @@ public void printTo(final PrintWriter writer, final int version) { final ArrayList pAnimFlags = new ArrayList<>(this.animFlags); writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } for (final String s : flags) { writer.println("\t" + s + ","); @@ -254,7 +255,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!foundFlag) { - writer.println("\tstatic LifeSpan " + MDLReader.doubleToString(lifeSpan) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_static_lifespan") + MDLReader.doubleToString(lifeSpan) + ","); } currentFlag = "EmissionRate"; foundFlag = false; @@ -266,7 +267,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!foundFlag) { - writer.println("\tstatic EmissionRate " + MDLReader.doubleToString(emissionRate) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_static_emissionrate") + MDLReader.doubleToString(emissionRate) + ","); } currentFlag = "Speed"; foundFlag = false; @@ -278,7 +279,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!foundFlag) { - writer.println("\tstatic Speed " + MDLReader.doubleToString(speed) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_static_speed") + MDLReader.doubleToString(speed) + ","); } currentFlag = "Color"; foundFlag = false; @@ -290,7 +291,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!foundFlag && (color != null)) { - writer.println("\tstatic Color " + color.toString() + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_static_color") + color.toString() + ","); } currentFlag = "Visibility"; foundFlag = false; @@ -311,16 +312,16 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!foundFlag) { - writer.println("\tstatic Alpha " + MDLReader.doubleToString(alpha) + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_static_alpha") + MDLReader.doubleToString(alpha) + ","); } if (replaceableId != 0) { - writer.println("\tReplaceableId " + replaceableId + ","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_replaceableid") + replaceableId + ","); } if (path != null) { - writer.println("\tPath \"" + path + "\","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_path") + " \"" + path + "\","); } if (animVisibilityGuide != null) { - writer.println("\tAnimVisibilityGuide \"" + animVisibilityGuide + "\","); + writer.println(LocalizationManager.getInstance().get("println.particleemitterpopcorn_printto_animvisibilityguide") + " \"" + animVisibilityGuide + "\","); } for (int i = pAnimFlags.size() - 1; i >= 0; i--) { @@ -362,7 +363,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("println.particleemitterpopcorn_setvisibilityflag_overwrite") + getName() + "."); } } @@ -378,7 +379,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("println.particleemitterpopcorn_getvisibilityflag_retrieval") + getName() + "."); } return output; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/QuaternionRotation.java b/craft3data/src/com/hiveworkshop/wc3/mdl/QuaternionRotation.java index 22818471b..df80944c8 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/QuaternionRotation.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/QuaternionRotation.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import javax.swing.JOptionPane; @@ -248,25 +249,25 @@ public static QuaternionRotation parseText(final String input) { a = Double.parseDouble(str[1]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: QuaternionRotation coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}" + LocalizationManager.getInstance().get("dialog.quaternionrotation_quaternionrotation_interpreted")); } try { b = Double.parseDouble(entries[1]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: QuaternionRotation coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.quaternionrotation_quaternionrotation_interpreted")); } try { c = Double.parseDouble(entries[2]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: QuaternionRotation coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.quaternionrotation_quaternionrotation_interpreted")); } try { d = Double.parseDouble(entries[3].split("}")[0]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: QuaternionRotation coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.quaternionrotation_quaternionrotation_interpreted")); } temp = new QuaternionRotation(a, b, c, d); return temp; @@ -428,7 +429,7 @@ public static void main(final String[] args) { System.out.println( new QuaternionRotation(4.329780281177466E-017, 0.707107, 4.329780281177466E-017, 0.707107).toEuler()); - System.out.println("Time for a spin!"); + System.out.println(LocalizationManager.getInstance().get("println.quaternionrotation_main_time")); System.out.println(new QuaternionRotation(0.7071203316249954, 0.0, 0.7071203316249954, 0.0) .applyToVertex(new Vertex(0, 0, 0), new Vertex(1, 0, 0))); } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/RibbonEmitter.java b/craft3data/src/com/hiveworkshop/wc3/mdl/RibbonEmitter.java index 62289cbc9..380c13d80 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/RibbonEmitter.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/RibbonEmitter.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -66,8 +67,8 @@ public RibbonEmitter(final String name) { public RibbonEmitter(final RibbonEmitterChunk.RibbonEmitter emitter) { // debug print: if ((emitter.node.flags & 16384) != 16384) { - System.err.println("MDX -> MDL error: A ribbon emitter '" + emitter.node.name - + "' not flagged as ribbon emitter in MDX!"); + System.err.println(LocalizationManager.getInstance().get("println.ribbonemitter_ribbonemitter_error") + emitter.node.name + + LocalizationManager.getInstance().get("println.ribbonemitter_ribbonemitter_not_flagged")); } // System.out.println(emitter.node.name + ": " + // Integer.toBinaryString(emitter.node.flags)); @@ -216,8 +217,8 @@ else if (line.contains("Color")) { } } if (!foundType) { - JOptionPane.showMessageDialog(null, "Ribbon emitter did not recognize data at: " + line - + "\nThis is probably not a major issue?"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.ribbonemitter_read_recognize") + line + + LocalizationManager.getInstance().get("dialog.ribbonemitter_read_major")); } MDLReader.mark(mdl); @@ -227,7 +228,7 @@ else if (line.contains("Color")) { } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse RibbonEmitter: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.ribbonemitter_read_parse")); } return null; } @@ -241,16 +242,16 @@ public void printTo(final PrintWriter writer, final int version) { final ArrayList pAnimFlags = new ArrayList<>(this.animFlags); writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("println.ribbonemitter_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.ribbonemitter_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } String currentFlag = ""; for (int i = 0; i < 3; i++) { currentFlag = timeDoubleNames[i]; if (timeDoubleData[i] != 0) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.ribbonemitter_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } else { boolean set = false; @@ -262,7 +263,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!set) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.ribbonemitter_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } } } @@ -278,12 +279,12 @@ public void printTo(final PrintWriter writer, final int version) { } } else { - writer.println("\tstatic " + currentFlag + " " + staticColor.toString() + ","); + writer.println(LocalizationManager.getInstance().get("println.ribbonemitter_printto_static") + currentFlag + " " + staticColor.toString() + ","); } for (int i = 3; i < 4; i++) { currentFlag = timeDoubleNames[i]; if (timeDoubleData[i] != 0) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.ribbonemitter_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } else { set = false; @@ -295,7 +296,7 @@ public void printTo(final PrintWriter writer, final int version) { } } if (!set) { - writer.println("\tstatic " + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); + writer.println(LocalizationManager.getInstance().get("println.ribbonemitter_printto_static") + currentFlag + " " + MDLReader.doubleToString(timeDoubleData[i]) + ","); } } } @@ -359,7 +360,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.ribbonemitter_setvisibilityflag_overwrite") + getName() + "."); } } @@ -375,7 +376,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.ribbonemitter_getvisibilityflag_retrieval") + getName() + "."); } return output; } @@ -490,7 +491,7 @@ public void add(final AnimFlag af) { @Override public void add(final String flag) { - System.err.println("ERROR: RibbonEmitter given unknown flag: " + flag); + System.err.println(LocalizationManager.getInstance().get("println.ribbonemitter_add_error") + flag); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Sequences.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Sequences.java index eeb8bc6b9..d87a8a1bd 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Sequences.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Sequences.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.util.ArrayList; @@ -30,7 +31,7 @@ public static ArrayList read(final BufferedReader mdl) { seqs.add(an); } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse sequences: Confused by anim opener line '" + line + "'."); + LocalizationManager.getInstance().get("dialog.sequences_sequences_parse") + line + "'."); } MDLReader.mark(mdl); line = MDLReader.nextLine(mdl); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/SoundEmitter.java b/craft3data/src/com/hiveworkshop/wc3/mdl/SoundEmitter.java index ade8e096d..ce6c91f3a 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/SoundEmitter.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/SoundEmitter.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -91,7 +92,7 @@ public static SoundEmitter read(final BufferedReader mdl, final EditableModel md return lit; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse SoundEmitter: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.soundemitter_read_parse")); } return null; } @@ -105,10 +106,10 @@ public void printTo(final PrintWriter writer, final int version) { final ArrayList pAnimFlags = new ArrayList<>(this.animFlags); writer.println(MDLReader.getClassName(this.getClass()) + " \"" + getName() + "\" {"); if (objectId != -1) { - writer.println("\tObjectId " + objectId + ","); + writer.println(LocalizationManager.getInstance().get("rintln.soundemitter_printto_objectid") + objectId + ","); } if (parentId != -1) { - writer.println("\tParent " + parentId + ",\t// \"" + getParent().getName() + "\""); + writer.println(LocalizationManager.getInstance().get("println.soundemitter_printto_parent") + parentId + ",\t// \"" + getParent().getName() + "\""); } for (int i = 0; i < pAnimFlags.size(); i++) { @@ -135,7 +136,7 @@ public void setVisibilityFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.soundemitter_setvisibilityflag_overwrite") + getName() + "."); } } @@ -151,7 +152,7 @@ public AnimFlag getVisibilityFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some visiblity animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.soundemitter_getvisibilityflag_retrieval") + getName() + "."); } return output; } @@ -172,7 +173,7 @@ public void setSoundTrackFlag(final AnimFlag flag) { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some SoundTrack animation data was lost unexpectedly during overwrite in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.soundemitter_setsoundtrackglag_overwrite") + getName() + "."); } } @@ -187,7 +188,7 @@ public AnimFlag getSoundTrackFlag() { } if (count > 1) { JOptionPane.showMessageDialog(null, - "Some SoundTrack animation data was lost unexpectedly during retrieval in " + getName() + "."); + LocalizationManager.getInstance().get("dialog.soundemitter_getsoundtrackglag_retrieval") + getName() + "."); } return output; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/SoundFile.java b/craft3data/src/com/hiveworkshop/wc3/mdl/SoundFile.java index 86a6249a9..7b24b2546 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/SoundFile.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/SoundFile.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -63,7 +64,7 @@ public static SoundFile read(final BufferedReader mdl, final EditableModel mdlr) return lay; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse SoundFile: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.soundfile_read_parse")); } return null; } @@ -73,11 +74,11 @@ public void printTo(final PrintWriter writer, final int tabHeight, final boolean for (int i = 0; i < tabHeight; i++) { tabs = tabs + "\t"; } - writer.println(tabs + "SoundFile {"); - writer.println(tabs + "\tPath \"" + path + "\","); - writer.println(tabs + "\tVolume " + MDLReader.doubleToString(volume) + ","); - writer.println(tabs + "\tPitch " + MDLReader.doubleToString(pitch) + ","); - writer.println(tabs + "\tSoundChannel " + soundChannel + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.soundfile_printto_soundfile") + " {"); + writer.println(tabs + LocalizationManager.getInstance().get("println.soundfile_printto_path") + " \"" + path + "\","); + writer.println(tabs + LocalizationManager.getInstance().get("println.soundfile_printto_volume") + MDLReader.doubleToString(volume) + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.soundfile_printto_pitch") + MDLReader.doubleToString(pitch) + ","); + writer.println(tabs + LocalizationManager.getInstance().get("println.soundfile_printto_soundchannel") + soundChannel + ","); writer.println(tabs + "}"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/TVertex.java b/craft3data/src/com/hiveworkshop/wc3/mdl/TVertex.java index b30ae46e4..e0784fd56 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/TVertex.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/TVertex.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.Collection; @@ -177,13 +178,13 @@ public static TVertex parseText(final String input) { x = Double.parseDouble(entries[0].split("\\{")[1]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.tvertex_parsetext_interpreted")); } try { y = Double.parseDouble(entries[1].split("}")[0]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.tvertex_parsetext_interpreted")); } temp = new TVertex(x, y); return temp; diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/TextureAnim.java b/craft3data/src/com/hiveworkshop/wc3/mdl/TextureAnim.java index 3f7a6d51c..1954c2e10 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/TextureAnim.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/TextureAnim.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.PrintWriter; @@ -66,7 +67,7 @@ public static TextureAnim read(final BufferedReader mdl) { return tan; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse TextureAnim: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.textureanim_read_parse")); } return null; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Triangle.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Triangle.java index 006017114..aeff6bc00 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Triangle.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Triangle.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.util.ArrayList; @@ -216,7 +217,7 @@ public static ArrayList parseText(final String[] input) { Integer.parseInt(s[t + 2]))); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error: Unable to interpret information in Triangles: " + s[t] + ", " + s[t + 1] + ", or " + LocalizationManager.getInstance().get("dialog.triangle_parsetext_interpret") + s[t] + ", " + s[t + 1] + ", " + LocalizationManager.getInstance().get("dialog.triangle_parsetext_or") + s[t + 2]); } } @@ -246,7 +247,7 @@ public static ArrayList read(final BufferedReader mdl) { Integer.parseInt(s[t + 2]))); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error: Unable to interpret information in Triangles: " + s[t] + ", " + s[t + 1] + ", or " + LocalizationManager.getInstance().get("dialog.triangle_read_interpret") + s[t] + ", " + s[t + 1] + ", " + LocalizationManager.getInstance().get("dialog.triangle_read_or") + s[t + 2]); } } @@ -276,7 +277,7 @@ public static ArrayList read(final BufferedReader mdl, final Geoset ge Integer.parseInt(s[t + 2]), geoRef)); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error: Unable to interpret information in Triangles: " + s[t] + ", " + s[t + 1] + ", or " + LocalizationManager.getInstance().get("dialog.triangle_read_interpret") + s[t] + ", " + s[t + 1] + ", " + LocalizationManager.getInstance().get("dialog.triangle_read_or") + s[t + 2]); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/UVLayer.java b/craft3data/src/com/hiveworkshop/wc3/mdl/UVLayer.java index 3e36214ff..409ef0c53 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/UVLayer.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/UVLayer.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.io.BufferedReader; import java.io.PrintWriter; +import hiveworkshop.localizationmanager.LocalizationManager; + /** * A layer of TVertices (UV Mapping) * @@ -50,7 +52,7 @@ public void printTo(PrintWriter writer, int tabHeight, boolean addHeader) if( addHeader ) { inTabs = inTabs + "\t"; - writer.println(tabs + "TVertices "+tverts.size() +" {"); + writer.println(tabs + LocalizationManager.getInstance().get("println.uvlayer_printto_tvertices")+tverts.size() +" {"); } for( int i = 0; i < tverts.size(); i++ ) { diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/Vertex.java b/craft3data/src/com/hiveworkshop/wc3/mdl/Vertex.java index 934b24915..577a7cb94 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/Vertex.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/Vertex.java @@ -5,6 +5,7 @@ import javax.swing.JOptionPane; import org.lwjgl.util.vector.Vector4f; +import hiveworkshop.localizationmanager.LocalizationManager; public class Vertex { public static final Vertex ORIGIN = new Vertex(0, 0, 0); @@ -146,19 +147,19 @@ public static Vertex parseText(final String input) { x = Double.parseDouble(entries[0].split("\\{")[1]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.vertex_parsetext_interpreted")); } try { y = Double.parseDouble(entries[1]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.erroror") + " {" + input + "}: " + LocalizationManager.getInstance().get("dialog.vertex_parsetext_interpreted")); } try { z = Double.parseDouble(entries[2].split("}")[0]); } catch (final NumberFormatException e) { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Error {" + input + "}: Vertex coordinates could not be interpreted."); + LocalizationManager.getInstance().get("global.dialog.error") + " {" + input + "}: " +LocalizationManager.getInstance().get("dialog.vertex_parsetext_interpreted")); } temp = new Vertex(x, y, z); return temp; diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/render3d/RenderNode.java b/craft3data/src/com/hiveworkshop/wc3/mdl/render3d/RenderNode.java index c69b0aaef..9ca49bab5 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/render3d/RenderNode.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/render3d/RenderNode.java @@ -11,6 +11,7 @@ import com.hiveworkshop.wc3.mdl.QuaternionRotation; import com.hiveworkshop.wc3.mdl.Vertex; import com.hiveworkshop.wc3.util.MathUtils; +import hiveworkshop.localizationmanager.LocalizationManager; public final class RenderNode { private final AnimatedNode idObject; @@ -180,11 +181,11 @@ public void updateChildren() { for (final AnimatedNode childNode : idObject.getChildrenNodes()) { if (model.getRenderNode(childNode) == null) { if (childNode instanceof IdObject) { - throw new NullPointerException("Cannot find child \"" + childNode.getName() + ":" - + ((IdObject) childNode).getObjectId() + "\" of \"" + idObject.getName() + "\""); + throw new NullPointerException(LocalizationManager.getInstance().get("exception.rendernode_updatechildren_not_find_child") + " \"" + childNode.getName() + ":" + + ((IdObject) childNode).getObjectId() + "\" " + LocalizationManager.getInstance().get("exception.rendernode_updatechildren_of") + " \"" + idObject.getName() + "\""); } else { throw new NullPointerException( - "Cannot find child \"" + childNode.getName() + "\" of \"" + idObject.getName() + "\""); + LocalizationManager.getInstance().get("exception.rendernode_updatechildren_not_find_child") + " \"" + childNode.getName() + "\" " + LocalizationManager.getInstance().get("exception.rendernode_updatechildren_of") + " \"" + idObject.getName() + "\""); } } model.getRenderNode(childNode).update(); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/render3d/SoftwareParticleEmitterShader.java b/craft3data/src/com/hiveworkshop/wc3/mdl/render3d/SoftwareParticleEmitterShader.java index 3b77cc4b3..4c34a0765 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/render3d/SoftwareParticleEmitterShader.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/render3d/SoftwareParticleEmitterShader.java @@ -3,6 +3,7 @@ import org.lwjgl.opengl.GL11; import com.hiveworkshop.rms.editor.render3d.NGGLDP; +import hiveworkshop.localizationmanager.LocalizationManager; public class SoftwareParticleEmitterShader implements ParticleEmitterShader { private static final byte TFF = (byte) (255); @@ -15,8 +16,8 @@ public void renderParticles(final int blendSrc, final int blendDst, final int ro GL11.glBlendFunc(blendSrc, blendDst); NGGLDP.pipeline.glBegin(GL11.GL_TRIANGLES); if ((numItemsToRender * 5) > bufferData.length) { -// throw new IllegalStateException(numItemsToRender + " alive items, " + bufferData.length + " len buffer"); - new IllegalStateException(numItemsToRender + " alive items, " + bufferData.length + " len buffer") +// throw new IllegalStateException(numItemsToRender + LocalizationManager.getInstance().get("exception.softwareparticleemittershader_renderparticles_alive") + bufferData.length + LocalizationManager.getInstance().get("exception.softwareparticleemittershader_renderparticles_buffer")); + new IllegalStateException(numItemsToRender + LocalizationManager.getInstance().get("exception.softwareparticleemittershader_renderparticles_alive") + bufferData.length + LocalizationManager.getInstance().get("exception.softwareparticleemittershader_renderparticles_buffer")) .printStackTrace(); return; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/v2/MaterialView.java b/craft3data/src/com/hiveworkshop/wc3/mdl/v2/MaterialView.java index fac5edf03..7f7dffdb4 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/v2/MaterialView.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/v2/MaterialView.java @@ -5,6 +5,7 @@ import com.hiveworkshop.wc3.mdl.v2.timelines.AnimatableVisitor; import com.hiveworkshop.wc3.mdl.v2.timelines.TangentialKeyFrame; import com.hiveworkshop.wc3.mdl.v2.timelines.Timeline; +import hiveworkshop.localizationmanager.LocalizationManager; public interface MaterialView { ListView getLayers(); @@ -27,11 +28,11 @@ public static String createDefaultName(final MaterialView materialView) { for (int i = layers.size() - 1; i >= 0; i--) { final LayerView layer = layers.get(i); if (name.length() > 0) { - name.append(" over "); + name.append(LocalizationManager.getInstance().get("append.materialview_createdefaultname_over")); } name.append(layer.getTexture().visit(TEXTURE_NAME_GETTER)); if (layer.getAlpha().visit(IS_ALPHA_ANIMATED_CHECKER)) { - name.append(" (animated Alpha)"); + name.append(LocalizationManager.getInstance().get("append.materialview_createdefaultname_alpha")); } } return name.toString(); @@ -49,12 +50,12 @@ public String animatedValues(final Timeline timeline) { // SortedMapView timeToKey = // timeline.getTimeToKey(); // return timeToKey.get(timeToKey.firstKey()).getName(); - return "animated texture layers"; + return LocalizationManager.getInstance().get("string.materialview_createdefaultname_texture"); } @Override public String animatedTangentialValues(final Timeline> timeline) { - return "animated texture layers"; + return LocalizationManager.getInstance().get("string.materialview_createdefaultname_texture"); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdl/v2/timelines/InterpolationType.java b/craft3data/src/com/hiveworkshop/wc3/mdl/v2/timelines/InterpolationType.java index 883caaeb6..2c776f4cf 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdl/v2/timelines/InterpolationType.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdl/v2/timelines/InterpolationType.java @@ -1,7 +1,11 @@ package com.hiveworkshop.wc3.mdl.v2.timelines; +import hiveworkshop.localizationmanager.LocalizationManager; public enum InterpolationType { - DONT_INTERP("DontInterp"), LINEAR("Linear"), BEZIER("Bezier"), HERMITE("Hermite"); + DONT_INTERP(LocalizationManager.getInstance().get("string.interpolationyype_interpolationyype_dontinterp")), + LINEAR(LocalizationManager.getInstance().get("string.interpolationyype_interpolationyype_linear")), + BEZIER(LocalizationManager.getInstance().get("string.interpolationyype_interpolationyype_bezier")), + HERMITE(LocalizationManager.getInstance().get("string.interpolationyype_interpolationyype_hermite")); private String name; diff --git a/craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryBtTModel.java b/craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryBtTModel.java index 7005adacd..9d5f46922 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryBtTModel.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryBtTModel.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdlx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.io.IOException; @@ -35,7 +36,7 @@ public static void main(final String[] args) { for (int seq = 0; seq < loadModel.sequenceChunk.sequence.length; seq++) { final Sequence sequence = loadModel.sequenceChunk.sequence[seq]; if (sequence.syncPoint != 0) { - System.err.println("SYNC POINT NONZERO: " + sequence.syncPoint + " in " + str); + System.err.println(LocalizationManager.getInstance().get("println.parseeverybttmodel_main_sync") + sequence.syncPoint + LocalizationManager.getInstance().get("println.parseeverybttmodel_main_in") + str); } } } @@ -45,7 +46,7 @@ public static void main(final String[] args) { } } } - System.err.println("parsed " + parsed + " successfully"); + System.err.println(LocalizationManager.getInstance().get("println.parseeverybttmodel_main_parsed") + parsed + LocalizationManager.getInstance().get("println.parseeverybttmodel_main_successfully")); } catch (final MPQException e1) { e1.printStackTrace(); } catch (final IOException e1) { diff --git a/craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryModel.java b/craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryModel.java index a0c701253..d3bb12ecd 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryModel.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryModel.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdlx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -37,8 +38,8 @@ public static void main(final String[] args) { } } } - System.err.println("parsed " + parsed + " successfully"); - System.out.println("Max was: " + maxVertexGroup); + System.err.println(LocalizationManager.getInstance().get("println.parseeverymodel_main_parsed") + parsed + LocalizationManager.getInstance().get("println.parseeverymodel_main_successfully")); + System.out.println(LocalizationManager.getInstance().get("println.parseeverymodel_main_max_was") + maxVertexGroup); } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/AttachmentChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/AttachmentChunk.java index 527e6b47d..f7dd34617 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/AttachmentChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/AttachmentChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -125,7 +126,7 @@ public Attachment(final com.hiveworkshop.wc3.mdl.Attachment atc) { } } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.attachmentchunk_attachment_discarded") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/CameraChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/CameraChunk.java index ba0e7d79b..0d3c677b1 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/CameraChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/CameraChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -90,7 +91,7 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeNByteString(name, 80); if ((position.length % 3) != 0) { throw new IllegalArgumentException( - "The array position needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.camerachunk_save_array_position") + position.length + ")"); } MdxUtils.saveFloatArray(out, position); @@ -99,7 +100,7 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeFloat(nearClippingPlane); if ((targetPosition.length % 3) != 0) { throw new IllegalArgumentException( - "The array targetPosition needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.camerachunk_save_target_position") + targetPosition.length + ")"); } MdxUtils.saveFloatArray(out, targetPosition); @@ -186,7 +187,7 @@ public Camera(final com.hiveworkshop.wc3.mdl.Camera mdlCam) { } } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.camerachunk_camera_discarded") + af.getName()); } } } @@ -210,7 +211,7 @@ public Camera(final com.hiveworkshop.wc3.mdl.Camera mdlCam) { } } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.camerachunk_camera_discarded") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/CameraPositionTranslation.java b/craft3data/src/com/hiveworkshop/wc3/mdx/CameraPositionTranslation.java index d9fc9fc98..7e77e6146 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/CameraPositionTranslation.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/CameraPositionTranslation.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (translation.length % 3 != 0) { throw new IllegalArgumentException( - "The array translation needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.camerapositiontranslation_save_array_translation") + translation.length + ")"); } MdxUtils.saveFloatArray(out, translation); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.camerapositiontranslation_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.camerapositiontranslation_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/CameraTargetTranslation.java b/craft3data/src/com/hiveworkshop/wc3/mdx/CameraTargetTranslation.java index f92fc2b7e..55463efbf 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/CameraTargetTranslation.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/CameraTargetTranslation.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (translation.length % 3 != 0) { throw new IllegalArgumentException( - "The array translation needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.cameratargettranslation_save_array_translation") + translation.length + ")"); } MdxUtils.saveFloatArray(out, translation); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.cameratargettranslation_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.cameratargettranslation_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/CollisionShapeChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/CollisionShapeChunk.java index a3f7edc4b..81cb29a9e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/CollisionShapeChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/CollisionShapeChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -71,7 +72,7 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeInt(type); if (vertexs.length % 3 != 0) { throw new IllegalArgumentException( - "The array vertexs needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.collisionshapechunk_array_vertexs") + vertexs.length + ")"); } MdxUtils.saveFloatArray(out, vertexs); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/CornChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/CornChunk.java index 2831d2136..7d5b1a8c2 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/CornChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/CornChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -288,7 +289,7 @@ public ParticleEmitterPopcorn(final com.hiveworkshop.wc3.mdl.ParticleEmitterPopc } } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.cornchunk_particleemitterpopcorn_discarded") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/CornColor.java b/craft3data/src/com/hiveworkshop/wc3/mdx/CornColor.java index 3a8531f67..bf2525873 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/CornColor.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/CornColor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if ((color.length % 3) != 0) { throw new IllegalArgumentException( - "The array color needs either the length 3 or a multiple of this number. (got " + color.length + LocalizationManager.getInstance().get("exception.corncolor_save_array_color") + color.length + ")"); } MdxUtils.saveFloatArray(out, color); if (interpolationType > 1) { if ((inTan.length % 3) != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.corncolor_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if ((outTan.length % 3) != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.corncolor_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/FaceEffectsChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/FaceEffectsChunk.java index 286586f9a..ed9b29585 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/FaceEffectsChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/FaceEffectsChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.IOException; @@ -77,7 +78,7 @@ public static FaceEffect read(final BufferedReader mdl) { return e; } else { JOptionPane.showMessageDialog(MDLReader.getDefaultContainer(), - "Unable to parse FaceEffect: Missing or unrecognized open statement."); + LocalizationManager.getInstance().get("dialog.faceeffectschunk_read_parse")); } return null; } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetAnimationChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetAnimationChunk.java index e341d554a..f2f417de5 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetAnimationChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetAnimationChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -83,7 +84,7 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeInt(flags); if (color.length % 3 != 0) { throw new IllegalArgumentException( - "The array color needs either the length 3 or a multiple of this number. (got " + color.length + LocalizationManager.getInstance().get("exception.geosetanimationchunk_save_array_color") + color.length + ")"); } MdxUtils.saveFloatArray(out, color); @@ -167,7 +168,7 @@ public GeosetAnimation(final GeosetAnim mdlGeoAnim) { colorFound = true; } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.geosetanimationchunk_geosetanimation_discarded") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetChunk.java index c094c4a98..b9001aa42 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -181,7 +182,7 @@ public void save(final BlizzardDataOutputStream out, final int version) throws I out.writeInt(nrOfVertexPositions); if ((vertexPositions.length % 3) != 0) { throw new IllegalArgumentException( - "The array vertexPositions needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.gosetchunk_save_array_vertexpositions") + vertexPositions.length + ")"); } MdxUtils.saveFloatArray(out, vertexPositions); @@ -189,7 +190,7 @@ public void save(final BlizzardDataOutputStream out, final int version) throws I out.writeInt(nrOfVertexNormals); if ((vertexNormals.length % 3) != 0) { throw new IllegalArgumentException( - "The array vertexNormals needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.gosetchunk_save_array_vertexNormals") + vertexNormals.length + ")"); } MdxUtils.saveFloatArray(out, vertexNormals); @@ -223,13 +224,13 @@ public void save(final BlizzardDataOutputStream out, final int version) throws I out.writeFloat(boundsRadius); if ((minimumExtent.length % 3) != 0) { throw new IllegalArgumentException( - "The array minimumExtent needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.gosetchunk_save_array_minimumextent") + minimumExtent.length + ")"); } MdxUtils.saveFloatArray(out, minimumExtent); if ((maximumExtent.length % 3) != 0) { throw new IllegalArgumentException( - "The array maximumExtent needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.gosetchunk_save_array_maximumextent") + maximumExtent.length + ")"); } MdxUtils.saveFloatArray(out, maximumExtent); @@ -259,7 +260,7 @@ public void save(final BlizzardDataOutputStream out, final int version) throws I out.writeInt(nrOfVertexTexturePositions); if ((vertexTexturePositions[i].length % 2) != 0) { throw new IllegalArgumentException( - "The array vertexTexturePositions needs either the length 2 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.gosetchunk_save_array_vertextexturepositions") + vertexTexturePositions[i].length + ")"); } MdxUtils.saveFloatArray(out, vertexTexturePositions[i]); @@ -348,14 +349,14 @@ public void load(final BlizzardDataInputStream in) throws IOException { public void save(final BlizzardDataOutputStream out) throws IOException { if ((minimumExtent.length % 3) != 0) { throw new IllegalArgumentException( - "The array minimumExtent needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.gosetchunk_save_array_minimumextent") + minimumExtent.length + ")"); } out.writeFloat(bounds); MdxUtils.saveFloatArray(out, minimumExtent); if ((maximumExtent.length % 3) != 0) { throw new IllegalArgumentException( - "The array maximumExtent needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.gosetchunk_save_array_maximumextent") + maximumExtent.length + ")"); } MdxUtils.saveFloatArray(out, maximumExtent); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetColor.java b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetColor.java index 870c334fd..2b2b403a8 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetColor.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetColor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (color.length % 3 != 0) { throw new IllegalArgumentException( - "The array color needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetcolor_save_array_color") + color.length + ")"); } MdxUtils.saveFloatArray(out, color); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetcolor_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetcolor_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetRotation.java b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetRotation.java index 36c608d4d..54e092872 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetRotation.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetRotation.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (rotation.length % 4 != 0) { throw new IllegalArgumentException( - "The array rotation needs either the length 4 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetrotation_save_array_rotation") + rotation.length + ")"); } MdxUtils.saveFloatArray(out, rotation); if (interpolationType > 1) { if (inTan.length % 4 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 4 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetrotation_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 4 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 4 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetrotation_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetScaling.java b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetScaling.java index 5780fc4a3..b077c9e7f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetScaling.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetScaling.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (scaling.length % 3 != 0) { throw new IllegalArgumentException( - "The array scaling needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetscaling_save_array_scaling") + scaling.length + ")"); } MdxUtils.saveFloatArray(out, scaling); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetscaling_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosetscaling_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetTranslation.java b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetTranslation.java index 8b9c1fd6a..1f1ad37bf 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetTranslation.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/GeosetTranslation.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (translation.length % 3 != 0) { throw new IllegalArgumentException( - "The array translation needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosettranslation_save_array_translation") + translation.length + ")"); } MdxUtils.saveFloatArray(out, translation); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosettranslation_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.geosettranslation_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/LayerChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/LayerChunk.java index 03a9e6183..3221e25c7 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/LayerChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/LayerChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.Arrays; @@ -103,7 +104,7 @@ public void load(final BlizzardDataInputStream in, final int version) throws IOE if (ModelUtils.isCombinedHDLayerSupported(version)) { shaderTypeId = in.readInt(); if ((shaderTypeId != 0) && (shaderTypeId != 1)) { - System.err.println("MDX1100 parser reached unexpected shader type ID: " + shaderTypeId); + System.err.println(LocalizationManager.getInstance().get("println.layerchunk_load_parser") + shaderTypeId); } final int textureIdCount = in.readInt(); textureIdsMDLX1100 = new int[TEXTURE_TYPE_INDICES]; @@ -116,7 +117,7 @@ public void load(final BlizzardDataInputStream in, final int version) throws IOE if (MdxUtils.checkOptionalId(in, MaterialTextureId.key)) { textureTypeIndex = i; // TODO this is blizztarded if (animatedTextureIdsMDLX1100[textureTypeIndex] != null) { - throw new IllegalStateException("what?"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.layerchunk_load_what")); } animatedTextureIdsMDLX1100[textureTypeIndex] = new MaterialTextureId(); animatedTextureIdsMDLX1100[textureTypeIndex].load(in); @@ -124,9 +125,9 @@ public void load(final BlizzardDataInputStream in, final int version) throws IOE textureIdsMDLX1100[textureTypeIndex] = singleTextureId; } else { - throw new IllegalStateException("Invalid texture type index: " + textureTypeIndex - + ": you may be loading a model from a future version of War3 this was not built to handle." - + "\n Editing the model editor's sourcecode can work around this if you really want to open this file."); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.layerchunk_load_invalid") + textureTypeIndex + + LocalizationManager.getInstance().get("exception.layerchunk_load_loading") + + LocalizationManager.getInstance().get("exception.layerchunk_load_sourcecode")); } } } @@ -483,7 +484,7 @@ else if (af.getName().equals("FresnelTeamColor")) { } } if (!found && Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.layerchunk_layer_discarded_flag") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/LightAmbientColor.java b/craft3data/src/com/hiveworkshop/wc3/mdx/LightAmbientColor.java index 91f460b8b..45a87ef54 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/LightAmbientColor.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/LightAmbientColor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (ambientColor.length % 3 != 0) { throw new IllegalArgumentException( - "The array ambientColor needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.lightambientcolor_save_array_ambientcolor") + ambientColor.length + ")"); } MdxUtils.saveFloatArray(out, ambientColor); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.lightambientcolor_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.lightambientcolor_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/LightChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/LightChunk.java index 013aa6389..882689ebf 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/LightChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/LightChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -123,14 +124,14 @@ public void save(final BlizzardDataOutputStream out, final int version) throws I out.writeFloat(attenuationEnd); if ((color.length % 3) != 0) { throw new IllegalArgumentException( - "The array color needs either the length 3 or a multiple of this number. (got " + color.length + LocalizationManager.getInstance().get("exception.lightchunk_save_array_color") + color.length + ")"); } MdxUtils.saveFloatArray(out, color); out.writeFloat(intensity); if ((ambientColor.length % 3) != 0) { throw new IllegalArgumentException( - "The array ambientColor needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.lightchunk_save_array_ambientcolor") + ambientColor.length + ")"); } MdxUtils.saveFloatArray(out, ambientColor); @@ -331,7 +332,7 @@ public Light(final com.hiveworkshop.wc3.mdl.Light light) { } } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.lightchunk_light_discarded_flag") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/LightColor.java b/craft3data/src/com/hiveworkshop/wc3/mdx/LightColor.java index 70f0ff418..aa82e764d 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/LightColor.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/LightColor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (color.length % 3 != 0) { throw new IllegalArgumentException( - "The array color needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.lightcolor_save_array_color") + color.length + ")"); } MdxUtils.saveFloatArray(out, color); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.lightcolor_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.lightcolor_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/MaterialFresnelColor.java b/craft3data/src/com/hiveworkshop/wc3/mdx/MaterialFresnelColor.java index a765dfb15..46909f3d3 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/MaterialFresnelColor.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/MaterialFresnelColor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if ((color.length % 3) != 0) { throw new IllegalArgumentException( - "The array color needs either the length 3 or a multiple of this number. (got " + color.length + LocalizationManager.getInstance().get("exception.materialfresnelcolor_save_array_color") + color.length + ")"); } MdxUtils.saveFloatArray(out, color); if (interpolationType > 1) { if ((inTan.length % 3) != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.materialfresnelcolor_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if ((outTan.length % 3) != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.materialfresnelcolor_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/MdxUtils.java b/craft3data/src/com/hiveworkshop/wc3/mdx/MdxUtils.java index 1b935954c..476470b69 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/MdxUtils.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/MdxUtils.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -52,7 +53,7 @@ public static String getOptionalId(final BlizzardDataInputStream in) throws IOEx public static void checkId(final BlizzardDataInputStream in, final String name) throws IOException { final String found = in.readCharsAsString(4); if (!found.equals(name)) { - throw new IOException("Error loading model: CheckID failed, required " + name + " found " + found); + throw new IOException(LocalizationManager.getInstance().get("exception.mdxutils_checkId_loading") + name + LocalizationManager.getInstance().get("exception.mdxutils_checkId_found") + found); } } @@ -69,16 +70,16 @@ public static void checkId(final BlizzardDataInputStream in, final String name) * if(lastCheck != null){ * * if(!name.equals(lastCheck)){ throw new IOException( - * "Error loading model: CheckID failed after optinal check, required " + name + - * " found " + lastCheck); } + * LocalizationManager.getInstance().get("exception.mdxutils_checkId_loading_check") + name + + * LocalizationManager.getInstance().get("exception.mdxutils_checkId_found") + lastCheck); } * * lastCheck=null; * * }else{ * * String found = in.readCharsAsString(4); if (!found.equals(name)) { throw new - * IOException("Error loading model: CheckID failed, required " + name + - * " found " + found); } } } + * IOException(LocalizationManager.getInstance().get("exception.mdxutils_checkId_loading") + name + + * LocalizationManager.getInstance().get("exception.mdxutils_checkId_found") + found); } } } */ public static float[] loadFloatArray(final BlizzardDataInputStream in, final int size) throws IOException { diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/ModelChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/ModelChunk.java index 769abff2b..2156ddcbb 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/ModelChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/ModelChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -22,7 +23,7 @@ public void load(final BlizzardDataInputStream in, final int version) throws IOE unknownNull = in.readInt(); if (unknownNull != 0) { System.err - .println("He said he didn't know what this was: " + unknownNull + " (possible loss of model data)"); + .println(LocalizationManager.getInstance().get("println.modelchunk_load_know") + unknownNull + LocalizationManager.getInstance().get("println.modelchunk_load_possible")); } boundsRadius = in.readFloat(); minimumExtent = MdxUtils.loadFloatArray(in, 3); @@ -38,13 +39,13 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeFloat(boundsRadius); if ((minimumExtent.length % 3) != 0) { throw new IllegalArgumentException( - "The array minimumExtent needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.modelchunk_save_array_minimumextent") + minimumExtent.length + ")"); } MdxUtils.saveFloatArray(out, minimumExtent); if ((maximumExtent.length % 3) != 0) { throw new IllegalArgumentException( - "The array maximumExtent needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.modelchunk_save_array_maximumextent") + maximumExtent.length + ")"); } MdxUtils.saveFloatArray(out, maximumExtent); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/Node.java b/craft3data/src/com/hiveworkshop/wc3/mdx/Node.java index e49b9ecd4..1f25dba73 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/Node.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/Node.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -178,7 +179,7 @@ public Node(final IdObject mdlNode) { } } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("node discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.node_node_node") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitter2Chunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitter2Chunk.java index 5f37c8a08..594d7456c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitter2Chunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitter2Chunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -180,19 +181,19 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeFloat(time); if ((segmentColor.length % 9) != 0) { throw new IllegalArgumentException( - "The array segmentColor needs either the length 9 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.particleemitter2chunk_save_array_segmentcolor") + segmentColor.length + ")"); } MdxUtils.saveFloatArray(out, segmentColor); if ((segmentAlpha.length % 3) != 0) { throw new IllegalArgumentException( - "The array segmentAlpha needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.particleemitter2chunk_save_array_segmentalpha") + segmentAlpha.length + ")"); } MdxUtils.saveByteArray(out, segmentAlpha); if ((segmentScaling.length % 3) != 0) { throw new IllegalArgumentException( - "The array segmentScaling needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.particleemitter2chunk_save_array_segmentscaling") + segmentScaling.length + ")"); } MdxUtils.saveFloatArray(out, segmentScaling); @@ -542,7 +543,7 @@ public ParticleEmitter2(final com.hiveworkshop.wc3.mdl.ParticleEmitter2 mdlEmitt } } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.particleemitter2chunk_particleemitter2_discarded_flag") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitterChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitterChunk.java index 8b7142f1c..02a20ddea 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitterChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitterChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -334,7 +335,7 @@ else if (af.getName().equals("Speed") } } else if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.particleemitterchunk_particleemitter_discarded_flag") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/PivotPointChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/PivotPointChunk.java index e436c698b..3b75e345d 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/PivotPointChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/PivotPointChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -22,7 +23,7 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(getSize() - 8);// ChunkSize if (pivotPoints.length % 3 != 0) { throw new IllegalArgumentException( - "The array pivotPoints needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.pivotpointchunk_save_array_pivotpoints") + pivotPoints.length + ")"); } MdxUtils.saveFloatArray(out, pivotPoints); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterChunk.java index 8f0c7990f..752ab5905 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -117,7 +118,7 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeFloat(alpha); if (color.length % 3 != 0) { throw new IllegalArgumentException( - "The array color needs either the length 3 or a multiple of this number. (got " + color.length + LocalizationManager.getInstance().get("exception.ribbonemitterchunk_save_array_color") + color.length + ")"); } MdxUtils.saveFloatArray(out, color); @@ -320,7 +321,7 @@ public RibbonEmitter(final com.hiveworkshop.wc3.mdl.RibbonEmitter mdlEmitter) { colorFound = true; } else { if (Node.LOG_DISCARDED_FLAGS) { - System.err.println("discarded flag " + af.getName()); + System.err.println(LocalizationManager.getInstance().get("println.ribbonemitterchunk_ribbonemitter_discarded_flag") + af.getName()); } } } diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterColor.java b/craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterColor.java index 71a59546f..ef967498e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterColor.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterColor.java @@ -1,4 +1,6 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; + import java.io.IOException; @@ -68,20 +70,20 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if ((color.length % 3) != 0) { throw new IllegalArgumentException( - "The array color needs either the length 3 or a multiple of this number. (got " + color.length + LocalizationManager.getInstance().get("exception.ribbonemittercolor_save_array_color") + color.length + ")"); } MdxUtils.saveFloatArray(out, color); if (interpolationType > 1) { if ((inTan.length % 3) != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.ribbonemittercolor_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if ((outTan.length % 3) != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.ribbonemittercolor_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/SequenceChunk.java b/craft3data/src/com/hiveworkshop/wc3/mdx/SequenceChunk.java index a1269c7f4..7e64b701e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/SequenceChunk.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/SequenceChunk.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.util.ArrayList; @@ -85,13 +86,13 @@ public void save(final BlizzardDataOutputStream out) throws IOException { out.writeFloat(boundsRadius); if (minimumExtent.length % 3 != 0) { throw new IllegalArgumentException( - "The array minimumExtent needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.sequencechunk_save_array_minimumextent") + minimumExtent.length + ")"); } MdxUtils.saveFloatArray(out, minimumExtent); if (maximumExtent.length % 3 != 0) { throw new IllegalArgumentException( - "The array maximumExtent needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.sequencechunk_save_array_maximumextent") + maximumExtent.length + ")"); } MdxUtils.saveFloatArray(out, maximumExtent); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/TextureRotation.java b/craft3data/src/com/hiveworkshop/wc3/mdx/TextureRotation.java index 313ef6eef..44366556c 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/TextureRotation.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/TextureRotation.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (rotation.length % 4 != 0) { throw new IllegalArgumentException( - "The array rotation needs either the length 4 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturerotation_save_array_rotation") + rotation.length + ")"); } MdxUtils.saveFloatArray(out, rotation); if (interpolationType > 1) { if (inTan.length % 4 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 4 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturerotation_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 4 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 4 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturerotation_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/TextureScaling.java b/craft3data/src/com/hiveworkshop/wc3/mdx/TextureScaling.java index 1cb75bd4e..f77c07b5e 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/TextureScaling.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/TextureScaling.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (scaling.length % 3 != 0) { throw new IllegalArgumentException( - "The array scaling needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturescaling_save_array_scaling") + scaling.length + ")"); } MdxUtils.saveFloatArray(out, scaling); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturescaling_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturescaling_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/mdx/TextureTranslation.java b/craft3data/src/com/hiveworkshop/wc3/mdx/TextureTranslation.java index 3bf47079a..fb5cb3801 100644 --- a/craft3data/src/com/hiveworkshop/wc3/mdx/TextureTranslation.java +++ b/craft3data/src/com/hiveworkshop/wc3/mdx/TextureTranslation.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.mdx; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -68,20 +69,20 @@ public void save(BlizzardDataOutputStream out) throws IOException { out.writeInt(time); if (translation.length % 3 != 0) { throw new IllegalArgumentException( - "The array translation needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturetranslation_save_array_translation") + translation.length + ")"); } MdxUtils.saveFloatArray(out, translation); if (interpolationType > 1) { if (inTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array inTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturetranslation_save_array_intan") + inTan.length + ")"); } MdxUtils.saveFloatArray(out, inTan); if (outTan.length % 3 != 0) { throw new IllegalArgumentException( - "The array outTan needs either the length 3 or a multiple of this number. (got " + LocalizationManager.getInstance().get("exception.texturetranslation_save_array_outtan") + outTan.length + ")"); } MdxUtils.saveFloatArray(out, outTan); diff --git a/craft3data/src/com/hiveworkshop/wc3/resources/Localization.java b/craft3data/src/com/hiveworkshop/wc3/resources/Localization.java new file mode 100644 index 000000000..aa256438b --- /dev/null +++ b/craft3data/src/com/hiveworkshop/wc3/resources/Localization.java @@ -0,0 +1,79 @@ +package com.hiveworkshop.wc3.resources; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Locale; +import java.util.MissingResourceException; +import java.util.PropertyResourceBundle; +import java.util.ResourceBundle; + +public class Localization { + private static final Localization INSTANCE = new Localization(); + + private ResourceBundle bundle; + private Locale locale = Locale.ENGLISH; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + + private Localization() { + load(Locale.ENGLISH); + } + + public static Localization getInstance() { + return INSTANCE; + } + + public void addPropertyChangeListener(final PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + public void removePropertyChangeListener(final PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + + public void setLocale(final Locale l) { + final Locale newLocale = (l == null) ? Locale.ENGLISH : l; + final Locale old = this.locale; + if (!old.equals(newLocale)) { + this.locale = newLocale; + load(newLocale); + pcs.firePropertyChange("locale", old, newLocale); + } + } + + private void load(final Locale l) { + final String[] candidates = new String[] { l.toString(), l.getLanguage(), "en" }; + for (final String cand : candidates) { + final String path = "/lang/craft3data_" + cand + ".properties"; + try (final InputStream is = getClass().getResourceAsStream(path)) { + if (is != null) { + try { + bundle = new PropertyResourceBundle(new InputStreamReader(is, "utf-8")); + return; + } catch (final IOException e) { + e.printStackTrace(); + } + } + } catch (final IOException e) { + } + } + bundle = null; + } + + public String get(final String key) { + if (bundle == null) { + return "!" + key + "!"; + } + try { + return bundle.getString(key); + } catch (final MissingResourceException e) { + return "!" + key + "!"; + } + } + + public static String t(final String key) { + return getInstance().get(key); + } +} diff --git a/craft3data/src/com/hiveworkshop/wc3/units/DataTable.java b/craft3data/src/com/hiveworkshop/wc3/units/DataTable.java index b87bed5b4..a22ce0278 100644 --- a/craft3data/src/com/hiveworkshop/wc3/units/DataTable.java +++ b/craft3data/src/com/hiveworkshop/wc3/units/DataTable.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.units; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.File; @@ -480,7 +481,7 @@ else if (!withinQuotedString && (c == ',')) { } if (builder.length() > 0) { if (currentUnit == null) { - System.out.println("null for " + input); + System.out.println(LocalizationManager.getInstance().get("println.datatable_readtxt_null") + input); } currentUnit.setField(fieldName, builder.toString().trim(), fieldIndex++); } @@ -497,7 +498,7 @@ public void readSLK(final InputStream txt) throws IOException { Element currentUnit = null; input = reader.readLine(); if (!input.contains("ID")) { - System.err.println("Formatting of SLK is unusual."); + System.err.println(LocalizationManager.getInstance().get("println.datatable_readslk_unusual")); } input = reader.readLine(); while (input.startsWith("P;") || input.startsWith("F;")) { @@ -711,29 +712,29 @@ public void put(final String id, final Element e) { // UnitDataTable table = new UnitDataTable(); // table.loadDefaults(); // Unit villager = table.get("h02Z"); - // System.out.println(villager.getField("Name")+ " can build: "); + // System.out.println(villager.getField("Name")+ LocalizationManager.getInstance().get("println.datatable_main_build")); // System.out.println(villager.builds()); // // System.out.println(); // // Unit townSquare = table.get("owtw"); - // System.out.println(townSquare.getField("Name")+ " trains: "); + // System.out.println(townSquare.getField("Name")+ LocalizationManager.getInstance().get("println.datatable_main_trains")); // System.out.println(townSquare.trains()); // - // System.out.println(townSquare.getField("Name")+ " upgrades: "); + // System.out.println(townSquare.getField("Name")+ LocalizationManager.getInstance().get("println.datatable_main_upgrades")); // System.out.println(townSquare.upgrades()); // - // System.out.println(townSquare.getField("Name")+ " researches: "); + // System.out.println(townSquare.getField("Name")+ LocalizationManager.getInstance().get("println.datatable_main_researches")); // System.out.println(townSquare.researches()); // - // System.out.println(townSquare.getField("Name")+ " stats: "); + // System.out.println(townSquare.getField("Name")+ LocalizationManager.getInstance().get("println.datatable_main_stats")); // for( String field: townSquare.fields.keySet() ) { // System.out.println(field +": "+townSquare.getField(field)); // } - //// System.out.println(townSquare.getField("goldcost")); - //// System.out.println(townSquare.getField("lumbercost")); - //// System.out.println(townSquare.getField("fmade")); - //// System.out.println(townSquare.getField("fmade")); + //// System.out.println(townSquare.getField(LocalizationManager.getInstance().get("println.datatable_main_goldcost"))); + //// System.out.println(townSquare.getField(LocalizationManager.getInstance().get("println.datatable_main_lumbercost"))); + //// System.out.println(townSquare.getField(LocalizationManager.getInstance().get("println.datatable_main_fmade"))); + //// System.out.println(townSquare.getField(LocalizationManager.getInstance().get("println.datatable_main_fmade"))); // // List abils = table.getTideWorker().abilities(); // System.out.println(abils); diff --git a/craft3data/src/com/hiveworkshop/wc3/units/ModelOptionPane.java b/craft3data/src/com/hiveworkshop/wc3/units/ModelOptionPane.java index 5b9d0225d..8ad4147a8 100644 --- a/craft3data/src/com/hiveworkshop/wc3/units/ModelOptionPane.java +++ b/craft3data/src/com/hiveworkshop/wc3/units/ModelOptionPane.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.units; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Component; @@ -7,7 +8,7 @@ public class ModelOptionPane { public static String show(final Component what) { final ModelOptionPanel uop = new ModelOptionPanel(); - final int x = JOptionPane.showConfirmDialog(what, uop, "Choose Model", JOptionPane.OK_CANCEL_OPTION, + final int x = JOptionPane.showConfirmDialog(what, uop, LocalizationManager.getInstance().get("dialog.modeloptionpane_modeloptionpane_choose"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (x == JOptionPane.OK_OPTION) { return uop.getSelection(); @@ -17,7 +18,7 @@ public static String show(final Component what) { public static ModelElement showAndLogIcon(final Component what) { final ModelOptionPanel uop = new ModelOptionPanel(); - final int x = JOptionPane.showConfirmDialog(what, uop, "Choose Model", JOptionPane.OK_CANCEL_OPTION, + final int x = JOptionPane.showConfirmDialog(what, uop, LocalizationManager.getInstance().get("dialog.modeloptionpane_modeloptionpane_choose"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (x == JOptionPane.OK_OPTION) { return new ModelElement(uop.getSelection(), uop.getCachedIconPath()); @@ -28,7 +29,7 @@ public static ModelElement showAndLogIcon(final Component what) { public static String show(final Component what, final String startingFile) { final ModelOptionPanel uop = new ModelOptionPanel(); uop.setSelection(startingFile); - final int x = JOptionPane.showConfirmDialog(what, uop, "Choose Model", JOptionPane.OK_CANCEL_OPTION, + final int x = JOptionPane.showConfirmDialog(what, uop, LocalizationManager.getInstance().get("dialog.modeloptionpane_modeloptionpane_choose"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (x == JOptionPane.OK_OPTION) { return uop.getSelection(); diff --git a/craft3data/src/com/hiveworkshop/wc3/units/StandardObjectData.java b/craft3data/src/com/hiveworkshop/wc3/units/StandardObjectData.java index 6526a55fd..66eef1560 100644 --- a/craft3data/src/com/hiveworkshop/wc3/units/StandardObjectData.java +++ b/craft3data/src/com/hiveworkshop/wc3/units/StandardObjectData.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.units; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.AlphaComposite; import java.awt.Color; @@ -68,12 +69,12 @@ public static WarcraftData getStandardUnits() { final WarcraftData units = new WarcraftData(); - units.add(profile, "Profile", false); - units.add(unitAbilities, "UnitAbilities", true); - units.add(unitBalance, "UnitBalance", true); - units.add(unitData, "UnitData", true); - units.add(unitUI, "UnitUI", true); - units.add(unitWeapons, "UnitWeapons", true); + units.add(profile, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_profile"), false); + units.add(unitAbilities, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_unitabilities"), true); + units.add(unitBalance, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_unitbalance"), true); + units.add(unitData, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_unitdata"), true); + units.add(unitUI, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_unitui"), true); + units.add(unitWeapons, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_unitweapons"), true); // TODO: The actual War3 game engine does not use this string, "ProfileSkin", // it appears that their architecture for handling this data is quite different. // They give the skin data a lower load priority than UnitUI, which has a lower @@ -82,7 +83,7 @@ public static WarcraftData getStandardUnits() { // "ProfileSkin" here, my custom object editor will be unable to modify skin // data until further notice. But the model studio will work nicely with the // data being formatted visually the same as the game. - units.add(skin, "ProfileSkin", false); + units.add(skin, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_profileskin"), false); return units; } @@ -103,8 +104,8 @@ public static WarcraftData getStandardItems() { final WarcraftData units = new WarcraftData(); - units.add(profile, "Profile", false); - units.add(itemData, "ItemData", true); + units.add(profile, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_profile"), false); + units.add(itemData, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_itemdata"), true); return units; } @@ -122,7 +123,7 @@ public static WarcraftData getStandardDestructables() { final WarcraftData units = new WarcraftData(); - units.add(destructableData, "DestructableData", true); + units.add(destructableData, LocalizationManager.getInstance().get("DestructableData"), true); return units; } @@ -144,7 +145,7 @@ public static WarcraftData getStandardDoodads() { final WarcraftData units = new WarcraftData(); - units.add(destructableData, "DoodadData", true); + units.add(destructableData, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_doodaddata"), true); return units; } @@ -218,8 +219,8 @@ public static WarcraftData getStandardAbilities() { final WarcraftData abilities = new WarcraftData(); - abilities.add(profile, "Profile", false); - abilities.add(abilityData, "AbilityData", true); + abilities.add(profile, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_profile"), false); + abilities.add(abilityData, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_abilitydata"), true); return abilities; } @@ -255,8 +256,8 @@ public static WarcraftData getStandardAbilityBuffs() { final WarcraftData abilities = new WarcraftData(); - abilities.add(profile, "Profile", false); - abilities.add(abilityData, "AbilityData", true); + abilities.add(profile, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_profile"), false); + abilities.add(abilityData, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_abilitydata"), true); return abilities; } @@ -288,8 +289,8 @@ public static WarcraftData getStandardUpgrades() { final WarcraftData units = new WarcraftData(); - units.add(profile, "Profile", false); - units.add(upgradeData, "UpgradeData", true); + units.add(profile, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_profile"), false); + units.add(upgradeData, LocalizationManager.getInstance().get("txt.standardobjectdata_warcraftdata_upgradedata"), true); return units; } @@ -475,7 +476,7 @@ public void setField(final String field, final String value) { return; } } - throw new IllegalArgumentException("no field"); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.standardobjectdata_setfield_no_field")); } @Override diff --git a/craft3data/src/com/hiveworkshop/wc3/units/UnitOptionPane.java b/craft3data/src/com/hiveworkshop/wc3/units/UnitOptionPane.java index 9cc5051b5..51e553359 100644 --- a/craft3data/src/com/hiveworkshop/wc3/units/UnitOptionPane.java +++ b/craft3data/src/com/hiveworkshop/wc3/units/UnitOptionPane.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.units; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Component; @@ -7,7 +8,7 @@ public class UnitOptionPane { public static GameObject show(final Component what) { final UnitOptionPanel uop = new UnitOptionPanel(DataTable.get(), StandardObjectData.getStandardAbilities()); - final int x = JOptionPane.showConfirmDialog(what, uop, "Choose Unit Type", JOptionPane.OK_CANCEL_OPTION, + final int x = JOptionPane.showConfirmDialog(what, uop, LocalizationManager.getInstance().get("dialog.unitoptionpane_show_type"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (x == JOptionPane.OK_OPTION) { return uop.getSelection(); @@ -17,7 +18,7 @@ public static GameObject show(final Component what) { public static GameObject show(final Component what, final ObjectData table) { final UnitOptionPanel uop = new UnitOptionPanel(table, StandardObjectData.getStandardAbilities()); - final int x = JOptionPane.showConfirmDialog(what, uop, "Choose Unit Type", JOptionPane.OK_CANCEL_OPTION, + final int x = JOptionPane.showConfirmDialog(what, uop, LocalizationManager.getInstance().get("dialog.unitoptionpane_show_type"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (x == JOptionPane.OK_OPTION) { return uop.getSelection(); diff --git a/craft3data/src/com/hiveworkshop/wc3/units/objectdata/MutableObjectData.java b/craft3data/src/com/hiveworkshop/wc3/units/objectdata/MutableObjectData.java index 8f32cf006..5587c119f 100644 --- a/craft3data/src/com/hiveworkshop/wc3/units/objectdata/MutableObjectData.java +++ b/craft3data/src/com/hiveworkshop/wc3/units/objectdata/MutableObjectData.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.units.objectdata; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.Arrays; import java.util.HashMap; @@ -95,7 +96,7 @@ public void mergeChangset(final War3ObjectDataChangeset changeset) { final War3ID nextDefaultEditorId = /* War3ID.fromString(newId); */getNextDefaultEditorId( War3ID.fromString(entry.getKey().charAt(0) + "000")); ; - System.out.println("Merging " + nextDefaultEditorId + " for " + entry.getKey()); + System.out.println(LocalizationManager.getInstance().get("println.mutableobjectdata_mergechangset_merging") + nextDefaultEditorId + LocalizationManager.getInstance().get("println.mutableobjectdata_mergechangset_for") + entry.getKey()); // createNew API will notifier the changeNotifier final MutableGameObject newObject = createNew(nextDefaultEditorId, entry.getValue().getOldId(), false); for (final MapView.Entry> changeList : entry.getValue().getChanges()) { @@ -419,8 +420,8 @@ public MutableGameObject(final GameObject parentWC3Object, final ObjectDataChang this.parentWC3Object = parentWC3Object; if (parentWC3Object == null) { System.err.println( - "Parent object is null for " + customUnitData.getNewId() + ":" + customUnitData.getOldId()); - throw new AssertionError("parentWC3Object cannot be null"); + LocalizationManager.getInstance().get("println.mutableobjectdata_mutablegameobject_null") + customUnitData.getNewId() + ":" + customUnitData.getOldId()); + throw new AssertionError(LocalizationManager.getInstance().get("assertionerror.mutableobjectdata_mutablegameobject_null")); // this.parentWC3Object = new Element("", new DataTable()); } this.customUnitData = customUnitData; @@ -442,9 +443,9 @@ public void setField(final War3ID field, final int level, final String value) { if (value.equals(getFieldStringFromSLKs(field, level))) { if (!value.equals(getFieldAsString(field, level))) { fireChangedEvent(field, level); - System.out.println("field was reset"); + System.out.println(LocalizationManager.getInstance().get("println.mutableobjectdata_setfield_reset")); } else { - System.out.println("field was unmodified"); + System.out.println(LocalizationManager.getInstance().get("println.mutableobjectdata_setfield_unmodified")); } resetFieldToDefaults(field, level); return; @@ -452,7 +453,7 @@ public void setField(final War3ID field, final int level, final String value) { final Change matchingChange = getOrCreateMatchingChange(field, level); matchingChange.setStrval(value); matchingChange.setVartype(War3ObjectDataChangeset.VAR_TYPE_STRING); - System.out.println("field created change"); + System.out.println(LocalizationManager.getInstance().get("println.mutableobjectdata_setfield_change")); fireChangedEvent(field, level); } @@ -552,13 +553,13 @@ public String getFieldAsString(final War3ID field, final int level) { if (matchingChange != null) { if (matchingChange.getVartype() != War3ObjectDataChangeset.VAR_TYPE_STRING) { throw new IllegalStateException( - "Requested string value of '" + field + "' from '" + parentWC3Object.getId() - + "', but this field was not a string! vartype=" + matchingChange.getVartype()); + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasstring_requested") + " '" + field + "' " + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasstring_from") + " '" + parentWC3Object.getId() + + "', " + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasstring_vartype") + "=" + matchingChange.getVartype()); } return matchingChange.getStrval(); } // no luck with custom data, look at the standard data - int slkLevel = level; + int slkLevel = level; if (worldEditorDataType == WorldEditorDataType.UPGRADES) { slkLevel -= 1; } @@ -697,10 +698,10 @@ private String getFieldStringFromSLKs(final War3ID field, final int level) { } } throw new IllegalStateException( - "Program requested " + field.toString() + " from " + worldEditorDataType); + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldstringfromslks_requested") + field.toString() + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldstringfromslks_from") + worldEditorDataType); } if (parentWC3Object == null) { - throw new IllegalStateException("corrupted unit, no parent unit id"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldstringfromslks_corrupted")); } int index = metaData.getFieldValue("index"); final String upgradeHack = metaData.getField("appendIndex"); @@ -729,8 +730,8 @@ public int getFieldAsInteger(final War3ID field, final int level) { if (matchingChange != null) { if (matchingChange.getVartype() != War3ObjectDataChangeset.VAR_TYPE_INT) { throw new IllegalStateException( - "Requested integer value of '" + field + "' from '" + parentWC3Object.getId() - + "', but this field was not an int! vartype=" + matchingChange.getVartype()); + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasinteger_requested") + " '" + field + "' " + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasinteger_from") + " '" + parentWC3Object.getId() + + "', " + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasinteger_vartype") + "=" + matchingChange.getVartype()); } return matchingChange.getLongval(); } @@ -750,8 +751,8 @@ public boolean getFieldAsBoolean(final War3ID field, final int level) { return matchingChange.getLongval() == 1; } else { throw new IllegalStateException( - "Requested boolean value of '" + field + "' from '" + parentWC3Object.getId() - + "', but this field was not a bool! vartype=" + matchingChange.getVartype()); + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasboolean_requested") + " '" + field + "' " + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasboolean_from") + " '" + parentWC3Object.getId() + + "', " + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasboolean_vartype") + "=" + matchingChange.getVartype()); } } return matchingChange.isBoolval(); @@ -770,8 +771,8 @@ public float getFieldAsFloat(final War3ID field, final int level) { if (matchingChange.getVartype() != War3ObjectDataChangeset.VAR_TYPE_REAL && matchingChange.getVartype() != War3ObjectDataChangeset.VAR_TYPE_UNREAL) { throw new IllegalStateException( - "Requested float value of '" + field + "' from '" + parentWC3Object.getId() - + "', but this field was not a float! vartype=" + matchingChange.getVartype()); + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasfloat_requested") + " '" + field + "' " + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasfloat_from") + " '" + parentWC3Object.getId() + + "', " + LocalizationManager.getInstance().get("exception.mutableobjectdata_getfieldasfloat_vartype") + "=" + matchingChange.getVartype()); } return matchingChange.getRealval(); } diff --git a/craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ID.java b/craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ID.java index 27589c21b..b4a2c7322 100644 --- a/craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ID.java +++ b/craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ID.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.units.objectdata; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.util.CharInt; @@ -17,12 +18,12 @@ public int getValue() { public static War3ID fromString(String idString) { if (idString.length() == 3) { System.out.println( - "Loaded custom data for the ability CURSE whose MetaData field, 'Crs', is the only 3 letter War3ID in the game. This might cause unexpected errors, so watch your % chance to miss in custom curse abilities carefully."); + LocalizationManager.getInstance().get("println.war3id_fromString_metadata")); idString += '\0'; } if (idString.length() != 4) { throw new IllegalArgumentException( - "A War3ID must be 4 ascii characters in length (got " + idString.length() + ") '" + idString + "'"); + LocalizationManager.getInstance().get("exception.war3id_fromString_war3id") + idString.length() + ") '" + idString + "'"); } return new War3ID(CharInt.toInt(idString)); } diff --git a/craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ObjectDataChangeset.java b/craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ObjectDataChangeset.java index 4fe500595..1a8a4fd07 100644 --- a/craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ObjectDataChangeset.java +++ b/craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ObjectDataChangeset.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.units.objectdata; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.io.FileInputStream; @@ -488,7 +489,7 @@ public boolean loadtable(final BlizzardDataInputStream stream, final ObjectMap m ObjectDataChangeEntry existingObject; if (isOriginal) { if (noid.equals(origid)) { - throw new IOException("the input stream might be screwed"); + throw new IOException(LocalizationManager.getInstance().get("exception.war3objectdatachangeset_loadtable_screwed")); } existingObject = map.get(origid); if (existingObject == null) { @@ -498,7 +499,7 @@ public boolean loadtable(final BlizzardDataInputStream stream, final ObjectMap m } else { newid = readWar3ID(stream); if (noid.equals(origid) || noid.equals(newid)) { - throw new IOException("the input stream might be screwed"); + throw new IOException(LocalizationManager.getInstance().get("exception.war3objectdatachangeset_loadtable_screwed")); } existingObject = map.get(newid); if (existingObject == null) { @@ -513,9 +514,8 @@ public boolean loadtable(final BlizzardDataInputStream stream, final ObjectMap m } final int ccount = stream.readInt();// Retera: I assume this is change count? if (ccount == 0 && isOriginal) { - // throw new IOException("we seem to have reached the end of the stream and get - // zeroes"); - System.err.println("we seem to have reached the end of the stream and get zeroes"); + // throw new IOException(LocalizationManager.getInstance().get("println.war3objectdatachangeset_loadtable_zeroes"); + System.err.println(LocalizationManager.getInstance().get("println.war3objectdatachangeset_loadtable_zeroes")); } if (isOriginal) { debugprint("StandardUnit \"" + origid + "\" " + ccount + " {"); @@ -525,7 +525,7 @@ public boolean loadtable(final BlizzardDataInputStream stream, final ObjectMap m for (int j = 0; j < ccount; j++) { final War3ID chid = readWar3ID(stream); if (noid.equals(chid)) { - throw new IOException("the input stream might be screwed"); + throw new IOException(LocalizationManager.getInstance().get("exception.war3objectdatachangeset_loadtable_screwed")); } if (!detected) { detected = detectKind(chid); @@ -610,7 +610,7 @@ public boolean loadtable(final BlizzardDataInputStream stream, final ObjectMap m } debugprint("}"); if (newid == null && !isOriginal) { - throw new IllegalStateException("custom unit has no ID!"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.war3objectdatachangeset_loadtable_custom_unit")); } map.put(isOriginal ? origid : newid, existingObject); final long endNanoTime = System.nanoTime(); @@ -779,15 +779,15 @@ private void saveWriteChars(final BlizzardDataOutputStream outputStream, final c public boolean save(final BlizzardDataOutputStream outputStream, final boolean generateWTS) throws IOException { if (generateWTS) { - throw new UnsupportedOperationException("FAIL cannot generate WTS, needs more code"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("exception.war3objectdatachangeset_save_generate")); } version = 2; outputStream.writeInt(version); if (!saveTable(outputStream, original, true)) { - throw new RuntimeException("Failed to save standard unit custom data"); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.war3objectdatachangeset_save_standard")); } if (!saveTable(outputStream, custom, false)) { - throw new RuntimeException("Failed to save custom unit custom data"); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.war3objectdatachangeset_save_custom")); } return true; } diff --git a/craft3data/src/com/hiveworkshop/wc3/user/DirectorySelector.java b/craft3data/src/com/hiveworkshop/wc3/user/DirectorySelector.java index 54a358f6a..4775953a4 100644 --- a/craft3data/src/com/hiveworkshop/wc3/user/DirectorySelector.java +++ b/craft3data/src/com/hiveworkshop/wc3/user/DirectorySelector.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.user; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -15,9 +16,9 @@ public class DirectorySelector extends JPanel implements ActionListener { final static long serialVersionUID = 5L; - JLabel text = new JLabel("Please select a valid Warcraft III game directory:"); + JLabel text = new JLabel(LocalizationManager.getInstance().get("label.directoryselector_directoryselector_directory")); JTextField pathField; - JButton browseButton = new JButton("Browse"); + JButton browseButton = new JButton(LocalizationManager.getInstance().get("button.directoryselector_directoryselector_browse")); public DirectorySelector(final String defaultDir, final String specialText) { text.setText(text.getText()); @@ -89,7 +90,7 @@ public void actionPerformed(final ActionEvent e) { } if( !good ) { - JOptionPane.showMessageDialog(null, "You do not have permissions to access the chosen folder.\nYou should \"Run as Administrator\" on this program, or otherwise gain file permissions to the target folder, for the texture loader to work on that folder.","WARNING: Texture-Loader Won't Work", JOptionPane.WARNING_MESSAGE); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("dialog.directoryselector_directoryselector_permissions"), LocalizationManager.getInstance().get("dialog.directoryselector_directoryselector_warning"), JOptionPane.WARNING_MESSAGE); } pathField.setText(jfc.getSelectedFile().getAbsolutePath()); diff --git a/craft3data/src/com/hiveworkshop/wc3/user/SaveProfile.java b/craft3data/src/com/hiveworkshop/wc3/user/SaveProfile.java index 128c61b3e..ec01e0855 100644 --- a/craft3data/src/com/hiveworkshop/wc3/user/SaveProfile.java +++ b/craft3data/src/com/hiveworkshop/wc3/user/SaveProfile.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.user; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.io.FileInputStream; @@ -212,8 +213,8 @@ public static boolean testTargetFolderReadOnly(final String wcDirectory) { final File datat = new File(wcDirectory + "/Data"); if (!temp.exists() && !datat.exists()) { JOptionPane.showMessageDialog(null, - "Could not find war3.mpq. Please choose a valid Warcraft III installation.", - "WARNING: Needs WC3 Installation", JOptionPane.WARNING_MESSAGE); + LocalizationManager.getInstance().get("dialog.saveprofile_testtargetfolderreadonly_find"), + LocalizationManager.getInstance().get("dialog.saveprofile_testtargetfolderreadonly_needs"), JOptionPane.WARNING_MESSAGE); // requestNewWc3Directory(); return false; } diff --git a/craft3data/src/de/wc3data/image/TgaFile.java b/craft3data/src/de/wc3data/image/TgaFile.java index dbfad0fdb..61c4315dc 100644 --- a/craft3data/src/de/wc3data/image/TgaFile.java +++ b/craft3data/src/de/wc3data/image/TgaFile.java @@ -3,6 +3,7 @@ * and open the template in the editor. */ package de.wc3data.image; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.image.BufferedImage; import java.awt.image.DataBuffer; @@ -62,10 +63,10 @@ public static BufferedImage readTGA(final String name, final InputStream stream) // Verify Header if ((header[0] | header[1]) != 0) { - throw new IllegalStateException("Error " + name); + throw new IllegalStateException(LocalizationManager.getInstance().get("global.dialog.error") + " " + name); } if (header[2] != 2) { - throw new IllegalStateException("Error " + name); + throw new IllegalStateException(LocalizationManager.getInstance().get("global.dialog.error") + " " + name); } int w = 0, h = 0; w |= (header[12] & 0xFF) << 0; @@ -80,21 +81,21 @@ public static BufferedImage readTGA(final String name, final InputStream stream) } else if (header[16] == 32) { alpha = true; } else { - throw new IllegalStateException("Error " + name + " invalid pixel depth: " + header[16]); + throw new IllegalStateException(LocalizationManager.getInstance().get("global.dialog.error") + " " + name + LocalizationManager.getInstance().get("exception.tgafile_readtga_invalid_pixel_depth") + header[16]); } if ((header[17] & 15) != (alpha ? 8 : 0)) { - throw new IllegalStateException("Error " + name); + throw new IllegalStateException(LocalizationManager.getInstance().get("global.dialog.error") + " " + name); } final BufferedImage dst = new BufferedImage(w, h, alpha ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB); final int[] pixels = ((DataBufferInt) dst.getRaster().getDataBuffer()).getData(); if (pixels.length != w * h) { - throw new IllegalStateException("Error " + name); + throw new IllegalStateException(LocalizationManager.getInstance().get("global.dialog.error") + " " + name); } if (data.length < pixels.length * (alpha ? 4 : 3)) { - throw new IllegalStateException("Error " + name + " not enaugh pixel data"); + throw new IllegalStateException(LocalizationManager.getInstance().get("global.dialog.error") + " " + name + LocalizationManager.getInstance().get("exception.tgafile_readtga_not_enaugh_pixel_data")); } if (alpha) { @@ -142,7 +143,7 @@ public static BufferedImage readTGA(final String name, final InputStream stream) } } else { final int headerval = header[17] >> 4; - throw new UnsupportedOperationException("Error " + name + " (" + headerval + ")"); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("global.dialog.error") + " " + name + " (" + headerval + ")"); } return dst; diff --git a/craft3data/src/de/wc3data/stream/StreamUtils.java b/craft3data/src/de/wc3data/stream/StreamUtils.java index c455dc4e9..e83bcc54b 100644 --- a/craft3data/src/de/wc3data/stream/StreamUtils.java +++ b/craft3data/src/de/wc3data/stream/StreamUtils.java @@ -1,4 +1,5 @@ package de.wc3data.stream; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; @@ -63,8 +64,8 @@ public static void checkId(final BlizzardDataInputStream in, final String name) final String found = in.readCharsAsString(4); if (!found.equals(name)) { throw new IOException( - "Error loading model: CheckID failed, required " + name - + " found " + found); + LocalizationManager.getInstance().get("exception.streamutils_checkId_failed") + name + + LocalizationManager.getInstance().get("exception.streamutils_checkId_found") + found); } } @@ -81,16 +82,16 @@ public static void checkId(final BlizzardDataInputStream in, final String name) * if(lastCheck != null){ * * if(!name.equals(lastCheck)){ throw new IOException( - * "Error loading model: CheckID failed after optinal check, required " + - * name + " found " + lastCheck); } + * LocalizationManager.getInstance().get("exception.streamutils_checkId_failed_optional") + + * name + LocalizationManager.getInstance().get("exception.streamutils_checkId_found") + lastCheck); } * * lastCheck=null; * * }else{ * * String found = in.readCharsAsString(4); if (!found.equals(name)) { throw - * new IOException("Error loading model: CheckID failed, required " + name + - * " found " + found); } } } + * new IOException(LocalizationManager.getInstance().get("exception.streamutils_checkId_failed") + name + + * LocalizationManager.getInstance().get("exception.streamutils_checkId_found") + found); } } } */ public static float[] loadFloatArray(final BlizzardDataInputStream in, final int size) diff --git a/craft3data/src/mpq/ArchivedFile.java b/craft3data/src/mpq/ArchivedFile.java index 39fa3fd5b..0e2cd413d 100644 --- a/craft3data/src/mpq/ArchivedFile.java +++ b/craft3data/src/mpq/ArchivedFile.java @@ -1,4 +1,5 @@ package mpq; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.io.Serializable; @@ -50,7 +51,7 @@ public ArchivedFile( MPQArchive archive, HashLookup search, BlockTable.Entry fil if( hasFlag(BlockTable.FLAG_COMPRESS | BlockTable.FLAG_IMPLODE) ){ // blocks cannot be both compressed and imploded - if( hasFlag(BlockTable.FLAG_COMPRESS) && hasFlag(BlockTable.FLAG_IMPLODE) ) throw new MPQException("invalid block: a block is both compressed and imploded"); + if( hasFlag(BlockTable.FLAG_COMPRESS) && hasFlag(BlockTable.FLAG_IMPLODE) ) throw new MPQException(LocalizationManager.getInstance().get("exception.archivedfile_invalid_block")); // determine the type of sector compression to use if( hasFlag(BlockTable.FLAG_COMPRESS) ){ @@ -104,21 +105,21 @@ public void loadOffsets( SeekableByteChannel in ) throws IOException, MPQExcepti // validate offsets in case of corruption if( blockOffsets[0] >= 0 && blockOffsets[0] < blockOffsets.length * 4 || - blockOffsets[0] < 0 && blockOffsets[blockOffsets.length - 1] > 0 ) throw new MPQException("block sector intersects sector offset table"); + blockOffsets[0] < 0 && blockOffsets[blockOffsets.length - 1] > 0 ) throw new MPQException(LocalizationManager.getInstance().get("exception.archivedfile_loadoffsets_intersects")); else if( blockOffsets[0] < 0 || blockOffsets[0] > blockOffsets.length * 4 ) - System.err.printf("block at %X has detached sectors starting at %X (%d bytes from end of sector table)%n", + System.err.printf(LocalizationManager.getInstance().get("printf.archivedfile_loadoffsets_detached"), fileOffset, fileOffset + blockOffsets[0], blockOffsets[0] - blockOffsets.length * 4); if( fileOffset + blockOffsets[0] < 0 || fileOffset + blockOffsets[blockOffsets.length - 1] > in.size() ) - throw new MPQException("block sector located outside channel"); + throw new MPQException(LocalizationManager.getInstance().get("exception.archivedfile_loadoffsets_outside")); for( int i = 1, prevoff = blockOffsets[0] ; i < blockOffsets.length ; i+= 1){ int curroff = blockOffsets[i]; - if( curroff < prevoff ) throw new MPQException("block sector with negative size"); + if( curroff < prevoff ) throw new MPQException(LocalizationManager.getInstance().get("exception.archivedfile_loadoffsets_negative")); prevoff = curroff; } // load CRC sector if present if( hasFlag(BlockTable.FLAG_SECTOR_CRC) && blockOffsets[blockOffsets.length - 1] != blockOffsets[blockOffsets.length - 2] ){ - System.err.println("block sector CRC reading currently not supported"); + System.err.println(LocalizationManager.getInstance().get("printf.archivedfile_loadoffsets_supported")); } ready = true; diff --git a/craft3data/src/mpq/ArchivedFileExtractor.java b/craft3data/src/mpq/ArchivedFileExtractor.java index 7703f6104..d1ebd676c 100644 --- a/craft3data/src/mpq/ArchivedFileExtractor.java +++ b/craft3data/src/mpq/ArchivedFileExtractor.java @@ -1,4 +1,5 @@ package mpq; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.nio.ByteBuffer; @@ -44,13 +45,13 @@ public ByteBuffer readBlock(ByteBuffer bufferold, SeekableByteChannel in, Archiv // *** CRC check goes here if( file.blockChecksums != null ){ // TODO add support for CRC - System.err.println("block sector CRC validation currently not supported"); + System.err.println(LocalizationManager.getInstance().get("println.archivedfileextractor_readblock_supported")); } // *** decompress if required if( file.compression > 0 ){ // only decompress if block is compressed - if( bufferold.limit() < currentSize ){ + if( bufferold.limit() < currentSize ){ // decompress block if( file.compression >= 3 ){ bufferold = decompress.blockDecompress3(bufferold, file.blockShift); diff --git a/craft3data/src/mpq/ArchivedFileStream.java b/craft3data/src/mpq/ArchivedFileStream.java index 3776105f2..760792feb 100644 --- a/craft3data/src/mpq/ArchivedFileStream.java +++ b/craft3data/src/mpq/ArchivedFileStream.java @@ -1,4 +1,5 @@ package mpq; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.nio.ByteBuffer; @@ -50,7 +51,7 @@ public long position() throws IOException { public SeekableByteChannel position(long newPosition) throws IOException { // *** argument validation as described by SeekableByteChannel interface - if( newPosition < 0 ) throw new IllegalArgumentException("files cannot have a negative positon"); + if( newPosition < 0 ) throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.archivedfilestream_position_negative")); // update stream position position = newPosition; diff --git a/craft3data/src/mpq/HashTable.java b/craft3data/src/mpq/HashTable.java index aa0174ff0..b40704fba 100644 --- a/craft3data/src/mpq/HashTable.java +++ b/craft3data/src/mpq/HashTable.java @@ -1,4 +1,5 @@ package mpq; +import hiveworkshop.localizationmanager.LocalizationManager; import mpq.data.HashTableEntry; @@ -22,7 +23,7 @@ public int lookupBlock(HashLookup what) throws MPQException{ pos = ( pos + 1 ) & mask; if(pos == index) break; } - throw new MPQException("lookup not found"); + throw new MPQException(LocalizationManager.getInstance().get("exception.hashtable_lookupblock_found")); } /*public static int lookupBlock(Entry[] hashtable, byte[] file) throws FileNotFoundException{ diff --git a/craft3data/src/mpq/MPQArchive.java b/craft3data/src/mpq/MPQArchive.java index db05042f8..cecb20496 100644 --- a/craft3data/src/mpq/MPQArchive.java +++ b/craft3data/src/mpq/MPQArchive.java @@ -1,4 +1,5 @@ package mpq; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.IOException; import java.nio.ByteBuffer; @@ -35,7 +36,7 @@ private ArchiveHeader locateArchive(SeekableByteChannel in) throws IOException, in.position(archiveOffset); while( buffer.hasRemaining() ) if( in.read(buffer) == -1 ) - throw new MPQException("channel does not contain a MPQ archive"); + throw new MPQException(LocalizationManager.getInstance().get("exception.mqparchive_locatearchive_contain")); buffer.clear(); // check header validity @@ -99,7 +100,7 @@ private void deserializeHashTable(SeekableByteChannel in, ArchiveHeader archiveh return; // hashtable size not power of 2 }else if( (htsize & htsize - 1) != 0 ) - throw new MPQException("hashtable was not power of two ( was " + htsize + " )"); + throw new MPQException(LocalizationManager.getInstance().get("exception.mqparchive_deserializehashtable_power") + htsize + " )"); // *** read MPQ archive hashtable ByteBuffer buffer = ByteBuffer.allocate(rsize); @@ -116,7 +117,7 @@ private void deserializeHashTable(SeekableByteChannel in, ArchiveHeader archiveh // *** decompress hashtable if( csize < rsize ){ buffer = new Compression().blockDecompressAny(buffer, ByteBuffer.allocate(rsize)); - if( buffer.limit() != buffer.capacity() ) System.err.println("hashtable decompressed size did not match expected size"); + if( buffer.limit() != buffer.capacity() ) System.err.println(LocalizationManager.getInstance().get("println.mqparchive_deserializehashtable_expected")); } // *** deserialize hashtable @@ -170,7 +171,7 @@ private void deserializeBlockTable(SeekableByteChannel in, ArchiveHeader archive return; // blocktable size clamp }else if( btsize > 1 << 20 || btsize < 0 ){ - System.err.println("blocktable is stupidly large ( " + btsize + " ) so was clamped to " + (1 << 20)); + System.err.println(LocalizationManager.getInstance().get("println.mqparchive_deserializeblocktable_large") + " ( " + btsize + " ) " + LocalizationManager.getInstance().get("println.mqparchive_deserializeblocktable_clamped") + (1 << 20)); btsize = 1 << 20; } @@ -189,7 +190,7 @@ private void deserializeBlockTable(SeekableByteChannel in, ArchiveHeader archive // *** decompress blocktable if( csize < rsize ){ buffer = new Compression().blockDecompressAny(buffer, ByteBuffer.allocate(rsize)); - if( buffer.limit() != buffer.capacity() ) System.err.println("blocktable decompressed size did not match expected size"); + if( buffer.limit() != buffer.capacity() ) System.err.println(LocalizationManager.getInstance().get("println.mqparchive_deserializeblocktable_expected")); } // *** deserialize blocktable @@ -220,7 +221,7 @@ private void deserializeBlockTable(SeekableByteChannel in, ArchiveHeader archive // decompress high blocktable if( chsize < rhsize ){ buffer = new Compression().blockDecompressAny(buffer, ByteBuffer.allocate(rhsize)); - if( buffer.limit() != buffer.capacity() ) System.err.println("high blocktable decompressed size did not match expected size"); + if( buffer.limit() != buffer.capacity() ) System.err.println(LocalizationManager.getInstance().get("println.mqparchive_deserializeblocktable_high_expected")); } // deserialize high blocktable @@ -247,7 +248,7 @@ public void loadArchive(SeekableByteChannel in, boolean fold) throws IOException // *** deserialize archive components deserializeHashTable(in, archiveheader); deserializeBlockTable(in, archiveheader); - if( version >= 2 ) System.err.println("het and bet tables not supported"); + if( version >= 2 ) System.err.println(LocalizationManager.getInstance().get("println.mqparchive_loadarchive_supported")); } public MPQArchive(SeekableByteChannel in) throws MPQException, IOException{ diff --git a/craft3data/src/mpq/compression/Compression.java b/craft3data/src/mpq/compression/Compression.java index 2caa5e376..4bdc59263 100644 --- a/craft3data/src/mpq/compression/Compression.java +++ b/craft3data/src/mpq/compression/Compression.java @@ -1,4 +1,5 @@ package mpq.compression; +import hiveworkshop.localizationmanager.LocalizationManager; import java.nio.ByteBuffer; import java.util.zip.DataFormatException; @@ -88,21 +89,21 @@ public ByteBuffer blockDecompress3(ByteBuffer in, int size) throws Decompression break; case FLAG_BZIP2: // TODO add support - throw new DecompressionException(in, "unsupported compression type: BZIP2"); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_blockdecompress3_unsupported") + ": BZIP2"); case FLAG_SPARSE: // TODO add support - throw new DecompressionException(in, "unsupported compression type: SPARSE"); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_blockdecompress3_unsupported") + ": SPARSE"); case FLAG_LZMA: // TODO add support - throw new DecompressionException(in, "unsupported compression type: LZMA"); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_blockdecompress3_unsupported") + ": LZMA"); case FLAG_SPARSE_DEFLATE: // TODO add support - throw new DecompressionException(in, "unsupported compression type: SPARSE"); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_blockdecompress3_unsupported") + ": SPARSE"); case FLAG_SPARSE_BZIP2: // TODO add support - throw new DecompressionException(in, "unsupported compression type: SPARSE"); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_blockdecompress3_unsupported") + ": SPARSE"); default: - throw new DecompressionException(in, "sector has unknown compression"); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_blockdecompress3_unknown")); } if( size >= 0 ) @@ -138,7 +139,7 @@ public ByteBuffer blockDecompress2(ByteBuffer in, int size) throws Decompression // apply decompression flag at a time if( (mask & FLAG_BZIP2) != 0 ){ // TODO add support - throw new DecompressionException(in, "unsupported compression type: BZIP2"); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_blockdecompress2_unsupported") + ": BZIP2"); } if( (mask & FLAG_IMPLODE) != 0 ){ sectorExplode(flip ? out : in, flip ? in : out); @@ -165,7 +166,7 @@ public ByteBuffer blockDecompress2(ByteBuffer in, int size) throws Decompression (flip ? out : in).clear(); flip = !flip; } - if( (mask & FLAG_SPARSE) != 0 ) System.err.println("sparse compression flag present in mpq version that lacked support"); + if( (mask & FLAG_SPARSE) != 0 ) System.err.println(LocalizationManager.getInstance().get("exception.compression_blockdecompress2_compression")); if( flip ){ bufferCache[size] = in; @@ -195,7 +196,7 @@ private void sectorExplode(ByteBuffer in, ByteBuffer out) throws DecompressionEx try { pkexploderDecompress.explode(in, out); } catch (PKException e) { - throw new DecompressionException(in, "sector explode exception", e); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_sectorexplode_explode"), e); } out.flip(); @@ -208,7 +209,7 @@ private void sectorInflate(ByteBuffer in, ByteBuffer out) throws DecompressionEx zlibInflater.setInput(in.array(), in.position(), in.remaining()); out.position(zlibInflater.inflate(out.array())); } catch ( DataFormatException e ) { - throw new DecompressionException(in, "sector deflae exception", e); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_sectorinflated_deflae"), e); } out.flip(); @@ -218,7 +219,7 @@ private void sectorHuffmanExpand(ByteBuffer in, ByteBuffer out) throws Decompres try { huffmanDecompress.Decompress(in, out); } catch ( Exception e ) { - throw new DecompressionException(in, "sector huffman expand exception", e); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_sectorhuffmanexpand_huffman"), e); } out.flip(); @@ -228,7 +229,7 @@ private void sectorADPCMReconstruct(ByteBuffer in, ByteBuffer out, int channeln) try { adpcmDecompress.decompress(in, out, channeln); } catch ( Exception e ) { - throw new DecompressionException(in, "sector adpcm reconstruction exception", e); + throw new DecompressionException(in, LocalizationManager.getInstance().get("exception.compression_sectoradpcmreconstruct_adpcm"), e); } out.flip(); @@ -266,11 +267,11 @@ public void blockExplode(ByteBuffer block, ByteBuffer extra){ try { pkexploderDecompress.explode(block, extra); } catch (PKException e) { - System.err.println("pkware decompression exception: "+e.getLocalizedMessage()); + System.err.println(LocalizationManager.getInstance().get("println.compression_blockexplode_decompression") + e.getLocalizedMessage()); } if( extra.position() != extra.limit() ){ - System.err.println("a block failed exploding"); + System.err.println(LocalizationManager.getInstance().get("println.compression_blockexplode_exploding")); } block.clear(); @@ -285,7 +286,7 @@ public boolean blockDecompress(ByteBuffer block, ByteBuffer extra, boolean stric byte mask = block.get(); if( strict ){ - System.err.println("strict compression flag mode not supported"); + System.err.println(LocalizationManager.getInstance().get("println.compression_blockdecompress_supported")); } boolean swap = false; @@ -293,15 +294,15 @@ public boolean blockDecompress(ByteBuffer block, ByteBuffer extra, boolean stric // BZIP2 if( (mask & 0x10) > 0 ){ // TODO add support - throw new DecompressionException(block, "unsupported compression type: BZIP2"); + throw new DecompressionException(block, LocalizationManager.getInstance().get("exception.compression_blockdecompress_bzip2")); } // PKWARE - if( (mask & 0x08) > 0 ){ + if( (mask & 0x08) > 0 ){ try { pkexploderDecompress.explode(block, extra); } catch (PKException e) { - throw new DecompressionException(block, "failed PKWARE decompression", e); + throw new DecompressionException(block, LocalizationManager.getInstance().get("exception.compression_blockdecompress_pkware_decompression"), e); } block.rewind(); block.limit(extra.limit()); @@ -315,13 +316,13 @@ public boolean blockDecompress(ByteBuffer block, ByteBuffer extra, boolean stric } // ZLIB - if( (mask & 0x02) > 0 ){ + if( (mask & 0x02) > 0 ){ try { Inflater zlibInflater = new Inflater(); zlibInflater.setInput(block.array(), block.position(), block.remaining()); extra.position(zlibInflater.inflate(extra.array())); } catch ( DataFormatException e ) { - throw new DecompressionException(block, "failed ZLIB decompression", e); + throw new DecompressionException(block, LocalizationManager.getInstance().get("exception.compression_blockdecompress_zlib_decompression"), e); } block.rewind(); block.limit(extra.limit()); @@ -382,12 +383,12 @@ public boolean blockDecompress(ByteBuffer block, ByteBuffer extra, boolean stric // SPARSE if( (mask & 0x20) > 0 ){ // TODO add support - throw new DecompressionException(block, "unsupported compression type: SPARSE"); + throw new DecompressionException(block, LocalizationManager.getInstance().get("exception.compression_blockdecompress_sparse")); } if( block.limit() != extra.limit() ){ - throw new DecompressionException(block, "decompression result was smaller than expected"); - //System.err.println("a sector passed decompression but failed to meet the expected size"); + throw new DecompressionException(block, LocalizationManager.getInstance().get("exception.compression_blockdecompress_smaller")); + //System.err.println(LocalizationManager.getInstance().get("println.compression_blockdecompress_size")); //block.limit(extra.limit()); } diff --git a/craft3data/src/mpq/compression/pkware/PKExploder.java b/craft3data/src/mpq/compression/pkware/PKExploder.java index 8a6db4c2e..4f1113f61 100644 --- a/craft3data/src/mpq/compression/pkware/PKExploder.java +++ b/craft3data/src/mpq/compression/pkware/PKExploder.java @@ -1,4 +1,5 @@ package mpq.compression.pkware; +import hiveworkshop.localizationmanager.LocalizationManager; import java.nio.BufferUnderflowException; import java.nio.ByteBuffer; @@ -132,7 +133,7 @@ private void expand() throws PKException{ if(source >= 0) out.put(target++, out.get(source++)); else{ - throw new PKException("distance pointing before output"); + throw new PKException(LocalizationManager.getInstance().get("exception.pkexploder_expand_pointing")); } length_code-= 1; } @@ -155,9 +156,9 @@ private void expand() throws PKException{ break; case CMP_ASCII: // TODO add ASCII decompression stuff here - System.err.println("pkware ascii compression not supported"); + System.err.println(LocalizationManager.getInstance().get("exception.pkexploder_expand_compression")); return; - default: throw new PKException("invalid compression mode"); + default: throw new PKException(LocalizationManager.getInstance().get("exception.pkexploder_expand_invalid")); } } } @@ -167,7 +168,7 @@ public void explode(ByteBuffer in, ByteBuffer out) throws PKException{ // set in and out buffers this.in = in; this.out = out; - if( in.remaining() <= 4 ) throw new PKException("received bad data"); + if( in.remaining() <= 4 ) throw new PKException(LocalizationManager.getInstance().get("exception.pkexploder_explode_received")); // initialize state with compression header ctype = in.get(); @@ -176,7 +177,7 @@ public void explode(ByteBuffer in, ByteBuffer out) throws PKException{ extra_bits = 0; // dictionary size mask - if( dsize_bits < 4 || 6 < dsize_bits ) throw new PKException("invalid dictionary size"); + if( dsize_bits < 4 || 6 < dsize_bits ) throw new PKException(LocalizationManager.getInstance().get("exception.pkexploder_explode_dictionary")); dsize_mask = (byte) (0xFFFF >> (0x10 - dsize_bits)); // setup compression type dependent data @@ -184,16 +185,16 @@ public void explode(ByteBuffer in, ByteBuffer out) throws PKException{ case CMP_BINARY: break; case CMP_ASCII: // TODO add ASCII decompression stuff here - System.err.println("pkware ascii compression not supported"); + System.err.println(LocalizationManager.getInstance().get("exception.pkexploder_explode_compression")); return; - default: throw new PKException("invalid compression mode"); + default: throw new PKException(LocalizationManager.getInstance().get("exception.pkexploder_explode_invalid")); } // perform explode try{ expand(); }catch( BufferUnderflowException e ){ - throw new PKException("unexpected end of data"); + throw new PKException(LocalizationManager.getInstance().get("exception.pkexploder_explode_unexpected")); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/GoodSLKEdit.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/GoodSLKEdit.java index 48a86956d..d0efbb191 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/GoodSLKEdit.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/GoodSLKEdit.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.BorderLayout; import java.awt.event.ActionEvent; @@ -30,7 +31,7 @@ public class GoodSLKEdit extends JPanel { private final DefaultTableModel defaultTableModel; public GoodSLKEdit() { - jfc.setFileFilter(new FileNameExtensionFilter("SLK Files of Warcraft", "slk")); + jfc.setFileFilter(new FileNameExtensionFilter(LocalizationManager.getInstance().get("exception.goodslkedit_goodslkedit_slk"), "slk")); setLayout(new BorderLayout()); defaultTableModel = new DefaultTableModel(); table = new JTable(defaultTableModel); @@ -38,7 +39,7 @@ public GoodSLKEdit() { } public static void main(final String[] args) { - final JFrame frame = new JFrame("Good SLK Edit"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("frame.goodslkedit_goodslkedit_slk")); final GoodSLKEdit goodSLKEdit = new GoodSLKEdit(); frame.setJMenuBar(goodSLKEdit.createJMenuBar()); frame.setContentPane(goodSLKEdit); @@ -51,8 +52,8 @@ public static void main(final String[] args) { public JMenuBar createJMenuBar() { final JMenuBar menuBar = new JMenuBar(); - final JMenu fileMenu = new JMenu("File"); - final JMenuItem openMenuItem = new JMenuItem("Open"); + final JMenu fileMenu = new JMenu(LocalizationManager.getInstance().get("menu.goodslkedit_goodslkedit_file")); + final JMenuItem openMenuItem = new JMenuItem(LocalizationManager.getInstance().get("menu.goodslkedit_goodslkedit_open")); openMenuItem.addActionListener(new ActionListener() { diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/TestMain.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/TestMain.java index cbfe016f7..5d4c2cdb3 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/TestMain.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/TestMain.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.util.HashMap; @@ -40,7 +41,7 @@ public static void main(final String[] args) { myRoot.add(translation); final Geoset geoset = new Geoset(); - geoset.setMaterial(new Material(new Layer("None", new Bitmap("Textures\\white.blp")))); + geoset.setMaterial(new Material(new Layer(LocalizationManager.getInstance().get("layer.testmain_main_none"), new Bitmap("Textures\\white.blp")))); final int nFaces = 42; final double ang = Math.PI * 2 / nFaces; for (int i = 0; i < nFaces; i++) { diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/BetterUnitEditorModelSelector.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/BetterUnitEditorModelSelector.java index f537245e1..0c2b6022f 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/BetterUnitEditorModelSelector.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/BetterUnitEditorModelSelector.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.models; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Dimension; import java.io.FileNotFoundException; @@ -68,7 +69,7 @@ public BetterUnitEditorModelSelector(final MutableObjectData unitData, final JPanel temp = new JPanel(); temp.add(debugLabel); - modelPanel = new PerspDisplayPanel("blank", modelDisp, new ProgramPreferences(), + modelPanel = new PerspDisplayPanel(LocalizationManager.getInstance().get("panel.betteruniteditormodelselector_betteruniteditormodelselector_blank"), modelDisp, new ProgramPreferences(), new RenderModel(modelDisp.getModel(), null)); fillTable(); @@ -116,15 +117,13 @@ public void fillTable() { e.printStackTrace(); } // loadFile(MPQHandler.get().getGameFile(filepath), true); - // modelMenu.getAccessibleContext().setAccessibleDescription("Allows - // the user to control which parts of the model are displayed for - // editing."); + // modelMenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("description.betteruniteditormodelselector_filltable_control")); // modelMenu.setEnabled(true); // modelDisp = new MDLDisplay(toLoad, null); } catch (final Exception exc) { exc.printStackTrace(); // bad model! - JOptionPane.showMessageDialog(getParent(), "The chosen model could not be used.", "Program Error", + JOptionPane.showMessageDialog(getParent(), LocalizationManager.getInstance().get("dialog.betteruniteditormodelselector_filltable_chosen"), LocalizationManager.getInstance().get("dialog.betteruniteditormodelselector_filltable_error"), JOptionPane.ERROR_MESSAGE); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/ObjectEditorModelingFrame.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/ObjectEditorModelingFrame.java index b4e6d760c..b48bba615 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/ObjectEditorModelingFrame.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/ObjectEditorModelingFrame.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.models; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.image.BufferedImage; import java.io.IOException; @@ -21,7 +22,7 @@ public class ObjectEditorModelingFrame extends JFrame { UnitEditorModelSelector panel; public ObjectEditorModelingFrame() { - super("Object Editor - Model Selection"); + super(LocalizationManager.getInstance().get("super.objecteditormodelingframe_objecteditormodelingframe_editor")); try { List images = ICODecoder.read(ObjectEditorFrame.class.getResourceAsStream("worldedit.ico")); List finalImages = new ArrayList(); @@ -39,8 +40,8 @@ public ObjectEditorModelingFrame() { } JPanel overPanel = new JPanel(); panel = new UnitEditorModelSelector(); - JButton ok = new JButton("OK!"); - JButton cancel = new JButton("Cancel"); + JButton ok = new JButton(LocalizationManager.getInstance().get("global.button.ok")); + JButton cancel = new JButton(LocalizationManager.getInstance().get("global.button.cancel")); overPanel.add(panel); overPanel.add(cancel); overPanel.add(ok); @@ -54,7 +55,7 @@ public ObjectEditorModelingFrame() { layout.setVerticalGroup(layout.createSequentialGroup() .addComponent(panel) .addGroup(layout.createParallelGroup() - .addComponent(cancel) + .addComponent(cancel) .addComponent(ok) ) ); overPanel.setLayout(layout); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/UnitEditorModelSelector.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/UnitEditorModelSelector.java index 7b68402be..5e73579a8 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/UnitEditorModelSelector.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/UnitEditorModelSelector.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.models; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Dimension; import java.awt.event.ActionEvent; @@ -115,7 +116,7 @@ public UnitEditorModelSelector() { temp.add(debugLabel); // TODO null prefs - modelPanel = new PerspDisplayPanel("blank", modelDisp, null, new RenderModel(modelDisp.getModel(), null)); + modelPanel = new PerspDisplayPanel(LocalizationManager.getInstance().get("panel.uniteditormodelselector_uniteditormodelselector_blank"), modelDisp, null, new RenderModel(modelDisp.getModel(), null)); // table.setShowGrid(false); fillTable(); @@ -201,7 +202,7 @@ public void fillTable() { } catch (final Exception exc) { exc.printStackTrace(); // bad model! - JOptionPane.showMessageDialog(getParent(), "The chosen model could not be used.", "Program Error", + JOptionPane.showMessageDialog(getParent(), LocalizationManager.getInstance().get("dialog.uniteditormodelselector_filltable_chosen"), LocalizationManager.getInstance().get("dialog.uniteditormodelselector_filltable_error"), JOptionPane.ERROR_MESSAGE); } // Vector colNames = new Vector(); @@ -278,7 +279,7 @@ public UnitEditorTreeModel(final DefaultMutableTreeNode root) { public void loadRaceData(final DefaultMutableTreeNode folder, final RaceData data) { final DefaultMutableTreeNode units = new DefaultMutableTreeNode(WEString.getString("WESTRING_UNITS")); - final DefaultMutableTreeNode buildings = new DefaultMutableTreeNode( + final DefaultMutableTreeNode buildings = new DefaultMutableTreeNode( WEString.getString("WESTRING_UTYPE_BUILDINGS")); final DefaultMutableTreeNode heroes = new DefaultMutableTreeNode(WEString.getString("WESTRING_UTYPE_HEROES")); final DefaultMutableTreeNode special = new DefaultMutableTreeNode(WEString.getString("WESTRING_UTYPE_SPECIAL")); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/DoodadTabTreeBrowserBuilder.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/DoodadTabTreeBrowserBuilder.java index 46372dbad..97f7bed2a 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/DoodadTabTreeBrowserBuilder.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/DoodadTabTreeBrowserBuilder.java @@ -13,7 +13,7 @@ public class DoodadTabTreeBrowserBuilder implements ObjectTabTreeBrowserBuilder public TopLevelCategoryFolder build() { final TopLevelCategoryFolder root = new TopLevelCategoryFolder( new SortByDoodadCategoryFolder(WEString.getString("WESTRING_DE_STANDARDDOODS"), "DoodadCategories", - DOOD_CATEGORY), + DOOD_CATEGORY), new SortByDoodadCategoryFolder(WEString.getString("WESTRING_DE_CUSTOMDOODS"), "DoodadCategories", DOOD_CATEGORY)); return root; diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorFrame.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorFrame.java index 9c4fc3740..4ab9f31ed 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorFrame.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorFrame.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.objects; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.image.BufferedImage; import java.io.IOException; @@ -18,7 +19,7 @@ public class ObjectEditorFrame extends JFrame { ObjectEditorPanel panel; public ObjectEditorFrame() { - super("Object Editor"); + super(LocalizationManager.getInstance().get("super.objecteditorframe_objecteditorframe_editor")); try { final List images = ICODecoder.read(this.getClass().getResourceAsStream("worldedit.ico")); final List finalImages = new ArrayList<>(); @@ -62,11 +63,11 @@ public static void main(final String[] args) { final ObjectEditorFrame frame = new ObjectEditorFrame(); frame.setVisible(true); final JMenuBar menubar = new JMenuBar(); - menubar.add(new JMenu("File")); - menubar.add(new JMenu("Edit")); - menubar.add(new JMenu("View")); - menubar.add(new JMenu("Module")); - menubar.add(new JMenu("Window")); + menubar.add(new JMenu(LocalizationManager.getInstance().get("menu.objecteditorframe_objecteditorframe_file"))); + menubar.add(new JMenu(LocalizationManager.getInstance().get("menu.objecteditorframe_objecteditorframe_edit"))); + menubar.add(new JMenu(LocalizationManager.getInstance().get("menu.objecteditorframe_objecteditorframe_view"))); + menubar.add(new JMenu(LocalizationManager.getInstance().get("menu.objecteditorframe_objecteditorframe_module"))); + menubar.add(new JMenu(LocalizationManager.getInstance().get("menu.objecteditorframe_objecteditorframe_window"))); frame.setJMenuBar(menubar); frame.panel.loadHotkeys(); } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorPanel.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorPanel.java index f74ffc0e3..bc4a62aed 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorPanel.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorPanel.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.objects; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.BorderLayout; import java.awt.Color; @@ -101,16 +102,16 @@ public void addTab(final String title, final Icon icon, final Component componen getIcon(worldEditorData, "ToolBarIcon_OE_NewBuff"), createAbilityBuffEditor()); tabbedPane.addTab(WEString.getString("WESTRING_OBJTAB_UPGRADES"), getIcon(worldEditorData, "ToolBarIcon_OE_NewUpgr"), createUpgradeEditor()); - tabbedPane.addTab("Terrain", getIcon(worldEditorData, "ToolBarIcon_Module_Terrain"), createUpgradeEditor()); - tabbedPane.addTab("Lighting Effects", + tabbedPane.addTab(LocalizationManager.getInstance().get("addtab.objecteditorpanel_objecteditorpanel_terrain"), getIcon(worldEditorData, "ToolBarIcon_Module_Terrain"), createUpgradeEditor()); + tabbedPane.addTab(LocalizationManager.getInstance().get("addtab.objecteditorpanel_objecteditorpanel_lighting_effects"), new ImageIcon(IconUtils.worldEditStyleIcon( BLPHandler.get().getGameTex("ReplaceableTextures\\CommandButtons\\BTNChainLightning.blp"))), createUpgradeEditor()); - tabbedPane.addTab("Weather", + tabbedPane.addTab(LocalizationManager.getInstance().get("addtab.objecteditorpanel_objecteditorpanel_weather"), new ImageIcon(IconUtils.worldEditStyleIcon( BLPHandler.get().getGameTex("ReplaceableTextures\\CommandButtons\\BTNMonsoon.blp"))), createUpgradeEditor()); - tabbedPane.addTab("Soundsets", getIcon(worldEditorData, "ToolBarIcon_Module_Sound"), createUpgradeEditor()); + tabbedPane.addTab(LocalizationManager.getInstance().get("addtab.objecteditorpanel_objecteditorpanel_soundsets"), getIcon(worldEditorData, "ToolBarIcon_Module_Sound"), createUpgradeEditor()); final JToolBar toolBar = createToolbar(worldEditorData); toolBar.setFloatable(false); @@ -128,9 +129,9 @@ public void stateChanged(final ChangeEvent e) { createNewButton.setIcon(getIcon(worldEditorData, editorTabCustomToolbarButtonData.getIconKey())); createNewButton.setToolTipText( WEString.getString(editorTabCustomToolbarButtonData.getNewCustomObject()).replace("&", "")); - copyButton.setToolTipText( + copyButton.setToolTipText( WEString.getString(editorTabCustomToolbarButtonData.getCopyObject()).replace("&", "")); - pasteButton.setToolTipText( + pasteButton.setToolTipText( WEString.getString(editorTabCustomToolbarButtonData.getPasteObject()).replace("&", "")); } }); @@ -139,8 +140,8 @@ public void stateChanged(final ChangeEvent e) { private JToolBar createToolbar(final DataTable worldEditorData) { final JToolBar toolBar = new JToolBar(); - makeButton(worldEditorData, toolBar, "newMap", "ToolBarIcon_New", "WESTRING_TOOLBAR_NEW"); - final JButton openButton = makeButton(worldEditorData, toolBar, "openMap", "ToolBarIcon_Open", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_newmap"), "ToolBarIcon_New", "WESTRING_TOOLBAR_NEW"); + final JButton openButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_openmap"), "ToolBarIcon_Open", "WESTRING_TOOLBAR_OPEN"); openButton.addActionListener(new ActionListener() { @Override @@ -148,7 +149,7 @@ public void actionPerformed(final ActionEvent e) { openSpecificTabData(); } }); - final JButton saveButton = makeButton(worldEditorData, toolBar, "saveMap", "ToolBarIcon_Save", + final JButton saveButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_savemap"), "ToolBarIcon_Save", "WESTRING_TOOLBAR_SAVE"); saveButton.addActionListener(new ActionListener() { @Override @@ -158,14 +159,14 @@ public void actionPerformed(final ActionEvent e) { }); toolBar.add(Box.createHorizontalStrut(8)); final TransferActionListener transferActionListener = new TransferActionListener(); - copyButton = makeButton(worldEditorData, toolBar, "copy", "ToolBarIcon_Copy", "WESTRING_MENU_OE_UNIT_COPY"); + copyButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_copy·"), "ToolBarIcon_Copy", "WESTRING_MENU_OE_UNIT_COPY"); copyButton.addActionListener(transferActionListener); copyButton.setActionCommand((String) TransferHandler.getCopyAction().getValue(Action.NAME)); - pasteButton = makeButton(worldEditorData, toolBar, "paste", "ToolBarIcon_Paste", "WESTRING_MENU_OE_UNIT_PASTE"); + pasteButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_paste"), "ToolBarIcon_Paste", "WESTRING_MENU_OE_UNIT_PASTE"); pasteButton.addActionListener(transferActionListener); pasteButton.setActionCommand((String) TransferHandler.getPasteAction().getValue(Action.NAME)); toolBar.add(Box.createHorizontalStrut(8)); - createNewButton = makeButton(worldEditorData, toolBar, "createNew", "ToolBarIcon_OE_NewUnit", + createNewButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_createnew"), "ToolBarIcon_OE_NewUnit", "WESTRING_MENU_OE_UNIT_NEW"); createNewButton.addActionListener(new ActionListener() { @Override @@ -175,11 +176,11 @@ public void actionPerformed(final ActionEvent e) { } }); toolBar.add(Box.createHorizontalStrut(8)); - makeButton(worldEditorData, toolBar, "terrainEditor", "ToolBarIcon_Module_Terrain", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_terraineditor"), "ToolBarIcon_Module_Terrain", "WESTRING_MENU_MODULE_TERRAIN"); - makeButton(worldEditorData, toolBar, "scriptEditor", "ToolBarIcon_Module_Script", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_scripteditor"), "ToolBarIcon_Module_Script", "WESTRING_MENU_MODULE_SCRIPTS"); - makeButton(worldEditorData, toolBar, "soundEditor", "ToolBarIcon_Module_Sound", "WESTRING_MENU_MODULE_SOUND"); + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_soundeditor"), "ToolBarIcon_Module_Sound", "WESTRING_MENU_MODULE_SOUND"); // final JButton objectEditorButton = makeButton(worldEditorData, toolBar, // "objectEditor", // "ToolBarIcon_Module_ObjectEditor", "WESTRING_MENU_OBJECTEDITOR"); @@ -192,10 +193,10 @@ public void actionPerformed(final ActionEvent e) { objectEditorButton.setEnabled(false); objectEditorButton.setDisabledIcon(objectEditorButton.getIcon()); toolBar.add(objectEditorButton); - makeButton(worldEditorData, toolBar, "campaignEditor", "ToolBarIcon_Module_Campaign", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_campaigneditor"), "ToolBarIcon_Module_Campaign", "WESTRING_MENU_MODULE_CAMPAIGN"); - makeButton(worldEditorData, toolBar, "aiEditor", "ToolBarIcon_Module_AIEditor", "WESTRING_MENU_MODULE_AI"); - makeButton(worldEditorData, toolBar, "objectEditor", "ToolBarIcon_Module_ObjectManager", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_aieditor"), "ToolBarIcon_Module_AIEditor", "WESTRING_MENU_MODULE_AI"); + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_objecteditor"), "ToolBarIcon_Module_ObjectManager", "WESTRING_MENU_OBJECTMANAGER"); final String legacyImportManagerIcon = worldEditorData.get("WorldEditArt") .getField("ToolBarIcon_Module_ImportManager"); @@ -205,9 +206,9 @@ public void actionPerformed(final ActionEvent e) { importManagerIconPath = "ToolBarIcon_Module_AssetManager"; importManagerMenuName = "WESTRING_MENU_ASSETMANAGER"; } - makeButton(worldEditorData, toolBar, "importEditor", importManagerIconPath, importManagerMenuName); + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_importeditor"), importManagerIconPath, importManagerMenuName); toolBar.add(Box.createHorizontalStrut(8)); - makeButton(worldEditorData, toolBar, "testMap", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.objecteditorpanel_createtoolbar_testmap"), new ImageIcon(IconUtils.worldEditStyleIcon(getIcon(worldEditorData, "ToolBarIcon_TestMap").getImage())), "WESTRING_TOOLBAR_TESTMAP").addActionListener(new ActionListener() { @Override @@ -469,11 +470,11 @@ public void saveSpecificTabData() { // jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); jFileChooser.resetChoosableFileFilters(); jFileChooser.setAcceptAllFileFilterUsed(false); - jFileChooser.setDialogTitle("Export Data from this Tab"); + jFileChooser.setDialogTitle(LocalizationManager.getInstance().get("dialog.objecteditorpanel_savespecifictabdata_export")); final int selectedIndex = tabbedPane.getSelectedIndex(); final UnitEditorPanel unitEditorPanel = editors.get(selectedIndex); JOptionPane.showMessageDialog(ObjectEditorPanel.this, - "OK, friend, we are going to export " + unitEditorPanel.getUnitData().getWorldEditorDataType()); + LocalizationManager.getInstance().get("dialog.objecteditorpanel_savespecifictabdata_export_go") + unitEditorPanel.getUnitData().getWorldEditorDataType()); jFileChooser.addChoosableFileFilter( new FileNameExtensionFilter(getFileTypeName(unitEditorPanel.getUnitData().getWorldEditorDataType()), unitEditorPanel.getUnitData().getWorldEditorDataType().getExtension())); @@ -488,7 +489,7 @@ public void saveSpecificTabData() { final File w3uFile = new File(path); if (w3uFile.exists()) { final int result = JOptionPane.showConfirmDialog(ObjectEditorPanel.this, - w3uFile.getName() + " already exists. Ok to overwrite?", "Warning", + w3uFile.getName() + LocalizationManager.getInstance().get("dialog.objecteditorpanel_savespecifictabdata_overwrite"), LocalizationManager.getInstance().get("global.dialog.warning"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (result != JOptionPane.OK_OPTION) { return; @@ -532,12 +533,12 @@ public void openSpecificTabData() { // jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); jFileChooser.resetChoosableFileFilters(); jFileChooser.setAcceptAllFileFilterUsed(false); - jFileChooser.setDialogTitle("Import Data to this Tab"); + jFileChooser.setDialogTitle(LocalizationManager.getInstance().get("dialog.objecteditorpanel_openspecifictabdata_export")); final int selectedIndex = tabbedPane.getSelectedIndex(); final UnitEditorPanel unitEditorPanel = editors.get(selectedIndex); JOptionPane.showMessageDialog(ObjectEditorPanel.this, - "OK, friend, we are going to import " + unitEditorPanel.getUnitData().getWorldEditorDataType() - + ". This will replace all settings, like WE."); + LocalizationManager.getInstance().get("dialog.objecteditorpanel_openspecifictabdata_export_go") + unitEditorPanel.getUnitData().getWorldEditorDataType() + + LocalizationManager.getInstance().get("dialog.objecteditorpanel_openspecifictabdata_replace")); jFileChooser.addChoosableFileFilter( new FileNameExtensionFilter(getFileTypeName(unitEditorPanel.getUnitData().getWorldEditorDataType()), unitEditorPanel.getUnitData().getWorldEditorDataType().getExtension())); @@ -548,7 +549,7 @@ public void openSpecificTabData() { final String path = selectedFile.getPath(); final File w3uFile = new File(path); if (!w3uFile.exists()) { - JOptionPane.showMessageDialog(ObjectEditorPanel.this, "Error. Chosen file did not exist. Retry?"); + JOptionPane.showMessageDialog(ObjectEditorPanel.this, LocalizationManager.getInstance().get("dialog.objecteditorpanel_openspecifictabdata_error")); return; } try { diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectTabTreeBrowserTransferHandler.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectTabTreeBrowserTransferHandler.java index 6c6ad94e5..3bad69468 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectTabTreeBrowserTransferHandler.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectTabTreeBrowserTransferHandler.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.objects; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Point; import java.awt.datatransfer.DataFlavor; @@ -51,12 +52,12 @@ public boolean importData(final TransferHandler.TransferSupport info) { pastedObjects.load(inputStream, null, false); } } catch (final UnsupportedFlavorException ufe) { - System.out.println("importData: unsupported data flavor"); + System.out.println(LocalizationManager.getInstance().get("println.objecttabtreebrowsertransferhandler_importdata_unsupported")); ufe.printStackTrace(); ExceptionPopup.display(ufe); return false; } catch (final IOException ioe) { - System.out.println("importData: I/O exception"); + System.out.println(LocalizationManager.getInstance().get("println.objecttabtreebrowsertransferhandler_importdata_exception")); ioe.printStackTrace(); ExceptionPopup.display(ioe); return false; @@ -91,10 +92,10 @@ protected Transferable createTransferable(final JComponent c) { try (BlizzardDataOutputStream blizzardStream = new BlizzardDataOutputStream(outputStream)) { selectedUnitsAsChangeset.save(blizzardStream, false); } catch (final FileNotFoundException e) { - System.out.println("failed to copy"); + System.out.println(LocalizationManager.getInstance().get("println.objecttabtreebrowsertransferhandler_createtransferable_copy")); e.printStackTrace(); } catch (final IOException e) { - System.out.println("failed to copy"); + System.out.println(LocalizationManager.getInstance().get("println.objecttabtreebrowsertransferhandler_createtransferable_copy")); e.printStackTrace(); } final byte[] byteArray = outputStream.toByteArray(); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorPanel.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorPanel.java index 5bdf81d3d..2afbf18fb 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorPanel.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorPanel.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.objects; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Component; import java.awt.Image; @@ -233,18 +234,18 @@ public ImageIcon getIcon() { } final String filepath = "replaceabletextures\\commandbuttons\\btnstormbolt.blp"; - final BehaviorTreeNode behaviorRoot = new BehaviorTreeNode(niceIcon(filepath), "Storm Bolt"); + final BehaviorTreeNode behaviorRoot = new BehaviorTreeNode(niceIcon(filepath), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_storm_bolt")); final BehaviorTreeNode localVarNode = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-scriptvariable.blp"), "Local Variables"); + niceIcon("replaceabletextures\\worldeditui\\editor-scriptvariable.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_local_variables")); behaviorRoot.add(localVarNode); localVarNode.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-setvariables.blp"), - "LocalLevel")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_local_level"))); localVarNode.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-setvariables.blp"), - "LocalDuration")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_local_duration"))); localVarNode.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-setvariables.blp"), - "LocalBuffType")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_local_buff_type"))); final BehaviorTreeNode actionsOnLearn = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), "On Learn - Actions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_on_learn_actions")); behaviorRoot.add(actionsOnLearn); // (Ability: This_ability's Real Level Field Cooldown ('acdn'), of Level: level) // Greater than or equal to 10.00 @@ -253,99 +254,99 @@ public ImageIcon getIcon() { // (Ability: This_ability's Integer Field: Missile Speed ('amsp')) Equal to 0 actionsOnLearn.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-setvariables.blp"), - "Set LocalLevel = (Level of (This ability) for (Triggering unit))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_set_local_level_triggering_unit"))); actionsOnLearn.add(new BehaviorTreeNode(niceIcon("ui\\widgets\\tooltips\\human\\tooltipmanaicon.blp"), - "Command Card - Add a (Unit target) command card icon for (This ability) using ((Ability: (This ability)'s Integer Field: Button Position - Normal (X) ('abpx')), (Ability: (This ability)'s Integer Field: Button Position - Normal (Y) ('abpy')))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_command_card_add_icon"))); actionsOnLearn.add(new BehaviorTreeNode(niceIcon("ui\\widgets\\tooltips\\human\\tooltipmanaicon.blp"), - "Command Card - Set the icon of (Last created Command Card Icon) to (Icon of (This ability))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_command_card_set_icon"))); actionsOnLearn.add(new BehaviorTreeNode(niceIcon("ui\\widgets\\tooltips\\human\\tooltipmanaicon.blp"), - "Command Card - Set the Mana Cost of (Last created Command Card Icon) to (Ability: (This ability)'s Integer Level Field Mana Cost ('amcs'), of Level: LocalLevel)")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_command_card_set_mana_cost"))); actionsOnLearn.add(new BehaviorTreeNode(niceIcon("ui\\widgets\\tooltips\\human\\tooltipmanaicon.blp"), - "Command Card - Set the Cooldown of (Last created Command Card Icon) to (Ability: (This ability)'s Real Level Field Cooldown ('acdn'), of Level: LocalLevel)")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_command_card_set_cooldown"))); final BehaviorTreeNode actionsOnCast = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), "On Cast - Actions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_on_cast_actions")); behaviorRoot.add(actionsOnCast); actionsOnCast.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-setvariables.blp"), - "Set LocalLevel = (Level of (This ability) for (Casting unit))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_set_local_level"))); actionsOnCast.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Missile.blp"), - "Missile - Create an initially unlaunched missile at (Position of (Casting unit)) with Z height 0.00 that will home in on (Target unit of ability being cast) above its head at Z height 0.00")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_create_missile"))); actionsOnCast.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Missile.blp"), - "Missile - Change the model file of (Last created missile) to be (Art path of (This ability) Missile Art (index 0))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_model_missile"))); actionsOnCast.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Missile.blp"), - "Missile - Change the owner of (Last created missile) to be (Owner of (Casting unit))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_owner_missile"))); actionsOnCast.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Missile.blp"), - "Missile - Launch (Last created missile) with a speed of (Ability: (This ability)'s Integer Field: Missile Speed ('amsp')) and arc of (Ability: (This ability)'s Real Field: Missile Arc ('amac'))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_launch_missile"))); actionsOnCast.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Ability.blp"), - "Unit - Cause (Casting unit) to damage (Target unit of ability being cast), dealing (Ability: (This ability)'s Real Level Field Damage ('Htb1'), of Level: LocalLevel) damage of attack type Spells and damage type Normal")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_damage_unit"))); actionsOnCast.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-setvariables.blp"), - "Set LocalBuffType = (Ability: (This ability)'s Buff Level Field Buffs ('abuf'), of Level: LocalLevel)")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_set_local_buff_type"))); { final BehaviorTreeNode ifBlockStarter2 = new BehaviorTreeNode( niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Logical.blp"), - "If (All Conditions are True) then do (Then Actions) else do (Else Actions)"); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_conditions")); actionsOnCast.add(ifBlockStarter2); final BehaviorTreeNode ifConditions2 = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggercondition.blp"), "If - Conditions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggercondition.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_if")); ifBlockStarter2.add(ifConditions2); ifConditions2.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Logical.blp"), - "((Target unit of ability being cast) is A Hero) Equal to True")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_hero_equal_true"))); // (Ability: This_ability's Real Level Field Duration - Normal ('adur'), of // Level: level) Greater than or equal to 10.00 final BehaviorTreeNode thenActions2 = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), "Then - Actions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_then")); ifBlockStarter2.add(thenActions2); thenActions2.add(new BehaviorTreeNode( niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-setvariables.blp"), - "Set LocalDuration = (Ability: (This ability)'s Real Level Field Duration - Hero ('ahdu'), of Level: LocalLevel)")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_set_localduration_hero"))); final BehaviorTreeNode elseActions2 = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), "Else - Actions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_else")); ifBlockStarter2.add(elseActions2); elseActions2.add(new BehaviorTreeNode( niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-setvariables.blp"), - "Set LocalDuration = (Ability: (This ability)'s Real Level Field Duration - Normal ('adur'), of Level: LocalLevel)")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_set_localduration_normal"))); } final BehaviorTreeNode ifBlockStarter = new BehaviorTreeNode( niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Logical.blp"), - "If (All Conditions are True) then do (Then Actions) else do (Else Actions)"); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_conditions")); actionsOnCast.add(ifBlockStarter); final BehaviorTreeNode ifConditions = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggercondition.blp"), "If - Conditions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggercondition.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_if")); ifBlockStarter.add(ifConditions); ifConditions.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Logical.blp"), - "(Level of LocalBuffType for (Target unit of ability being cast)) Greater than 0")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_local_buff_type_greater"))); final BehaviorTreeNode thenActions = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), "Then - Actions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_then")); ifBlockStarter.add(thenActions); thenActions.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-CasterSystem.blp"), - "Buff - Add LocalDuration to the duration for (Buff of (Target unit of ability being cast) of type LocalBuffType and ability type (This ability))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_buff_duration"))); final BehaviorTreeNode elseActions = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), "Else - Actions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_else")); ifBlockStarter.add(elseActions); elseActions.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-CasterSystem.blp"), - "Buff - Apply a new buff with Level: LocalLevel to (Target unit of ability being cast) of type LocalBuffType")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_buff_new"))); elseActions.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-CasterSystem.blp"), - "Buff - Set the remaining duration for (Last applied buff) to LocalDuration")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_buff_remaining_duration"))); final BehaviorTreeNode actionsOnBuffApplied = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), "On Buff Applied - Actions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_buff_applied_actions")); behaviorRoot.add(actionsOnBuffApplied); actionsOnBuffApplied .add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-SetVariables.blp"), - "Set LocalLevel = (Level of (This ability) for (Buffed unit))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_set_local_level_buffed"))); actionsOnBuffApplied.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Ability.blp"), - "Stun (Buffed unit)")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_stun_buffed"))); final BehaviorTreeNode actionsOnBuffRemoved = new BehaviorTreeNode( - niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), "On Buff Removed - Actions"); + niceIcon("replaceabletextures\\worldeditui\\editor-triggeraction.blp"), LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_buff_removed_actions")); behaviorRoot.add(actionsOnBuffRemoved); actionsOnBuffRemoved .add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-SetVariables.blp"), - "Set LocalLevel = (Level of (This ability) for (Buffed unit))")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_set_local_level_buffed"))); actionsOnBuffRemoved.add(new BehaviorTreeNode(niceIcon("ReplaceableTextures\\WorldEditUI\\Actions-Ability.blp"), - "Unstun (Buffed unit)")); + LocalizationManager.getInstance().get("add.uniteditopanel_uniteditopanel_unstun_buffed"))); final JTree behaviorTree = new JTree(behaviorRoot); behaviorTree.setCellRenderer(new DefaultTreeCellRenderer() { @Override @@ -362,8 +363,8 @@ public Component getTreeCellRendererComponent(final JTree tree, final Object val for (int i = 0; i < behaviorTree.getRowCount(); i++) { behaviorTree.expandRow(i); } - splitWithBehaviorEditor.addTab("Stats", new JScrollPane(table)); - splitWithBehaviorEditor.addTab("Behavior", new JScrollPane(behaviorTree)); + splitWithBehaviorEditor.addTab(LocalizationManager.getInstance().get("addtab.uniteditopanel_uniteditopanel_stats"), new JScrollPane(table)); + splitWithBehaviorEditor.addTab(LocalizationManager.getInstance().get("addtab.uniteditopanel_uniteditopanel_behavior"), new JScrollPane(behaviorTree)); setRightComponent(splitWithBehaviorEditor); // setRightComponent(new JScrollPane(table)); @@ -403,7 +404,7 @@ public void fieldsChanged(final War3ID changedObject) { @Override public void categoriesChanged(final War3ID changedObject) { - System.out.println("categoriesChanged(" + changedObject + ")"); + System.out.println(LocalizationManager.getInstance().get("println.uniteditopanel_uniteditopanel_categories") + changedObject + ")"); final UnitEditorTreeModel treeModel = tree.getModel(); final TreeNode changedNode = treeModel.getNodeById(changedObject); if (changedNode != null) { @@ -413,7 +414,7 @@ public void categoriesChanged(final War3ID changedObject) { new TreeNodeLinkerFromModel(treeModel)); selectTreeNode(newObjectNode); } else { - System.out.println("Changed node was not found"); + System.out.println(LocalizationManager.getInstance().get("println.uniteditopanel_uniteditopanel_found")); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorTreeBrowser.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorTreeBrowser.java index 93282cb97..2432190d8 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorTreeBrowser.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorTreeBrowser.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.objects; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Image; import java.awt.event.ActionEvent; @@ -38,7 +39,7 @@ public UnitEditorTreeBrowser(final MutableObjectData unitData, final ObjectTabTr selectFirstUnit(); final JPopupMenu popupMenu = new JPopupMenu(); - final JMenuItem openItem = new JMenuItem("Open"); + final JMenuItem openItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uniteditortreebrowser_uniteditortreebrowser_open")); openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -59,7 +60,7 @@ public void actionPerformed(final ActionEvent e) { } }); popupMenu.add(openItem); - final JMenuItem openPortraitItem = new JMenuItem("Open Portrait"); + final JMenuItem openPortraitItem = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uniteditortreebrowser_uniteditortreebrowser_open_portrait")); openPortraitItem.addActionListener(new ActionListener() { @Override @@ -83,7 +84,7 @@ public void actionPerformed(final ActionEvent e) { }); popupMenu.add(openPortraitItem); popupMenu.addSeparator(); - final JMenuItem extract = new JMenuItem("Extract"); + final JMenuItem extract = new JMenuItem(LocalizationManager.getInstance().get("menuitem.uniteditortreebrowser_uniteditortreebrowser_extract")); popupMenu.add(extract); extract.addActionListener(new ActionListener() { @Override diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/EditorFieldTransferHandler.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/EditorFieldTransferHandler.java index 1de826eff..6d6e2faa5 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/EditorFieldTransferHandler.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/EditorFieldTransferHandler.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.objects.better; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Point; import java.awt.datatransfer.DataFlavor; @@ -50,11 +51,11 @@ public boolean importData(final TransferHandler.TransferSupport info) { pastedObjects.load(inputStream, null, false); } } catch (final UnsupportedFlavorException ufe) { - System.out.println("importData: unsupported data flavor"); + System.out.println(LocalizationManager.getInstance().get("println.editorfieldtransferhandler_importdata_unsupported")); ufe.printStackTrace(); return false; } catch (final IOException ioe) { - System.out.println("importData: I/O exception"); + System.out.println(LocalizationManager.getInstance().get("println.editorfieldtransferhandler_importdata_exception")); ioe.printStackTrace(); return false; } @@ -82,10 +83,10 @@ protected Transferable createTransferable(final JComponent c) { try (BlizzardDataOutputStream blizzardStream = new BlizzardDataOutputStream(outputStream)) { selectedUnitsAsChangeset.save(blizzardStream, false); } catch (final FileNotFoundException e) { - System.out.println("failed to copy"); + System.out.println(LocalizationManager.getInstance().get("println.editorfieldtransferhandler_createtransferable_copy")); e.printStackTrace(); } catch (final IOException e) { - System.out.println("failed to copy"); + System.out.println(LocalizationManager.getInstance().get("println.editorfieldtransferhandler_createtransferable_copy")); e.printStackTrace(); } final byte[] byteArray = outputStream.toByteArray(); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FieldPopupUtils.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FieldPopupUtils.java index 09317a8cc..c4773418f 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FieldPopupUtils.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FieldPopupUtils.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.objects.better.fields; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Component; import java.awt.event.ActionEvent; @@ -89,7 +90,7 @@ public void stateChanged(final ChangeEvent e) { spinner.commitEdit(); } catch (final ParseException e1) { JOptionPane.showMessageDialog(parentComponent, - "Unable to commit edit because: " + e1.getClass() + ": " + e1.getMessage()); + LocalizationManager.getInstance().get("dialog.fieldpopuputils_showconfirmdialog_edit") + e1.getClass() + ": " + e1.getMessage()); e1.printStackTrace(); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FloatObjectField.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FloatObjectField.java index cbfcde8de..b4d64d639 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FloatObjectField.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FloatObjectField.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.objects.better.fields; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Component; import java.awt.Dimension; @@ -56,7 +57,7 @@ protected boolean popupEditor(final MutableGameObject gameUnit, final Component String.format(defaultDialogTitle, WEString.getString("WESTRING_COD_TYPE_REAL")), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, spinner); if (result == JOptionPane.OK_OPTION) { - System.out.println(spinner.getValue() + " on the outside"); + System.out.println(spinner.getValue() + LocalizationManager.getInstance().get("println.fieldpopuputils_popupeditor_outside")); gameUnit.setField(metaKey, level, ((Number) spinner.getValue()).floatValue()); return true; } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/sorting/abilities/AbilityRaceLevelFolder.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/sorting/abilities/AbilityRaceLevelFolder.java index 3a2cba41a..963f6be45 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/sorting/abilities/AbilityRaceLevelFolder.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/sorting/abilities/AbilityRaceLevelFolder.java @@ -32,9 +32,9 @@ public AbilityRaceLevelFolder(final String displayName) { super(displayName); this.units = new BottomLevelCategoryFolder(WEString.getString("WESTRING_UNITS"), MUTABLE_GAME_ABIL_COMPARATOR); this.heroes = new BottomLevelCategoryFolder(WEString.getString("WESTRING_UTYPE_HEROES"), - MUTABLE_GAME_ABIL_COMPARATOR); + MUTABLE_GAME_ABIL_COMPARATOR); this.items = new BottomLevelCategoryFolder(WEString.getString("WESTRING_AE_ITEMS"), - MUTABLE_GAME_ABIL_COMPARATOR); + MUTABLE_GAME_ABIL_COMPARATOR); this.hidden = new BottomLevelCategoryFolder(WEString.getString("WESTRING_ITEMSTATUS_HIDDEN"), MUTABLE_GAME_ABIL_COMPARATOR); folders.add(units); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/sorting/units/UnitMeleeLevelFolder.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/sorting/units/UnitMeleeLevelFolder.java index 91f5daa09..aec271c97 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/sorting/units/UnitMeleeLevelFolder.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/sorting/units/UnitMeleeLevelFolder.java @@ -32,9 +32,9 @@ public UnitMeleeLevelFolder(final String displayName) { super(displayName); this.units = new BottomLevelCategoryFolder(WEString.getString("WESTRING_UNITS"), MUTABLE_GAME_UNIT_COMPARATOR); this.heroes = new BottomLevelCategoryFolder(WEString.getString("WESTRING_UTYPE_HEROES"), - MUTABLE_GAME_UNIT_COMPARATOR); + MUTABLE_GAME_UNIT_COMPARATOR); this.buildings = new BottomLevelCategoryFolder(WEString.getString("WESTRING_UTYPE_BUILDINGS"), - MUTABLE_GAME_UNIT_COMPARATOR); + MUTABLE_GAME_UNIT_COMPARATOR); this.special = new BottomLevelCategoryFolder(WEString.getString("WESTRING_UTYPE_SPECIAL"), MUTABLE_GAME_UNIT_COMPARATOR); folders.add(units); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerEditor.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerEditor.java index 5ac8b6415..41c015b6a 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerEditor.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerEditor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.triggers; +import hiveworkshop.localizationmanager.LocalizationManager; import static com.hiveworkshop.wc3.jworldedit.AbstractWorldEditorPanel.getIcon; import static com.hiveworkshop.wc3.jworldedit.AbstractWorldEditorPanel.makeButton; @@ -70,9 +71,9 @@ public TriggerEditor() { private JToolBar createToolbar(final DataTable worldEditorData) { final JToolBar toolBar = new JToolBar(); - makeButton(worldEditorData, toolBar, "newMap", "ToolBarIcon_New", "WESTRING_TOOLBAR_NEW"); - makeButton(worldEditorData, toolBar, "openMap", "ToolBarIcon_Open", "WESTRING_TOOLBAR_OPEN"); - final JButton saveButton = makeButton(worldEditorData, toolBar, "saveMap", "ToolBarIcon_Save", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_newmap"), "ToolBarIcon_New", "WESTRING_TOOLBAR_NEW"); + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_openmap"), "ToolBarIcon_Open", "WESTRING_TOOLBAR_OPEN"); + final JButton saveButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_savemap"), "ToolBarIcon_Save", "WESTRING_TOOLBAR_SAVE"); saveButton.addActionListener(new ActionListener() { @Override @@ -80,7 +81,7 @@ public void actionPerformed(final ActionEvent e) { final JFileChooser jFileChooser = new JFileChooser( new File(System.getProperty("user.home") + "/Documents/Warcraft III/Maps")); jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - jFileChooser.setDialogTitle("Save Map"); + jFileChooser.setDialogTitle(LocalizationManager.getInstance().get("dialog.triggereditor_triggereditor_savemap")); if (jFileChooser.showSaveDialog(TriggerEditor.this) == JFileChooser.APPROVE_OPTION) { } @@ -89,14 +90,14 @@ public void actionPerformed(final ActionEvent e) { }); toolBar.add(Box.createHorizontalStrut(8)); final TransferActionListener transferActionListener = new TransferActionListener(); - copyButton = makeButton(worldEditorData, toolBar, "copy", "ToolBarIcon_Copy", "WESTRING_MENU_OE_UNIT_COPY"); + copyButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_copy"), "ToolBarIcon_Copy", "WESTRING_MENU_OE_UNIT_COPY"); copyButton.addActionListener(transferActionListener); copyButton.setActionCommand((String) TransferHandler.getCopyAction().getValue(Action.NAME)); - pasteButton = makeButton(worldEditorData, toolBar, "paste", "ToolBarIcon_Paste", "WESTRING_MENU_OE_UNIT_PASTE"); + pasteButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_paste"), "ToolBarIcon_Paste", "WESTRING_MENU_OE_UNIT_PASTE"); pasteButton.addActionListener(transferActionListener); pasteButton.setActionCommand((String) TransferHandler.getPasteAction().getValue(Action.NAME)); toolBar.add(Box.createHorizontalStrut(8)); - createNewCategoryButton = makeButton(worldEditorData, toolBar, "createNewCategory", + createNewCategoryButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_createnewcategory"), "ToolBarIcon_SE_NewCategory", "WESTRING_TOOLBAR_SE_NEWCAT"); createNewCategoryButton.addActionListener(new ActionListener() { @Override @@ -106,7 +107,7 @@ public void actionPerformed(final ActionEvent e) { triggerTree.startEditingAtPath(triggerTree.getSelectionPath()); } }); - createNewTriggerButton = makeButton(worldEditorData, toolBar, "createNewTrigger", "ToolBarIcon_SE_NewTrigger", + createNewTriggerButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_createnewtrigger"), "ToolBarIcon_SE_NewTrigger", "WESTRING_TOOLBAR_SE_NEWTRIG"); createNewTriggerButton.addActionListener(new ActionListener() { @Override @@ -117,7 +118,7 @@ public void actionPerformed(final ActionEvent e) { triggerTree.startEditingAtPath(selectionPath); } }); - createNewCommentButton = makeButton(worldEditorData, toolBar, "createNewTriggerComment", + createNewCommentButton = makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_createnewtriggercomment"), "ToolBarIcon_SE_NewTriggerComment", "WESTRING_TOOLBAR_SE_NEWTRIGCOM"); createNewCommentButton.addActionListener(new ActionListener() { @Override @@ -128,7 +129,7 @@ public void actionPerformed(final ActionEvent e) { } }); toolBar.add(Box.createHorizontalStrut(8)); - makeButton(worldEditorData, toolBar, "terrainEditor", "ToolBarIcon_Module_Terrain", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_terraineditor"), "ToolBarIcon_Module_Terrain", "WESTRING_MENU_MODULE_TERRAIN"); final JToggleButton scriptEditorButton = new JToggleButton( getIcon(worldEditorData, "ToolBarIcon_Module_Script")); @@ -139,18 +140,18 @@ public void actionPerformed(final ActionEvent e) { scriptEditorButton.setEnabled(false); scriptEditorButton.setDisabledIcon(scriptEditorButton.getIcon()); toolBar.add(scriptEditorButton); - makeButton(worldEditorData, toolBar, "soundEditor", "ToolBarIcon_Module_Sound", "WESTRING_MENU_MODULE_SOUND"); - makeButton(worldEditorData, toolBar, "objectEditor", "ToolBarIcon_Module_ObjectEditor", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_soundeditor"), "ToolBarIcon_Module_Sound", "WESTRING_MENU_MODULE_SOUND"); + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_objecteditor"), "ToolBarIcon_Module_ObjectEditor", "WESTRING_MENU_OBJECTEDITOR"); - makeButton(worldEditorData, toolBar, "campaignEditor", "ToolBarIcon_Module_Campaign", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_campaigneditor"), "ToolBarIcon_Module_Campaign", "WESTRING_MENU_MODULE_CAMPAIGN"); - makeButton(worldEditorData, toolBar, "aiEditor", "ToolBarIcon_Module_AIEditor", "WESTRING_MENU_MODULE_AI"); - makeButton(worldEditorData, toolBar, "objectEditor", "ToolBarIcon_Module_ObjectManager", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_aieditor"), "ToolBarIcon_Module_AIEditor", "WESTRING_MENU_MODULE_AI"); + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_objecteditor"), "ToolBarIcon_Module_ObjectManager", "WESTRING_MENU_OBJECTMANAGER"); - makeButton(worldEditorData, toolBar, "importEditor", "ToolBarIcon_Module_ImportManager", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_importeditor"), "ToolBarIcon_Module_ImportManager", "WESTRING_MENU_IMPORTMANAGER"); toolBar.add(Box.createHorizontalStrut(8)); - makeButton(worldEditorData, toolBar, "testMap", + makeButton(worldEditorData, toolBar, LocalizationManager.getInstance().get("makebutton.triggereditor_triggereditor_testmap"), new ImageIcon(IconUtils.worldEditStyleIcon(getIcon(worldEditorData, "ToolBarIcon_TestMap").getImage())), "WESTRING_TOOLBAR_TESTMAP"); return toolBar; @@ -173,7 +174,7 @@ public static void main(final String[] args) { } } - final JFrame frame = new JFrame("Trigger Editor"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("frame.triggereditor_main_trigger_editor")); final TriggerEditor contentPane = new TriggerEditor(); final JToolBar toolbar = contentPane.createToolbar(DataTable.getWorldEditorData()); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerTreeCellRenderer.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerTreeCellRenderer.java index 4dbf467ce..2db183bd9 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerTreeCellRenderer.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerTreeCellRenderer.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.triggers; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Color; import java.awt.Component; @@ -35,7 +36,7 @@ public TriggerTreeCellRenderer(final WorldEditorSettings settings, final WorldEd @Override public Component getTreeCellRendererComponent(final JTree tree, final Object node, final boolean selected, final boolean expanded, final boolean leaf, final int row, final boolean hasFocus) { - System.out.println("getTreeCellRendererComponent"); + System.out.println(LocalizationManager.getInstance().get("println.triggertreecellrenderer_component_gettreecellrenderercomponent")); if (defaultBackgroundSelectionColor == null) { defaultBackgroundSelectionColor = getBackgroundSelectionColor(); } @@ -52,7 +53,7 @@ public Component getTreeCellRendererComponent(final JTree tree, final Object nod setOpenIcon(mapIcon); setClosedIcon(mapIcon); setLeafIcon(mapIcon); - System.out.println("leaf is MAP"); + System.out.println(LocalizationManager.getInstance().get("println.triggertreecellrenderer_component_leaf_map")); } catch (final Exception exc) { exc.printStackTrace(); } @@ -65,10 +66,10 @@ public Component getTreeCellRendererComponent(final JTree tree, final Object nod try { if (trigger.isComment()) { setLeafIcon(worldEditArt.getIcon("SEIcon_TriggerComment")); - System.out.println("leaf is COMMENT"); + System.out.println(LocalizationManager.getInstance().get("println.triggertreecellrenderer_component_leaf_comment")); } else { setLeafIcon(worldEditArt.getIcon("SEIcon_Trigger")); - System.out.println("leaf is TRIGGER"); + System.out.println(LocalizationManager.getInstance().get("println.triggertreecellrenderer_component_leaf_trigger")); } } catch (final Exception exc) { exc.printStackTrace(); @@ -85,7 +86,7 @@ public Component getTreeCellRendererComponent(final JTree tree, final Object nod try { setOpenIcon(worldEditArt.getIcon("SEIcon_TriggerCategoryOpen")); setLeafIcon(worldEditArt.getIcon("SEIcon_TriggerCategory")); - System.out.println("leaf is CATEGORY"); + System.out.println(LocalizationManager.getInstance().get("println.triggertreecellrenderer_component_leaf_category")); setClosedIcon(worldEditArt.getIcon("SEIcon_TriggerCategory")); } catch (final Exception exc) { exc.printStackTrace(); @@ -93,7 +94,7 @@ public Component getTreeCellRendererComponent(final JTree tree, final Object nod super.getTreeCellRendererComponent(tree, displayName, selected, expanded, leaf, row, hasFocus); } else { setLeafIcon(worldEditArt.getIcon("SEIcon_FunctionDisabled")); - System.out.println("leaf is STATE CORRUPTION"); + System.out.println(LocalizationManager.getInstance().get("println.triggertreecellrenderer_component_leaf_state_corruption")); // final TreePath selectionPath = tree.getSelectionPath(); // if (tree.getSelectionCount() == 1) { // switch (selectionPath.getPathCount()) { diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/gui/TriggerTree.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/gui/TriggerTree.java index c6e46611f..3dccc336e 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/gui/TriggerTree.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/gui/TriggerTree.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.triggers.gui; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; @@ -243,7 +244,7 @@ public Trigger create(final TriggerTreeController controller, final TriggerCateg private Trigger createTrigger(final TypedTriggerInstantiator instantiator) { final TreePath selectionPath = getSelectionPath(); if (!canCreateTrigger(selectionPath)) { - throw new IllegalStateException("Cannot create trigger at selection"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.triggertree_createtrigger_cannot_create_at")); } final Object lastPathComponent = selectionPath.getLastPathComponent(); if (lastPathComponent instanceof TriggerCategoryTreeNode) { @@ -257,7 +258,7 @@ private Trigger createTrigger(final TypedTriggerInstantiator instantiator) { controller.moveTrigger(trigger, trigger.getCategory(), newTriggerIndex); return trigger; } else { - throw new IllegalStateException("Cannot create trigger with selection"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.triggertree_createtrigger_cannot__create_with")); } } @@ -327,7 +328,7 @@ private TriggerElementTreeNode copy(final TreeNode node) { if (node instanceof TriggerElementTreeNode) { return ((TriggerElementTreeNode) node).copy(); } - throw new RuntimeException("unable to copy: " + node); + throw new RuntimeException(LocalizationManager.getInstance().get("exception.triggertree_triggerelementtreenode_copy") + node); } @Override @@ -384,9 +385,9 @@ public boolean importData(final TransferHandler.TransferSupport support) { triggers = (DraggableNode[]) t.getTransferData(nodeFlavors[0]); System.out.println(Arrays.toString(transferDataFlavors)); } catch (final UnsupportedFlavorException ufe) { - System.out.println("UnsupportedFlavor: " + ufe.getMessage()); + System.out.println(LocalizationManager.getInstance().get("println.triggertree_importdata_unsupported") + ufe.getMessage()); } catch (final java.io.IOException ioe) { - System.out.println("I/O error: " + ioe.getMessage()); + System.out.println(LocalizationManager.getInstance().get("println.triggertree_importdata_error") + ioe.getMessage()); } // Get drop location info. final JTree.DropLocation dl = (JTree.DropLocation) support.getDropLocation(); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/impl/TriggerEnvironment.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/impl/TriggerEnvironment.java index f152a16ed..f0724115b 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/impl/TriggerEnvironment.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/impl/TriggerEnvironment.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.triggers.impl; +import hiveworkshop.localizationmanager.LocalizationManager; import java.util.ArrayList; import java.util.List; @@ -33,7 +34,7 @@ public List getCategories() { @Override public Trigger createTrigger(final TriggerCategory triggerCategory) { if (!categories.contains(triggerCategory)) { - throw new IllegalStateException("creating trigger in invalid category!"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.triggerenvironment_createtrigger_invalid")); } String triggerName; int triggerNameIndex = 0; @@ -52,7 +53,7 @@ public Trigger createTrigger(final TriggerCategory triggerCategory) { @Override public Trigger createTriggerComment(final TriggerCategory triggerCategory) { if (!categories.contains(triggerCategory)) { - throw new IllegalStateException("creating trigger in invalid category!"); + throw new IllegalStateException(LocalizationManager.getInstance().get("exception.triggerenvironment_createtrigger_invalid")); } final TriggerComment comment = new TriggerComment(WEString.getString("WESTRING_TRIGGERCOMMENT_DEFAULT")); comment.setCategory(triggerCategory); diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/Tileset.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/Tileset.java index 7684e6aa4..f30905eba 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/Tileset.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/Tileset.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static Tileset fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("TileSets does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.tileset_fromcodename_exist") + name); } } \ No newline at end of file diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AiBuffer.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AiBuffer.java index 5eae6ae7b..ba1a9c26d 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AiBuffer.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AiBuffer.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static AiBuffer fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("AiBuffer does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.aibuffer_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ArmorType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ArmorType.java index 62444401a..7bce80621 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ArmorType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ArmorType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static ArmorType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("ArmorType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.armortype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackBits.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackBits.java index fd17db157..f4e74c341 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackBits.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackBits.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static AttackBits fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("AttackBits does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.attackbits_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackType.java index b80373f17..d711c3400 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static AttackType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("AttackType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.attacktype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttributeType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttributeType.java index ecd50fbf1..4b0587a27 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttributeType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttributeType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static AttributeType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("AttributeType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.attributetype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelFlags.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelFlags.java index 7f5c6f894..a66ff2536 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelFlags.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelFlags.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static ChannelFlags fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("ChannelFlags does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.channelflags_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelType.java index beff51522..df85615f1 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static ChannelType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("ChannelType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.channeltype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/CombatSound.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/CombatSound.java index f8b65cd85..d41a752a7 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/CombatSound.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/CombatSound.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static CombatSound fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("CombatSound does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.combatSound_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DeathType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DeathType.java index d5acf5678..2a405434d 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DeathType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DeathType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static DeathType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("DeathType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.deathType_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseType.java index 5261a9ced..d8d38d758 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static DefenseType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("DefenseType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.defensetype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseTypeInt.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseTypeInt.java index e3999dbe7..f153b50ba 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseTypeInt.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseTypeInt.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static DefenseTypeInt fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("DefenseTypeInt does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.defensetypeint_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DetectionType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DetectionType.java index 46afd4159..3ca4195d3 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DetectionType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DetectionType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static DetectionType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("DetectionType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.detectiontype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/FullFlags.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/FullFlags.java index 64ddc6798..14c90de93 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/FullFlags.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/FullFlags.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static FullFlags fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("FullFlags does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.fullflags_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/InteractionFlags.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/InteractionFlags.java index edeba9199..0c51f2f59 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/InteractionFlags.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/InteractionFlags.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static InteractionFlags fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("InteractionFlags does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.interactionflags_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ItemClass.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ItemClass.java index 2eb6e21f8..bb343e175 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ItemClass.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ItemClass.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static ItemClass fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("ItemClass does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.itemclass_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/LightningEffect.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/LightningEffect.java index de7a89cb6..6edac5f43 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/LightningEffect.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/LightningEffect.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static LightningEffect fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("LightningEffect does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.lightningeffect_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MorphFlags.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MorphFlags.java index 57926f560..3da94d460 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MorphFlags.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MorphFlags.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static MorphFlags fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("MorphFlags does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.morphflags_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MoveType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MoveType.java index 44f671b0d..f20263da6 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MoveType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MoveType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static MoveType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("MoveType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.movetype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListPrevent.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListPrevent.java index 24b0a4231..194d89b12 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListPrevent.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListPrevent.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static PathingListPrevent fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("PathingListPrevent does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.pathinglistprevent_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListRequire.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListRequire.java index 9e234868b..fe5f4bb9e 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListRequire.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListRequire.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static PathingListRequire fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("PathingListRequire does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.pathinglistrequire_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PickFlags.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PickFlags.java index 17f65ae7a..ebd68704b 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PickFlags.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PickFlags.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static PickFlags fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("PickFlags does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.pickflags_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/RegenType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/RegenType.java index 2408574e3..0a0833c84 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/RegenType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/RegenType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static RegenType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("RegenType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.regentype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ShadowImage.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ShadowImage.java index 4ac334fb0..7d278822e 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ShadowImage.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ShadowImage.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static ShadowImage fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("ShadowImage does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.shadowimage_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SilenceFlags.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SilenceFlags.java index 36140d079..ce01212a6 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SilenceFlags.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SilenceFlags.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static SilenceFlags fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("SilenceFlags does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.silenceflags_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SpellDetail.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SpellDetail.java index 54c0f863c..b233150c5 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SpellDetail.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SpellDetail.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static SpellDetail fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("SpellDetail does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.spelldetail_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/StackFlags.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/StackFlags.java index 7b6384254..11f2a5269 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/StackFlags.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/StackFlags.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static StackFlags fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("StackFlags does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.stackflags_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetList.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetList.java index 4ca1df9f2..4b9121c46 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetList.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetList.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static TargetList fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("TargetList does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.targetlist_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetType.java index 7997f17ce..adb0caf1b 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static TargetType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("TargetType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.targettype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TeamColor.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TeamColor.java index 5c9515efc..7949d9577 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TeamColor.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TeamColor.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static TeamColor fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("TeamColor does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.teamcolor_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TechAvail.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TechAvail.java index 471e0c79f..9f69c5464 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TechAvail.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TechAvail.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static TechAvail fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("TechAvail does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.techavail_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitClass.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitClass.java index af8012dae..f1c502ebe 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitClass.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitClass.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static UnitClass fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("UnitClass does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.unitclass_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitRace.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitRace.java index 331508eb0..b885a94be 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitRace.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitRace.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static UnitRace fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("UnitRace does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.unitrace_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeClass.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeClass.java index 04dfc2270..c4a9b9609 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeClass.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeClass.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static UpgradeClass fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("UpgradeClass does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.upgradeclass_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeEffect.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeEffect.java index d13d3b76b..726431a26 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeEffect.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeEffect.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static UpgradeEffect fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("UpgradeEffect does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.upgradeeffect_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/VersionFlags.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/VersionFlags.java index b2a651ee2..16b1ed174 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/VersionFlags.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/VersionFlags.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static VersionFlags fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("VersionFlags does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.versionflags_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/WeaponType.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/WeaponType.java index b37eecd91..e3d66b069 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/WeaponType.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/WeaponType.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.enums; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -22,6 +23,6 @@ public static WeaponType fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("WeaponType does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.weapontype_fromcodename_exist") + name); } } diff --git a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/meta/Category.java b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/meta/Category.java index 9887b8b5f..bfdc2142f 100644 --- a/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/meta/Category.java +++ b/craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/meta/Category.java @@ -1,4 +1,5 @@ package com.hiveworkshop.wc3.jworldedit.wipdesign.units.meta; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.resources.WEString; @@ -21,7 +22,7 @@ public static Category fromCodeName(final String name) { return cat; } } - throw new IllegalArgumentException("category does not exist: " + name); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("exception.category_fromcodename_exist") + name); } private static String categoryName(final String cat) { switch (cat.toLowerCase()) { diff --git a/localizationmanager/build.gradle b/localizationmanager/build.gradle new file mode 100644 index 000000000..1ab3803b1 --- /dev/null +++ b/localizationmanager/build.gradle @@ -0,0 +1,15 @@ +[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' + +sourceCompatibility = 1.17 + +sourceSets.main.java.srcDirs = [ "src/" ] +sourceSets.main.resources.srcDirs = [ "src/" ] // 将src目录也作为资源目录 + +processResources { + include 'hiveworkshop/localizationmanager/lang/*.properties' +} + + +eclipse.project { + name = appName + "-localizationmanager" +} diff --git a/localizationmanager/src/hiveworkshop/localizationmanager/LocalizationManager.java b/localizationmanager/src/hiveworkshop/localizationmanager/LocalizationManager.java new file mode 100644 index 000000000..0226204d6 --- /dev/null +++ b/localizationmanager/src/hiveworkshop/localizationmanager/LocalizationManager.java @@ -0,0 +1,121 @@ +package hiveworkshop.localizationmanager; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Locale; +import java.util.Properties; +import java.util.prefs.Preferences; + +public class LocalizationManager { + private static LocalizationManager instance = new LocalizationManager(); + + private Locale locale; + private final Properties props = new Properties(); + private final Properties enProps = new Properties(); + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private static final String LANG_KEY = "savedlocale"; + private Preferences prefs = Preferences.userNodeForPackage(LocalizationManager.class); + + private LocalizationManager() { + String savedLocaleStr = prefs.get(LANG_KEY, null); + Locale savedLang; + if (savedLocaleStr != null && !savedLocaleStr.isEmpty()) { + savedLang = Locale.forLanguageTag(savedLocaleStr); + } else { + savedLang = Locale.getDefault(); + } + if (savedLang == null) { + savedLang = Locale.ENGLISH; + } + setLocale(savedLang); // 这里会自动加载资源并保存 prefs + loadEnglishProperties(); + } + + public static LocalizationManager getInstance() { + return instance; + } + + public void addPropertyChangeListener(PropertyChangeListener listener) { + pcs.addPropertyChangeListener(listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + pcs.removePropertyChangeListener(listener); + } + + public Locale getLocale() { + return locale; + } + + private void saveLocaleToPrefs(Locale locale) { + prefs.put(LANG_KEY, locale.toLanguageTag()); + } + + public void setLocale(Locale newLocale) { + Locale old = this.locale; + this.locale = newLocale != null ? newLocale : Locale.ENGLISH; + loadPropertiesForLocale(this.locale); + saveLocaleToPrefs(this.locale); // 更新保存的语言设置 + pcs.firePropertyChange("locale", old, this.locale); + } + + // 初始化加载英语资源 + private void loadEnglishProperties() { + String path = "/hiveworkshop/localizationmanager/lang/en.properties"; + System.out.println("🔍 Loading English properties from: " + path); + try (InputStream is = getClass().getResourceAsStream(path)) { + if (is != null) { + enProps.load(new InputStreamReader(is, StandardCharsets.UTF_8)); + System.out.println("✅ English properties loaded successfully. Keys count: " + enProps.size()); + } else { + System.err.println("❌ English properties file not found at: " + path); + } + } catch (IOException e) { + System.err.println("❌ Failed to load English properties: " + e.getMessage()); + e.printStackTrace(); + } + } + + private void loadPropertiesForLocale(Locale locale) { + props.clear(); + String[] candidates = new String[] { locale.toString(), locale.getLanguage(), "en" }; + System.out.println("🔍 Loading properties for locale: " + locale); + for (String candidate : candidates) { + String path = "/hiveworkshop/localizationmanager/lang/" + candidate + ".properties"; + System.out.println(" 📂 Trying: " + path); + try (InputStream is = getClass().getResourceAsStream(path)) { + if (is != null) { + // load as UTF-8 + Properties p = new Properties(); + p.load(new InputStreamReader(is, StandardCharsets.UTF_8)); + props.putAll(p); + System.out.println(" ✅ Loaded successfully. Keys count: " + p.size()); + // 加载成功后立即返回 + return; + } else { + System.out.println(" ❌ File not found"); + } + } catch (IOException e) { + System.err.println("❌ Failed to load " + path + ": " + e.getMessage()); + } + } + System.err.println("⚠️ No properties file found for locale: " + locale); + } + + public String get(String key) { + String v = props.getProperty(key); + if (v == null) { + v = enProps.getProperty(key); + if (v != null) { + return v; + } + System.err.println("LocalizationManager: Missing key '" + key + "' for locale " + locale); + return "!" + key + "!"; + } + return v; + } +} \ No newline at end of file diff --git a/localizationmanager/src/hiveworkshop/localizationmanager/lang/en.properties b/localizationmanager/src/hiveworkshop/localizationmanager/lang/en.properties new file mode 100644 index 000000000..fea342cc9 --- /dev/null +++ b/localizationmanager/src/hiveworkshop/localizationmanager/lang/en.properties @@ -0,0 +1,3341 @@ +# Global +global.button.ok=Ok +global.button.cancel=Cancel +global.dialog.error=Error +global.dialog.message=Message +global.dialog.warning=Warning +global.button.close=Close +global.button.close_other=Close Other +global.button.close_all=Close All +global.button.success=Success +global.button.confirmation=Confirmation +global.button.exit=Exit +global.button.ignore=Ignore +global.button.delete=Delete +global.button.overwrite=Overwrite +global.button.question=Question +global.button.finish=Finish +global.button.yes=Yes +global.button.no=No +global.button.confirmation=Confirmation +global.button.accept=Accept + +# matrixeater/src/com/ysera +# matrixeater/src/com/ysera.Menu +ysera.app.title=Ysera War3 Model Editor Pre-Alpha .01 +ysera.menu.file=File +ysera.menu.recent_files=Recent Files +ysera.menu.edit=Edit +ysera.menu.view=View +ysera.menu.team_color=Team Color +ysera.menu.windows=Windows +ysera.menu.extras=Extras +ysera.menu.help=Help + +# matrixeater/src/com/matrixeater/MainPanel +matrixeater.menu.file=File +matrixeater.menu.edit=Edit +matrixeater.menu.open_recent=Open Recent +matrixeater.menu.open_recent_description=Allows you to access recently opened files. +matrixeater.menu.file_description=Allows the user to open, save, close, and manipulate files. +matrixeater.menu.tools=Tools +matrixeater.menu.reset_layout=Reset Layout +matrixeater.menu.views=Views +matrixeater.menu.team_color=Team Color +matrixeater.menu.test=test +matrixeater.menu.animation_preview=Animation Preview +matrixeater.menu.animation_controller=Animation Controller +matrixeater.menu.camera_controller=Camera Controller +matrixeater.menu.modeling=Modeling +matrixeater.menu.tools_description=Tools and utilities +matrixeater.menu.view=View +matrixeater.menu.view_description=Allows the user to control view settings. +matrixeater.menu.team_color_description=Allows the user to control team color settings. +matrixeater.menu.window=Window +matrixeater.menu.window_description=Allows the user to open various windows containing the program features. +matrixeater.menu.about=Help +matrixeater.menu.clear=Clear +matrixeater.menuitem.changelog=Changelog +matrixeater.menuitem.about=About +matrixeater.menu.language=Language +matrixeater.menuitem.language.en=English +matrixeater.menuitem.language.zh_CN=简体中文 +matrixeater.menu.outliner=Outliner +matrixeater.menu.perspective=Perspective +matrixeater.menu.front=Front +matrixeater.menu.side=Side +matrixeater.menu.bottom=Bottom +matrixeater.menu.tools_item=Tools +matrixeater.menu.footer=Footer +matrixeater.menu.tracks=Tracks +matrixeater.menu.contents=Contents +matrixeater.menu.component=Component +matrixeater.menu.text=Text +matrixeater.menu.matrix_eater_script=Matrix Eater Script +matrixeater.menu.export_animated_frame_png=Export Animated Frame PNG +matrixeater.menu.browsers=Browsers +matrixeater.menuitem.data_browser=Data Browser +matrixeater.menuitem.unit_browser=Unit Browser +matrixeater.menuitem.doodad_browser=Doodad Browser +matrixeater.menuitem.hive_browser=Hive Browser +matrixeater.menu.add=Add +matrixeater.menuitem.add=Allows the user to add new components to the model. +matrixeater.menu.particle=Particle +matrixeater.menu.animation=Animation +matrixeater.menu.ris_fall_bir_dea=Rising/Falling Birth/Death +matrixeater.menu.single=Single +matrixeater.menu.from_file=From File +matrixeater.menu.from_unit=From Unit +matrixeater.menu.from_model=From Model +matrixeater.menu.from_object=From Object +matrixeater.menu.scripts=Scripts +matrixeater.menu.scripts_description=Allows the user to execute model edit scripts. +matrixeater.menuitem.oinkerwinkle_animtransfer=Oinkerwinkle-Style AnimTransfer +matrixeater.menuitem.merge_geoset=Oinkerwinkle-Style Merge Geoset +matrixeater.menuitem.nullmodel=Edit/delete model components +matrixeater.menuitem.exportanimated=Export Animated to Static Mesh +matrixeater.menuitem.combineanims=Create Back2Back Animation +matrixeater.menuitem.scaleanimations=Change Animation Lengths by Scaling +matrixeater.menuitem.version800=Assign FormatVersion 800 +matrixeater.menuitem.version1000=Assign FormatVersion 1000 +matrixeater.menuitem.hditem=SD -> HD (highly experimental, requires 900 or 1000) +matrixeater.menuitem.version800editing=HD -> SD with older code (becomes 800) +matrixeater.menuitem.version800baking=HD -> SD with texture baking (becomes 800) +matrixeater.menuitem.recalculatetangents=Recalculate Tangents (requires 900 or 1000 or 1100 or 1200) +matrixeater.menuitem.skinsplicefromfile=From File +matrixeater.menuitem.skinsplicefromworkspace=From Workspace +matrixeater.menuitem.skinsplicefrommodel=From Model +matrixeater.menuitem.skinsplicefromunit=From Unit +matrixeater.menu.skinsplice=Skin Splice Mesh into Current +matrixeater.menu.removeall3d=Remove All 3D +matrixeater.menu.fordarkfang=For Darkfang +matrixeater.menuitem.selecthdunused=Select HD Unused Bones +matrixeater.menuitem.deletedown=Delete all TVertices layers beyond the first +matrixeater.menuitem.relinkbone=Re-link Bone (Such as RF Weapon) +matrixeater.menuitem.deletelods=Delete LODs +matrixeater.menuitem.jokebutton=Load Retera Land +matrixeater.menuitem.fixreteraLand=Fix Retera Land +matrixeater.menuitem.showmatrices=View Selected \"Matrices\" +matrixeater.menuitem.insideout=Flip all selected faces +matrixeater.menuitem.insideoutnormals=Flip all selected normals +matrixeater.menuitem.edituvs=Edit UV Mapping +matrixeater.menuitem.edittextures=Edit Textures +matrixeater.menuitem.rigbutton=Rig Selection +matrixeater.menu.tweakssubmenu=Tweaks +matrixeater.menu.tweakssubmenu_description=Allows the user to tweak conversion mistakes. +matrixeater.menuitem.flipalluvsu=Flip All UVs U +matrixeater.menuitem.flipalluvsv=Flip All UVs V +matrixeater.menuitem.swapalluvsvu=Swap All UVs U for V +matrixeater.menu.mirror=Mirrors +matrixeater.menu.mirror_description=Allows the user to mirror objects. +matrixeater.menuitem.mirrorx=Mirror X +matrixeater.menuitem.mirrory=Mirror Y +matrixeater.menuitem.mirrorz=Mirror Z +matrixeater.menuitem.mirrorflip=Automatically flip after mirror (preserves surface) +matrixeater.menuitem.texturemodels=Texture Models +matrixeater.menuitem.newdirectory=Change Game Directory +matrixeater.menuitem.showvertexmodifycontrols=Show Viewport Buttons +matrixeater.menuitem.shownormals=Show Normals +matrixeater.menu.viewmode=3D View Mode +matrixeater.menuitem.wireframe=Wireframe +matrixeater.menuitem.solid=Solid +matrixeater.menuitem.newmodel=New +matrixeater.menuitem.open=Open +matrixeater.menu.fetch=Open Internal +matrixeater.menuitem.fetchunit=Unit +matrixeater.menuitem.fetchmodel=Model +matrixeater.menuitem.fetchobject=Object Editor +matrixeater.menu.recentfetch=Recent +matrixeater.menu.recentfetch_description=Allows you to access recently opened internal files. +matrixeater.menuitem.clearrecent=Clear +matrixeater.menuitem.fetchportraits=Fetch portraits, too! +matrixeater.menu.import=Import +matrixeater.menuitem.import_from_file=From File +matrixeater.menuitem.import_from_unit=From Unit +matrixeater.menuitem.import_from_wc3_model=From WC3 Model +matrixeater.menuitem.import_from_object=From Object Editor +matrixeater.menuitem.import_from_workspace=From Workspace +matrixeater.menuitem.save=Save +matrixeater.menuitem.saveas=Save as +matrixeater.menuitem.exporttexture=Export Texture +matrixeater.menuitem.revert=Revert +matrixeater.menuitem.undo=Undo +matrixeater.menuitem.redo=Redo +matrixeater.menu.optimize=Optimize +matrixeater.menuitem.linearizeanimations=Linearize Animations +matrixeater.menuitem.simplifykeyframes=Simplify Keyframes (Experimental) +matrixeater.menuitem.minimize_geosets=Minimize Geosets +matrixeater.animflag.color=Color +matrixeater.menuitem.sortbones=sortBones +matrixeater.menuitem.flushunusedtexture=Flush Unused Texture +matrixeater.menuitem.recalcnormals=Recalculate Normals +matrixeater.menuitem.recalcextents=Recalculate Extents +matrixeater.menuitem.cut=Cut +matrixeater.menuitem.copy=Copy +matrixeater.menuitem.paste=Paste +matrixeater.menuitem.duplicateselection=Duplicate +matrixeater.menuitem.snapvertices=Snap Vertices +matrixeater.menuitem.snapnormals=Snap Normals +matrixeater.menuitem.selectall=Select All +matrixeater.menuitem.invertselection=Invert Selection +matrixeater.menuitem.expandselection=Expand Selection +matrixeater.menuitem.deletebutton=Delete +matrixeater.menuitem.preferenceswindow=Preferences Window +matrixeater.menuitem.import_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.fetchedobject_portrait=_portrait +matrixeater.menuitem.fetchedobject_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.fetchedmodel_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.fetchedunit_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.fetcheddoodad_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.updaterecent_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.recentfetches_unit_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.recentfetches_model_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.recentfetches_object_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.recentfetches_doodad_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.recentfetches_mqpmdx_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.recentfetches_mqpblp_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.recentfetches_mqpdds_description=Allows the user to control which parts of the model are displayed for editing. +matrixeater.menuitem.undomenuitem_do=Undo +matrixeater.menuitem.undomenuitem_notdo=Can't undo +matrixeater.menuitem.redomenuitem_do=Redo +matrixeater.menuitem.redomenuitem_notdo=Can't redo + +matrixeater.stockFiles.parent=Parent: +matrixeater.stockFiles.add=Add +matrixeater.stockFiles.particle_name=Particle Name: + +matrixeater.frame.animationtransferer=Animation Transferer + +matrixeater.println.rigAction=NOT RIGGING, NOT VALID +matrixeater.println.putting=putting +matrixeater.println.numuvlayers= into a nice + +matrixeater.button.chooseanimations=Choose when to show! +matrixeater.button.color=Color +matrixeater.button.visibility=Visibility +matrixeater.button.refresh=Refresh +matrixeater.button.apply=Apply +matrixeater.button.find_f3=Find (F3) +matrixeater.button.animation=Animate + +matrixeater.label.calculate_extents.prompt=This will calculate the extents of all model components. Proceed? +matrixeater.label.calculate_extents.wrap=wrap +matrixeater.label.calculate_extents.warning=(It may destroy existing extents) +matrixeater.label.calculate_extents.all_geosets=Consider all geosets for calculation +matrixeater.label.calculate_extents.current_geosets=Consider current editable geosets for calculation + +matrixeater.title.lefthandtab=Edit +matrixeater.title.viewing=View +matrixeater.title.model=Model + +matrixeater.tab.view_unit_browser=Unit Browser +matrixeater.tab.view_data_browser=Data Browser + +matrixeater.toobar.new=New +matrixeater.toobar.open=Open +matrixeater.toobar.save=Save +matrixeater.toobar.undo=Undo +matrixeater.toobar.redo=Redo +matrixeater.toobar.select_and_move=Select and Move +matrixeater.toobar.select_and_rotate=Select and Rotate +matrixeater.toobar.select_and_scale=Select and Scale +matrixeater.toobar.select_and_extrude=Select and Extrude +matrixeater.toobar.select_and_extend=Select and Extend +matrixeater.toobar.snap=Snap + +matrixeater.tooltip.create_keyframe=Create Keyframe +matrixeater.tooltip.choose_time_bounds=Choose Time Bounds +matrixeater.tooltip.change_game_directory=Changes the directory from which to load texture files for the 3D display. + +matrixeater.dialog.matrixeaterscripttextarea=Must open a file! +matrixeater.filefilter_mdx=Warcraft III Binary Model '-.mdx' +matrixeater.filefilter_blp=Warcraft III Texture '-.blp' +matrixeater.filefilter_png=PNG Image '-.png' +matrixeater.filefilter_obj=Wavefront OBJ '-.obj' +matrixeater.dialog.export_texture=Export Texture +matrixeater.dialog.image_file= Image File +matrixeater.dialog.addtoolbar_choose=Choose settings: +matrixeater.dialog.addtoolbar_tp_settings=T-Pose Settings +matrixeater.dialog.ethorizontalgroup.add=Add +matrixeater.dialog.suggestedname=No import file was specified +matrixeater.dialog.change_language=Change Language +matrixeater.dialog.change_language_text=Restart immediately to take effect?\n\nIf the program does not restart, please run it manually. +matrixeater.dialog.color_chooser=Color Chooser +matrixeater.dialog.openpreferencesaction=Preferences +matrixeater.dialog.openmodelfile=Please open a model file. +matrixeater.dialog.settime=Set Time Bounds +matrixeater.dialog.exportanimated=You must be in the Animation Editor to use that! +matrixeater.dialog.snapshotmodel=Export Static Snapshot +matrixeater.dialog.exporttexture=Warning: Alpha channel was converted to black. Some data will be lost\nif you convert this texture back to Warcraft BLP. +matrixeater.dialog.exporttexture.file_type_unknown=File type unknown or unavailable +matrixeater.dialog.exporttexture.no_file_type=No file type was specified +matrixeater.dialog.exporttexture.no_output_file=No output file was specified +matrixeater.dialog.combineanims.pick_one=Pick the first animation +matrixeater.dialog.combineanims.choose_one=Choose 1st Anim +matrixeater.dialog.combineanims.pick_two=Pick the second animation +matrixeater.dialog.combineanims.choose_two=Choose 2nd Anim +matrixeater.dialog.combineanims.call=What should the combined animation be called? +matrixeater.dialog.combineanims.called=DONE! Made a combined animation called +matrixeater.dialog.skinsplicefromworkspace=Choose a workspace item to import data from: +matrixeater.dialog.skinsplicefromworkspace_import=Import from Workspace +matrixeater.dialog.deletedown_userresult=Are you sure? Deleting TVertices layers beyond the first can help to open the file in Magos War3ModelEditor\nif a software glitch added an extra layer,\n but it can also lose art information for some files.\n\nAlso, this action only applies to selected vertices. +matrixeater.dialog.relinkbone_choose=Choose a parent node +matrixeater.dialog.relinkbone_set=Set Parent Node +matrixeater.dialog.minimize_geosets=This is experimental and I did not code the Undo option for it yet. Continue?\nMy advice is to click cancel and save once first. +matrixeater.dialog.import=Import +matrixeater.dialog.importfromworkspace=Choose a workspace item to import data from: +matrixeater.dialog.importfromworkspace_import=Import from Workspace +matrixeater.dialog.mergegeoset=Merge Single Geoset (Oinker-based) +matrixeater.dialog.geosetinto=Geoset into which to Import: (1 to +matrixeater.dialog.geosetimport=Geoset to Import: (1 to +matrixeater.dialog.yes_no=Are you sure you want to clear the Recent history? +matrixeater.dialog.yes_no_confirm=Confirm Clear +matrixeater.dialog.linearizeanimations=This is an irreversible process that will lose some of your model data,\nin exchange for making it a smaller storage size.\n\nContinue and simplify animations? +matrixeater.dialog.linearizeanimations_warn=Warning: Linearize Animations +matrixeater.dialog.simplifykeyframes=This is an irreversible process that will lose some of your model data,\nin exchange for making it a smaller storage size.\n\nContinue and simplify keyframes? +matrixeater.dialog.risefallbirth=This will permanently alter model. Are you sure? +matrixeater.dialog.simplifykeyframes_warn=Warning: Simplify Keyframes +matrixeater.dialog.oldbirth=Existing birth detected. What should be done with it? +matrixeater.dialog.olddeath=Existing death detected. What should be done with it? +matrixeater.dialog.animfromfile=Animation Source +matrixeater.dialog.done=Done! +matrixeater.dialog.clicksaveas=Selected file already exists. +matrixeater.dialog.clicksaveas_warn=Warning +matrixeater.dialog.clicksaveas_notselect=You tried to save, but you somehow didn't select a file.\nThat is bad. +matrixeater.dialog.clickopen=Open +matrixeater.dialog.openfile=Opening command failed: +matrixeater.dialog.openfileproblem=Problem opening file: +matrixeater.dialog.fetchunit=The chosen model could not be used. +matrixeater.dialog.fetchunit_error=Program Error +matrixeater.dialog.modeloptionpane=The chosen model could not be used. +matrixeater.dialog.modeloptionpane_error=Program Error +matrixeater.dialog.fetchobject=Object Editor - Select Unit +matrixeater.dialog.fetchobject_notuse=The chosen model could not be used. +matrixeater.dialog.fetchobject_error=Program Error +matrixeater.dialog.addsingleanimation_choose=Choose an animation! +matrixeater.dialog.addsingleanimation_add=Add Animation +matrixeater.dialog.addsingleanimation_copy=Which animation from THIS model to copy visiblity from? +matrixeater.dialog.addsingleanimation_no_visibility=No visibility will be copied. +matrixeater.dialog.addsingleanimation_added=Added +matrixeater.dialog.addsingleanimation_s='s +matrixeater.dialog.addsingleanimation_with= with +matrixeater.dialog.addsingleanimation_ok='s visibility OK! +matrixeater.dialog.addsingleanimation_no_animation=Bad choice. No animation added. +matrixeater.dialog.nullmodelfile_bad=bad voodoo +matrixeater.dialog.nullmodelfile_good=good voodoo +matrixeater.dialog.parsetriangles_error=Error: Unable to interpret information in Triangles: +matrixeater.dialog.parsetriangles_or=, or +matrixeater.dialog.filehandler=No file type was specified +matrixeater.dialog.filehandler_output=No output file was specified +matrixeater.dialog.mdlEditorfindnext=Finished searching document, continue from top? +matrixeater.dialog.mdlEditorfindnext_find=Find +matrixeater.dialog.selectionttemtypegroup_linked=Move Linked +matrixeater.dialog.selectionttemtypegroup_single=Move Single + +matrixeater.settext.modelcontextmanager_empty=// empty +matrixeater.settext.modelcontextmanager_refresh=// click on \"Refresh\" to populate this UI.\n// If you want to populate this view automatically, you can do so in the preferences window\n// (but it may degrade performance). + +matrixeater.tostring.relinkbone=(No parent) + +matrixeater.warnings.newgeosets=Failed to replace: + +matrixeater.exception.skinsplicefrommodel=Reading mdx failed +matrixeater.exception.skinsplicefromunit=Reading mdx failed +matrixeater.exception.newgeosets=failed to replace: +matrixeater.exception.save_as=Save as +matrixeater.exception.clicksaveas=OBJ saving has not been coded yet. +matrixeater.exception.recentfetches=Unexpected value: +matrixeater.exception.loadfile_notfound=Reading mdx failed +matrixeater.exception.loadfile=Reading mdx failed +matrixeater.exception.loadstreammdx_notfound=Reading mdx failed +matrixeater.exception.loadstreammdx=Reading mdx failed +matrixeater.exception.openfile=Allows the user to control which parts of the model are displayed for editing. + +matrixeater.display.nullmodelfile_getparentframe=MatrixEater detected error with Java's wait function +matrixeater.display.nullmodelfile_importstarted=MatrixEater detected error with Java's wait function + +matrixeater.window.openunitvieweraction=Unit Browser +matrixeater.window.opendoodadvieweraction=MPQ Browser +matrixeater.view.opendoodadvieweraction=Doodad Browser +matrixeater.label.openhivevieweraction=Resource Type +matrixeater.comboBox.openhivevieweraction=Any +matrixeater.border.openhivevieweraction_resource=Resource Filters +matrixeater.view.openhivevieweraction_bo=Bongo Bongo (Phantom Shadow Beast) +matrixeater.view.openhivevieweraction_other=Other Model +matrixeater.border.openhivevieweraction_tags=Tags +matrixeater.checkbox.openhivevieweraction_results=Results must include all selected tags +matrixeater.label.openhivevieweraction_types=Types (Models) +matrixeater.checkbox.openhivevieweraction_build=Building +matrixeater.checkbox.openhivevieweraction_doodad=Doodad +matrixeater.checkbox.openhivevieweraction_item=Item +matrixeater.checkbox.openhivevieweraction_ui=User Interface +matrixeater.view.openhivevieweraction_hive=Hive Browser +matrixeater.view.viewportcontrollerwindowviewport=Outliner +matrixeater.view.toolview=Tools +matrixeater.view.modeldataview=Contents +matrixeater.view.tracks=Tracks +matrixeater.view.component=Component +matrixeater.view.windowundocking=: (windowUndocking removedWindow as view) title bar visible now +matrixeater.view.windowremoved_barproperties=: (removedWindow as view) title bar visible now +matrixeater.view.windowremoved_singlechildview=: (singleChildView, windowRemoved()) title bar visible now +matrixeater.view.windowremoved_force=: force close because 0 child windows in windowRemoved() +matrixeater.view.windowclosing_barproperties=: (closingWindow as view) title bar visible now +matrixeater.view.windowclosing_singlechildview=: (singleChildView, windowClosing()) title bar visible now +matrixeater.view.windowclosing_force=: force close because 0 child windows in windowClosing() +matrixeater.view.windowadd=: (singleChildView as view, windowAdded()) title bar NOT visible now +matrixeater.view.windowadd_barproperties=: (addedWindow as view) title bar NOT visible now +matrixeater.view.left=Side +matrixeater.view.front=Front +matrixeater.view.bottom=Bottom +matrixeater.view.perspective=Perspective +matrixeater.view.preview=Preview +matrixeater.view.timesliderandextra=Footer +matrixeater.view.hacker=Matrix Eater Script +matrixeater.view.run=Run +matrixeater.view.mdltext=Text +matrixeater.view.creator=Modeling +matrixeater.view.animation_controller=Animation Controller +matrixeater.view.camera_controller=Camera Controller + +matrixeater.traverseandreloadunit=Saw unit tree +matrixeater.traverseandreloaddoodad=Saw doodad tree +matrixeater.traverseandreloadmpq=Saw mpq tree + +matrixeater.message.opencomfail=Opening command failed +matrixeater.message.proopen=Problem opening file: +matrixeater.message.exporttextures_warning=Warning: Alpha channel was converted to black. Some data will be lost\nif you convert this texture back to Warcraft BLP. +matrixeater.message.exporttextures_unknown=File type unknown or unavailable +matrixeater.message.exporttextures_nofiletype=No file type was specified +matrixeater.message.exporttextures_nooutput=No output file was specified + +matrixeater.newmodel.layout=Model Name: +matrixeater.newmodel.empty=Create Empty +matrixeater.newmodel.plane=Create Plane +matrixeater.newmodel.box=Create Box +matrixeater.newmodel.new=New Model +matrixeater.newmodel.createbox=Box: Choose Segments +matrixeater.newmodel.createplane=Plane: Choose Segments + +# matrixeater/src/com/matrixeater/AnimationFrame +matrixeater.animationframe.title=Animation Editor: +matrixeater.animation_transfer_done=Animation transfer done! + +# matrixeater/src/com/matrixeater/AnimationPanel +matrixeater.animationpanel.global_sequence=Global Sequence + +# matrixeater/src/com/matrixeater/ClonedNodeNamePickerImplementation +matrixeater.clonednodename.copy= copy +matrixeater.clonednodename.enter_name=Enter name for clone of \" +matrixeater.clonednodename.choose_node_name=Choose Node Names + +# matrixeater/src/com/matrixeater/RedoActionImplementation +matrixeater.dialog.mpanel_redo=Nothing to redo! + +# matrixeater/src/com/matrixeater/UndoActionImplementation +matrixeater.dialog.mpanel_undo=Nothing to undo! + +# matrixeater/src/com/matrixeater/ViewController +matrixeater.frame.viewcontroller=View Controller +matrixeater.tab.geoscroll=Controls visibility + +# matrixeater/src/com/matrixeater/MainFrame +matrixeater.println.startupmodelpaths= converted: +matrixeater.println.startupmodelpaths_unable=Unable to convert. If you are converting an image, provide an output path to tell me what file extension to save as. +matrixeater.put.datapromptforced=desktop +matrixeater.put.dataprompt_frame=: Setup +matrixeater.dialog.wingutilities_setup=Retera Model Studio: Setup +matrixeater.dialog.wingutilities_exit=Retera Model Studio startup sequence has failed for two attempts. The program will now exit. +matrixeater.dialog.swingutilities=Retera Model Studio startup sequence has failed for two attempts. The program will now exit. +matrixeater.display.defaultexceptionhandler=Uncaught exception on Thread \" +matrixeater.println.defaultexceptionhandler=Uncaught exception on thread: + +# matrixeater/src/com/matrixeater/blpconv/BlpConverterPanel +matrixeater.ExtensionFilter.blpconverterpanel_blp=BLP image +matrixeater.ExtensionFilter.blpconverterpanel_tga=TGA image +matrixeater.ExtensionFilter.blpconverterpanel_image= image +matrixeater.button.blpconverterpanel_load=Load File +matrixeater.button.blpconverterpanel_save=Save File +matrixeater.exception.blpconverterpanel_blp=unable to load: +matrixeater.exception.blpconverterpanel_tga=unable to load: +matrixeater.exception.blpconverterpanel_image=Unable to load (bad format?): +matrixeater.combobox.blpconverterpanel_paletted=Paletted +matrixeater.checkbox.blpconverterpanel_usealpha=Use Alpha +matrixeater.checkbox.blpconverterpanel_generate=Generate Mip Maps +matrixeater.checkbox.blpconverterpanel_anti=Anti Dither +matrixeater.dialog.blpconverterpanel_quality=Quality: +matrixeater.dialog.blpconverterpanel_blp=BLP Export Options +matrixeater.frame.editordisplaymanager=BLP Converter (Using DrSuperGood blp-iio-plugin) +matrixeater.layout.lefthandcardpanel_tex=tex +matrixeater.layout.lefthandcardpanel_model=model +matrixeater.dialog.lefthandcardpanel_run=Not yet implemented for this application. + +# matrixeater/src/com/matrixeater/colorizer/MaydayColorizer +matrixeater.label.maydaycolorizer=Enter text: +matrixeater.dialog.colorchooser=Choose Color +matrixeater.button.applyleftcolor=Apply Color +matrixeater.button.apprightcolor=Apply Color +matrixeater.button.applygradient=Apply Gradient +matrixeater.button.valuelink=Value Link +matrixeater.button.newline=New Line +matrixeater.frame.main=Colorizer +matrixeater.exception.illegalargumentexception=Invalid axis: + +# matrixeater/src/com/matrixeater/hacks/blessing/BlessingWindow +matrixeater.string.blessingwindow=Choose your Blessing +matrixeater.blessing.gonk=Loa of the Pack +matrixeater.blessing.pa=Loa of the Winds +matrixeater.blessing.rezan=Loa of Kings +matrixeater.blessing.bwonsamdi=Loa of Graves +matrixeater.blessingitem.feralswipes=Feral Swipes +matrixeater.blessingitem.feralswipes_text=Attack all enemies in front of you and deal damage. +matrixeater.blessingitem.trolldaggers=Troll Daggers +matrixeater.blessingitem.trolldaggers_text=Increases the damage of all poison based skills and abilities. +matrixeater.blessingitem.mysticfogs=Mystic Fogs +matrixeater.blessingitem.mysticfogs_text=Provides an AoE around all allies structures that prevents the casting of enemy spells. +matrixeater.blessingitem.shieldsmash=Shield Smash +matrixeater.blessingitem.shieldsmash_text=Causes all troll towers to do Chaos damage which ignores enemy armor. +matrixeater.blessingitem.crownofkings=Crown of Kings +matrixeater.blessingitem.crownofkings_text=Provides a +5 attribute bonus to all Troll heroes. +matrixeater.frame.main=The Game + +# matrixeater/src/com/matrixeater/hacks/converts/ConvertBLPToTGAWar3 +matrixeater.println.blptotgs_main_usage=Usage: +matrixeater.println.blptotgs_main_passed=Passed: +matrixeater.println.blptotgs_main_failed=Failed: +matrixeater.println.blptotgs_main_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/converts/ConvertMDXToMDLWar3 +matrixeater.println.mdxtomdl_main_usage=Usage: +matrixeater.println.mdxtomdl_main_passed=Passed: +matrixeater.println.mdxtomdl_main_failed=Failed: +matrixeater.println.mdxtomdl_main_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/converts/RecompileModelsDirectory +matrixeater.println.recompilemodel_main_usage=Usage: +matrixeater.println.recompilemodel_main_passed=Passed: +matrixeater.println.recompilemodel_main_failed=Failed: +matrixeater.println.recompilemodel_main_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/BLPExtractorCompressorWar3 +matrixeater.println.blpextractorcompressor_main_usage=Usage: +matrixeater.println.blpextractorcompressor_main_passed=Passed: +matrixeater.println.blpextractorcompressor_main_failed=Failed: +matrixeater.println.blpextractorcompressor_main_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/BLPNulltexGenWar3 +matrixeater.println.blpnulltexgen_main_usage=Usage: +matrixeater.println.blpnulltexgen_main_passed=Passed: +matrixeater.println.blpnulltexgen_main_failed=Failed: +matrixeater.println.blpnulltexgen_main_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/ColorWheel +matrixeater.frame.main=Test + +# matrixeater/src/com/matrixeater/hacks/ExpungeExtensionWar3 +matrixeater.println.expungeextension_main_usage=Usage: +matrixeater.println.expungeextension_main_passed=Passed: +matrixeater.println.expungeextension_main_failed=Failed: +matrixeater.println.expungeextension_main_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/FindEverythingWithMissingFrames +matrixeater.println.findmiss_main_globa=:GlobalSeqId +matrixeater.println.findmiss_main_start=:Missing start at +matrixeater.println.findmiss_main_end=:Missing end at +matrixeater.println.findmiss_main_track= for track +matrixeater.println.findmiss_main_done=done + +# matrixeater/src/com/matrixeater/hacks/FindTreeBridgeTool2 +matrixeater.println.findtreebridge_checktb= at index + +# matrixeater/src/com/matrixeater/hacks/FtlopMaker +matrixeater.println.ftlopmaker_go=Going to attempt to port +matrixeater.println.ftlopmaker_items= items +matrixeater.println.ftlopmaker_processed=Processed 100 items... now at + +# matrixeater/src/com/matrixeater/hacks/FtlopMaker2 +matrixeater.println.ftlopmaker2_copy=copying + +# matrixeater/src/com/matrixeater/hacks/FtlopMaker4 +matrixeater.println.ftlopmaker4_go=Going to attempt to port +matrixeater.println.ftlopmaker4_items= items +matrixeater.println.ftlopmaker4_processed=Processed 100 items... now at +matrixeater.println.ftlopmaker4_done=Done assigning jobs + +# matrixeater/src/com/matrixeater/hacks/FtlopMaker5 +matrixeater.println.ftlopmaker5_go=Going to attempt to port +matrixeater.println.ftlopmaker5_items= items +matrixeater.println.ftlopmaker5_processed=Processed 100 items... now at + +# matrixeater/src/com/matrixeater/hacks/GetMeDatas5 +matrixeater.frame.getmedatas5_main=Rigborn Rotator + +# matrixeater/src/com/matrixeater/hacks/GetMeDatas13 +matrixeater.println.getmedatas13_main_read=Reading... +matrixeater.println.getmedatas13_main_out=Crazy outliers: + +# matrixeater/src/com/matrixeater/hacks/GetMeDatas14 +matrixeater.println.getmedatas14_main_checked=Checked +matrixeater.println.getmedatas14_main_of= of +matrixeater.println.getmedatas14_main_units= units. +matrixeater.println.getmedatas14_main_fail=FAIL: +matrixeater.println.getmedatas14_main_skip=skip +matrixeater.println.getmedatas14_main_bad=BAD: + +# matrixeater/src/com/matrixeater/hacks/GridHotkeyMaker +matrixeater.println.sharedcommandcardbuttonsfound_zear1=Found Zear Backpack 1! +matrixeater.exception.sharedcommandcardbuttonsfound_null= is null +matrixeater.println.sharedcommandcardbuttonsfound_ass=Assigning +matrixeater.println.sharedcommandcardbuttonsfound_zear=Found Zear Backpack! +matrixeater.println.sharedcommandcardbuttonsfound_look=Lookup to data got +matrixeater.println.sharedcommandcardbuttonsfound_to= to ( + +# matrixeater/src/com/matrixeater/hacks/ListExtensionWar3 +matrixeater.println.listextension_main_usage=Usage: +matrixeater.println.listextension_main_passed=Passed: +matrixeater.println.listextension_main_failed=Failed: +matrixeater.println.listextension_main_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/ListFileComparingGuy +matrixeater.println.listfilecomparingguy_mpq=Not in MPQ Editor out: +matrixeater.println.listfilecomparingguy_java=Not in My Java code out: + +# matrixeater/src/com/matrixeater/hacks/ListFileFinder +matrixeater.println.listfilefinder_mutablegamedata=no unit for id: +matrixeater.println.listfilefinder_startingline=invalid quoted string: +matrixeater.println.listfilefinder_fieldasstring=unable to parse model: + +# matrixeater/src/com/matrixeater/hacks/LookAndFeelDemo +matrixeater.string.lookandfeeldemo_labelPrefix=Number of button clicks: +matrixeater.button.lookandfeeldemo_createcomponents=I'm a Swing button! +matrixeater.println.lookandfeeldemo_classnotfoundexception_1=Couldn't find class for specified look and feel: +matrixeater.println.lookandfeeldemo_classnotfoundexception_2=Did you include the L&F library in the class path? +matrixeater.println.lookandfeeldemo_classnotfoundexception_3=Using the default look and feel. +matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_1=Can't use the specified look and feel ( +matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_2=) on this platform. +matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_3=Using the default look and feel. +matrixeater.println.lookandfeeldemo_exception_1=Couldn't get specified look and feel ( +matrixeater.println.lookandfeeldemo_exception_2=), for some reason. +matrixeater.println.lookandfeeldemo_exception_3=Using the default look and feel. +matrixeater.frame.createandshowgui=SwingApplication + +# matrixeater/src/com/matrixeater/hacks/Mp3ExtractWar3 +matrixeater.println.mp3extract_uasge=Usage: +matrixeater.println.mp3extract_passed=Passed: +matrixeater.println.mp3extract_fail=Failed: +matrixeater.println.mp3extract_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/RecompileMDXWar3 +matrixeater.println.recompilemax_uasge=Usage: +matrixeater.println.recompilemax_passed=Passed: +matrixeater.println.recompilemax_fail=Failed: +matrixeater.println.recompilemax_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/RegenErrors +matrixeater.println.inputstreamreader=Source then target: + +# matrixeater/src/com/matrixeater/hacks/RegenTexErrors +matrixeater.println.inputstreamreader=Source then target: + +# matrixeater/src/com/matrixeater/hacks/ReignOfChaosMissionFixerTool +matrixeater.println.blizzarddatainputstream=adding to hero: + +# matrixeater/src/com/matrixeater/hacks/RigbornRotator +matrixeater.label.inputlabel=Input: +matrixeater.button.inputbutton=Browse +matrixeater.label.outputlabel=Output: +matrixeater.button.outputbutton=Browse +matrixeater.border.borderfactory=Rotate +matrixeater.label.axisx=Axis X: +matrixeater.label.axisy=Axis Y: +matrixeater.label.axisz=Axis Z: +matrixeater.label.angle=Angle: +matrixeater.button.generatebutton=Generate +matrixeater.frame.setcontentpane=Rigborn Rotator + +# matrixeater/src/com/matrixeater/hacks/SanityFixer +matrixeater.println.sanityfixer_processmodel_values=same values +matrixeater.println.sanityfixer_processmodel_unused=unused: +matrixeater.println.sanityfixer_processmodel_warn=warn: + +# matrixeater/src/com/matrixeater/hacks/SquishWar3 +matrixeater.println.squish_uasge=Usage: +matrixeater.println.squish_passed=Passed: +matrixeater.println.squish_fail=Failed: +matrixeater.println.squish_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/TGAExtractorCompressorWar3 +matrixeater.println.compressroot_uasge=Usage: +matrixeater.println.compressroot_passed=Passed: +matrixeater.println.compressroot_fail=Failed: +matrixeater.println.compressroot_faillist=Fail list: + +# matrixeater/src/com/matrixeater/hacks/WavExtractWar3 +matrixeater.println.wavextract_uasge=Usage: +matrixeater.println.wavextract_passed=Passed: +matrixeater.println.wavextract_fail=Failed: +matrixeater.println.wavextract_faillist=Fail list: + +# matrixeater/src/com/matrixeater/imp/AnimationTransfer +matrixeater.label.basefilelabel=Base file: +matrixeater.label.animfilelabel=Animation file: +matrixeater.label.outfilelabel=Output file: +matrixeater.label.transsinglelabel=Transfer single animation: +matrixeater.label.pickanimlabel=Animation to transfer: +matrixeater.label.visfromlabel=Get visibility from: +matrixeater.button.transfer=Transfer +matrixeater.button.done=Done +matrixeater.button.goadvanced=Go Advanced +matrixeater.settooltiptext.goadvanced=Opens the traditional MatrixEater Import window responsible for this Simple Import, so that you can micro-manage particular settings before finishing the operation. +matrixeater.dialog.forcerefreshmodels_base=Reloaded base model +matrixeater.dialog.forcerefreshmodels_anim=Reloaded anim model +matrixeater.dialog.basebrowse_title_base=Open +matrixeater.dialog.basebrowse_title_anim=Open +matrixeater.dialog.basebrowse_title_out=Save +matrixeater.dialog.forcerefreshmodels_outfileinput=Animation transfer done! +matrixeater.dialog.dotransfer_check1=check 1! +matrixeater.display.dotransfer=MatrixEater detected error with Java's wait function +matrixeater.dialog.dotransfer_bad=bad voodoo +matrixeater.dialog.dotransfer_good=good voodoo +matrixeater.dialog.dotransfer_check2=check 2! +matrixeater.dialog.dotransfer_done=Animation transfer done! +matrixeater.dialog.dotransfer_just_done=Animation transfer 99% done! + +# matrixeater/src/com/matrixeater/imp/FaceEffectsAreNotModdableGUI +matrixeater.label.audiofilelabel=Audio File: +matrixeater.label.basesequencelabel=Base Sequence: +matrixeater.button.audiofilebrowse=Browse + +# matrixeater/src/com/matrixeater/imp/ImportPanelSimple +matrixeater.frame.importpanelsimple=Simple Import Handler +matrixeater.title.animationtransfer=Animation Transferer + +# matrixeater/src/com/matrixeater/imp/MDLOBJBuilderInterface +matrixeater.println.addvertexgeometric=addVertexGeometric( +matrixeater.println.addvertextexture=addVertexTexture( +matrixeater.println.addvertexnormal=addVertexNormal( +matrixeater.exception.addpoints=addPoints not yet implemented for OBJ->MDL converter +matrixeater.exception.addline=addLine not yet implemented for OBJ->MDL converter +matrixeater.println.addface=addFace( +matrixeater.println.addobjectname=addObjectName( +matrixeater.println.addmaplib=addMapLib +matrixeater.exception.addmaplib=addMapLib not yet implemented for OBJ->MDL converter +matrixeater.println.setcurrentsmoothinggroup=setCurrentSmoothingGroup( +matrixeater.println.setcurrentusemap=setCurrentUseMap( +matrixeater.println.setcurrentusematerial=setCurrentUseMaterial( +matrixeater.layer.setcurrentusematerial=None +matrixeater.println.newmtl=newMtl( +matrixeater.println.xyz=newMtl(type= +matrixeater.println.rgb=setRGB(type= +matrixeater.println.illummodel=setIllum(illumModel= +matrixeater.println.setd_1=setD(halo= +matrixeater.println.setd_2=,factor= +matrixeater.println.setns=setNs(exponent= +matrixeater.println.setsharpness=setSharpness(value= +matrixeater.println.setni=setNi(opticalDensity= +matrixeater.println.setmapdecaldispbump_1=setMapDecalDispBump(type= +matrixeater.println.setmapdecaldispbump_2=,filename= +matrixeater.println.setrefl_1=setRefl(type= +matrixeater.println.setrefl_2=,filename= +matrixeater.println.doneparsingmaterial=doneParsingMaterial() +matrixeater.println.doneparsiongobj=doneParsingObj(filename= + +# matrixeater/src/com/matrixeater/imp/OBJImportSettingsPanel +matrixeater.frame.objimportsettingspanel=OBJ Settings + +# matrixeater/src/com/matrixeaterhayate/HayateMatrixEater +matrixeater.frame.hayatematrixeater=New Hayate Matrix Eater + +# matrixeater/src/com/matrixeaterhayate/HMToolbox +matrixeater.border.createpanel=Create +matrixeater.border.transformpanel=Transform + +# matrixeater/src/com/matrixeaterhayate/TextureManager +matrixeater.label.modelstructurechangelistener=Textures +matrixeater.checkbox.chckbxdisplaypath=Display Path +matrixeater.border.panel_1=Image Viewer +matrixeater.button.texturemanager_import=Import +matrixeater.button.texturemanager_export=Export +matrixeater.button.texturemanager_replace=Replace Texture +matrixeater.button.texturemanager_remove=Remove +matrixeater.button.texturemanager_edit_path=Edit Path +matrixeater.button.texturemanager_add_path=Add Path +matrixeater.dialog.add_texture_1=Enter texture path: +matrixeater.dialog.add_texture_2=Add Texture + +# matrixeater/src/com/owens/oobjloader/builder/Build +matrixeater.settext.materialtosubgroup_collapsing=Collapsing MatrixEater MDL representation +matrixeater.settext.materialtosubgroup_preparing=Preparing model for editing... +matrixeater.settext.materialtosubgroup_adding_stand=Adding "Stand" animation... +matrixeater.settext.materialtosubgroup_scanning_wow=Scanning for WoW sizing... +matrixeater.string.materialtosubgroup_option_no=No +matrixeater.dialog.materialtosubgroup_increase_1=This model might be a WoW model, or peculiarly small. Would you like to increase its size? +matrixeater.dialog.materialtosubgroup_increase_2=WoW Scaling +matrixeater.settext.materialtosubgroup_scan_textures=Scanning for convertable textures... +matrixeater.dialog.materialtosubgroup_generated=This OBJ model contains references to non-BLP files in its materials. Automatically create corresponding BLP files? If you choose YES, the MDL format of this OBJ will also be generated to support Matrix Eater 3D viewing. +matrixeater.dialog.materialtosubgroup_convert_textures=Convert Textures to BLPs +matrixeater.settext.materialtosubgroup_converting_textures=Converting textures... +matrixeater.exception.materialtosubgroup_readimage=Java/MatrixEater failed to read image data: +matrixeater.display.materialtosubgroup_unable_convert_png=Unable to convert PNG to BLP. +matrixeater.settext.materialtosubgroup_saving_file=Saving file... +matrixeater.settext.materialtosubgroup_converting=Converting %s ... +matrixeater.dialog.materialtosubgroup_mdlmaterial=One or more meshes were imported with texture coordinates stretching outside the texture.\n\nThese will not render correctly in the Matrix Eater viewport, but their\ncorresponding textures will be flagged to WrapWidth and WrapHeight and render\ncorrectly in the Warcraft III game and Magos's viewer. +matrixeater.exception.materialtosubgroup_shadows_1=Casting shadows not supported in WC3 +matrixeater.exception.materialtosubgroup_shadows_2=Not supported + +# matrixeater/src/com/owens/oobjloader/builder/BuildWLists +matrixeater.string.buildwlists_option_no=No +matrixeater.dialog.buildwlists_increase_1=This model might be a WoW model, or peculiarly small. Would you like to increase its size? +matrixeater.dialog.buildwlists_increase_2=WoW Scaling +matrixeater.settext.userwantsswaptoblp_1=This OBJ model contains references to non-BLP files in its materials. Automatically create corresponding BLP files?\n\nIf you choose YES, the MDL format of this OBJ will also be generated to support Matrix Eater 3D viewing. +matrixeater.settext.userwantsswaptoblp_2=Convert Textures to BLPs +matrixeater.exception.imagefilepng=Java/MatrixEater failed to read image data: +matrixeater.display.imagefilepng=Unable to convert PNG to BLP. +matrixeater.dialog.noteformatrixeateraboutwrap=One or more meshes were imported with texture coordinates stretching outside the texture.\n\nThese will not render correctly in the Matrix Eater viewport, but their\ncorresponding textures will be flagged to WrapWidth and WrapHeight and render\ncorrectly in the Warcraft III game and Magos's viewer. +matrixeater.exception.convertmaterial_1=Casting shadows not supported in WC3 +matrixeater.exception.convertmaterial_2=Not supported + +# matrixeater/src/com/owens/oobjloader/builder/TrollyLoadbar +matrixeater.frame.trollyloadbar=Loading... +matrixeater.label.trollyloadbar=Loading... + +# matrixeater/src/com/owens/oobjloader/lwjgl/DisplayTest +matrixeater.string.displaytest_title=Test OBJ loader +matrixeater.alert.displaytest_exit=An error occured and the program will exit. + +# matrixeater/src/com/owens/oobjloader/lwjgl/VBOFactory +matrixeater.exception.vbofactory=Can not build a VBO if we have no triangles with which to build it. + +# craft3data/src/com/badlogic/gdx/backends/lwjgl/LwjglNativesLoader +exception.sharedlibraryloader=Unable to extract LWJGL natives. + +# craft3data/src/com/badlogic/gdx/utils/SharedLibraryLoader +exception.streamutils=input cannot be null. +exception.platformname_1=Couldn't load shared library ' +exception.platformname_2=' for target: +exception.readfile=Unable to read file for extraction: +exception.zipfile_1=Couldn't find ' +exception.zipfile_2=' in JAR: +exception.zipfile_catch_1=Error reading ' +exception.zipfile_catch_2=' in JAR: +exception.extractfile_extractedfile=Unable to find writable path to extract file. Is the user home directory writable? +exception.extractfile_extractedcrc_1=Error extracting file: +exception.extractfile_extractedcrc_2=\nTo: + +# craft3data/src/com/etheller/gdx/collections/AbstractCollection +memoryerror.hugecapacity=Required array size too large + +# craft3data/src/com/etheller/gdx/collections/AbstractMap +exception.keysetforeachadapter=iterator is read only +exception.abstractcollection=iterator is read only +exception.defaultsize=Negative size not allowed on ArrayList: +exception.rangecheck= not in +exception.abstractmap_remove=iterator is read only +exception.listiterator=Index: + +# craft3data/src/com/etheller/gdx/collections/HashMap +exception.hashiterator_nextentry=no more nodes for iterator +exception.hashiterator_remove=iterator is read only + +# craft3data/src/com/etheller/collections/TreeMap +exception.navigablesubmap=fromKey > toKey: +exception.navigablesubmap_secondone=key out of range +exception.navigablemap_fromkey=fromKey is out of range +exception.navigablemap_tokey=toKey is out of range + +# craft3data/src/com/hiveworkshop/blizzard/casc/info/FieldDescriptor +exception.fielddescriptor_nameend=missing name terminator +exception.fielddescriptor_datatypeend=missing data type terminator + +# craft3data/src/com/hiveworkshop/blizzard/casc/info/Info +exception.nosuchelementexception=missing headers + +# craft3data/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC +exception.readfiledata_isfile=the specified file path does not resolve to a file +exception.readfiledata_existsinstorage=the specified file is not in local storage +exception.warcraftIIIcasc_1=build info contains no records +exception.warcraftIIIcasc_2=build info contains no active field +exception.warcraftIIIcasc_3=build info contains no active record +exception.warcraftIIIcasc_4=build info contains no build key field +exception.warcraftIIIcasc_5=data folder is missing +exception.getbranch=build info contains no branch field + +# craft3data/src/com/hiveworkshop/blizzard/casc/nio/LittleHashBlockProcessor +exception.processblock=little hash block header out of bounds +exception.bytebuffer_hash_block_header_out=little hash block header out of bounds +exception.bytebuffer_hash_block_out=little hash block out of bounds +exception.bytebuffer_hash_block=little hash block + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/BankStream +exception.bankstream_1=container encoding key mismatch +exception.bankstream_2=container buffer smaller than container +exception.bankstream_3=container buffer size mismatch +exception.getnextbanklLength=no more banks to decode +exception.bytebuffer_hasnextbank=no more banks to decode +exception.bytebuffer_streambuffer=encoded data beyond end of file +exception.bytebuffer_bankbuffer=bank too large for Java to manipulate +exception.bytebuffer_encodedbuffer=not enough uncompressed bytes +exception.bytebuffer_dataformatexception=zlib inflate exception +exception.bytebuffer_decodedsize=not enough bytes generated: +exception.bytebuffer_zlib=unfinished inflate operation +exception.bytebuffer_default=unsupported encoding mode: +exception.bytebuffer_bankbuffer_streambuffer=bank buffer too small + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/BLTEContent +exception.decodecontent=missing BLTE identifier +exception.decodecontent_header_preamble_out=header preamble goes out of bounds +exception.decodecontent_header_extends_buffer=BLTE header extends beyond storage buffer bounds +exception.decodecontent_flags=unknown flags +exception.decodecontent_zero_entry_count=explicit zero entry count +exception.decodecontent_header_goes_out=header goes out of bounds +exception.decodecontent_unprocessed_blte_bytes=unprocessed BLTE bytes + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/IndexFile +exception.hashblockprocessor=header block corrupt +exception.hashblockprocessor_header_block_small=header block too small +exception.hashblockprocessor_entries_corrupt=entries block corrupt +exception.hashblockprocessor_unable_fully=unable to fully process entries block +exception.hashblockprocessor_binary_search_inverted=binary search comparing in inverted order + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/Storage +exception.storage_index_file_missing=storage index file missing +exception.storage_inconsistent_encoding_key_length=inconsistent encoding key length between index files +exception.close_closure=IOExceptions occured during closure +exception.getbanks_encoding_indicies=encoding key not in store indicies +exception.getdatafilechannel_data_file_index_large=storage data file index too large +exception.getstoragebuffer_data_buffer_large=data buffer too large to process +exception.getstoragebuffer_unexpected_end=unexpected end of file +exception.loadfilefully_failed_file_fully=failed to load file fully +exception.loadfilefully__unexpected_end=unexpected end of file + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/StorageContainer +exception.storagecontainer_storage_buffer_small=storage buffer too small +exception.storagecontainer_a_mismatch=container checksum A mismatch +exception.storagecontainer_b_mismatch=container checksum B mismatch + +# craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalDataFiles +exception.localdatafiles_close_exception=one or more IOExceptions occured during closure +exception.localdatafiles_getfileentry_incomplete_read=unexpected incomplete read +exception.localdatafiles_getfileentry_file_not_match_index=file entry does not match index entry +exception.localdatafiles_getbltechunks_header_beyond_limits=BLTE header extends beyond file limits +exception.localdatafiles_getfileentry_blte_mime=expected BLTE mime +exception.localdatafiles_getbltechunks_header_large=BLTE header too large to process +exception.localdatafiles_getbltechunks_unknown_flags=unknown BLTE flags +exception.localdatafiles_getbltechunks_chunk_large=BLTE chunk count too large to process +exception.localdatafiles_getbltechunks_invalid_chunk=invalid BLTE chunk count +exception.localdatafiles_getbltedata_beyond_data=BLTE data extends beyond file data +exception.localdatafiles_getfiledata_data_small=BLTE data too small +exception.localdatafiles_getfiledata_not_uncompressed=not enough uncompressed bytes +exception.localdatafiles_getfiledata_zlib_inflate=zlib inflate exception +exception.localdatafiles_getfiledata_not_generated=not enough bytes generated: +exception.localdatafiles_getfiledata_unfinished_inflate=unfinished inflate operation +exception.localdatafiles_getfiledata_unsupported_encoding=unsupported encoding mode: + +# craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalIndexFile +exception.localindexfile_decode_header_corrupt=index header corrupt +exception.localindexfile_decode_entries_corrupt=index entries corrupt + +# craft3data/src/com/hiveworkshop/blizzard/casc/trash/VirtualFileSystem +exception.virtualfilesystem_missing_tvfs=missing TVFS identifier +exception.virtualfilesystem_unsupported_version=unsupported vfs version: +exception.virtualfilesystem_header_small=vfs header too small + +# craft3data/src/com/hiveworkshop/blizzard/casc/vfs/TVFSDecoder +exception.tvfsdecoder_decode_node_beyond_path=prefix node container extends beyond path container +exception.tvfsdecoder_decode_path_beyond_path=path stream goes beyond path container +exception.tvfsdecoder_storagereference_logical_beyond_file=logical offset beyond file reference chunk +exception.tvfsdecoder_storagereference_storage_beyond_casc=storage offset beyond casc reference chunk +exception.tvfsdecoder_storagereference_storage_out=storage goes out of bounds +exception.tvfsdecoder_storagereference_logical_out=logical reference goes out of bounds +exception.tvfsdecoder_loadfile_missing_tvfs=missing TVFS identifier +exception.tvfsdecoder_loadfile_unsupported_version=unsupported TVFS version: +exception.tvfsdecoder_loadfile_header_past_end=TVFS header extends past end of file +exception.tvfsdecoder_loadfile_path_past_end=path stream extends past end of file +exception.tvfsdecoder_loadfile_logical_past_end=logical data extends past end of file +exception.tvfsdecoder_loadfile_storage_past_end=storage data extends past end of file + +# craft3data/src/com/hiveworkshop/blizzard/casc/vfs/VirtualFileSystem +exception.virtualfilesystem_readfile_result_not_file=result is not a file +error.virtualfilesystem_readfile_file_big=file too big to process +exception.virtualfilesystem_readfile_inconsistent_size=inconsistent size +exception.fetchstoredbuffer_stored_large=stored data too large to process +exception.fetchstoredbuffer_stored_bigger=stored data is bigger than expected +exception.fetchstoredbuffer_stored_smaller=stored data is smaller than expected +println.recursivefilepathretrieve_failed_decoding=Failed decoding tvfsFile at +exception.fetchstoredbuffer_unsupported=unsupported node type +exception.recursiveresolvepathfragments_logic_defined=logic only defined for 1 TVFS root node +exception.recursiveresolvepathfragments_unsupported=unsupported node type +exception.resolvepath_greater=pathFragments.length must be greater than 0 +exception.resolvepath_logic_defined=logic only defined for 1 root node +exception.resolvepath_not_storage=path not in storage + +# craft3data/src/com/hiveworkshop/blizzard/casc/ConfigurationFile +exception.configurationfile_configuration_no_assignment=configuration file line contains record with no assignment +exception.configurationfile_configuration_key_duplicate=configuration file contains duplicate key declarations + +# craft3data/src/com/hiveworkshop/blizzard/casc/Key +exception.key_hashcode=key hash code not safe to use due to variable sizes between systems + +# craft3data/src/com/hiveworkshop/blizzard/casc/StorageReference +exception.storagereference_storagereference_not_exist=name does not exist in configuration +exception.storagereference_storagereference_size_missing=size missing in configuration + +# craft3data/src/com/hiveworkshop/json/JSONObject +exception.jsonobject_invalid_number_1=val [ +exception.jsonobject_invalid_number_2=] is not a valid number. + +# craft3data/src/com/hiveworkshop/json/JSONPointer +exception.jsonpointer_builder_token_not_null=token cannot be null +exception.jsonpointer_builder_pointer_not_null=pointer cannot be null +exception.jsonpointer_builder_pointer_should=a JSON pointer should start with '/' or '#/' + +# craft3data/src/com/hiveworkshop/lang/Hex +exception.hex_decodehex_non_hex_character=non-hex character + +# craft3data/src/com/hiveworkshop/wc3/casc/Cascket +exception.has_error=CASC parser error for: + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TSpline +label.tspline_curve_properties=Curve properties +label.tspline_tension=Tension: +label.tspline_continuity=Continuity: +label.tspline_bias=Bias: +exception.settcb_not_finished=Not finished here, need to have shared access to storing keyframe data and UndoManager + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TTan +exception.assignsubscript_unknown=Unknown subscripting (set): +exception.getsubscript_unknown=Unknown subscripting (get): + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/NodeAnimationModelEditor +exception.nodeanimationmodeleditor_autocenterselectedbones=Unable to autocenter bones in Animation Editor +exception.nodeanimationmodeleditor_setselectedbonename=Unable to change bone names in Animation Editor +exception.nodeanimationmodeleditor_setselectedbonesuffix=Unable to change bone names in Animation Editor +exception.nodeanimationmodeleditor_addteamcolor=Unable to add team color in Animation Editor +exception.nodeanimationmodeleditor_expandselection=Unable to expand selection in Node Animation Editor +setselection.nodeanimationmodeleditor_invertselection=invert selection +setselection.nodeanimationmodeleditor_selectall=select all +setselection.nodeanimationmodeleditor_selecthdunusednodes=select HD unused +exception.nodeanimationmodeleditor_selectionatpointttester=CAMERA processed in NodeAnimationModelEditor!!! +exception.nodeanimationmodeleditor_genericselectorvisitor=Attempted to process camera with Node Animation Editor generic selector!!! +exception.nodeanimationmodeleditor_copyselection=Unable to copy selection in animation editor +exception.nodeanimationmodeleditor_deleteselectedcomponents=Unable to delete selection in animation editor +exception.nodeanimationmodeleditor_setmatrix=Unable to set Matrix in Animation Editor +exception.nodeanimationmodeleditor_snapnormals=Unable to modify normals in Animation Editor +exception.nodeanimationmodeleditor_recalcnormals=Unable to recalc normals in Animation Editor +exception.nodeanimationmodeleditor_recalcextents=Unable to modify extents in Animation Editor +exception.nodeanimationmodeleditor_mirror=Mirror has not yet been coded in Animation Editor +exception.nodeanimationmodeleditor_flipselectedfaces=Unable to flip faces in Animation Editor +exception.nodeanimationmodeleditor_flipselectednormals=Unable to flip normals in Animation Editor +exception.nodeanimationmodeleditor_snapselectedvertices=Unable to snap vertices in Animation Editor +exception.nodeanimationmodeleditor_snapselectednormals=Unable to modify normals in Animation Editor +exception.nodeanimationmodeleditor_beginextrudingselection=Unable to extrude in Animation Editor +exception.nodeanimationmodeleditor_beginextendingselection=Unable to extrude in Animation Editor +exception.nodeanimationmodeleditor_cloneselectedcomponents=Unable to clone components in Animation Editor +exception.nodeanimationmodeleditor_addvertex=Unable to add vertices in Animation Editor +exception.nodeanimationmodeleditor_addplane=Unable to add plane in Animation Editor +exception.nodeanimationmodeleditor_rawscale=Unable to scale directly in animation mode, use other system +exception.nodeanimationmodeleditor_rawrotate2d=Unable to rotate directly in animation mode, use other system +exception.nodeanimationmodeleditor_createfacefromselection=Unable to create face in animation editor +exception.nodeanimationmodeleditor_addbox=Unable to create box in animation editor +exception.nodeanimationmodeleditor_splitgeoset=Unable to split geoset in animation editor +exception.nodeanimationmodeleditor_setparent=Can't set parent in Animation Editor +exception.nodeanimationmodeleditor_reLinkrfbone=Can't set parent in Animation Editor +exception.nodeanimationmodeleditor_rig=Unable to rig in Animation Editor +exception.nodeanimationmodeleditor_addbone=Unable to add bone in Animation Editor +exception.nodeanimationmodeleditor_deletedowntoonetverticeslayer=Unable to delete mesh in Animation Editor + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeBoundChooserPanel +button.timeboundchooserpanel_animationtime=Animation Sequence +button.timeboundchooserpanel_customtime=Custom Time +button.timeboundchooserpanel_globalsequences=Global Sequences +label.timeboundchooserpanel_start=Start: +label.timeboundchooserpanel_end=End: +button.timeboundchooserpanel_createanimation=Create +button.timeboundchooserpanel_duplicateanimation=Duplicate +dialog.timeboundchooserpanel_userchosenname_1=Choose new animation name: +dialog.timeboundchooserpanel_userchosenname_2= Second +button.timeboundchooserpanel_deleteanimation=Delete +button.timeboundchooserpanel_editanimation=Edit +button.timeboundchooserpanel_length=Length +button.timeboundchooserpanel_timerange=Time Range +label.timeboundchooserpanel_createanim_name=Name: +label.timeboundchooserpanel_createanim_length=Length: +label.timeboundchooserpanel_createanim_start=Start: +label.timeboundchooserpanel_createanim_end=End: +border.timeboundchooserpanel_extraproperties_misc=Misc +checkbox.timeboundchooserpanel_nonloopingchooser_nonlooping=NonLooping +label.timeboundchooserpanel_extraproperties_rarity=Rarity +label.timeboundchooserpanel_extraproperties_movespeed=MoveSpeed +dialog.timeboundchooserpanel_result_create_animation=Create Animation +dialog.timeboundchooserpanel_deleteanimation_result_1=Also delete keyframes? +dialog.timeboundchooserpanel_deleteanimation_result_2=Delete Animation +button.timeboundchooserpanel_createglobalseq=Create +dialog.timeboundchooserpanel_createglobalseq_userchoice=Enter Length +dialog.timeboundchooserpanel_createglobalseq_globalseqs_1=A Global Sequence with that length already exists.\nThis program does not support multiple Global Sequences of the same length.\nInstead, simply add animation data to the sequence of that length which already exists. +dialog.timeboundchooserpanel_createglobalseq_globalseqs_2=Error +button.timeboundchooserpanel_deleteglobalseq=Delete +dialog.timeboundchooserpanel_deleteglobalseq_result_1=Also delete linked timelines and their keyframes? +dialog.timeboundchooserpanel_deleteglobalseq_result_2=Delete Animation +dialog.timeboundchooserpanel_applyto_timeenvironmentimpl_1=You didn't select a global sequence! +dialog.timeboundchooserpanel_applyto_timeenvironmentimpl_2=Error + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeSliderPanel +menuitem.timesliderpanel_deleteall=Delete All +menuitem.timesliderpanel_cut=Cut +menuitem.timesliderpanel_copy=Copy +menuitem.timesliderpanel_copyframe=Copy Frame (whole model) +menuitem.timesliderpanel_paste=Paste +menuitem.timesliderpanel_delete=Delete +menuitem.timesliderpanel_cut_specific=Cut +menuitem.timesliderpanel_copy_specific=Copy +menuitem.timesliderpanel_paste_specific=Paste +dialog.timesliderpanel_pastetospecifictimeline=Tell Retera to code in the ability to paste cross-node data! + +# craft3data/src/com/hiveworkshop/wc3/gui/datachooser/CascDataSource +dialog.cascdatasource_internalgetresourceasstream=CASC parser error for: +dialog.cascdatasource_internalread=CASC parser error for: +dialog.cascdatasource_internalgetfile=CASC parser error for: +dialog.cascdatasource_has_1=CASC parser error for: +dialog.cascdatasource_has_2=CASC parser error for: + +# craft3data/src/com/hiveworkshop/wc3/gui/datachooser/DataSourceChooserPanel +button.datasourcechooserpanel_clear_list=Clear All +button.datasourcechooserpanel_add_war3_install=Add War3 Install Directory +button.datasourcechooserpanel_add_default_casc=Add Default CASC Mod +button.datasourcechooserpanel_add_specific_casc=Add Specific CASC Mod +button.datasourcechooserpanel_delete_selection=Delete Selection +button.datasourcechooserpanel_move_up=Move Up +button.datasourcechooserpanel_move_down=Move Down +button.datasourcechooserpanel_reforged_hd=Reforged Graphics Mode +button.datasourcechooserpanel_classic_mode=Classic Graphics Mode +button.datasourcechooserpanel_reforged_hd2_mode=Reforged2 Graphics Mode +button.datasourcechooserpanel_classic2_mode=Classic2 Graphics Mode +button.datasourcechooserpanel_reset_defaults=Reset to Defaults +button.datasourcechooserpanel_add_casc=Add CASC +dialog.datasourcechooserpanel_addCASC_choose_version_1=Choose version +dialog.datasourcechooserpanel_addCASC_choose_version_2=Version +dialog.datasourcechooserpanel_addCASC_public_test=Warcraft III Public Test +button.datasourcechooserpanel_add_mpq=Add MPQ +extensionfilter.datasourcechooserpanel_addmpq=MPQ Archive File +button.datasourcechooserpanel_add_folder=Add Folder +button.datasourcechooserpanel_path_registry='Path' Registry Key: +button.datasourcechooserpanel_not_found=Not found +dialog.datasourcechooserpanel_entersdmode_not_hd_1=Your Warcraft III data CASC configuration is not in the HD mode. +dialog.datasourcechooserpanel_entersdmode_not_hd_2=Error +dialog.datasourcechooserpanel_entersdmode_not_hd_3=Your Warcraft III data configuration is not a standard Reforged CASC setup, so this automation feature is unavailable.\nTo use this feature, please press 'Clear All' and then 'Add War3 Install Directory' to choose a Reforged installation. +dialog.datasourcechooserpanel_enterhdmode_not_sd_1=Your Warcraft III data CASC configuration is not in the SD mode or is not configured in the expected way. You will need to apply HD mode manually by adding the appropriate CASC mods. +dialog.datasourcechooserpanel_enterhdmode_not_sd_2=Error +dialog.datasourcechooserpanel_enterhdmode_not_sd_3=Your Warcraft III data CASC configuration is not in the SD mode. +dialog.datasourcechooserpanel_entersd2mode_not_hd_1=Your Warcraft III data configuration is not a standard Reforged CASC setup, so this automation feature is unavailable.\nTo use this feature, please press 'Clear All' and then 'Add War3 Install Directory' to choose a Reforged installation. +dialog.datasourcechooserpanel_entersd2mode_not_hd_2=Error +dialog.datasourcechooserpanel_enterhd2mode_not_sd_1=Your Warcraft III data configuration is not a standard Reforged CASC setup, so this automation feature is unavailable.\nTo use this feature, please press 'Clear All' and then 'Add War3 Install Directory' to choose a Reforged installation. +dialog.datasourcechooserpanel_enterhd2mode_not_sd_2=Error +dialog.datasourcechooserpanel_addwar3installation_choose_ver=Choose version +dialog.datasourcechooserpanel_addwar3installation_ver=version +dialog.datasourcechooserpanel_addwar3installation_ptr=Warcraft III Public Test +descriptor.datasourcechooserpanel_reloadtree= (WARNING: No Mods Selected) +frame.datasourcechooserpanel_datasourcechooserframe=Data Source Chooser +dialog.datasourcechooserpanel_addspecificCASC_1=Choose a .w3mod: +dialog.datasourcechooserpanel_addspecificCASC_2=Choose Mod +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_1=Originally installed locale: +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_2=, Launcher.db locale: +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_3=Locale could not be determined automatically. Please choose your locale. +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_4=An incorrect choice may cause the Retera Model Studio to fail to start. +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_5=Any option is valid if you have started the game using that locale at least once. +dialog.datasourcechooserpanel_adddefaultCASC_confirmationresult=Choose Locale +dialog.datasourcechooserpanel_adddefaultCASC_selected_1=User did not choose a locale! Aborting! +dialog.datasourcechooserpanel_adddefaultCASC_selected_2=Error +println.datasourcechooserpanel_adddefaultCASC_1.30=Detected Patch 1.30 +println.datasourcechooserpanel_adddefaultCASC_1.31=Detected Patch 1.31 +println.datasourcechooserpanel_adddefaultCASC_1.32=Detected Patch 1.32+ +dialog.datasourcechooserpanel_adddefaultCASC_unknown_1=The Warcraft III Installation you have selected seems to be too new, or is not a supported version. The suggested prefix list from Patch 1.31 will be used.\nThis will probably fail, and you will need more advanced configuration. +dialog.datasourcechooserpanel_adddefaultCASC_unknown_2=Error + +# craft3data/src/com/hiveworkshop/wc3/gui/datachooser/FolderDataSourceDescriptor +string.folderdatasourcedescriptor_getdisplayname=Folder: + +# craft3data/src/com/hiveworkshop/wc3/gui/datachooser/MpqDataSourceDescriptor +string.mpqdatasourcedescriptor_getdisplayname=MPQ Archive: + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalEndAction +string.setanimationintervalendaction_actionname=set animation IntervalEnd to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalStartAction +string.setanimationintervalstartaction_actionname=set animation IntervalStart to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationMoveSpeedAction +string.setanimationmovespeedaction_actionname=set animation MoveSpeed to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNameAction +string.setanimationnameaction_actionname=set animation name to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNonLoopingAction +string.setanimationnonloopingaction_actionname_1=set animation looping +string.setanimationnonloopingaction_actionname_2=set animation non looping + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationRarityAction +string.setanimationrarityaction_actionname=set animation rarity to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapPathAction +string.setbitmappathaction_actionname=set bitmap path to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapReplaceableIdAction +string.setbitmapreplaceableidaction_actionname=change texture ReplaceableId + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapHeightAction +string.setbitmapwrapheightaction_actionname=change texture ReplaceableId + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapWidthAction +string.setbitmapwrapwidthaction_actionname=change texture ReplaceableId + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/globalsequence/SetGlobalSequenceLengthAction +string.setglobalsequencelengthaction_actionname=change GlobalSequence length to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetBlendTimeAction +string.setblendtimeaction_actionname=set BlendTime to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetFormatVersionAction +string.setformatversionaction_actionname=set FormatVersion to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetHeaderExtentsAction +string.setheaderextentsaction_actionname=set extents + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetNameAction +string.setnameaction_actionname=set name to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerBitmapAction +string.setlayerbitmapaction_actionname=set layer bitmap + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerCoordIdAction +string.setlayercoordidaction_actionname=set layer CoordId + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerFilterModeAction +string.setlayerfiltermodeaction_actionname=set layer FilterMode + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerShaderAction +string.setlayershaderaction_actionname=set layer Shader + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerTextureAnimAction +string.setlayertextureanimaction_actionname=set layer TVertexAnim + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetMaterialPriorityPlaneAction +string.setmaterialpriorityplaneaction_actionname=set material PriorityPlane + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloat3StaticValueAction +string.setfloat3staticvalueaction_actionname=set + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloatStaticValueAction +string.setfloatstaticvalueaction_actionname=set + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitForUVAction +string.splitforuvaction_actionname=split geoset + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitGeosetAction +string.splitgeosetaction_actionname=split geoset + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/TeamColorAddAction +string.teamcoloraddaction_actionname=add team color layer + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/CloneAction +println.cloneaction_redo_1=Should be one: +println.cloneaction_redo_2=Redo +println.cloneaction_redo_3= finished with +println.cloneaction_redo_4= inexplicable errors. +println.cloneaction_undo_1=Should be one: +println.cloneaction_undo_2=Undo +println.cloneaction_undo_3= finished with +println.cloneaction_undo_4= inexplicable errors. +string.cloneaction_actionname_1=extrude +string.cloneaction_actionname_2=extrude + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/DeleteAction +string.deleteaction_actionname=delete vertices + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/ExtrudeAction +string.extrudeaction_actionname_1=extrude +string.extrudeaction_actionname_2=extrude + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/MoveAction +string.moveaction_actionname_move=move +string.moveaction_actionname_rotate=rotate +string.moveaction_actionname_scale=scale +string.moveaction_actionname_unknown=unknown error-type action +string.moveaction_actionname_actiontype=actionType_ +string.moveaction_actionname_vertices= vertices + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateExtentsAction +string.recalculateextentsaction_actionname=recalculate extents + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction +string.recalculatenormalsaction_actionname=recalculate normals + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction2 +string.recalculatenormalsaction2_actionname=recalculate normals + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SetModelContentsAction +string.setmodelcontentsaction_actionname=Apply edits from text + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapAction +string.snapaction_actionname=snap vertices + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapNormalsAction +string.snapnormalsaction_actionname=snap normals + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SpecialDeleteAction +string.specialdeleteaction_actionname=delete vertices and geoset + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVMoveAction +string.uvmoveaction_actionname_move=move +string.uvmoveaction_actionname_rotate=rotate +string.uvmoveaction_actionname_scale=scale +string.uvmoveaction_actionname_actiontype=actionType_ +string.uvmoveaction_actionname_vertices= TVertices + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVRemapAction +string.uvremapaction_actionname=remap TVertices + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapAction +string.uvsnapaction_actionname=snap TVerteces + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapXAction +string.uvsnapxaction_actionname_snapxtvertices=snapX TVertices +string.uvsnapxaction_actionname_snapytvertices=snapY TVertices +string.uvsnapxaction_actionname_snaptvertices=snap TVerteces + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/ColorValuePanel +button.colorvaluepanel_static=Static +button.colorvaluepanel_dynamic=Dynamic +button.colorvaluepanel_choose_color=Choose Color +dialog.colorvaluepanel_choose=Choose + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/FloatValuePanel +button.floatvaluepanel_static=Static +button.floatvaluepanel_dynamic=Dynamic + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/ComponentLayerPanel +border.componentlayerpanel_setlayout_flags=Flags +label.componentlayerpanel_setlayout_filter=Filter Mode: +label.componentlayerpanel_setlayout_shader=Shader: +label.componentlayerpanel_setlayout_texture= Texture: +button.componentlayerpanel_setlayout_choose_texture=Choose Texture +scrollpane.componentlayerpanel_setlayout_choose_bitmap=Choose BItmap +label.componentlayerpanel_setlayout_tvertex_anim=TVertex Anim: +button.componentlayerpanel_setlayout_choose_tvertex_anim=Choose TVertex Anim +scrollpane.componentlayerpanel_setlayout_choose_textureanim=Choose TextureAnim +label.componentlayerpanel_setlayout_coordid=CoordID: +floatvaluepanel.componentlayerpanel_setlayout_alpha=Alpha +floatvaluepanel.componentlayerpanel_setlayout_emissive_gain=Emissive Gain +floatvaluepanel.componentlayerpanel_setlayout_fresnel_color=Fresnel Color +floatvaluepanel.componentlayerpanel_setlayout_fresnel_opacity=Fresnel Opacity +floatvaluepanel.componentlayerpanel_setlayout_fresnel_team_color=Fresnel Team Color +text.componentlayerpanel_setlayer_texture=None +text.componentlayerpanel_setlayer_tvertexanim_1=None +text.componentlayerpanel_setlayer_tvertexanim_2=TextureAnim + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentMaterialLayersPanel +string.componentmateriallayerspanel_reforged_layer_definitions_diffuse=Diffuse +string.componentmateriallayerspanel_reforged_layer_definitions_normal=Normal +string.componentmateriallayerspanel_reforged_layer_definitions_orm=ORM +string.componentmateriallayerspanel_reforged_layer_definitions_emissive=Emissive +string.componentmateriallayerspanel_reforged_layer_definitions_team_color=Team Color +string.componentmateriallayerspanel_reforged_layer_definitions_reflections=Reflections +string.componentmateriallayerspanel_reforged_layer_definitions_unknown=Unknown +button.componentmateriallayerspanel_add_layer=Add Layer +button.componentmateriallayerspanel_layer=Layer +button.componentmateriallayerspanel_layerdelete=Delete +text.componentmateriallayerspanel_layer=Layer + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/FloatTrackTableModel +string.floattracktablemodel_getcolumnname_keyframe=Keyframe +string.floattracktablemodel_getcolumnname_value=Value +string.floattracktablemodel_getcolumnname_intan=InTan +string.floattracktablemodel_getcolumnname_outtan=OutTan +string.floattracktablemodel_getcolumnname_delete=Delete +string.floattracktablemodel_getvalueat_delete=Delete + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/LayerFlagsPanel +checkbox.layerflagspanel_unshaded=Unshaded +checkbox.layerflagspanel_sphere_env_map=SphereEnvMap +checkbox.layerflagspanel_two_sided=TwoSided +checkbox.layerflagspanel_unfogged=Unfogged +checkbox.layerflagspanel_no_depth_test=NoDepthTest +checkbox.layerflagspanel_no_depth_set=NoDepthSet +checkbox.layerflagspanel_unlit=Unlit + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentAnimationPanel +label.componentanimationpanel_componentanimationpanel_name=Name: +label.componentanimationpanel_componentanimationpanel_start=Start: +label.componentanimationpanel_componentanimationpanel_end=End: +checkbox.componentanimationpanel_componentanimationpanel_nonloopingchooser=NonLooping +label.componentanimationpanel_componentanimationpanel_rarity=Rarity +label.componentanimationpanel_componentanimationpanel_movespeed=MoveSpeed + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentBitmapPanel +checkbox.componentbitmappanel_componentbitmappanel_width=Wrap Width +checkbox.componentbitmappanel_componentbitmappanel_height=Wrap Height +border.componentbitmappanel_componentbitmappanel_previewer=Previewer +label.componentbitmappanel_componentbitmappanel_path=Path: +label.componentbitmappanel_componentbitmappanel_replaceableId=ReplaceableId: +label.componentbitmappanel_componentbitmappanel_export_texture=Export Texture Image File + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentGlobalSequencePanel +label.componentglobalsequencepanel_componentglobalsequencepanel_global_sequence=GlobalSequence +label.componentglobalsequencepanel_componentglobalsequencepanel_duration=Duration: + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentHeaderPanel +label.componentheaderpanel_componentheaderpanel_model_name=Model Name: +label.componentheaderpanel_componentheaderpanel_format_version=Format Version: +label.componentheaderpanel_componentheaderpanel_blend_time=Blend Time: +border.componentheaderpanel_componentheaderpanel_extents=Extents + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentMaterialPanel +label.componentmaterialpanel_componentmaterialpanel_priority=Priority Plane: + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentsPanel +label.componentspanel_componentspanel_blankpanel=Select a model component to get started... + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ExtLogEditor +checkbox.extLogeditor_extLogeditor_minimum_extent=Minimum Extent +checkbox.extLogeditor_extLogeditor_maximum_extent=Maximum Extent +checkbox.extLogeditor_extLogeditor_bounds_radius=Bounds Radius + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoneAction +string.drawboneaction_actionname=add + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoxAction +string.drawboxaction_actionname=create box + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawCameraAction +string.drawcameraaction_actionname=add + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawPlaneAction +string.drawplaneaction_actionname=create plane + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawVertexAction +string.drawvertexaction_actionname=add vertex + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/NewGeosetAction +string.newgeosetaction_actionname=create geoset + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawPlaneManipulator +println.drawplanemnipulator.undoaction=do nothing + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/CreatorModelingPanel +element.creatormodelingpanel_creatormodelingpanel_mesh_basics=Mesh Basics +element.creatormodelingpanel_creatormodelingpanel_standard_primitives=Standard Primitives +element.creatormodelingpanel_creatormodelingpanel_extended_primitives=Extended Primitives +element.creatormodelingpanel_creatormodelingpanel_animation_nodes=Animation Nodes +border.creatormodelingpanel_creatormodelingpanel_drawprimitivespanel=Draw +button.creatormodelingpanel_creatormodelingpanel_planebutton=Plane +button.creatormodelingpanel_creatormodelingpanel_box=Box +border.creatormodelingpanel_creatormodelingpanel_options=Options +button.creatormodelingpanel_makemeshbasicspanel_vertex=Vertex +button.creatormodelingpanel_makemeshbasicspanel_face_election=Face from Selection +button.creatormodelingpanel_makemeshbasicspanel_bone=Bone +dialog.creatormodelingpanel_makemeshbasicspanel_unable_create_face=Unable to create face, wrong selection mode +border.creatormodelingpanel_makemeshbasicspanel_draw=Draw +border.creatormodelingpanel_makemeshbasicspanel_manipulate=Manipulate +border.creatormodelingpanel_makeanimationbasicspanel_manipulate=Manipulate +println.creatormodelingpanel_reloadanimationlist_custom_timeframe=Custom Timeframe + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/cutpaste/ViewportTransferHandler +println.viewporttransferhandler_importdata_unsupportedflavorexception=importData: unsupported data flavor +println.viewporttransferhandler_importdata_ioexception=importData: I/O exception + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddKeyframeAction +exception.addkeyframeaction_redo=Cannot add interpolation information (inTan/outTan) for keyframe, animation data was \"Linear\" or \"DontInterp\" during previous user action +string.addkeyframeaction_actionname=add keyframe + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelineAction +string.addtimelineaction_actionname=add timeline + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelinesAction +string.addtimelinesaction_actionname=add timeline + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/RotationKeyframeAction +string.rotationkeyframeaction_actionname=edit rotation + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/ScalingKeyframeAction +string.scalingkeyframeaction_actionname=edit rotation + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SetKeyframeAction +exception.setkeyframeaction_undo=Cannot add interpolation information (inTan/outTan) for keyframe, animation data was \"Linear\" or \"DontInterp\" during previous user action +exception.setkeyframeaction_redo=Cannot set interpolation information (inTan/outTan) for keyframe, animation data was \"Linear\" or \"DontInterp\" during previous user action +string.setkeyframeaction_actionname=set keyframe + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeAction +string.slidekeyframeaction_actionname=slide keyframe + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeByIndexAction.ja +string.slidekeyframebyiindexaction_actionname=slide keyframe + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SquatToolKeyframeAction +string.squattoolkeyframeaction_actionname=edit rotation w/ squat + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/TranslationKeyframeAction +string.translationkeyframeaction_actionname=edit translation + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/ScaleAction +string.scaleaction_actionname=scale + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/SimpleRotateAction +string.simplerotateaction_actionname=rotate + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshMoveAction +string.staticmeshmoveaction_actionname=move + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshRotateAction +string.staticmeshrotateaction_actionname=rotate + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshScaleAction +string.staticmeshscaleaction_actionname=scale + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/nodes/DeleteNodesAction +string.deletenodesaction_actionname=delete nodes + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/AddSelectionAction +string.addselectionaction_actionname=add selection + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/HideGeosetsAction +string.hidegeosetsaction_actionname=hide geosets + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeEditableAction +string.makeeditableaction_actionname=toggle visibility + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeNotEditableAction +string.makenoteditableaction_actionname=toggle visibility + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/RemoveSelectionAction +string.removeselectionaction_actionname=deselect + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AddTriangleAction +string.addtriangleaction_actionname=add faces + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AdvancedCloneAction +string.advancedcloneaction_actionname=clone + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AutoCenterBonesAction +string.autocenterbonesaction_actionname=auto-center bones + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/CloneAction +string.cloneaction_actionname=clone + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/DeleteDownToOneTVerticesLayerAction +string.deletedowntoonetverticeslayeraction_actionname=delete down to one TVertices layer + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/EditAnimationLengthsAction +string.editanimationlengthsaction_actionname=edit animation length(s) + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipFacesAction +string.flipfacesaction_actionname=flip faces + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipNormalsAction +string.flipnormalsaction_actionname=flip normals + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/MirrorModelAction +string.mirrormodelaction_actionname=mirror + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/ReLinkRFBoneAction +string.reLinkrfboneaction_actionname=re-link bone probably for RF + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RenameBoneAction +string.renameboneaction_actionname_rename=rename +string.renameboneaction_actionname_to= to + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetMatrixAction +string.setmatrixaction_actionname=re-assign matrix + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RigAction +string.rigaction_actionname=rig + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetParentAction +string.setparentaction_actionname=set parent + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/manipulator/AbstractExtrudeManipulator +string.abstractextrudemanipulator_undoAction=extrude + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/MirrorTVerticesAction +string.mirrortverticesaction_actionname=mirror + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/SimpleRotateUVAction +string.simplerotateuvaction_actionname=rotate + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVMoveAction +string.staticmeshuvmoveaction_actionname=move + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVRotateAction +string.staticmeshuvrotateaction_actionname=rotate + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVScaleAction +string.staticmeshuvscaleaction_actionname=scale + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/AbstractTVertexEditor +string.abstracttvertexeditor_selectfromviewer=select UV from viewer + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/FaceTVertexEditor +string.facetvertexeditor_expandselection=expand selection +string.facetvertexeditor_invertselection=invert selection +string.facetvertexeditor_selectall=select all + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/GeosetVertexTVertexEditor +string.geosetvertextvertexeditor_expandselection=expand selection +string.geosetvertextvertexeditor_invertselection=invert selection +string.geosetvertextvertexeditor_selectall=select all + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/TVertexEditorNotifier +exception.tvertexeditornotifier_getuvlayerindex=Differing UV Layer Indices between editors: + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractModelEditor +println.abstractmodeleditor_beginextrudingselection_geosetvertex=GeosetVertex +println.abstractmodeleditor_beginextrudingselection_not_found= was not found. +println.abstractmodeleditor_beginextrudingselection_bloody=It's a bloody war! +println.abstractmodeleditor_beginextrudingselection_verteces= verteces cloned into +println.abstractmodeleditor_beginextrudingselection_more= more. +println.abstractmodeleditor_beginextrudingselection_holy=holy brejeezers! +println.abstractmodeleditor_beginextrudingselection_vertex_gvcopy=Vertex (gvCopy) copy found as null! +println.abstractmodeleditor_beginextrudingselection_vertex_gvtempcopy=Vertex (gvTempCopy) copy found as null! +println.abstractmodeleditor_beginextrudingselection_indeces= Indeces: +println.abstractmodeleditor_beginextrudingselection_new_face=New Face: +println.abstractmodeleditor_beginextrudingselection_new_alternate_face=New Alternate Face: +println.abstractmodeleditor_beginextrudingselection_should=SHOULD be one: +println.abstractmodeleditor_beginextrudingselection_extrude=Extrude finished with +println.abstractmodeleditor_beginextrudingselection_inexplicable= inexplicable errors. +println.abstractmodeleditor_beginextendingselection_geosetvertex=GeosetVertex +println.abstractmodeleditor_beginextendingselection_not_found= was not found. +println.abstractmodeleditor_beginextendingselection_more= more. +println.abstractmodeleditor_beginextendingselection_vertex_gvcopy=Vertex (gvCopy) copy found as null! +println.abstractmodeleditor_beginextendingselection_vertex_gvtempcopy=Vertex (gvTempCopy) copy found as null! +println.abstractmodeleditor_beginextendingselection_indeces= Indeces: +println.abstractmodeleditor_beginextendingselection_new_face=New Face: +println.abstractmodeleditor_beginextendingselection_new_alternate_face=New Alternate Face: +println.abstractmodeleditor_beginextendingselection_verteces= verteces cloned into +exception.abstractmodeleditor_cloneselectedcomponents=user does not wish to continue so we put in an error to interrupt clone so model is OK +action.abstractmodeleditor_rotate=rotate +exception.abstractmodeleditor_beginsquattool=Unable to use squat tool outside animation editor mode +exception.abstractmodeleditor_createkeyframe=Cannot create keyframe outside of animation mode +layer.abstractmodeleditor_addplane_solidwhitegeoset=None +action.abstractmodeleditor_addplane_create_plane=create plane +layer.abstractmodeleditor_addbox_solidwhitegeoset=None +action.abstractmodeleditor_addbox_create_plane=create plane +exception.abstractmodeleditor_addbone=Unable to add bone outside of pivot point editor + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractSelectingEditor +action.abstractselectingeditor_setselectionwithaction=select + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/CloneContextHelper +exception.clonecontexthelper_cloneselectedcomponents=user does not wish to continue so we put in an error to interrupt clone so model is OK + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/FaceModelEditor +exception.facemodeleditor_autocenterselectedbones=This feature is not available in Face mode +exception.facemodeleditor_setselectedbonename=This feature is not available in Face mode +exception.facemodeleditor_addselectedbonesuffix=This feature is not available in Face mode +action.facemodeleditor_expandselection=expand selection +action.facemodeleditor_invertselection=invert selection +action.facemodeleditor_selectall=select all +action.facemodeleditor_selecthdunusednodes=select HD unused +exception.facemodeleditor_addvertex=Unable to add vertex in face selection mode +exception.facemodeleditor_createfacefromselection=Unable to create face from vertices in face selection mode +exception.facemodeleditor_setparent=This feature is not available in Face mode +exception.facemodeleditor_relinkrfbone=This feature is not available in Face mode + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/GeosetVertexModelEditor +exception.geosetvertexmodeleditor_autocenterselectedbones=This feature is not available in Geoset Vertex mode +exception.geosetvertexmodeleditor_setselectedbonename=This feature is not available in Geoset Vertex mode +exception.geosetvertexmodeleditor_addselectedbonesuffix=This feature is not available in Geoset Vertex mode +action.geosetvertexmodeleditor_expandselection=expand selection +action.geosetvertexmodeleditor_invertselection=invert selection +action.geosetvertexmodeleditor_selectall=select all +action.geosetvertexmodeleditor_selecthdunusednodes=select HD unused +layer.geosetvertexmodeleditor_addVertex_none=None +action.geosetvertexmodeleditor_addVertex_add_vertex=add vertex +exception.geosetvertexmodeleditor_createfacefromselection_create_vertices=A face can only be created from exactly 3 vertices (you have +exception.geosetvertexmodeleditor_createfacefromselection_selected= selected) +exception.geosetvertexmodeleditor_createfacefromselection_all_create=All three vertices to create a face must be a part of the same Geoset +exception.geosetvertexmodeleditor_createfacefromselection_exists=Triangle already exists +exception.geosetvertexmodeleditor_setparent=This feature is not available in Geoset Vertex mode +exception.geosetvertexmodeleditor_relinkrfbone=This feature is not available in Geoset Vertex mode + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/PivotPointModelEditor +exception.pivotpointmodeleditor_setselectedbonename_rename=Only one bone can be renamed at a time. +exception.pivotpointmodeleditor_setselectedbonename_error=Flagrant error. Multiple bones are bound to the same memory addresses. Save your work and restart the application. +exception.pivotpointmodeleditor_setselectedbonename_selection=Selection is not a node +action.pivotpointmodeleditor_addselectedbonesuffix=add selected bone suffix +action.pivotpointmodeleditor_addteamcolor=add team color +action.pivotpointmodeleditor_split_geoset=split geoset +action.pivotpointmodeleditor_expandselection=expand selection +action.pivotpointmodeleditor_invertselection=invert selection +action.pivotpointmodeleditor_selectall=select all +println.pivotpointmodeleditor_selecthdunusednodes=note: should maybe be helper: +action.pivotpointmodeleditor_selecthdunusednodes=select HD unused +action.pivotpointmodeleditor_createfacefromselection=create face +action.pivotpointmodeleditor_addvertex=add vertex + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/TPoseModelEditor +exception.tposemodeleditor_setselectedbonename_rename=Only one bone can be renamed at a time. +exception.tposemodeleditor_setselectedbonename_selection=Selection is not a node +exception.tposemodeleditor_setselectedbonename_add_bone=add selected bone suffix +exception.tposemodeleditor_addteamcolor=add team color +exception.tposemodeleditor_split_geoset=split geoset +exception.tposemodeleditor_expandselection=Not supported in T-Pose mode +exception.tposemodeleditor_invertselection=Not supported in T-Pose mode +exception.tposemodeleditor_selectall=Not supported in T-Pose mode +exception.tposemodeleditor_selecthdunusednodes=Not supported in T-Pose mode +action.tposemodeleditor_createfacefromselection=create face +action.tposemodeleditor_addvertex=add vertex + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterModelEditor +exception.vertexclustermodeleditor_autocenterselectedbones=This feature is not available in Vertex Group mode +exception.vertexclustermodeleditor_setselectedbonename=This feature is not available in Vertex Group mode +exception.vertexclustermodeleditor_addselectedbonesuffix=This feature is not available in Vertex Group mode +action.vertexclustermodeleditor_expandselection=expand selection +action.vertexclustermodeleditor_invertselection=invert selection +action.vertexclustermodeleditor_selectall=select all +action.vertexclustermodeleditor_selecthdunusednodes=select HD unused +exception.vertexclustermodeleditor_createfacefromselection=Unable to create face from vertices in vertex group selection mode +exception.vertexclustermodeleditor_addvertex=Unable to draw vertices in vertex group selection mode +exception.vertexclustermodeleditor_setparent=This feature is not available in Vertex Group mode +exception.vertexclustermodeleditor_relinkrfbone=This feature is not available in Vertex Group mode + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterSelectionManager +exception.vertexclusterselectionmanager_getuvcenter=Not yet implemented +exception.vertexclusterselectionmanager_getselectedtvertices=Not yet implemented +exception.vertexclusterselectionmanager_getcircumscribedsphereradius=Not yet implemented +exception.vertexclusterselectionmanager_rendeuvselection=Not yet implemented + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupModelEditor +exception.vertexgroupmodeleditor_autocenterselectedbones=This feature is not available in Vertex Group mode +exception.vertexgroupmodeleditor_setselectedbonename=This feature is not available in Vertex Group mode +exception.vertexgroupmodeleditor_addselectedbonesuffix=This feature is not available in Vertex Group mode +action.vertexgroupmodeleditor_expandselection=expand selection +action.vertexgroupmodeleditor_invertselection=invert selection +action.vertexgroupmodeleditor_selectall=select all +action.vertexgroupmodeleditor_selecthdunusednodes=select HD unused +exception.vertexgroupmodeleditor_createfacefromselection=Unable to create face from vertices in vertex group selection mode +exception.vertexgroupmodeleditor_addvertex=Unable to draw vertices in vertex group selection mode +exception.vertexgroupmodeleditor_setparent=This feature is not available in Vertex Group mode +exception.vertexgroupmodeleditor_relinkrfbone=This feature is not available in Vertex Group mode + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupSelectionManager +exception.vertexgroupselectionmanager_getuvcenter=Not yet implemented +exception.vertexgroupselectionmanager_getselectedtvertices=Not yet implemented +exception.vertexgroupselectionmanager_getcircumscribedsphereradius=Not yet implemented +exception.vertexgroupselectionmanager_renderuvselection=Not yet implemented + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionItemTypes +string.selectionitemtypes_select_vertices=Select Vertices +string.selectionitemtypes_select_faces=Select Faces +string.selectionitemtypes_select_groups=Select Groups +string.selectionitemtypes_select_nodes_animate=Select Nodes and Animate +string.selectionitemtypes_select_cluster=Select Cluster +string.selectionitemtypes_sSelect_tpose=Select and T-Pose + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionMode +string.selectionmode_select=Select +string.selectionmode_add_selection=Add Selection +string.selectionmode_deselect=Deselect + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/TVertexSelectionItemTypes +string.tvertexselectionitemtypes_select_vertices=Select Vertices +string.tvertexselectionitemtypes_select_faces=Select Faces + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/ModelComponentAnimFlagTree +println.modelcomponentanimflagtree=Reloading ModelComponentBrowserTree +string.modelcomponentanimflagtree_buildtreemodel_tvertexanims=TVertexAnims +string.modelcomponentanimflagtree_buildtreemodel_geosetanims=GeosetAnims +string.modelcomponentanimflagtree_buildtreemodel_nodes=Nodes +string.modelcomponentanimflagtree_buildtreemodel_cameras=Cameras +string.modelcomponentanimflagtree_chooseablemodelroot_model=Model +string.modelcomponentanimflagtree_chooseablemodelcomment_comment=Comment +string.modelcomponentanimflagtree_chooseablemodelheader_header=Header +string.modelcomponentanimflagtree_chooseableanimationitem_anim=Anim +string.modelcomponentanimflagtree_chooseableglobalsequenceitem_1=GlobalSequence +string.modelcomponentanimflagtree_chooseableglobalsequenceitem_2=: Duration +string.modelcomponentanimflagtree_chooseablematerialitem=Material +string.modelcomponentanimflagtree_chooseableanimflagitem= Track +string.modelcomponentanimflagtree_chooseablebitmapitem=Bitmap +string.modelcomponentanimflagtree_chooseabletextureanimitem=TextureAnim +string.modelcomponentanimflagtree_chooseablegeosetitem=Geoset +string.modelcomponentanimflagtree_chooseablegeosetanimitem_1=GeosetAnim +string.modelcomponentanimflagtree_chooseablegeosetanimitem_2=GeosetId +string.modelcomponentanimflagtree_chooseableboneitem=Bone +string.modelcomponentanimflagtree_chooseablehelperitem=Helper +string.modelcomponentanimflagtree_chooseablelightiItem=Light +string.modelcomponentanimflagtree_chooseableattachmentitem=Attachment +string.modelcomponentanimflagtree_chooseableparticleemitteritem=ParticleEmitter +string.modelcomponentanimflagtree_chooseableparticleemitter2item=ParticleEmitter2 +string.modelcomponentanimflagtree_chooseableparticleemitterpopcornitem=ParticleEmitterPopcorn +string.modelcomponentanimflagtree_chooseableribbonemitteritem=RibbonEmitter +string.modelcomponentanimflagtree_chooseableeventobjectitem=EventObject +string.modelcomponentanimflagtree_chooseablecollisionshapeitem=CollisionShape +string.modelcomponentanimflagtree_chooseablecameraitem=Camera +string.modelcomponentanimflagtree_chooseablefaceeffectschunkitem=FaceFX +string.modelcomponentanimflagtree_chooseablebindposechunkitem=BindPoseChunk + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/TracksEditorPanel +label.trackseditorpanel_trackseditorpanel_scale=Scale: +label.trackseditorpanel_trackseditorpanel_mouse=Mouse: +label.trackseditorpanel_deletekeyframes_delete_keyframe=delete keyframe +label.trackseditorpanel_deletekeyframes_delete_keyframe_s=Delete Keyframe(s) +label.trackseditorpanel_mousereleased=Slide Keyframe(s) + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/AnimatedViewportModelRenderer +exception.animatedviewportmodelrenderer_trianglerendererimpl_x=Invalid x dimension +exception.animatedviewportmodelrenderer_trianglerendererimpl_y=Invalid y dimension + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/ViewportModelRenderer +exception.viewportmodelrenderer_trianglerendererimpl_x=Invalid x dimension +exception.viewportmodelrenderer_trianglerendererimpl_y=Invalid y dimension + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ImportPanel +checkbox.importpanel_displayparents=Display parent names +button.importpanel_allmatroriginal=Reset all Matrices +button.importpanel_allmatrsamename=Set all to available, original names +button.importpanel_applysmartmapping=Apply Smart Mapping +string.importpanel_importpanel_imported= (Imported) +frame.importpanel_importpanel_imported=Importing +frame.importpanel_importpanel_into_itself= into itself +frame.importpanel_importpanel_into= into +dialog.importpanel_importpanel_error=Error: Image files were not found! Due to bad programming, this might break the program! +tab.importpanel_importpanel_geosets=Geosets +tab.importpanel_importpanel_geosets_imported=Controls which geosets will be imported. +tab.importpanel_importpanel_modify_geoset=Click to modify material data for this geoset. +tab.importpanel_importpanel_modify_importing_geoset=Click to modify importing and material data for this geoset. +button.importpanel_importpanel_importallgeos=Import All +button.importpanel_importpanel_uncheckallgeos=Leave All +tab.importpanel_importpanel_animation=Animation +tab.importpanel_importpanel_animations_imported=Controls which animations will be imported. +button.importpanel_importpanel_importallanims=Import All +button.importpanel_importpanel_timescaleallanims=Time-scale All +button.importpanel_importpanel_renameallanims=Import and Rename All +button.importpanel_importpanel_uncheckallanims=Leave All +checkbox.importpanel_importpanel_clearexistinganims=Clear pre-existing animations +tab.importpanel_importpanel_modify_animation_sequence=Click to modify data for this animation sequence. +tab.importpanel_importpanel_bones=Bones +tab.importpanel_importpanel_bones_imported=Controls which bones will be imported. +checkbox.importpanel_importpanel_clear_bones_helpers=Clear pre-existing bones and helpers +button.importpanel_importpanel_importallbones=Import All +button.importpanel_importpanel_uncheckAllBones=Leave All +button.importpanel_importpanel_motionfrombones=Motion From All +button.importpanel_importpanel_uncheckunusedbones=Uncheck Unused +tab.importpanel_importpanel_matrices=Matrices +tab.importpanel_importpanel_bones_attached=Controls which bones geosets are attached to. +tab.importpanel_importpanel_modify_animation=Click to modify animation data for Geoset +tab.importpanel_importpanel_from= from +tab.importpanel_importpanel_objects=Objects +tab.importpanel_importpanel_objects_imported=Controls which objects are imported. +button.importpanel_importpanel_importallobjs=Import All +button.importpanel_importpanel_uncheckallobjs=Leave All +tab.importpanel_importpanel_visibility=Visibility +tab.importpanel_importpanel_visibility_model=Controls the visibility of portions of the model. +button.importpanel_importpanel_invisible_exotic_anims=All Invisible in Exotic Anims +settooltiptext.importpanel_importpanel_forces_invisibile=Forces everything to be always invisibile in animations other than their own original animations. +button.importpanel_importpanel_visible_exotic_anims=All Visible in Exotic Anims +settooltiptext.importpanel_importpanel_forces_visibile=Forces everything to be always visibile in animations other than their own original animations. +button.importpanel_importpanel_select_similar_options=Select Similar Options +settooltiptext.importpanel_importpanel_similar_options=Similar components will be selected as visibility sources in exotic animations. +dialog.importpanel_importpanel_really_cancel_import=Really cancel this import? +dialog.importpanel_importpanel_choose_naming=Choose additional naming (i.e. swim or alternate) +println.importpanel_importpanel_check_base=Performing check on base: +println.importpanel_importpanel_adding_base= @adding base: +println.importpanel_importpanel_redirected_adding= @Redirected + adding: +dialog.importpanel_importpanel_object_bone_parent_loop=Unexpected error has occurred: IdObject to Bone parent loop, circular logic +println.importpanel_importpanel_check_geoset=Performing check on geoset: +println.importpanel_importpanel_check_matrixshell=Performing check on MatrixShell: +println.importpanel_importpanel_check_matrixshell_sub=Performing check on MatrixShell's sub: +dialog.importpanel_importpanel_applysmartmapping=Apply Smart Mapping +println.importpanel_getfutureboneListeextended_average_add_time=average add time: +println.importpanel_getfutureboneListeextended_add_count=add count: +println.importpanel_getfutureboneListeextended_average_remove_time=average remove time: +println.importpanel_getfutureboneListeextended_remove_count=remove count: +println.importpanel_getfutureboneListeextended_allvisshells=allVisShells: +println.importpanel_getfutureboneListeextended_new_old=new/old: +dialog.importpanel_setparentmultibones_bones_set_parent=Set Parent for All Selected Bones +dialog.importpanel_doimport_confused=The program has confused itself. +println.importpanel_doimport_clear_animation=Attempting to clear animation for +println.importpanel_doimport_values= values +dialog.importpanel_doimport_geoset_attach_helper=Error: Holy fo shizzle my grizzle! A geoset is trying to attach to a helper, not a bone! +dialog.importpanel_doimport_bone_shaving=Boneshaving +dialog.importpanel_doimport_out_use= out of use +dialog.importpanel_doimport_matrix_destroyed=Error: A matrix was functionally destroyed while importing, and may take the program with it!=Error: A matrix was functionally destroyed while importing, and may take the program with it! +dialog.importpanel_doimport_matrices_empty_dummy_bone=Warning: You left some matrices empty. This was detected, and a dummy bone at { 0, 0, 0 } has been generated for them named +dialog.importpanel_doimport_multiple_geosets_attached_bone=\nMultiple geosets may be attached to this bone, and the error will only be reported once for your convenience. +dialog.importpanel_animtransferparttwo_transfer_bug=Bug in anim transfer: attempted unnecessary 2-part transfer +dialog.importpanel_animtransferparttwo_visibility_component=Visibility component: +checkbox.importpanel_geosetpanel_import_geoset=Import this Geoset +label.importpanel_geosetpanel_material=Material: +string.importpanel_getListcellrenderercomponent_original= (Original) +string.importpanel_getListcellrenderercomponent_import=Import: +string.importpanel_animpanel_import=Import as-is +string.importpanel_animpanel_change=Change name to: +string.importpanel_animpanel_time_scale=Time-scale into pre-existing: +string.importpanel_animpanel_rebuild=Rebuild as global sequence +checkbox.importpanel_animpanel_animpanel_import_sequence=Import this Sequence +checkbox.importpanel_animpanel_animpanel_reverse=Reverse +string.importpanel_bonepanel_import_bone=Import this bone +string.importpanel_bonepanel_import_motion=Import motion to pre-existing: +string.importpanel_bonepanel_not_import=Do not import +string.importpanel_bonepanel_parent_old=Parent: (Old Parent: +string.importpanel_bonepanel_parent_old_no=Parent: (Old Parent: {no parent}) +println.importpanel_updateselectionpicks=updating future bone list took +button.importpanel_multibonepanel_setallparent=Set Parent for All +label.importpanel_multibonepanel_multiple_selected=Multiple Selected +importtypebox.importpanel_setmultitypes=Multiple selected +println.importpanel_actionperformed=MultiBonePanel.actionPerformed() took +settext.importpanel_getlistcellrenderercomponent=(no parent) +tab.importpanel_geosetanimationpanel_bones=Bones +tab.importpanel_geosetanimationpanel_edit_bone_references=Allows you to edit bone references. +tab.importpanel_geosetanimationpanel_visibility=Visibility +tab.importpanel_geosetanimationpanel_edit_visibility=Allows you to edit visibility. +label.importpanel_boneattachmentpane_bones=Bones +button.importpanel_boneattachmentpane_use_bones=Use Bone(s) +label.importpanel_boneattachmentpane_old_bone_references=Old Bone References +label.importpanel_boneattachmentpane_new_refs=New Refs +button.importpanel_boneattachmentpane_remove=Remove +println.importpanel_buildoldrefslist=We have a null in a matrix process, probably not good but it was assumed that this might happen. +checkbox.importpanel_objectpanel_import_object=Import this object +label.importpanel_objectpanel_parent=Parent: +label.importpanel_objectpanel_old_parent=(Old Parent: +label.importpanel_objectpanel_old_parent_no=(Old Parent: {no parent}) +label.importpanel_objectpanel_cameras_no_parents=(Cameras don't have parents) +label.importpanel_multiobjectpanel_multiple_selected=Multiple Selected +checkbox.importpanel_multiobjectpanel_doImport=Import these objects (click to apply to all) +label.importpanel_multiobjectpanel_parent=Parent: +label.importpanel_multiobjectpanel_parent_displayed=(Old parent can only be displayed for a single object) +string.importpanel_visibilitypane_not_visible=Not visible +string.importpanel_visibilitypane_always_visible=Always visible +label.importpanel_visibilitypane_existing_animation_visibility=Existing animation visibility from: +label.importpanel_visibilitypane_imported_animation_visibility=Imported animation visibility from: +checkbox.importpanel_visibilitypane_original_visibility=Favor component's original visibility when combining +label.importpanel_multivisibilitypane_multiple_selected=Multiple Selected +label.importpanel_multivisibilitypane_existing_animation_visibilit=Existing animation visibility from: +label.importpanel_multivisibilitypane_imported_animation_visibility=Imported animation visibility from: +checkbox.importpanel_multivisibilitypane_original_visibility=Favor component's original visibility when combining +string.importpanel_setmultipleold=Multiple selected +string.importpanel_setmultiplenew=Multiple selected + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/MatrixPopup +checkbox.matrixpopup_matrixpopup_displayparents=Display parents +label.matrixpopup_matrixpopup_boneslabel=Bones +label.matrixpopup_matrixpopup_usebone=Use Bone(s) +label.matrixpopup_matrixpopup_newrefslabel=New Refs +button.matrixpopup_matrixpopup_removenewref=Remove + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelComponentBrowserTree +string.modelcomponentbrowsertree_buildtreemodel_sequences=Sequences +string.modelcomponentbrowsertree_buildtreemodel_globalsequences=GlobalSequences +string.modelcomponentbrowsertree_buildtreemodel_textures=Textures +string.modelcomponentbrowsertree_buildtreemodel_materials=Materials +string.modelcomponentbrowsertree_buildtreemodel_tvertexanims=TVertexAnims +string.modelcomponentbrowsertree_buildtreemodel_geosets=Geosets +string.modelcomponentbrowsertree_buildtreemodel_geosetsanims=GeosetAnims +string.modelcomponentbrowsertree_buildtreemodel_nodes=Nodes +string.modelcomponentbrowsertree_buildtreemodel_cameras=Cameras +string.modelcomponentbrowsertree_chooseablemodelroot_model=Model +string.modelcomponentbrowsertree_chooseablemodelcomment_comment=Comment +string.modelcomponentbrowsertree_chooseablemodelheader_header=Header +string.modelcomponentbrowsertree_chooseableanimationitem_anim=Anim +string.modelcomponentbrowsertree_chooseableglobalsequenceitem_globalsequence=GlobalSequence +string.modelcomponentbrowsertree_chooseableglobalsequenceitem_duration=: Duration +string.modelcomponentbrowsertree_chooseablebitmapitem_bitmap=Bitmap +string.modelcomponentbrowsertree_chooseablematerialitem_material=Material +string.modelcomponentbrowsertree_chooseabletextureanimitem_textureanim=TextureAnim +string.modelcomponentbrowsertree_chooseablegeosetanimitem_geosetanim=GeosetAnim +string.modelcomponentbrowsertree_chooseableboneitem_bone=Bone +string.modelcomponentbrowsertree_chooseablehelperitem_helper=Helper +string.modelcomponentbrowsertree_chooseablelightitem_light=Light +string.modelcomponentbrowsertree_chooseableattachmentitem_attachment=Attachment +string.modelcomponentbrowsertree_chooseableparticleemitteritem_particleemitter=ParticleEmitter +string.modelcomponentbrowsertree_chooseableparticleemitter2item_particleemitter=ParticleEmitter2 +string.modelcomponentbrowsertree_chooseableparticleemitterpopcornitem_particleemitter=ParticleEmitterPopcorn +string.modelcomponentbrowsertree_chooseableribbonemitteritem_ribbonemitter=RibbonEmitter +string.modelcomponentbrowsertree_chooseableeventobjectitem_eventobject=EventObject +string.modelcomponentbrowsertree_chooseablecollisionshapeitem_collisionshape=CollisionShape +string.modelcomponentbrowsertree_chooseablecameraitem_camera=Camera +string.modelcomponentbrowsertree_chooseablefaceeffectschunkitem_facefx=FaceFX +string.modelcomponentbrowsertree_chooseablebindposechunkitem_bindposechunk=BindPoseChunk + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelPanel +displayPanel.modelpanel_modelpanel_frontarea=Front +displayPanel.modelpanel_modelpanel_botarea=Bottom +displayPanel.modelpanel_modelpanel_sidearea=Side +displayPanel.modelpanel_modelpanel_persparea=Perspective +description.modelpanel_actionperformed_control_model_editing=Allows the user to control which parts of the model are displayed for editing. +dialog.modelpanel_actionperformed_opening_command_failed=Opening command failed: +dialog.modelpanel_actionperformed_opening_file=Problem opening file: +dialog.modelpanel_close_1=Would you like to save +dialog.modelpanel_close_2=before closing? +dialog.modelpanel_close_3=Warning +string.modelpanel_viewmatrices_1= and +string.modelpanel_viewmatrices_2=Nothing was selected that was attached to any bones. + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelViewManagingTree +checkboxtreenode.modelviewmanagingtree_buildtreemodel_mesh=Mesh +checkboxtreenode.modelviewmanagingtree_buildtreemodel_nodes=Nodes +checkboxtreenode.modelviewmanagingtree_buildtreemodel_cameras=Cameras + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/PerspectiveViewport +menuitem.perspectiveviewport_perspectiveviewport_reassign_matrix=Re-assign Matrix +menuitem.perspectiveviewport_perspectiveviewport_aAuto_center_bone=Auto-Center Bone(s) +dialog.perspectiveviewport_initgl_failed=initGL failed because of this exact reason:\n +display.perspectiveviewport_paintgl_loading_textures=Error loading textures: +display.perspectiveviewport_paintgl_loading_new_textures=Error loading new texture: +dialog.perspectiveviewport_actionperformed_rebuild_matrix=Rebuild Matrix +dialog.perspectiveviewport_actionperformed_approved=action approved +dialog.perspectiveviewport_actionperformed_viewport_not_implemented=Please use other viewport, this action is not implemented for this viewport. + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ProgramPreferencesPanel +label.programpreferencespanel_programpreferencespanel_viewmodelabel=3D View Mode +radiobutton.programpreferencespanel_programpreferencespanel_wireframeviewmode=Wireframe +radiobutton.programpreferencespanel_programpreferencespanel_solidviewmode=Solid +label.programpreferencespanel_programpreferencespanel_gridlines=Show Viewport Gridlines: +label.programpreferencespanel_programpreferencespanel_boxes=Use Boxes for Nodes: +label.programpreferencespanel_programpreferencespanel_browse=Quick Browse: +settooltiptext.programpreferencespanel_programpreferencespanel_close_model=When opening a new model, close old ones if they have not been modified. +label.programpreferencespanel_programpreferencespanel_loading_blp=Allow Loading Non BLP Textures: +settooltiptext.programpreferencespanel_programpreferencespanel_opening_png=Needed for opening PNGs with standard File Open +label.programpreferencespanel_programpreferencespanel_render=Render Particle Emitters: +label.programpreferencespanel_programpreferencespanel_mdl_text=Auto Refresh MDL Text (enabled=more lag): +label.programpreferencespanel_programpreferencespanel_opengl=Force Use OpenGL (may fix Windows UI bugs): +label.programpreferencespanel_programpreferencespanel_minimal_matrices=Always use minimal Matrices in HD (the \"4.5\" save format): +addtab.programpreferencespanel_programpreferencespanel_general=General +dialog.programpreferencespanel_programpreferencespanel_restart=Some settings may not take effect until you restart the application. +dialog.programpreferencespanel_programpreferencespanel_restart_1=Warning +label.programpreferencespanel_programpreferencespanel_background_color=Background Color: +label.programpreferencespanel_programpreferencespanel_vertex_color=Vertex Color: +label.programpreferencespanel_programpreferencespanel_triangle_color=Triangle Color: +label.programpreferencespanel_programpreferencespanel_select_color=Select Color: +label.programpreferencespanel_programpreferencespanel_triangle_highlight_color=Triangle Highlight Color: +label.programpreferencespanel_programpreferencespanel_vertex_highlight_color=Vertex Highlight Color: +label.programpreferencespanel_programpreferencespanel_perspective_background_color=Perspective Background Color: +label.programpreferencespanel_programpreferencespanel_visible_uneditable_mesh_color=Visible Uneditable Mesh Color: +label.programpreferencespanel_programpreferencespanel_animation_bone_color=Animation Editor Bone Color: +label.programpreferencespanel_programpreferencespanel_animation_selected_bone_color=Animation Editor Selected Bone Color: +label.programpreferencespanel_programpreferencespanel_animation_selected_upstream_color=Animation Editor Selected Upstream Color: +label.programpreferencespanel_programpreferencespanel_pivot_color=Pivot Point Color: +label.programpreferencespanel_programpreferencespanel_pivot_selected_color=Pivot Point Selected Color: +label.programpreferencespanel_programpreferencespanel_button_color_b1=Button B Color 1: +label.programpreferencespanel_programpreferencespanel_button_color_b2=Button B Color 2: +label.programpreferencespanel_programpreferencespanel_button_color_1=Button Color 1: +label.programpreferencespanel_programpreferencespanel_button_color_2=Button Color 2: +label.programpreferencespanel_programpreferencespanel_button_color_r1=Button R Color 1: +label.programpreferencespanel_programpreferencespanel_button_color_r2=Button R Color 2: +label.programpreferencespanel_programpreferencespanel_theme=Window Borders (Theme): +label.programpreferencespanel_programpreferencespanel_color_theme=Colors/Theme +label.programpreferencespanel_programpreferencespanel_camera_spin=3D Camera Spin +label.programpreferencespanel_programpreferencespanel_camera_pan=3D Camera Pan +addtab.programpreferencespanel_programpreferencespanel_hotkeys=Hotkeys +addtab.programpreferencespanel_programpreferencespanel_data=Warcraft Data + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/SmartMappingChooserPanel +checkbox.smartmappingchooserpanel_smartmappingchooserpanel_showparentsbox=Show parents +println.smartmappingchooserpanel_smartmappingchooserpanel_select=select +println.smartmappingchooserpanel_smartmappingchooserpanel_select_good=select good +println.smartmappingchooserpanel_smartmappingchooserpanel_select_real=select real stuff +println.smartmappingchooserpanel_smartmappingchooserpanel_add=add + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/TextureAnimListCellRenderer +string.textureanimListcellrenderer_textureanimListcellrenderer_no_value=(No value) +string.textureanimListcellrenderer_textureanimListcellrenderer_textureanim=TextureAnim + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVPanel +string.uvpanel_uvpanel_selectallaction=Select All +string.uvpanel_uvpanel_invertselectaction=Invert Selection +string.uvpanel_uvpanel_expandselectionaction=Expand Selection +string.uvpanel_uvpanel_selfrommainaction=Sel From Main +string.uvpanel_uvpanel_mirrorxaction=Mirror X +string.uvpanel_uvpanel_mirroryaction=Mirror Y +button.uvpanel_uvpanel_select=Select +button.uvpanel_uvpanel_add=Add +button.uvpanel_uvpanel_deselect=Deselect +button.uvpanel_uvpanel_loadimage=Load Image +button.uvpanel_uvpanel_move=Move +button.uvpanel_uvpanel_rotate=Rotate +button.uvpanel_uvpanel_scale=Scale +button.uvpanel_uvpanel_unwrap=Remap UVs +dialog.uvpanel_uvpanel_select_direction=Please select a direction +label.uvpanel_uvpanel_uvlayerindexlabel=UV Layer Index: +string.uvpanel_uvpanel_move_linked=Move Linked +string.uvpanel_uvpanel_move_single=Move Single +string.uvpanel_uvpanel_choose_settings=Choose settings: +string.uvpanel_uvpanel_tpose_settings=T-Pose Settings +view.uvpanel_uvpanel_texture_coordinate_editor=Texture Coordinate Editor: +string.uvpanel_createjtoolbar_undo=Undo +dialog.uvpanel_createjtoolbar_nothing_undo=Nothing to undo! +string.uvpanel_createjtoolbar_redo=Redo +dialog.uvpanel_createjtoolbar_nothing_redo=Nothing to redo! +string.uvpanel_createjtoolbar_selectandmovedescriptor=Select and Move +string.uvpanel_createjtoolbar_selectandrotatedescriptor=Select and Rotate +string.uvpanel_createjtoolbar_selectandscale=Select and Scale +string.uvpanel_createjtoolbar_snap=Snap +string.uvpanel_createjtoolbar_snapx=SnapX +string.uvpanel_createjtoolbar_snapy=SnapY +menu.uvpanel_createmenubar_editmenu=Edit +description.uvpanel_createmenubar_editmenu=Allows the user to use various tools to edit the currently selected model's TVertices. +menu.uvpanel_createmenubar_dispmenu=View +description.uvpanel_createmenubar_dispmenu=Control display settings for this Texture Coordinate Editor window. +menuitem.uvpanel_createmenubar_selectall=Select All +menuitem.uvpanel_createmenubar_invertselect=Invert Selection +menuitem.uvpanel_createmenubar_expandselection=Expand Selection +menuitem.uvpanel_createmenubar_selfrommain=Select from Viewer +menuitem.uvpanel_createmenubar_splitvertex=Split Vertex +menuitem.uvpanel_createmenubar_wrapimage=Wrap Image +settooltiptext.uvpanel_createmenubar_wrapimage=Repeat the texture many times in a grid-like display. This feature does not edit the model in any way; only this viewing window. +menuitem.uvpanel_createmenubar_setaspectratio=Set Aspect Ratio +settooltiptext.uvpanel_createmenubar_etaspectratio=Sets the amount by which the texture display is stretched, for editing textures with non-uniform width and height. +menuitem.uvpanel_createmenubar_mirrorsubmenu=Mirror +description.uvpanel_createmenubar_mirrorsubmenu=Allows the user to mirror objects. +menuitem.uvpanel_createmenubar_mirrorx=Mirror X +menuitem.uvpanel_createmenubar_mirrory=Mirror Y +dialog.uvpanel_actionperformed_loadimage_1=Do you want to use the texture auto-loader to find available textures?\nIf you choose \"No\", then you will have to find a file on your hard drive instead. +dialog.uvpanel_actionperformed_loadimage_2=Load Image +display.uvpanel_actionperformed_unable_load_tag=Unable to load (special case TGA) image file: +display.uvpanel_actionperformed_unable_load_image=Unable to load image file: +dialog.uvpanel_actionperformed_blp_loader_failed=BLP texture-loader failed. +label.uvpanel_actionperformed_to= to +label.uvpanel_unwrapdirection_front=Front +label.uvpanel_unwrapdirection_right=Right +label.uvpanel_unwrapdirection_bottom=Bottom +label.uvpanel_unwrapdirection_perspective=Perspective + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVViewport +menuitem.uvviewport_uvviewport_placeholder=Placeholder Button +dialog.uvviewport_uvviewport_placeholder=Placeholder code. + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/Viewport +menuitem.viewport_viewport_createface=Create Face +menuitem.viewport_viewport_addteamcolor=Split Geoset and Add Team Color +menuitem.viewport_viewport_splitgeo=Split Geoset +menuitem.viewport_viewport_manualmove=Translation Type-in +menuitem.viewport_viewport_manualrotate=Rotate Type-in +menuitem.viewport_viewport_manualset=Position Type-in +menuitem.viewport_viewport_manualscale=Scale Type-in +menuitem.viewport_viewport_reassignmatrix=Re-assign Matrix +menuitem.viewport_viewport_setparent=Set Parent +menuitem.viewport_viewport_cogbone=Auto-Center Bone(s) +menuitem.viewport_viewport_renamebone=Rename Bone +menuitem.viewport_viewport_appendbonebone=Append Bone Suffix +dialog.viewport_paintcomponent_mouse_coordinates=Error retrieving mouse coordinates. (Probably not a major issue. Due to sleep mode?) +println.viewport_paintcomponent_delay=delay +dialog.viewport_paintcomponent_rebuild_matrix=Rebuild Matrix +dialog.viewport_paintcomponent_action_approved=action approved +string.viewport_paintcomponent_no_parent=(No parent) +dialog.viewport_paintcomponent_parent_node=Choose a parent node +dialog.viewport_paintcomponent_set_parent_node=Set Parent Node +dialog.viewport_paintcomponent_bone_name=Enter bone name: +dialog.viewport_paintcomponent_bone_suffix=Enter bone suffix: +label.viewport_manualmove_move_x=Move X: +label.viewport_manualmove_move_y=Move Y: +label.viewport_manualmove_move_z=Move Z: +dialog.viewport_manualmove_manual_translation=Manual Translation +label.viewport_manualrotate_rotate_x=Rotate X degrees (around axis facing front): +label.viewport_manualrotate_rotate_y=Rotate Y degrees (around axis facing left): +label.viewport_manualrotate_rotate_z=Rotate Z degrees (around axis facing up): +dialog.viewport_manualrotate_manual_rotation=Manual Rotation +label.viewport_manualset_new_position_x=New Position X: +label.viewport_manualset_new_position_y=New Position Y: +label.viewport_manualset_new_position_z=New Position Z: +dialog.viewport_manualset_manual_rotation=Manual Position +label.viewport_manualscale_scale_x=Scale X: +label.viewport_manualscale_scale_y=Scale Y: +label.viewport_manualscale_scale_z=Scale Z: +checkbox.viewport_manualscale_scale_origin=Custom Scaling Origin +label.viewport_manualscale_center_x=Center X: +label.viewport_manualscale_center_y=Center Y: +label.viewport_manualscale_center_z=Center Z: +dialog.viewport_manualscale_manual_scaling=Manual Scaling + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimatedPerspectiveViewport +dialog.animatedperspectiveviewport_initgl_failed=initGL failed because of this exact reason:\n +println.animatedperspectiveviewport_paintgl_omitting_frames=AnimatedPerspectiveViewport omitting frames due to avoid Exception log spam +display.animatedperspectiveviewport_paintgl_loading_textures=Error loading textures: +display.animatedperspectiveviewport_paintgl_loading_new_textures=Error loading new texture: +println.animatedperspectiveviewport_paintgl_max=max: +println.animatedperspectiveviewport_paintgl_printinggl=printingGL +dialog.animatedperspectiveviewport_paintcomponent_retrieving_mouse=Error retrieving mouse coordinates.(Probably not a major issue. Due to sleep mode?) + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationController +label.animationcontroller_animationcontroller_speed=Speed: +button.animationcontroller_animationcontroller_playanimation=Play Animation +button.animationcontroller_animationcontroller_defaultloop=Default Loop +button.animationcontroller_animationcontroller_alwaysloop=Always Loop +button.animationcontroller_animationcontroller_neverloop=Never Loop +label.animationcontroller_animationcontroller_levelofdetail=Level of Detail +object.animationcontroller_animationcontroller_unanimated=(Unanimated) + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationViewer +string.animationviewer_animationviewer_unanimated=(Unanimated) + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/CameraManagerPanel +string.cameramanagerpanel_cameramanagerpanel_free=(Free) +button.cameramanagerpanel_cameramanagerpanel_createcamerafromview=Create Camera from Current View + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/ViewerCamera +exception.viewercamera_setrotationangles_function_not_exist=Ghostwolf called a function that does not exist, so I did not know what to do here + +# craft3data/src/com/hiveworkshop/wc3/gui/mpqbrowser/MPQBrowser +menu.mpqbrowser_mpqbrowser_filemenu=File +menu.mpqbrowser_mpqbrowser_filtersmenu=Filters +filter.mpqbrowser_mpqbrowser_text=Text +filter.mpqbrowser_mpqbrowser_sylk=Sylk +filter.mpqbrowser_mpqbrowser_script=Script +filter.mpqbrowser_mpqbrowser_html=Html +filter.mpqbrowser_mpqbrowser_models=Models +filter.mpqbrowser_mpqbrowser_images=Images +filter.mpqbrowser_mpqbrowser_maps=Maps +filter.mpqbrowser_mpqbrowser_sounds=Sounds +filter.mpqbrowser_mpqbrowser_music=Music +filter.mpqbrowser_mpqbrowser_other=Other +menuitem.mpqbrowser_mpqbrowser_allitem=All +menuitem.mpqbrowser_mpqbrowser_noneitem=None +menuitem.mpqbrowser_mpqbrowser_openitem=Open +menuitem.mpqbrowser_mpqbrowser_extractitem=Export +dialog.mpqbrowser_exportfilechooser_1=File +dialog.mpqbrowser_exportfilechooser_2=already exists. Overwrite anyway? +dialog.mpqbrowser_exportfilechooser_3=Export File +menuitem.mpqbrowser_mpqbrowser_copypathtoclipboarditem=Copy Path to Clipboard +menuitem.mpqbrowser_mpqbrowser_useastextureitem=Use as Texture + +# craft3data/src/com/hiveworkshop/wc3/gui/util/ColorChooserIcon +dialog.colorchoosericon_colorchoosericon_choose_background_color=Choose Background Color + +# craft3data/src/com/hiveworkshop/wc3/gui/BLPHandler +exception.blphandler_forcebufferedimagesrgb_color_space=Input color space has different number of components from sRGB. +exception.blphandler_readcustom_stream=stream +dialog.blphandler_exportbitmaptexturefile_1=File +dialog.blphandler_exportbitmaptexturefile_2=already exists. Continue? +dialog.blphandler_exportbitmaptexturefile_3=Confirm Export +dialog.blphandler_exportbitmaptexturefile_alpha_black=Warning: Alpha channel was converted to black. Some data will be lost\nif you convert this texture back to Warcraft BLP. +dialog.blphandler_exportbitmaptexturefile_file_unknown=File type unknown or unavailable + +# craft3data/src/com/hiveworkshop/wc3/gui/ExceptionPopup +dialog.exceptionpopup_display_create_info_popup_failed=MDL open error popup failed to create info popup. +println.exceptionpopup_display_unknown=Unknown error occurred: + +# craft3data/src/com/hiveworkshop/wc3/gui/GUITheme +string.guitheme_guitheme_forest_green=Forest Green +string.guitheme_guitheme_noire=Noire +string.guitheme_guitheme_windows=Windows +string.guitheme_guitheme_windows_lassic=Windows Classic +string.guitheme_guitheme_soft_gray=Soft Gray +string.guitheme_guitheme_java_default=Java Default +string.guitheme_guitheme_blue_ice=Blue Ice +string.guitheme_guitheme_dark_blue_green=Dark Blue-Green +string.guitheme_guitheme_gray=Gray +string.guitheme_guitheme_hifi=HiFi +string.guitheme_guitheme_acryl=Acryl +string.guitheme_guitheme_aluminium=Aluminium +string.guitheme_guitheme_demonicmeme=DemonicMeme + +# craft3data/src/com/hiveworkshop/wc3/gui/OldBLPHandler +exception.oldblphandler_getTexture_failed_load_texture_1=Failed to load game texture: +exception.oldblphandler_getTexture_failed_load_texture_2=in +exception.oldblphandler_forcebufferedimagesrgb_color_different=Input color space has different number of components from sRGB. +exception.oldblphandler_readcustom_stream=stream + +# craft3data/src/com/hiveworkshop/wc3/mdl/render3d/RenderNode +exception.rendernode_updatechildren_not_find_child=Cannot find child +exception.rendernode_updatechildren_of=of + +# craft3data/src/com/hiveworkshop/wc3/mdl/render3d/SoftwareParticleEmitterShader +exception.softwareparticleemittershader_renderparticles_alive= alive items, +exception.softwareparticleemittershader_renderparticles_buffer= len buffer + +# craft3data/src/com/hiveworkshop/wc3/mdl/v2/timelines/InterpolationType +string.interpolationyype_interpolationyype_dontinterp=DontInterp +string.interpolationyype_interpolationyype_linear=Linear +string.interpolationyype_interpolationyype_bezier=Bezier +string.interpolationyype_interpolationyype_hermite=Hermite + +# craft3data/src/com/hiveworkshop/wc3/mdl/v2/MaterialView +append.materialview_createdefaultname_over= over +append.materialview_createdefaultname_alpha= (animated Alpha) +string.materialview_createdefaultname_texture=animated texture layers + +# craft3data/src/com/hiveworkshop/wc3/mdl/AbstractAnimatedNode +string.abstractanimatednode_updatetranslationkeyframe_translation=Translation +string.abstractanimatednode_updaterotationkeyframe_rotation=Rotation +string.abstractanimatednode_updatescalingkeyframe_scaling=Scaling +string.abstractanimatednode_updatelocalrotationkeyframe_rotation=Rotation +string.abstractanimatednode_updateLocalrotationkeyframeinverse_rotation=Rotation +string.abstractanimatednode_updatelocaltranslationkeyframe_translation=Translation +string.abstractanimatednode_updatelocalscalingkeyframe_scaling=Scaling + +# craft3data/src/com/hiveworkshop/wc3/mdl/Animation +addtag.animation_animation_movespeed=MoveSpeed +addtag.animation_animation_nonlooping=NonLooping +addtag.animation_animation_rarity=Rarity +addtag.animation_setrarity_rarity=Rarity +addtag.animation_setmovespeed_movespeed=MoveSpeed +addtag.animation_isnonlooping_nonlooping=NonLooping +addtag.animation_setnonlooping_nonlooping=NonLooping +println.animation_read_nameless=Throwing nameless anim from: +dialog.animation_read_outside_geoset=This popup means Anims were interpreted as outside geoset! +string.animation_read_interval=Interval +dialog.animation_read_interval=Unable to parse animation: Interval could not be interpreted numerically.\nThis may break lots of things. +println.animation_printto_anim=Anim +println.animation_printto_interval=Interval + +# craft3data/src/com/hiveworkshop/wc3/mdl/AnimFlag +# string.animflag_materialtextureid=TextureID +# string.animflag_materialemissivegain=EmissiveGain +# string.animflag_materialfresnelcolor=FresnelColor +# string.animflag_materialfresnelopacity=FresnelOpacity +# string.animflag_materialfresnelteamcolor=FresnelTeamColor +# string.animflag_texturerotation=Rotation +# string.animflag_texturescaling=Scaling +# string.animflag_texturetranslation=Translation +# string.animflag_geosetcolor=Color +# string.animflag_geosettranslation=Translation +# string.animflag_geosetrotation=Rotation +# string.animflag_geosetscaling=Scaling +# string.animflag_lightvisibility=Visibility +# string.animflag_lightcolor=Color +# string.animflag_lightintensity=Intensity +# string.animflag_lightambientintensity=AmbIntensity +# string.animflag_lightattenuationstart=AttenuationStart +# string.animflag_lightattenuationend=AttenuationEnd +# string.animflag_lightambientcolor=AmbColor +# string.animflag_attachmentvisibility=Visibility +# string.animflag_particleemitteremissionrate=EmissionRate +# string.animflag_particleemittergravity=Gravity +# string.animflag_particleemitterlatitude=Latitude +# string.animflag_particleemitterlifespan=LifeSpan +# string.animflag_particleemitterlongitude=Longitude +# string.animflag_particleemitterspeed=InitVelocity +# string.animflag_particleemittervisibility=Visibility +# string.animflag_particleemitter2visibility=Visibility +# string.animflag_particleemitter2variation=Variation +# string.animflag_particleemitter2gravity=Gravity +# string.animflag_particleemitter2emissionrate=EmissionRate +# string.animflag_particleemitter2latitude=Latitude +# string.animflag_particleemitter2length=Length +# string.animflag_particleemitter2speed=Speed +# string.animflag_particleemitter2width=Width +# string.animflag_cornemissionrate=EmissionRate +# string.animflag_cornvisibility=Visibility +# string.animflag_cornlifespan=LifeSpan +# string.animflag_cornspeed=Speed +# string.animflag_corncolor=Color +# string.animflag_ribbonemittervisibility=Visibility +# string.animflag_ribbonemitterheightabove=HeightAbove +# string.animflag_ribbonemitterheightbelow=HeightBelow +# string.animflag_ribbonemittercolor=Color +# string.animflag_ribbonemittertextureslot=TextureSlot +# string.animflag_camerapositiontranslation=Translation +# string.animflag_cameratargettranslation=Translation +# string.animflag_camerarotation=Rotation +println.animflag_setinterptype=Unsafe call to setInterpType, please rewrite code in AnimFlag class +dialog.animflag_parsetext_1=Unable to parse +dialog.animflag_parsetext_2=Missing or unrecognized open statement. +dialog.animflag_parsetext_3=Error while parsing +dialog.animflag_parsetext_4=: More than one Global Sequence Id is present in the same +dialog.animflag_read_1=Error while parsing +dialog.animflag_read_2=: More than one Global Sequence Id is present in the same +dialog.animflag_getmostvisible=Error: Program attempted to compare visibility with non-visibility animation component.\nThis... probably means something is horribly wrong. Save your work, if you can. +dialog.animflag_copyfrom=Some animations will lose complexity due to transfer incombatibility. There will probably be no visible change. +println.animflag_deleteanim=KeyFrame deleting was blocked by a GlobalSequence +dialog.animflag_copyfrom_source_1=ERROR! A source was found to have Linear and Nonlinear motion simultaneously. Does the following have non-zero data? +dialog.animflag_copyfrom_source_2=Help This Program! +println.animflag_identity=Texture identity used in renderer... TODO make this function more intelligent. +exception.animflag_removekeyframe_1=Attempted to remove keyframe, but no keyframe was found +exception.animflag_removekeyframe_2=time +exception.animflag_slidekeyframe_1=Unable to slide keyframe: no frames exist +exception.animflag_slidekeyframe_2=Sliding this keyframe would create duplicate entries at one time! + +# craft3data/src/com/hiveworkshop/wc3/mdl/Attachment +println.attachment_attachment_1=error: An attachment +println.attachment_attachment_2=not flagged as attachment in MDX! +println.attachment_attachment_3=Surprise! This model has a special attachment data point worthy of documenting! +dialog.attachment_read=Unable to parse Attachment: Missing or unrecognized open statement. +println.attachment_printto_object=\tObjectId +println.attachment_printto_parent=\tParent +println.attachment_printto_path=\tPath \" +println.attachment_printto_attachment=\tAttachmentID +dialog.attachment_setvisibilityflag=Some visiblity animation data was lost unexpectedly during overwrite in +dialog.attachment_getvisibilityflag=Some visiblity animation data was lost unexpectedly during retrieval in + +# craft3data/src/com/hiveworkshop/wc3/mdl/Bitmap +string.bitmap_getpath_blp_path=bad blp path +string.bitmap_getpath_team_color=Team Color +string.bitmap_getpath_team_glow=Team Glow +string.bitmap_getpath_replaceable=Replaceable +dialog.bitmap_read_parsing_bitmap=Error parsing Bitmap: Unrecognized statement +dialog.bitmap_read_parse_bitmap=Unable to parse Bitmap: Missing or unrecognized open statement. +println.bitmap_printto_bitmap=Bitmap +println.bitmap_printto_image=\tImage +println.bitmap_printto_wrapwidth=\tWrapWidth, +println.bitmap_printto_wrapheight=\tWrapHeight, + +# craft3data/src/com/hiveworkshop/wc3/mdl/Bone +println.bone_bone_bone_error=error: A bone +println.bone_bone_flagged=not flagged as bone in MDX! +println.bone_read_interpret_integer=Error while parsing: Could not interpret integer from: +println.bone_read_parse_bone=Unable to parse Bone: Missing or unrecognized open statement. +println.bone_printto_objectid=\tObjectId +println.bone_printto_parent=\tParent +println.bone_printto_geosetid_multiple=\tGeosetId Multiple, +println.bone_printto_geosetid=\tGeosetId +println.bone_printto_geosetanimid_none=\tGeosetAnimId None, +println.bone_printto_geosetanimid=\tGeosetAnimId + +# craft3data/src/com/hiveworkshop/wc3/mdl/Camera +dialog.camera_read_target_not_recognize=Camera target did not recognize data at: +dialog.camera_read_major_issue=\nThis is probably not a major issue? +dialog.camera_read_camera_not_recognize=Camera did not recognize data at: +dialog.camera_read_parse_camera=Unable to parse Camera: Missing or unrecognized open statement. +println.camera_printto_position=\tPosition +println.camera_printto_view=\tFieldOfView +println.camera_printto_farclip=\tFarClip +println.camera_printto_nearclip=\tNearClip +println.camera_printto_target=\tTarget { +println.camera_printto_position_t=\t\tPosition +string.camera_sourcenode=Source of: +string.camera_target=Target of: + +# craft3data/src/com/hiveworkshop/wc3/mdl/CollisionShape +println.collisionshape_collisionshape_error=error: A collisionshape +println.collisionshape_collisionshape_flagged=not flagged as collisionshape in MDX! +dialog.collisionshape_read_parse=Unable to parse CollisionShape: Missing or unrecognized open statement. +println.collisionshape_printto_objectid=\tObjectId +println.collisionshape_printto_parent=\tParent +println.collisionshape_printto_vertices=\tVertices + +# craft3data/src/com/hiveworkshop/wc3/mdl/EditableModel +addtoheader.editablemodel_editablemodel_converted=//This model was converted from MDX by ogre-lord's Java MDX API and Retera's Java MDL API +dialog.editablemodel_editablemodel_bug= ---\nWARNING: Java Warcraft Libraries thinks we are loading a camera with corrupted data due to bug in Native MDX Parser.\nPlease DISABLE \"View > Use Native MDX Parser\" if you want to correctly edit \" +dialog.editablemodel_editablemodel_continue=\".\nYou may continue to work, but portions of the model's data have been lost, and will be missing if you save. +dialog.editablemodel_editablemodel_warning=Warning +dialog.editablemodel_parsevertex_error=Error (on line +dialog.editablemodel_parsevertex_interpreted=): Vertex coordinates could not be interpreted. +dialog.editablemodel_parsevertex_triangles=Error: Unable to interpret information in Triangles: +dialog.editablemodel_nextline_error=Error reading file. +dialog.editablemodel_getbone_reference=Bone reference broken or invalid! +string.editablemodel_addanimationsfrom_animation_source_file=animation source file +dialog.editablemodel_read_not_found=The file chosen was not found: +dialog.editablemodel_read_not_read=The file chosen could not be read: +dialog.editablemodel_read_version_missing=The file version is missing! +dialog.editablemodel_read_format_confusing=The format version was confusing! +dialog.editablemodel_read_understood=Model could not be understood. Program does not understand this type of file. +dialog.editablemodel_read_bindpose=Bad tokens in BindPose chunk: +dialog.editablemodel_parse4floatbpos_interpreted=BindPose Matrix could not be interpreted. +dialog.editablemodel_parse12floatbpos_interpreted=BindPose Matrix could not be interpreted. +dialog.editablemodel_dopostread_invalid_geosetid=We discovered GeosetAnim data pointing to an invalid GeosetID! Bad data will be deleted. Please backup your model file. +dialog.editablemodel_printto_unable_to_save=Unable to save MDL to file. +println.editablemodel_printto_save_mdl_toolkit=// Saved by Retera's MDL Toolkit on +println.editablemodel_printto_version=Version { +println.editablemodel_printto_format_version=\tFormatVersion +println.editablemodel_printto_model=Model +println.editablemodel_printto_numgeosets=\tNumGeosets +println.editablemodel_printto_numgeosetanims=\tNumGeosetAnims +println.editablemodel_printto_numhelpers=\tNumHelpers +println.editablemodel_printto_numlights=\tNumLights +println.editablemodel_printto_numbones=\tNumBones +println.editablemodel_printto_numattachments=\tNumAttachments +println.editablemodel_printto_numparticleemitters=\tNumParticleEmitters +println.editablemodel_printto_numparticleemitters2=\tNumParticleEmitters2 +println.editablemodel_printto_numparticleemitterspopcorn=\tNumParticleEmittersPopcorn +println.editablemodel_printto_numribbonemitters=\tNumRibbonEmitters +println.editablemodel_printto_numevents=\tNumEvents +println.editablemodel_printto_numfacefx=\tNumFaceFX +println.editablemodel_printto_blendtime=\tBlendTime +println.editablemodel_printto_sequences=Sequences +println.editablemodel_printto_globalsequences=GlobalSequences +println.editablemodel_printto_duration=\tDuration +println.editablemodel_printto_textures=Textures +println.editablemodel_printto_materials=Materials +println.editablemodel_printto_texture_anims=TextureAnims +println.editablemodel_printto_pivotpoints=PivotPoints +println.editablemodel_printto_facefx=FaceFX +println.editablemodel_printto_path=\tPath +println.editablemodel_printto_bindpose=BindPose +println.editablemodel_printto_matrix=\tMatrix +println.editablemodel_printto_matrices=\tMatrices +println.editablemodel_printto_for=for +dialog.editablemodel_printto_close_mdl=Unable to close MDL writer -- did you run out of hard drive space? +dialog.editablemodel_updateIdobjectreferences_additional_pivot=Error: More objects than PivotPoints were found.\nAdditional pivot at {0,0,0} will be added. +dialog.editablemodel_updateobjectIds_gleaning=Gleaning out +dialog.editablemodel_updateobjectIds_chunk_with_size= chunk with size of 0 +dialog.editablemodel_getallanimflags_time_scale_textureanims=WARNING: Error with processing time-scale from TextureAnims! Program will attempt to proceed. +dialog.editablemodel_getallanimflags_time_scale_geosetanims=WARNING: Error with processing time-scale from GeosetAnims! Program will attempt to proceed. +dialog.editablemodel_add_anim=Added null Anim component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_globalseq=Added null GlobalSeq component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_bitmap=Added null Bitmap component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_material=Added null Material component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_textureanim=Added null TextureAnim component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_geoset=Added null Geoset component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_geosetvertex=Added null GeosetVertex component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_triangle=Added null Triangle component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_geosetanim=Added null GeosetAnim component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_idobject=Added null IdObject component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_add_camera=Added null Camera component to model, which is really bad. Tell Retera you saw this once you have errors. +dialog.editablemodel_removealltimelinesforglobalseq_time_scale_textureanims=WARNING: Error with processing time-scale from TextureAnims! Program will attempt to proceed. +dialog.editablemodel_removealltimelinesforglobalseq_time_scale_geosetanims=WARNING: Error with processing time-scale from GeosetAnims! Program will attempt to proceed. +dialog.editablemodel_converttov800_hero=HERO HERO HERO +dialog.editablemodel_recalculatetangents_tangent_generation=Tangent generation completed.\nGood tangents: +dialog.editablemodel_recalculatetangents_tangent_bad=bad tangents + +# craft3data/src/com/hiveworkshop/wc3/mdl/EventObject +println.eventobject_eventobject_error=MDX -> MDL error: An eventobject +println.eventobject_eventobject_not_flagged=not flagged as eventobject in MDX! +dialog.eventobject_eventobject_more_global_sequence=Error while parsing event object: More than one Global Sequence Id is present in the same object! +dialog.eventobject_eventobject_unable_parse=Unable to parse EventObject: Missing or unrecognized open statement. +println.eventobject_printto_objectid=\tObjectId +println.eventobject_printto_parent=\tParent +println.eventobject_printto_eventtrack=\tEventTrack +println.eventobject_printto_globalseqid=\t\tGlobalSeqId +println.eventobject_add=ERROR: EventObject given unknown flag: + +# craft3data/src/com/hiveworkshop/wc3/mdl/ExtLog +dialog.extLog_parsetext_bounds_radius=BoundsRadius could not be interpreted. +dialog.extLog_parsetext_unrecognized_input=Unable to parse ExtLog; unrecognized input: +dialog.extLog_parsetext_open_statement=Unable to parse ExtLog: Missing or unrecognized open statement. +println.extLog_printto_minimum_extent=MinimumExtent +println.extLog_printto_maximum_extent=MaximumExtent +println.extLog_printto_bounds_radius=BoundsRadius + +# craft3data/src/com/hiveworkshop/wc3/mdl/Geoset +string.geoset_getname_geoset=Geoset +string.geoset_getuiname_geoset=Geoset +string.geoset_add_riangles=2x triangles +dialog.geoset_parse8byteskin_skin_data=Skin data could not be interpreted. +dialog.geoset_parse4floattangent_tangent_data=Tangent data could not be interpreted. +dialog.geoset_read_geoset_vertices=Error: Vertices not found at beginning of Geoset! +dialog.geoset_read_vertex_groups=Error: VertexGroups missing or invalid! +dialog.geoset_read_faces=Error: Faces missing or invalid! +println.geoset_read_no_triangles=No triangles: +dialog.geoset_read_triangles=Error: Triangles missing or invalid! +dialog.geoset_read_groups=Error: Groups (Matrices) missing or invalid! +dialog.geoset_read_parse_geoset=Unable to parse Geoset: Missing or unrecognized open statement ' +dialog.geoset_updatetoobjects_tvertices_and_vertices_length=Error: Length of TVertices and Vertices chunk differ (Or some other unknown error has occurred)! +dialog.geoset_updatetoobjects_material_index=Error: Material index out of bounds for geoset! +exception.geoset_applyverticestomatrices_geoset=Geoset \" +exception.geoset_applyverticestomatrices_convert=\": Both complex SD matrices that cannot convert to HD, and also HD weights that cannot be expressed in SD, have been used. This merged geoset cannot save this way without losing data. Please Split Geoset or reduce complexity and retry. +println.geoset_printto_geoset=Geoset +println.geoset_printto_vertices=\tVertices +println.geoset_printto_empty_tvertices=Error: Attempting to save a Geoset with Verteces that have differing numbers of TVertices! Empty TVertices will be autogenerated. +println.geoset_printto_normals_vertices=Number of normals differs from number of vertices. The model file will be corrupt.\nTo fix it, delete or fix the Normals chunk in MDL. +println.geoset_printto_normals=\tNormals +println.geoset_printto_vertexgroup=\tVertexGroup +println.geoset_printto_tangents=\tTangents +println.geoset_printto_skinweights=\tSkinWeights +println.geoset_printto_faces=\tFaces +println.geoset_printto_triangles=\t\tTriangles +println.geoset_printto_groups=\tGroups +println.geoset_printto_materialid=\tMaterialID +println.geoset_printto_selectiongroup=\tSelectionGroup +println.geoset_printto_levelofdetail=\tLevelOfDetail +println.geoset_printto_name=\tName \" +dialog.geoset_dosaveprep_empty_tvertices=Error: Attempting to save a Geoset with Verteces that have differing numbers of TVertices! Empty TVertices will be autogenerated. + +# craft3data/src/com/hiveworkshop/wc3/mdl/GeosetAnim +dialog.geosetanim_read_parse_geosetanim=Unable to parse GeosetAnim: Missing or unrecognized open statement. +println.geosetanim_printto_geosetanim=GeosetAnim +println.geosetanim_printto_dropshadow=DropShadow, +println.geosetanim_printto_static_alpha=static Alpha +println.geosetanim_printto_static_color=static Color +println.geosetanim_printto_geosetid=\tGeosetId +dialog.geosetanim_setvisibilityflag_overwrite=Some visiblity animation data was lost unexpectedly during overwrite in +dialog.geosetanim_getvisibilityflag_retrieval=Some visiblity animation data was lost unexpectedly during retrieval in + +# craft3data/src/com/hiveworkshop/wc3/mdl/GeosetVertex +dialog.geosetvertex_updatematrixref_real_matrix_id=Error in Matrices: VertexGroup does not reference a real matrix id! +dialog.geosetvertex_parsetext_interpreted=Vertex coordinates could not be interpreted. + +# craft3data/src/com/hiveworkshop/wc3/mdl/Helper +println.helper_helper_error=MDX -> MDL error: A helper ' +println.helper_helper_not_flagged=' not flagged as helper in MDX! +println.helper_read_error=Error while parsing: Could not interpret integer from: +println.helper_read_parse_bone=Unable to parse Bone: Missing or unrecognized open statement. + +# craft3data/src/com/hiveworkshop/wc3/mdl/Layer +string.layer_layer_none=None +string.layer_layer_transparent=Transparent +string.layer_layer_blend=Blend +string.layer_layer_additive=Additive +string.layer_layer_addalpha=AddAlpha +string.layer_layer_modulate=Modulate +string.layer_layer_modulate2x=Modulate2x +dialog.layer_read_parse_layer=Unable to parse Layer: Missing or unrecognized open statement. +println.layer_printto_layer=Layer +println.layer_printto_filtermode=\tFilterMode +println.layer_printto_shadertypeid=\tShaderTypeId +println.layer_printto_static=\tstatic +println.layer_printto_textureid=TextureID +println.layer_printto_static_textureid=\tstatic TextureID +println.layer_printto_tvertexanimid=\tTVertexAnimId +println.layer_printto_coordid=\tCoordId +println.layer_printto_static_alpha=\tstatic Alpha +println.layer_printto_static_emissivegain=\tstatic EmissiveGain +println.layer_printto_static_fresnelcolor=\tstatic FresnelColor +println.layer_printto_static_fresnelopacity=\tstatic FresnelOpacity +println.layer_printto_static_fresnelteamcolor=\tstatic FresnelTeamColor +string.layer_getname_multi_textured=multi-textured layer (mode +string.layer_gettexturename_layer= layer (mode +dialog.layer_getflag_some=Some +dialog.layer_getflag_retrieval= animation data was lost unexpectedly during retrieval in +dialog.layer_setvisibilityflag_overwrite=Some visiblity animation data was lost unexpectedly during overwrite in +dialog.layer_getvisibilityflag_retrieval=Some visiblity animation data was lost unexpectedly during retrieval in +exception.layer_animatable=not yet implemented + +# craft3data/src/com/hiveworkshop/wc3/mdl/LayerShader +exception.layershader_layershader=Unknown LayerShader ID: + +# craft3data/src/com/hiveworkshop/wc3/mdl/Light +println.light_light_error=MDX -> MDL error: A light ' +println.light_light_not_flagged=' not flagged as light in MDX! +dialog.light_read_parse_light=Unable to parse Light: Missing or unrecognized open statement. +println.light_printto_objectid=\tObjectId +println.light_printto_parent=\tParent +println.light_printto_static=\tstatic +string.light_printto_attenuationstart=AttenuationStart +string.light_printto_attenuationend=AttenuationEnd +string.light_printto_intensity=Intensity +string.light_printto_color=Color +string.light_printto_ambintensity=AmbIntensity +string.light_printto_shadowintensity=ShadowIntensity +string.light_printto_ambcolor=AmbColor +dialog.light_setvisibilityflag_overwrite=Some visiblity animation data was lost unexpectedly during overwrite in +dialog.light_getvisibilityflag_retrieval=Some visiblity animation data was lost unexpectedly during retrieval in + +# craft3data/src/com/hiveworkshop/wc3/mdl/Material +string.material_getname_animated= (animated Alpha): +string.material_getname_texture=animated texture layers +string.material_getname_over= over +string.material_getname_material=(Material with no layers) +exception.material_material_null=Null layer shader +dialog.material_read_parse_material=Unable to parse Material: Missing or unrecognized open statement. +println.material_printto_material=Material +println.material_printto_Shader=\tShader \" +println.material_printto_priorityplane=\tPriorityPlane +println.material_getbakedhdnonemissivebufferedimage_diffuse=Diffuse: +println.material_getbakedhdnonemissivebufferedimage_normal=Normal: +println.material_getbakedhdnonemissivebufferedimage_orm=Orm: +println.material_getbakedhdnonemissivebufferedimage_reflections=Reflections: +exception.material_getbakedhdnonemissivebufferedimage_texture_widths=Baking failed because of differing texture widths; maybe we should update the algorithm? +exception.material_getbakedhdnonemissivebufferedimage_texture_heights=Baking failed because of differing texture heights; maybe we should update the algorithm? +println.material_getbakedhdnonemissivebufferedimage_bake_texture=baked texture with +println.material_getbakedhdnonemissivebufferedimage_pixels= pixels loading shader data and +println.material_getbakedhdnonemissivebufferedimage_defaulting= pixels defaulting back to diffuse data +exception.material_getbakedhdnonemissivebufferedimage_baking_texture=Failed to begin baking HD -> SD texture, did not find 6 layers! +dialog.material_bufferediimage_blp=BLP texture-loader failed. + +# craft3data/src/com/hiveworkshop/wc3/mdl/Matrix +string.matrix_getname_list=Error bad bone list +string.matrix_getname_ids=Error bad bone ids +exception.matrix_updateids_matrix=Matrix error +dialog.matrix_updateids_model=Error: A matrix's bone reference was missing in the model!\nDid you move geometry between models and forget to update bones? +dialog.matrix_updateids_bad_sizes=Error: bad sizes in matrix ( +dialog.matrix_updateids_same_size= as difference, should be same size) +dialog.matrix_updatebones_attached=Error: Holy fo shizzle my grizzle! There's geometry attached to Helper +dialog.matrix_updatebones_bad=and that is very bad! +dialog.matrix_updatebones_referencing=Error: A matrix's bone id was not referencing a real bone! +dialog.matrix_size_warning=Warning: A matrix with no contents was used! +dialog.matrix_parsetext_interpreted=Matrix data could not be interpreted. +println.matrix_printto_matrices=Matrices + +# craft3data/src/com/hiveworkshop/wc3/mdl/MDLFilter +exception.mdlfilter_mdlfilter_files=Warcraft III Model Files + +# craft3data/src/com/hiveworkshop/wc3/mdl/MDLReader +dialog.mdlreader_readint_parsing=Error while parsing: Could not interpret integer from: +dialog.mdlreader_readbeforecolon_parsing=Error while parsing: Could not interpret integer from: +dialog.mdlreader_readdouble_parsing=Error while parsing: Could not interpret double from: +println.mdlreader_rmain_maximum_extent=MaximumExtent +println.mdlreader_rmain_matrices=Matrices +println.mdlreader_rmain_dog=yo mana so low yo dun know it you dog you +println.mdlreader_rmain_name=The name of a String is: +println.mdlreader_rmain_it=It is: +println.mdlreader_nextlinespecial_error=Error reading file. +string.mdlreader_nextlinespecial_parsing=COMPLETED PARSING +println.mdlreader_nextline_error=Error reading file. +string.mdlreader_nextline_parsing=COMPLETED PARSING +println.mdlreader_reset_reset=Line reset from line +println.mdlreader_reset_back= back to line +exception.mdlreader_reset_infinite_loop=Program detected infinite loop in file reading sequence. Probably bad model, or error in interpreter! +dialog.mdlreader_reset_io=Critical error in IO: Maybe length between line +dialog.mdlreader_reset_line= and line +dialog.mdlreader_reset_expected= got longer than expected?\nPortions of model data will be lost. +println.mdlreader_reset_error=Line reset error: +dialog.mdlreader_mark_read_write=Critical error: Read/write abilities lost. Loading will possibly be severely damaged and disfunctional. +println.mdlreader_mark_mark=Mark error: +println.mdlreader_not_mark=did not mark +dialog.mdlreader_mark_read_write_will=Critical error: Read/write abilities lost. Loading will be severely damaged and disfunctional. +dialog.mdlreader_doubletostring_numeric=Major problems with numeric data. + +# craft3data/src/com/hiveworkshop/wc3/mdl/Normal +dialog.normal_parsetext_coordinates=Vertex coordinates could not be interpreted. + +# craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter +println.particleemitter_particleemitter_particle_emitter=MDX -> MDL error: A particle emitter ' +println.particleemitter_particleemitter_not_flagged=' not flagged as particle emitter in MDX! +println.particleemitter_particleemitter_special_emitter=Surprise! This model has a special emitter data point worthy of documenting! +println.particleemitter_particleemitter_unknown_type=WARNING in MDX -> MDL: ParticleEmitter of unknown type! Defaults to EmitterUsesTGA in my MDL code! +dialog.particleemitter_read_parse=Unable to parse ParticleEmitter: Missing or unrecognized open statement. +println.particleemitter_printto_objectid=\tObjectId +println.particleemitter_printto_parent=\tParent +println.particleemitter_printto_emitterusesmdl=\tEmitterUsesMDL, +println.particleemitter_printto_emitterusestga=\tEmitterUsesTGA, +println.particleemitter_printto_static=\tstatic +println.particleemitter_printto_particle=\tParticle +println.particleemitter_printto_path=\tPath +println.particleemitter_setvisibilityflag_overwrite=Some visiblity animation data was lost unexpectedly during overwrite in +println.particleemitter_getvisibilityflag_retrieval=Some visiblity animation data was lost unexpectedly during retrieval in + +# craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter2 +println.particleemitter2_particleemitter2_particle_emitter=MDX -> MDL error: A particle emitter ' +println.particleemitter2_particleemitter2_not_flagged=' not flagged as particle emitter in MDX! +println.particleemitter2_particleemitter2_filter=Unkown filter mode error +println.particleemitter2_particleemitter2_head_tail=Unkown head or tail error +dialog.particleemitter2_read_read=Read an object id! +dialog.particleemitter2_read_objectid_from=ObjectId from line: +dialog.particleemitter2_read_parent_from=Parent from line: +dialog.particleemitter2_read_segmentcolor_from=SegmentColor from line: +dialog.particleemitter2_read_from=from line: +dialog.particleemitter2_read_animflag_from=AnimFlag from line: +dialog.particleemitter2_read_recognize=Particle emitter 2 did not recognize data at: +dialog.particleemitter2_read_issue=\nThis is probably not a major issue? +dialog.particleemitter2_read_parse=Unable to parse ParticleEmitter2: Missing or unrecognized open statement. +println.particleemitter2_printto_objectid=\tObjectId +println.particleemitter2_printto_parent=\tParent +println.particleemitter2_printto_static=\tstatic +println.particleemitter2_printto_segmentcolor=\tSegmentColor +println.particleemitter2_printto_color=\tColor +println.particleemitter2_setvisibilityflag_overwrite=Some visiblity animation data was lost unexpectedly during overwrite in +println.particleemitter2_getvisibilityflag_retrieval=Some visiblity animation data was lost unexpectedly during retrieval in + +# craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitterPopcorn +dialog.particleemitterpopcorn_read_parse=Unable to parse ParticleEmitterPopcorn: Missing or unrecognized open statement. +println.particleemitterpopcorn_printto_objectid=\tObjectId +println.particleemitterpopcorn_printto_parent=\tParent +println.particleemitterpopcorn_printto_static_lifespan=\tstatic LifeSpan +println.particleemitterpopcorn_printto_static_emissionrate=\tstatic EmissionRate +println.particleemitterpopcorn_printto_static_speed=\tstatic Speed +println.particleemitterpopcorn_printto_static_color=\tstatic Color +println.particleemitterpopcorn_printto_static_alpha=\tstatic Alpha +println.particleemitterpopcorn_printto_replaceableid=\tReplaceableId +println.particleemitterpopcorn_printto_path=\tPath +println.particleemitterpopcorn_printto_animvisibilityguide=\tAnimVisibilityGuide +println.particleemitterpopcorn_setvisibilityflag_overwrite=Some visiblity animation data was lost unexpectedly during overwrite in +println.particleemitterpopcorn_getvisibilityflag_retrieval=Some visiblity animation data was lost unexpectedly during retrieval in + +# craft3data/src/com/hiveworkshop/wc3/mdl/QuaternionRotation +dialog.quaternionrotation_quaternionrotation_interpreted=QuaternionRotation coordinates could not be interpreted. +println.quaternionrotation_main_time=Time for a spin! + +# craft3data/src/com/hiveworkshop/wc3/mdl/RibbonEmitter +println.ribbonemitter_ribbonemitter_error=MDX -> MDL error: A ribbon emitter ' +println.ribbonemitter_ribbonemitter_not_flagged=' not flagged as ribbon emitter in MDX! +dialog.ribbonemitter_read_recognize=Ribbon emitter did not recognize data at: +dialog.ribbonemitter_read_major=\nThis is probably not a major issue? +dialog.ribbonemitter_read_parse=Unable to parse RibbonEmitter: Missing or unrecognized open statement. +println.ribbonemitter_printto_objectid=\tObjectId +println.ribbonemitter_printto_parent=\tParent +println.ribbonemitter_printto_static=\tstatic +dialog.ribbonemitter_setvisibilityflag_overwrite=Some visiblity animation data was lost unexpectedly during overwrite in +dialog.ribbonemitter_getvisibilityflag_retrieval=Some visiblity animation data was lost unexpectedly during retrieval in +println.ribbonemitter_add_error=ERROR: RibbonEmitter given unknown flag: + +# craft3data/src/com/hiveworkshop/wc3/mdl/Sequences +dialog.sequences_sequences_parse=Unable to parse sequences: Confused by anim opener line ' + +# craft3data/src/com/hiveworkshop/wc3/mdl/SoundEmitter +dialog.soundemitter_read_parse=Unable to parse SoundEmitter: Missing or unrecognized open statement. +println.soundemitter_printto_objectid=\tObjectId +println.soundemitter_printto_parent=\tParent +dialog.soundemitter_setvisibilityflag_overwrite=Some visiblity animation data was lost unexpectedly during overwrite in +dialog.soundemitter_getvisibilityflag_retrieval=Some visiblity animation data was lost unexpectedly during retrieval in +dialog.soundemitter_setsoundtrackglag_overwrite=Some SoundTrack animation data was lost unexpectedly during overwrite in +dialog.soundemitter_getsoundtrackglag_retrieval=Some SoundTrack animation data was lost unexpectedly during retrieval in + +# craft3data/src/com/hiveworkshop/wc3/mdl/SoundFile +dialog.soundfile_read_parse=Unable to parse SoundFile: Missing or unrecognized open statement. +println.soundfile_printto_soundfile=SoundFile +println.soundfile_printto_path=\tPath +println.soundfile_printto_volume=\tVolume +println.soundfile_printto_pitch=\tPitch +println.soundfile_printto_soundchannel=\tSoundChannel + +# craft3data/src/com/hiveworkshop/wc3/mdl/TextureAnim +dialog.textureanim_read_parse=Unable to parse TextureAnim: Missing or unrecognized open statement. + +# craft3data/src/com/hiveworkshop/wc3/mdl/Triangle +dialog.triangle_parsetext_interpret=Error: Unable to interpret information in Triangles: +dialog.triangle_parsetext_or=or +dialog.triangle_read_interpret=Error: Unable to interpret information in Triangles: +dialog.triangle_read_or=or + +# craft3data/src/com/hiveworkshop/wc3/mdl/TVertex +dialog.tvertex_parsetext_interpreted=Vertex coordinates could not be interpreted. + +# craft3data/src/com/hiveworkshop/wc3/mdl/UVLayer +println.uvlayer_printto_tvertices=TVertices + +# craft3data/src/com/hiveworkshop/wc3/mdl/Vertex +dialog.vertex_parsetext_interpreted=Vertex coordinates could not be interpreted. + +# craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryBtTModel +println.parseeverybttmodel_main_sync=SYNC POINT NONZERO: +println.parseeverybttmodel_main_in= in +println.parseeverybttmodel_main_parsed=parsed +println.parseeverybttmodel_main_successfully= successfully + +# craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryModel +println.parseeverymodel_main_parsed=parsed +println.parseeverymodel_main_successfully= successfully +println.parseeverymodel_main_max_was=Max was: + +# craft3data/src/com/hiveworkshop/wc3/mdx/AttachmentChunk +println.attachmentchunk_attachment_discarded=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/CameraChunk +exception.camerachunk_save_array_position=The array position needs either the length 3 or a multiple of this number. (got +exception.camerachunk_save_target_position=The array target position needs either the length 3 or a multiple of this number. (got +println.camerachunk_camera_discarded=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/CameraPositionTranslation +exception.camerapositiontranslation_save_array_translation=The array translation needs either the length 3 or a multiple of this number. (got +exception.camerapositiontranslation_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.camerapositiontranslation_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/CameraTargetTranslation +exception.cameratargettranslation_save_array_translation=The array translation needs either the length 3 or a multiple of this number. (got +exception.cameratargettranslation_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.cameratargettranslation_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/CollisionShapeChunk +exception.collisionshapechunk_array_vertexs=The array vertexs needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/CornChunk +println.cornchunk_particleemitterpopcorn_discarded=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/CornColor +exception.corncolor_save_array_color=The array color needs either the length 3 or a multiple of this number. (got +exception.corncolor_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.corncolor_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/FaceEffectsChunk +dialog.faceeffectschunk_read_parse=Unable to parse FaceEffect: Missing or unrecognized open statement. + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetAnimationChunk +exception.geosetanimationchunk_save_array_color=The array color needs either the length 3 or a multiple of this number. (got +println.geosetanimationchunk_geosetanimation_discarded=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetChunk +exception.gosetchunk_save_array_vertexpositions=The array vertexPositions needs either the length 3 or a multiple of this number. (got +exception.gosetchunk_save_array_vertexNormals=The array vertexNormals needs either the length 3 or a multiple of this number. (got +exception.gosetchunk_save_array_minimumextent=The array minimumExtent needs either the length 3 or a multiple of this number. (got +exception.gosetchunk_save_array_maximumextent=The array maximumExtent needs either the length 3 or a multiple of this number. (got +exception.gosetchunk_save_array_vertextexturepositions=The array vertexTexturePositions needs either the length 2 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetColor +exception.geosetcolor_save_array_color=The array color needs either the length 3 or a multiple of this number. (got +exception.geosetcolor_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.geosetcolor_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetRotation +exception.geosetrotation_save_array_rotation=The array rotation needs either the length 4 or a multiple of this number. (got +exception.geosetrotation_save_array_intan=The array inTan needs either the length 4 or a multiple of this number. (got +exception.geosetrotation_save_array_outtan=The array outTan needs either the length 4 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetScaling +exception.geosetscaling_save_array_scaling=The array scaling needs either the length 3 or a multiple of this number. (got +exception.geosetscaling_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.geosetscaling_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetTranslation +exception.geosettranslation_save_array_translation=The array translation needs either the length 3 or a multiple of this number. (got +exception.geosettranslation_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.geosettranslation_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/LayerChunk.java +println.layerchunk_load_parser=MDX1100 parser reached unexpected shader type ID: +exception.layerchunk_load_what=what? +exception.layerchunk_load_invalid=Invalid texture type index: +exception.layerchunk_load_loading=: you may be loading a model from a future version of War3 this was not built to handle. +exception.layerchunk_load_sourcecode=\n Editing the model editor's sourcecode can work around this if you really want to open this file. +println.layerchunk_layer_discarded_flag=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/LightAmbientColor +exception.lightambientcolor_save_array_ambientcolor=The array ambientColor needs either the length 3 or a multiple of this number. (got +exception.lightambientcolor_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.lightambientcolor_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/LightChunk +exception.lightchunk_save_array_color=The array color needs either the length 3 or a multiple of this number. (got +exception.lightchunk_save_array_ambientcolor=The array ambientColor needs either the length 3 or a multiple of this number. (got +println.lightchunk_light_discarded_flag=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/LightColor +exception.lightcolor_save_array_color=The array color needs either the length 3 or a multiple of this number. (got +exception.lightcolor_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.lightcolor_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/MaterialFresnelColor +exception.materialfresnelcolor_save_array_color=The array color needs either the length 3 or a multiple of this number. (got +exception.materialfresnelcolor_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.materialfresnelcolor_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/MdxUtils +exception.mdxutils_checkId_loading=Error loading model: CheckID failed, required +exception.mdxutils_checkId_found= found +exception.mdxutils_checkId_loading_check=Error loading model: CheckID failed after optinal check, required + +# craft3data/src/com/hiveworkshop/wc3/mdx/ModelChunk +println.modelchunk_load_know=He said he didn't know what this was: +println.modelchunk_load_possible= (possible loss of model data) +exception.modelchunk_save_array_minimumextent=The array minimumExtent needs either the length 3 or a multiple of this number. (got +exception.modelchunk_save_array_maximumextent=The array maximumExtent needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/Node +println.node_node_node=node discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitter2Chunk +exception.particleemitter2chunk_save_array_segmentcolor=The array segmentColor needs either the length 9 or a multiple of this number. (got +exception.particleemitter2chunk_save_array_segmentalpha=The array segmentAlpha needs either the length 3 or a multiple of this number. (got +exception.particleemitter2chunk_save_array_segmentscaling=The array segmentScaling needs either the length 3 or a multiple of this number. (got +println.particleemitter2chunk_particleemitter2_discarded_flag=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitterChunk +println.particleemitterchunk_particleemitter_discarded_flag=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/PivotPointChunk +exception.pivotpointchunk_save_array_pivotpoints=The array pivotPoints needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterChunk +exception.ribbonemitterchunk_save_array_color=The array color needs either the length 3 or a multiple of this number. (got +println.ribbonemitterchunk_ribbonemitter_discarded_flag=discarded flag + +# craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterColor +exception.ribbonemittercolor_save_array_color=The array color needs either the length 3 or a multiple of this number. (got +exception.ribbonemittercolor_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.ribbonemittercolor_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/SequenceChunk +exception.sequencechunk_save_array_minimumextent=The array minimumExtent needs either the length 3 or a multiple of this number. (got +exception.sequencechunk_save_array_maximumextent=The array maximumExtent needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/TextureRotation +exception.texturerotation_save_array_rotation=The array rotation needs either the length 4 or a multiple of this number. (got +exception.texturerotation_save_array_intan=The array inTan needs either the length 4 or a multiple of this number. (got +exception.texturerotation_save_array_outtan=The array outTan needs either the length 4 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/TextureScaling +exception.texturescaling_save_array_scaling=The array scaling needs either the length 3 or a multiple of this number. (got +exception.texturescaling_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.texturescaling_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/mdx/TextureTranslation +exception.texturetranslation_save_array_translation=The array translation needs either the length 3 or a multiple of this number. (got +exception.texturetranslation_save_array_intan=The array inTan needs either the length 3 or a multiple of this number. (got +exception.texturetranslation_save_array_outtan=The array outTan needs either the length 3 or a multiple of this number. (got + +# craft3data/src/com/hiveworkshop/wc3/units/objectdata/MutableObjectData +println.mutableobjectdata_mergechangset_merging=Merging +println.mutableobjectdata_mergechangset_for= for +println.mutableobjectdata_mutablegameobject_null=Parent object is null for +assertionerror.mutableobjectdata_mutablegameobject_null=parentWC3Object cannot be null +println.mutableobjectdata_setfield_reset=field was reset +println.mutableobjectdata_setfield_unmodified=field was unmodified +println.mutableobjectdata_setfield_change=field created change +exception.mutableobjectdata_getfieldasstring_requested=Requested string value of +exception.mutableobjectdata_getfieldasstring_from=from +exception.mutableobjectdata_getfieldasstring_vartype=but this field was not a string! vartype +exception.mutableobjectdata_getfieldstringfromslks_requested=Program requested +exception.mutableobjectdata_getfieldstringfromslks_from= from +exception.mutableobjectdata_getfieldstringfromslks_corrupted=corrupted unit, no parent unit id +exception.mutableobjectdata_getfieldasinteger_requested=Requested integer value of +exception.mutableobjectdata_getfieldasinteger_from=from +exception.mutableobjectdata_getfieldasinteger_vartype=but this field was not an int! vartype +exception.mutableobjectdata_getfieldasboolean_requested=Requested boolean value of +exception.mutableobjectdata_getfieldasboolean_from=from +exception.mutableobjectdata_getfieldasboolean_vartype=but this field was not a bool! vartype +exception.mutableobjectdata_getfieldasfloat_requested=Requested float value of +exception.mutableobjectdata_getfieldasfloat_from=from +exception.mutableobjectdata_getfieldasfloat_vartype=but this field was not a float! vartype + +# craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ID +println.war3id_fromString_metadata=Loaded custom data for the ability CURSE whose MetaData field, 'Crs', is the only 3 letter War3ID in the game. This might cause unexpected errors, so watch your % chance to miss in custom curse abilities carefully. +exception.war3id_fromString_war3id=A War3ID must be 4 ascii characters in length (got + +# craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ObjectDataChangeset +exception.war3objectdatachangeset_loadtable_screwed=the input stream might be screwed +println.war3objectdatachangeset_loadtable_zeroes=we seem to have reached the end of the stream and get zeroes +exception.war3objectdatachangeset_loadtable_custom_unit=custom unit has no ID! +exception.war3objectdatachangeset_save_generate=FAIL cannot generate WTS, needs more code +exception.war3objectdatachangeset_save_standard=Failed to save standard unit custom data +exception.war3objectdatachangeset_save_custom=Failed to save custom unit custom data + +# craft3data/src/com/hiveworkshop/wc3/units/DataTable +println.datatable_readtxt_null=null for +println.datatable_readslk_unusual=Formatting of SLK is unusual. +println.datatable_main_build= can build: +println.datatable_main_trains= trains: +println.datatable_main_upgrades= upgrades: +println.datatable_main_researches= researches: +println.datatable_main_stats= stats: +println.datatable_main_goldcost=goldcost +println.datatable_main_lumbercost=lumbercost +println.datatable_main_fmade=fmade + +# craft3data/src/com/hiveworkshop/wc3/units/ModelOptionPane +dialog.modeloptionpane_modeloptionpane_choose=Choose Model + +# craft3data/src/com/hiveworkshop/wc3/units/StandardObjectData +txt.standardobjectdata_warcraftdata_profile=Profile +txt.standardobjectdata_warcraftdata_unitabilities=UnitAbilities +txt.standardobjectdata_warcraftdata_unitbalance=UnitBalance +txt.standardobjectdata_warcraftdata_unitdata=UnitData +txt.standardobjectdata_warcraftdata_unitui=UnitUI +txt.standardobjectdata_warcraftdata_unitweapons=UnitWeapons +txt.standardobjectdata_warcraftdata_profileskin=ProfileSkin +txt.standardobjectdata_warcraftdata_itemdata=ItemData +txt.standardobjectdata_warcraftdata_doodaddata=DoodadData +txt.standardobjectdata_warcraftdata_abilitydata=AbilityData +txt.standardobjectdata_warcraftdata_upgradedata=UpgradeData +exception.standardobjectdata_setfield_no_field=no field + +# craft3data/src/com/hiveworkshop/wc3/units/UnitOptionPane +dialog.unitoptionpane_show_type=Choose Unit Type + +# craft3data/src/com/hiveworkshop/wc3/user/DirectorySelector +label.directoryselector_directoryselector_directory=Please select a valid Warcraft III game directory: +button.directoryselector_directoryselector_browse=Browse +dialog.directoryselector_directoryselector_permissions=You do not have permissions to access the chosen folder.\nYou should "Run as Administrator" on this program, or otherwise gain file permissions to the target folder, for the texture loader to work on that folder. +dialog.directoryselector_directoryselector_warning=WARNING: Texture-Loader Won't Work + +# craft3data/src/com/hiveworkshop/wc3/user/SaveProfile +dialog.saveprofile_testtargetfolderreadonly_find=Could not find war3.mpq. Please choose a valid Warcraft III installation. +dialog.saveprofile_testtargetfolderreadonly_needs=WARNING: Needs WC3 Installation + +# craft3data/src/de/wc3data/image/TgaFile +exception.tgafile_readtga_invalid_pixel_depth= invalid pixel depth: +exception.tgafile_readtga_not_enaugh_pixel_data= not enaugh pixel data + +# craft3data/src/de/wc3data/stream/StreamUtils +exception.streamutils_checkId_failed=Error loading model: CheckID failed, required +exception.streamutils_checkId_found= found +exception.streamutils_checkId_failed_optional= Error loading model: CheckID failed after optional check, required + +# craft3data/src/mpq/compression/pkware/PKExploder +exception.pkexploder_expand_pointing=distance pointing before output +exception.pkexploder_expand_compression=pkware ascii compression not supported +exception.pkexploder_expand_invalid=invalid compression mode +exception.pkexploder_explode_received=received bad data +exception.pkexploder_explode_dictionary=invalid dictionary size +exception.pkexploder_explode_compression=pkware ascii compression not supported +exception.pkexploder_explode_invalid=invalid compression mode +exception.pkexploder_explode_unexpected=unexpected end of data + +# craft3data/src/mpq/compression/Compression +exception.compression_blockdecompress3_unsupported=unsupported compression type +exception.compression_blockdecompress3_unknown=sector has unknown compression +exception.compression_blockdecompress2_unsupported=unsupported compression type +exception.compression_blockdecompress2_compression=sparse compression flag present in mpq version that lacked support +exception.compression_sectorexplode_explode=sector explode exception +exception.compression_sectorinflated_deflae=sector deflae exception +exception.compression_sectorhuffmanexpand_huffman=sector huffman expand exception +exception.compression_sectoradpcmreconstruct_adpcm=sector adpcm reconstruction exception +println.compression_blockexplode_decompression=pkware decompression exception: +println.compression_blockexplode_exploding=a block failed exploding +println.compression_blockdecompress_supported=strict compression flag mode not supported +exception.compression_blockdecompress_bzip2=unsupported compression type: BZIP2 +exception.compression_blockdecompress_pkware_decompression=failed PKWARE decompression +exception.compression_blockdecompress_zlib_decompression=failed ZLIB decompression +exception.compression_blockdecompress_sparse=unsupported compression type: SPARSE +exception.compression_blockdecompress_smaller=decompression result was smaller than expected +println.compression_blockdecompress_size=a sector passed decompression but failed to meet the expected size + +# craft3data/src/mpq/ArchivedFile +exception.archivedfile_invalid_block=invalid block: a block is both compressed and imploded +exception.archivedfile_loadoffsets_intersects=block sector intersects sector offset table +printf.archivedfile_loadoffsets_detached=block at %X has detached sectors starting at %X (%d bytes from end of sector table)%n +exception.archivedfile_loadoffsets_outside=block sector located outside channel +exception.archivedfile_loadoffsets_negative=block sector with negative size +printf.archivedfile_loadoffsets_supported=block sector CRC reading currently not supported + +# craft3data/src/mpq/ArchivedFileExtractor +println.archivedfileextractor_readblock_supported=block sector CRC validation currently not supported + +# craft3data/src/mpq/ArchivedFileStream +exception.archivedfilestream_position_negative=files cannot have a negative positon + +# craft3data/src/mpq/HashTable +exception.hashtable_lookupblock_found=lookup not found + +# craft3data/src/mpq/MPQArchive +exception.mqparchive_locatearchive_contain=channel does not contain a MPQ archive +exception.mqparchive_deserializehashtable_power=hashtable was not power of two ( was +println.mqparchive_deserializehashtable_expected=hashtable decompressed size did not match expected size +println.mqparchive_deserializeblocktable_large=blocktable is stupidly large +println.mqparchive_deserializeblocktable_clamped=so was clamped to +println.mqparchive_deserializeblocktable_expected=blocktable decompressed size did not match expected size +println.mqparchive_deserializeblocktable_high_expected=high blocktable decompressed size did not match expected size +println.mqparchive_loadarchive_supported=het and bet tables not supported + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/BetterUnitEditorModelSelector +panel.betteruniteditormodelselector_betteruniteditormodelselector_blank=blank +description.betteruniteditormodelselector_filltable_control=Allows the user to control which parts of the model are displayed for editing. +dialog.betteruniteditormodelselector_filltable_chosen=The chosen model could not be used. +dialog.betteruniteditormodelselector_filltable_error=Program Error + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/ObjectEditorModelingFrame +super.objecteditormodelingframe_objecteditormodelingframe_editor=Object Editor - Model Selection + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/UnitEditorModelSelector +panel.uniteditormodelselector_uniteditormodelselector_blank=blank +dialog.uniteditormodelselector_filltable_chosen=The chosen model could not be used. +dialog.uniteditormodelselector_filltable_error=Program Error + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FieldPopupUtils +dialog.fieldpopuputils_showconfirmdialog_edit=Unable to commit edit because: +println.fieldpopuputils_popupeditor_outside= on the outside + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/EditorFieldTransferHandler +println.editorfieldtransferhandler_importdata_unsupported=importData: unsupported data flavor +println.editorfieldtransferhandler_importdata_exception=importData: I/O exception +println.editorfieldtransferhandler_createtransferable_copy=failed to copy + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorFrame +super.objecteditorframe_objecteditorframe_editor=Object Editor +menu.objecteditorframe_objecteditorframe_file=File +menu.objecteditorframe_objecteditorframe_edit=Edit +menu.objecteditorframe_objecteditorframe_view=View +menu.objecteditorframe_objecteditorframe_module=Module +menu.objecteditorframe_objecteditorframe_window=Window + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorPanel +addtab.objecteditorpanel_objecteditorpanel_terrain=Terrain +addtab.objecteditorpanel_objecteditorpanel_lighting_effects=Lighting Effects +addtab.objecteditorpanel_objecteditorpanel_weather=Weather +addtab.objecteditorpanel_objecteditorpanel_soundsets=Soundsets +makebutton.objecteditorpanel_createtoolbar_newmap=newMap +makebutton.objecteditorpanel_createtoolbar_openmap=openMap +makebutton.objecteditorpanel_createtoolbar_savemap=saveMap +makebutton.objecteditorpanel_createtoolbar_copy=copy +makebutton.objecteditorpanel_createtoolbar_paste=paste +makebutton.objecteditorpanel_createtoolbar_createnew=createNew +makebutton.objecteditorpanel_createtoolbar_terraineditor=terrainEditor +makebutton.objecteditorpanel_createtoolbar_scripteditor=scriptEditor +makebutton.objecteditorpanel_createtoolbar_soundeditor=soundEditor +makebutton.objecteditorpanel_createtoolbar_campaigneditor=campaignEditor +makebutton.objecteditorpanel_createtoolbar_aieditor=aiEditor +makebutton.objecteditorpanel_createtoolbar_objecteditor=objectEditor +makebutton.objecteditorpanel_createtoolbar_importeditor=importEditor +makebutton.objecteditorpanel_createtoolbar_testmap=testMap +dialog.objecteditorpanel_savespecifictabdata_export=Export Data from this Tab +dialog.objecteditorpanel_savespecifictabdata_export_go=OK, friend, we are going to export +dialog.objecteditorpanel_savespecifictabdata_overwrite= already exists. Ok to overwrite? +dialog.objecteditorpanel_openspecifictabdata_export=Import Data to this Tab +dialog.objecteditorpanel_openspecifictabdata_export_go=OK, friend, we are going to import +dialog.objecteditorpanel_openspecifictabdata_replace=. This will replace all settings, like WE. +dialog.objecteditorpanel_openspecifictabdata_error=Error. Chosen file did not exist. Retry? + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectTabTreeBrowserTransferHandler +println.objecttabtreebrowsertransferhandler_importdata_unsupported=importData: unsupported data flavor +println.objecttabtreebrowsertransferhandler_importdata_exception=importData: I/O exception +println.objecttabtreebrowsertransferhandler_createtransferable_copy=failed to copy + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorPanel +add.uniteditopanel_uniteditopanel_storm_bolt=Storm Bolt +add.uniteditopanel_uniteditopanel_local_variables=Local Variables +add.uniteditopanel_uniteditopanel_local_level=LocalLevel +add.uniteditopanel_uniteditopanel_local_duration=LocalDuration +add.uniteditopanel_uniteditopanel_local_buff_type=LocalBuffType +add.uniteditopanel_uniteditopanel_on_learn_actions=On Learn - Actions +add.uniteditopanel_uniteditopanel_set_local_level_triggering_unit=Set LocalLevel = (Level of (This ability) for (Triggering unit)) +add.uniteditopanel_uniteditopanel_command_card_add_icon=Command Card - Add a (Unit target) command card icon for (This ability) using ((Ability: (This ability)'s Integer Field: Button Position - Normal (X) ('abpx')), (Ability: (This ability)'s Integer Field: Button Position - Normal (Y) ('abpy'))) +add.uniteditopanel_uniteditopanel_command_card_set_icon=Command Card - Set the icon of (Last created Command Card Icon) to (Icon of (This ability)) +add.uniteditopanel_uniteditopanel_command_card_set_mana_cost=Command Card - Set the Mana Cost of (Last created Command Card Icon) to (Ability: (This ability)'s Integer Level Field Mana Cost ('amcs'), of Level: LocalLevel) +add.uniteditopanel_uniteditopanel_command_card_set_cooldown=Command Card - Set the Cooldown of (Last created Command Card Icon) to (Ability: (This ability)'s Real Level Field Cooldown ('acdn'), of Level: LocalLevel) +add.uniteditopanel_uniteditopanel_on_cast_actions=On Cast - Actions +add.uniteditopanel_uniteditopanel_set_local_level=Set LocalLevel = (Level of (This ability) for (Casting unit)) +add.uniteditopanel_uniteditopanel_create_missile=Missile - Create an initially unlaunched missile at (Position of (Casting unit)) with Z height 0.00 that will home in on (Target unit of ability being cast) above its head at Z height 0.00 +add.uniteditopanel_uniteditopanel_model_missile=Missile - Change the model file of (Last created missile) to be (Art path of (This ability) Missile Art (index 0)) +add.uniteditopanel_uniteditopanel_owner_missile=Missile - Change the owner of (Last created missile) to be (Owner of (Casting unit)) +add.uniteditopanel_uniteditopanel_launch_missile=Missile - Launch (Last created missile) with a speed of (Ability: (This ability)'s Integer Field: Missile Speed ('amsp')) and arc of (Ability: (This ability)'s Real Field: Missile Arc ('amac')) +add.uniteditopanel_uniteditopanel_damage_unit=Unit - Cause (Casting unit) to damage (Target unit of ability being cast), dealing (Ability: (This ability)'s Real Level Field Damage ('Htb1'), of Level: LocalLevel) damage of attack type Spells and damage type Normal +add.uniteditopanel_uniteditopanel_set_local_buff_type=Set LocalBuffType = (Ability: (This ability)'s Buff Level Field Buffs ('abuf'), of Level: LocalLevel) +add.uniteditopanel_uniteditopanel_conditions=If (All Conditions are True) then do (Then Actions) else do (Else Actions) +add.uniteditopanel_uniteditopanel_if=If - Conditions +add.uniteditopanel_uniteditopanel_hero_equal_true=((Target unit of ability being cast) is A Hero) Equal to True +add.uniteditopanel_uniteditopanel_then=Then - Actions +add.uniteditopanel_uniteditopanel_set_localduration_hero=Set LocalDuration = (Ability: (This ability)'s Real Level Field Duration - Hero ('ahdu'), of Level: LocalLevel) +add.uniteditopanel_uniteditopanel_else=Else - Actions +add.uniteditopanel_uniteditopanel_set_localduration_normal=Set LocalDuration = (Ability: (This ability)'s Real Level Field Duration - Normal ('adur'), of Level: LocalLevel) +add.uniteditopanel_uniteditopanel_local_buff_type_greater=(Level of LocalBuffType for (Target unit of ability being cast)) Greater than 0 +add.uniteditopanel_uniteditopanel_buff_duration=Buff - Add LocalDuration to the duration for (Buff of (Target unit of ability being cast) of type LocalBuffType and ability type (This ability)) +add.uniteditopanel_uniteditopanel_buff_new=Buff - Apply a new buff with Level: LocalLevel to (Target unit of ability being cast) of type LocalBuffType +add.uniteditopanel_uniteditopanel_buff_remaining_duration=Buff - Set the remaining duration for (Last applied buff) to LocalDuration +add.uniteditopanel_uniteditopanel_buff_applied_actions=On Buff Applied - Actions +add.uniteditopanel_uniteditopanel_set_local_level_buffed=Set LocalLevel = (Level of (This ability) for (Buffed unit)) +add.uniteditopanel_uniteditopanel_stun_buffed=Stun (Buffed unit) +add.uniteditopanel_uniteditopanel_buff_removed_actions=On Buff Removed - Actions +add.uniteditopanel_uniteditopanel_unstun_buffed=Unstun (Buffed unit) +addtab.uniteditopanel_uniteditopanel_stats=Stats +addtab.uniteditopanel_uniteditopanel_behavior=Behavior +println.uniteditopanel_uniteditopanel_categories=categoriesChanged( +println.uniteditopanel_uniteditopanel_found=Changed node was not found + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorTreeBrowser +menuitem.uniteditortreebrowser_uniteditortreebrowser_open=Open +menuitem.uniteditortreebrowser_uniteditortreebrowser_open_portrait=Open Portrait +menuitem.uniteditortreebrowser_uniteditortreebrowser_extract=Extract + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/gui/TriggerTree +exception.triggertree_createtrigger_cannot_create_at=Cannot create trigger at selection +exception.triggertree_createtrigger_cannot__create_with=Cannot create trigger with selection +exception.triggertree_triggerelementtreenode_copy=unable to copy: +println.triggertree_importdata_unsupported=UnsupportedFlavor: +println.triggertree_importdata_error=I/O error: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/impl/TriggerEnvironment +exception.triggerenvironment_createtrigger_invalid=creating trigger in invalid category! + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerEditor +makebutton.triggereditor_triggereditor_newmap=newMap +makebutton.triggereditor_triggereditor_openmap=openMap +makebutton.triggereditor_triggereditor_savemap=saveMap +dialog.triggereditor_triggereditor_savemap=Save Map +makebutton.triggereditor_triggereditor_copy=copy +makebutton.triggereditor_triggereditor_paste=paste +makebutton.triggereditor_triggereditor_createnewcategory=createNewCategory +makebutton.triggereditor_triggereditor_createnewtrigger=createNewTrigger +makebutton.triggereditor_triggereditor_createnewtriggercomment=createNewTriggerComment +makebutton.triggereditor_triggereditor_terraineditor=terrainEditor +makebutton.triggereditor_triggereditor_soundeditor=soundEditor +makebutton.triggereditor_triggereditor_objecteditor=objectEditor +makebutton.triggereditor_triggereditor_campaigneditor=campaignEditor +makebutton.triggereditor_triggereditor_aieditor=aiEditor +makebutton.triggereditor_triggereditor_importeditor=importEditor +makebutton.triggereditor_triggereditor_testmap=testMap +frame.triggereditor_main_trigger_editor=Trigger Editor + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerTreeCellRenderer +println.triggertreecellrenderer_component_gettreecellrenderercomponent=getTreeCellRendererComponent +println.triggertreecellrenderer_component_leaf_map=leaf is MAP +println.triggertreecellrenderer_component_leaf_comment=leaf is COMMENT +println.triggertreecellrenderer_component_leaf_trigger=leaf is TRIGGER +println.triggertreecellrenderer_component_leaf_category=leaf is CATEGORY +println.triggertreecellrenderer_component_leaf_state_corruption=leaf is STATE CORRUPTION + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AiBuffer +exception.aibuffer_fromcodename_exist=AiBuffer does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ArmorType +exception.armortype_fromcodename_exist=ArmorType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackBits +exception.attackbits_fromcodename_exist=AttackBits does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackType +exception.attacktype_fromcodename_exist=AttackType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttributeType +exception.attributetype_fromcodename_exist=AttributeType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelFlags +exception.channelflags_fromcodename_exist=ChannelFlags does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelType +exception.channeltype_fromcodename_exist=ChannelType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/CombatSound +exception.combatSound_fromcodename_exist=CombatSound does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DeathType +exception.deathType_fromcodename_exist=DeathType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseType +exception.defensetype_fromcodename_exist=DefenseType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseTypeInt +exception.defensetypeint_fromcodename_exist=DefenseTypeInt does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DetectionType +exception.detectiontype_fromcodename_exist=DetectionType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/FullFlags +exception.fullflags_fromcodename_exist=FullFlags does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/InteractionFlags +exception.interactionflags_fromcodename_exist=InteractionFlags does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ItemClass +exception.itemclass_fromcodename_exist=ItemClass does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/LightningEffect +exception.lightningeffect_fromcodename_exist=LightningEffect does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MorphFlags +exception.morphflags_fromcodename_exist=MorphFlags does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MoveType +exception.movetype_fromcodename_exist=MoveType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListPrevent +exception.pathinglistprevent_fromcodename_exist=PathingListPrevent does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListRequire +exception.pathinglistrequire_fromcodename_exist=PathingListRequire does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PickFlags +exception.pickflags_fromcodename_exist=PickFlags does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/RegenType +exception.regentype_fromcodename_exist=RegenType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ShadowImage +exception.shadowimage_fromcodename_exist=ShadowImage does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SilenceFlags +exception.silenceflags_fromcodename_exist=SilenceFlags does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SpellDetail +exception.spelldetail_fromcodename_exist=SpellDetail does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/StackFlags +exception.stackflags_fromcodename_exist=StackFlags does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetList +exception.targetlist_fromcodename_exist=TargetList does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetType +exception.targettype_fromcodename_exist=TargetType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TeamColor +exception.teamcolor_fromcodename_exist=TeamColor does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TechAvail +exception.techavail_fromcodename_exist=TechAvail does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitClass +exception.unitclass_fromcodename_exist=UnitClass does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitRace +exception.unitrace_fromcodename_exist=UnitRace does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeClass +exception.upgradeclass_fromcodename_exist=UpgradeClass does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeEffect +exception.upgradeeffect_fromcodename_exist=UpgradeEffect does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/VersionFlags +exception.versionflags_fromcodename_exist=VersionFlags does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/WeaponType +exception.weapontype_fromcodename_exist=WeaponType does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/meta/Category +exception.category_fromcodename_exist=Category does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/Tileset +exception.tileset_fromcodename_exist=TileSet does not exist: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/GoodSLKEdit +exception.goodslkedit_goodslkedit_slk=SLK Files of Warcraft +frame.goodslkedit_goodslkedit_slk=Good SLK Edit +menu.goodslkedit_goodslkedit_file=File +menu.goodslkedit_goodslkedit_open=Open + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/TestMain +layer.testmain_main_none=None \ No newline at end of file diff --git a/localizationmanager/src/hiveworkshop/localizationmanager/lang/zh_CN.properties b/localizationmanager/src/hiveworkshop/localizationmanager/lang/zh_CN.properties new file mode 100644 index 000000000..18053991b --- /dev/null +++ b/localizationmanager/src/hiveworkshop/localizationmanager/lang/zh_CN.properties @@ -0,0 +1,3341 @@ +# Global +global.button.ok=确定 +global.button.cancel=取消 +global.dialog.error=错误 +global.dialog.message=消息 +global.dialog.warning=警告 +global.button.close=关闭 +global.button.close_other=关闭其他 +global.button.close_all=关闭全部 +global.button.success=成功 +global.button.confirmation=确认 +global.button.exit=退出 +global.button.ignore=忽略 +global.button.delete=删除 +global.button.overwrite=覆盖 +global.button.question=疑问 +global.button.finish=完成 +global.button.yes=是 +global.button.no=否 +global.button.confirmation=确认 +global.button.accept=接受 + +# matrixeater/src/com/ysera +# matrixeater/src/com/ysera.Menu +ysera.app.title=Ysera 魔兽争霸 3 模型编辑器(预览) +ysera.menu.file=文件 +ysera.menu.recent_files=最近文件 +ysera.menu.edit=编辑 +ysera.menu.view=视图 +ysera.menu.team_color=队伍颜色 +ysera.menu.windows=窗口 +ysera.menu.extras=平铺 +ysera.menu.help=帮助 + +# matrixeater/src/com/matrixeater/MainPanel +matrixeater.menu.file=文件 +matrixeater.menu.edit=编辑 +matrixeater.menu.open_recent=最近打开 +matrixeater.menu.open_recent_description=允许访问最近打开的文件。 +matrixeater.menu.file_description=允许打开、保存、关闭和操作文件。 +matrixeater.menu.tools=工具 +matrixeater.menu.reset_layout=重置布局 +matrixeater.menu.views=视图 +matrixeater.menu.team_color=队伍颜色 +matrixeater.menu.test=测试 +matrixeater.menu.animation_preview=动画预览 +matrixeater.menu.animation_controller=动画控制器 +matrixeater.menu.camera_controller=相机控制器 +matrixeater.menu.modeling=建模 +matrixeater.menu.tools_description=工具和实用程序 +matrixeater.menu.view=视图 +matrixeater.menu.view_description=允许控制视图设置。 +matrixeater.menu.team_color_description=允许控制队伍颜色设置。 +matrixeater.menu.window=窗口 +matrixeater.menu.window_description=允许打开包含程序功能的各种窗口。 +matrixeater.menu.about=帮助 +matrixeater.menu.clear=清除 +matrixeater.menuitem.changelog=更新日志 +matrixeater.menuitem.about=关于 +matrixeater.menu.language=语言 +matrixeater.menuitem.language.en=英语 +matrixeater.menuitem.language.zh_CN=简体中文 +matrixeater.menu.outliner=大纲视图 +matrixeater.menu.perspective=透视图 +matrixeater.menu.front=前视图 +matrixeater.menu.side=侧视图 +matrixeater.menu.bottom=底视图 +matrixeater.menu.tools_item=工具 +matrixeater.menu.footer=页脚 +matrixeater.menu.tracks=轨道 +matrixeater.menu.contents=内容 +matrixeater.menu.component=组件 +matrixeater.menu.text=文本 +matrixeater.menu.matrix_eater_script=矩阵脚本(Eater) +matrixeater.menu.export_animated_frame_png=导出动画帧(PNG) +matrixeater.menu.browsers=浏览 +matrixeater.menuitem.data_browser=数据 +matrixeater.menuitem.unit_browser=单位 +matrixeater.menuitem.doodad_browser=地表装饰物 +matrixeater.menuitem.hive_browser=蜂房 +matrixeater.menu.add=添加 +matrixeater.menuitem.add=允许向模型添加新组件。 +matrixeater.menu.particle=粒子 +matrixeater.menu.animation=动画 +matrixeater.menu.ris_fall_bir_dea=上升/下降 诞生/消亡 +matrixeater.menu.single=单独 +matrixeater.menu.from_file=源自文件 +matrixeater.menu.from_unit=源自单位 +matrixeater.menu.from_model=源自模型 +matrixeater.menu.from_object=源自对象 +matrixeater.menu.scripts=脚本 +matrixeater.menu.scripts_description=允许执行模型编辑脚本。 +matrixeater.menuitem.oinkerwinkle_animtransfer=动画转移(Oinkerwinkle 风格) +matrixeater.menuitem.merge_geoset=合并几何体 +matrixeater.menuitem.nullmodel=编辑/删除模型组件 +matrixeater.menuitem.exportanimated=导出动画为静态网格 +matrixeater.menuitem.combineanims=创建连续动画 +matrixeater.menuitem.scaleanimations=缩放动画长度 +matrixeater.menuitem.version800=分配格式版本 800 +matrixeater.menuitem.version1000=分配格式版本 1000 +matrixeater.menuitem.hditem=标清 转 高清(高度实验性,需 900 或 1000) +matrixeater.menuitem.version800editing=高清 转 标清(使用旧代码,变为 800) +matrixeater.menuitem.version800baking=高清 转 标清(烘焙贴图,变为 800) +matrixeater.menuitem.recalculatetangents=重新计算切线(需 900、1000、1100 或 1200) +matrixeater.menuitem.skinsplicefromfile=源自文件 +matrixeater.menuitem.skinsplicefromworkspace=源自工作区 +matrixeater.menuitem.skinsplicefrommodel=源自模型 +matrixeater.menuitem.skinsplicefromunit=源自单位 +matrixeater.menu.skinsplice=将皮肤网格拼接到当前模型 +matrixeater.menu.removeall3d=移除所有 3D +matrixeater.menu.fordarkfang=从 Darkfang +matrixeater.menuitem.selecthdunused=选择未使用高清骨骼 +matrixeater.menuitem.deletedown=删除首个之外的所有顶点图层 +matrixeater.menuitem.relinkbone=重新链接骨骼 (如 RF 武器) +matrixeater.menuitem.deletelods=删除细节层次 +matrixeater.menuitem.jokebutton=加载 Retera Land +matrixeater.menuitem.fixreteraLand=修复 Retera Land +matrixeater.menuitem.showmatrices=查看选中 “矩阵” +matrixeater.menuitem.insideout=翻转选中面 +matrixeater.menuitem.insideoutnormals=翻转选中法线 +matrixeater.menuitem.edituvs=编辑 UV 映射 +matrixeater.menuitem.edittextures=编辑贴图 +matrixeater.menuitem.rigbutton=装备选择 +matrixeater.menu.tweakssubmenu=调整 +matrixeater.menu.tweakssubmenu_description=允许调整转换错误。 +matrixeater.menuitem.flipalluvsu=翻转所有 UVs U +matrixeater.menuitem.flipalluvsv=翻转所有 UVs V +matrixeater.menuitem.swapalluvsvu=交换所有 UVs V 和 U +matrixeater.menu.mirror=镜像 +matrixeater.menu.mirror_description=允许镜像对象。 +matrixeater.menuitem.mirrorx=X轴镜像 +matrixeater.menuitem.mirrory=Y轴镜像 +matrixeater.menuitem.mirrorz=Z轴镜像 +matrixeater.menuitem.mirrorflip=自动镜像翻转(保持表面) +matrixeater.menuitem.texturemodels=贴图模型 +matrixeater.menuitem.newdirectory=更改游戏目录 +matrixeater.menuitem.showvertexmodifycontrols=显示视图按钮 +matrixeater.menuitem.shownormals=显示法线 +matrixeater.menu.viewmode=3D视图模式 +matrixeater.menuitem.wireframe=线框 +matrixeater.menuitem.solid=实体 +matrixeater.menuitem.newmodel=新建 +matrixeater.menuitem.open=打开 +matrixeater.menu.fetch=打开文件 +matrixeater.menuitem.fetchunit=单位 +matrixeater.menuitem.fetchmodel=模型 +matrixeater.menuitem.fetchobject=对象 +matrixeater.menu.recentfetch=最近打开的文件 +matrixeater.menu.recentfetch_description=允许访问最近打开的文件。 +matrixeater.menuitem.clearrecent=清除最近记录 +matrixeater.menuitem.fetchportraits=同时打开肖像! +matrixeater.menu.import=导入 +matrixeater.menuitem.import_from_file=源自文件 +matrixeater.menuitem.import_from_unit=源自单位 +matrixeater.menuitem.import_from_wc3_model=源自 WC3 模型 +matrixeater.menuitem.import_from_object=源自对象 +matrixeater.menuitem.import_from_workspace=源自工作区 +matrixeater.menuitem.save=保存 +matrixeater.menuitem.saveas=另存为 +matrixeater.menuitem.exporttexture=导出贴图 +matrixeater.menuitem.revert=还原 +matrixeater.menuitem.undo=撤销 +matrixeater.menuitem.redo=重做 +matrixeater.menu.optimize=优化 +matrixeater.menuitem.linearizeanimations=连贯动画 +matrixeater.menuitem.simplifykeyframes=简化关键帧(实验性) +matrixeater.menuitem.minimize_geosets=最小化 Geosets +matrixeater.animflag.color=颜色 +matrixeater.menuitem.sortbones=骨骼排序 +matrixeater.menuitem.flushunusedtexture=清除未使用贴图 +matrixeater.menuitem.recalcnormals=重新计算法线 +matrixeater.menuitem.recalcextents=重新计算范围 +matrixeater.menuitem.cut=剪切 +matrixeater.menuitem.copy=复制 +matrixeater.menuitem.paste=粘贴 +matrixeater.menuitem.duplicateselection=重复 +matrixeater.menuitem.snapvertices=吸附顶点 +matrixeater.menuitem.snapnormals=吸附法线 +matrixeater.menuitem.selectall=全选 +matrixeater.menuitem.invertselection=反选 +matrixeater.menuitem.expandselection=扩大选择 +matrixeater.menuitem.deletebutton=删除 +matrixeater.menuitem.preferenceswindow=设置 +matrixeater.menuitem.import_description=允许控制模型的可编辑部分。 +matrixeater.menuitem.fetchedobject_portrait=_肖像 +matrixeater.menuitem.fetchedobject_description=允许控制对象的可编辑部分。 +matrixeater.menuitem.fetchedmodel_description=允许控制模型的可编辑部分。 +matrixeater.menuitem.fetchedunit_description=允许控制单位的可编辑部分。 +matrixeater.menuitem.fetcheddoodad_description=允许控制地表装饰物的可编辑部分。 +matrixeater.menuitem.updaterecent_description=允许更新最近打开的文件列表。 +matrixeater.menuitem.recentfetches_unit_description=允许控制最近打开的单位的可编辑部分。 +matrixeater.menuitem.recentfetches_model_description=允许控制最近打开的模型的可编辑部分。 +matrixeater.menuitem.recentfetches_object_description=允许控制最近打开的对象的可编辑部分。 +matrixeater.menuitem.recentfetches_doodad_description=允许控制最近打开的地表装饰物的可编辑部分。 +matrixeater.menuitem.recentfetches_mqpmdx_description=允许控制最近打开的 MPQ MDX 的可编辑部分。 +matrixeater.menuitem.recentfetches_mqpblp_description=允许控制最近打开的 MPQ BLP 的可编辑部分。 +matrixeater.menuitem.recentfetches_mqpdds_description=允许控制最近打开的 MPQ DDS 的可编辑部分。 +matrixeater.menuitem.undomenuitem_do=撤销 +matrixeater.menuitem.undomenuitem_notdo=无法撤销 +matrixeater.menuitem.redomenuitem_do=重做 +matrixeater.menuitem.redomenuitem_notdo=无法重做 + +matrixeater.stockFiles.parent=父级: +matrixeater.stockFiles.add=添加 +matrixeater.stockFiles.particle_name=粒子名: + +matrixeater.frame.animationtransferer=动画转移器 + +matrixeater.println.rigAction=无装备,无效 +matrixeater.println.putting=推送 +matrixeater.println.numuvlayers= 放入超赞的 + +matrixeater.button.chooseanimations=选择何时显示! +matrixeater.button.color=颜色 +matrixeater.button.visibility=可见性 +matrixeater.button.refresh=刷新 +matrixeater.button.apply=应用 +matrixeater.button.find_f3=查找 (F3) +matrixeater.button.animation=动画 + +matrixeater.label.calculate_extents.prompt=确定要计算所有模型组件的范围? +matrixeater.label.calculate_extents.wrap=限制 +matrixeater.label.calculate_extents.warning=(可能会破坏现有范围) +matrixeater.label.calculate_extents.all_geosets=计算时考虑所有几何体 +matrixeater.label.calculate_extents.current_geosets=计算时仅考虑当前可编辑的几何体进行 + +matrixeater.title.lefthandtab=编辑 +matrixeater.title.viewing=视图 +matrixeater.title.model=模型 + +matrixeater.tab.view_unit_browser=单位 +matrixeater.tab.view_data_browser=数据 + +matrixeater.toobar.new=新建 +matrixeater.toobar.open=打开 +matrixeater.toobar.save=保存 +matrixeater.toobar.undo=撤销 +matrixeater.toobar.redo=重做 +matrixeater.toobar.select_and_move=选择并移动 +matrixeater.toobar.select_and_rotate=选择并旋转 +matrixeater.toobar.select_and_scale=选择并缩放 +matrixeater.toobar.select_and_extrude=选择并拉伸 +matrixeater.toobar.select_and_extend=选择并平铺 +matrixeater.toobar.snap=吸附 + +matrixeater.tooltip.create_keyframe=创建关键帧 +matrixeater.tooltip.choose_time_bounds=选择时间边界 +matrixeater.tooltip.change_game_directory=更改用于加载 3D 显示贴图文件的目录。 + +matrixeater.dialog.matrixeaterscripttextarea=必须打开一个文件! +matrixeater.filefilter_mdx=魔兽3模型 '-.mdx' +matrixeater.filefilter_blp=魔兽3纹理 '-.blp' +matrixeater.filefilter_png=PNG 图片 '-.png' +matrixeater.filefilter_obj=OBJ 文件 '-.obj' +matrixeater.dialog.export_texture=导出贴图 +matrixeater.dialog.image_file= 图片文件 +matrixeater.dialog.addtoolbar_choose=选择设置 +matrixeater.dialog.addtoolbar_tp_settings=T型姿势设置 +matrixeater.dialog.ethorizontalgroup.add=添加 +matrixeater.dialog.suggestedname=未指定导入文件 +matrixeater.dialog.change_language=变更语言 +matrixeater.dialog.change_language_text=立即重启以生效?\n\n如果程序没有重启,请手动运行。 +matrixeater.dialog.color_chooser=选择颜色 +matrixeater.dialog.openpreferencesaction=设置 +matrixeater.dialog.openmodelfile=请打开模型文件 +matrixeater.dialog.settime=时间范围 +matrixeater.dialog.exportanimated=该功能只能在动画编辑器中使用! +matrixeater.dialog.snapshotmodel=导出静态快照 +matrixeater.dialog.exporttexture=警告: Alpha 通道已改为黑色。\n转成 BLP 将丢失部分数据。 +matrixeater.dialog.exporttexture.file_type_unknown=文件类型未知或不可用 +matrixeater.dialog.exporttexture.no_file_type=未指定文件类型 +matrixeater.dialog.exporttexture.no_output_file=未指定输出文件 +matrixeater.dialog.combineanims.pick_one=选择第一动画 +matrixeater.dialog.combineanims.choose_one=选择第一动画 +matrixeater.dialog.combineanims.pick_two=选择第二动画 +matrixeater.dialog.combineanims.choose_two=选择第二动画 +matrixeater.dialog.combineanims.call=合并动画名称? +matrixeater.dialog.combineanims.called=已创建名为 %s 的合并动画! +matrixeater.dialog.skinsplicefromworkspace=选择一个工作区以导入数据: +matrixeater.dialog.skinsplicefromworkspace_import=从工作区导入 +matrixeater.dialog.deletedown_userresult=确定要删除首个之外的所有顶点图层?\n删除有助于在 Magos War3ModelEditor 打开文件,\n如果软件故障添加了额外图层,部分文件可能会丢失细节。\n\n此操作仅适用于所选顶点。 +matrixeater.dialog.relinkbone_choose=选择父节点 +matrixeater.dialog.relinkbone_set=设置父节点 +matrixeater.dialog.minimize_geosets=实验性功能,尚未编写撤销选项。是否继续?\n建议先点击取消并保存一次。 +matrixeater.dialog.import=导入 +matrixeater.dialog.importfromworkspace=选择导入数据的工作区: +matrixeater.dialog.importfromworkspace_import=从工作区导入 +matrixeater.dialog.mergegeoset=合并单一几何体 (Oinker 风格) +matrixeater.dialog.geosetinto=导入几何体: (1 到 +matrixeater.dialog.geosetimport=导入几何体: (1 到 +matrixeater.dialog.yes_no=确定要清除最近的记录吗? +matrixeater.dialog.yes_no_confirm=确认 +matrixeater.dialog.linearizeanimations=该过程会丢失部分模型数据且不可逆,但压缩模型文件大小。\n\n是否继续并简化动画? +matrixeater.dialog.linearizeanimations_warn=警告: 连贯动画 +matrixeater.dialog.simplifykeyframes=该过程会丢失部分模型数据且不可逆,但压缩模型文件大小。\n\n是否继续并简化关键帧? +matrixeater.dialog.simplifykeyframes_warn=警告: 简化关键帧 +matrixeater.dialog.risefallbirth=这将永久修改模型。确定修改? +matrixeater.dialog.oldbirth=birth已存在。如何处理? +matrixeater.dialog.olddeath=death已存在。如何处理? +matrixeater.dialog.animfromfile=动画来源 +matrixeater.dialog.done=完成! +matrixeater.dialog.clicksaveas=所选文件已存在。 +matrixeater.dialog.clicksaveas_warn=警告 +matrixeater.dialog.clicksaveas_notselect=尝试保存,但未选择文件。 +matrixeater.dialog.clickopen=打开 +matrixeater.dialog.openfile=打开命令失败: +matrixeater.dialog.openfileproblem=文件打开异常: +matrixeater.dialog.fetchunit=所选模型无法使用. +matrixeater.dialog.fetchunit_error=错误 +matrixeater.dialog.modeloptionpane=所选模型无法使用. +matrixeater.dialog.modeloptionpane_error=错误 +matrixeater.dialog.fetchobject=对象 - 选择单位 +matrixeater.dialog.fetchobject_notuse=所选模型无法使用. +matrixeater.dialog.fetchobject_error=错误 +matrixeater.dialog.addsingleanimation_choose=选择动画! +matrixeater.dialog.addsingleanimation_add=添加动画 +matrixeater.dialog.addsingleanimation_copy=复制该模型哪个动画的可见性? +matrixeater.dialog.addsingleanimation_no_visibility=不会复制可见性。 +matrixeater.dialog.addsingleanimation_added=已添加 +matrixeater.dialog.addsingleanimation_s=的 +matrixeater.dialog.addsingleanimation_with= 与 +matrixeater.dialog.addsingleanimation_ok= 的可见性 确定! +matrixeater.dialog.addsingleanimation_no_animation=选择无效。未添加动画。 +matrixeater.dialog.nullmodelfile_bad=损坏 +matrixeater.dialog.nullmodelfile_good=好 +matrixeater.dialog.parsetriangles_erroe=错误:无法解析几何体: +matrixeater.dialog.parsetriangles_or=, 或 +matrixeater.dialog.filehandler=未指定文件类型 +matrixeater.dialog.filehandler_output=未指定输出文件 +matrixeater.dialog.mdlEditorfindnext=文档搜索完毕,要从头搜索吗? +matrixeater.dialog.mdlEditorfindnext_find=是 +matrixeater.dialog.selectionttemtypegroup_linked=移动链接 +matrixeater.dialog.selectionttemtypegroup_single=移动单一 + +matrixeater.settext.modelcontextmanager_empty=// 空 +matrixeater.settext.modelcontextmanager_refresh=// 点击 “刷新” 以填充此 UI。\n// 如果想自动填充此视图,请前往设置(可能会降低性能)。 + +matrixeater.tostring.relinkbone=(无父级) + +matrixeater.warnings.newgeosets=无法替换: + +matrixeater.exception.skinsplicefrommodel=读取 mdx 失败 +matrixeater.exception.skinsplicefromunit=读取 mdx 失败 +matrixeater.exception.newgeosets=无法替换: +matrixeater.exception.save_as=另存为 +matrixeater.exception.clicksaveas=尚未保存编码对象。 +matrixeater.exception.recentfetches=意外的值: +matrixeater.exception.loadfile_notfound=读取 mdx 失败 +matrixeater.exception.loadfile=读取 mdx 失败 +matrixeater.exception.loadstreammdx_notfound=读取 mdx 失败 +matrixeater.exception.loadstreammdx=读取 mdx 失败 +matrixeater.exception.openfile=允许控制模型的可编辑部分。 + +matrixeater.display.nullmodelfile_getparentframe=MatrixEater 检测到 Java 的 wait 函数出错 +matrixeater.display.nullmodelfile_importstarted=MatrixEater 检测到 Java 的 wait 函数出错 + +matrixeater.window.openunitvieweraction=单位 +matrixeater.window.opendoodadvieweraction=MPQ +matrixeater.view.opendoodadvieweraction=地表装饰物 +matrixeater.label.openhivevieweraction=资源类型 +matrixeater.comboBox.openhivevieweraction=全部 +matrixeater.border.openhivevieweraction_resource=资源过滤 +matrixeater.view.openhivevieweraction_bo=Bongo Bongo (幻兽) +matrixeater.view.openhivevieweraction_other=其他模型 +matrixeater.border.openhivevieweraction_tags=标签 +matrixeater.checkbox.openhivevieweraction_results=结果必须包含所有选定的标签 +matrixeater.label.openhivevieweraction_types=类型 (模型) +matrixeater.checkbox.openhivevieweraction_build=建筑 +matrixeater.checkbox.openhivevieweraction_doodad=地表装饰物 +matrixeater.checkbox.openhivevieweraction_item=物品 +matrixeater.checkbox.openhivevieweraction_ui=用户界面 +matrixeater.view.openhivevieweraction_hive=蜂房 +matrixeater.view.viewportcontrollerwindowviewport=大纲视图 +matrixeater.view.toolview=工具 +matrixeater.view.modeldataview=目录 +matrixeater.view.tracks=轨迹 +matrixeater.view.component=组件 +matrixeater.view.windowundocking=: 标题栏已显示(解除窗口停靠状态,重新显示窗口) +matrixeater.view.windowremoved_barproperties=: 标题栏已显示(隐藏窗口) +matrixeater.view.windowremoved_singlechildview=: (隐藏子窗口) +matrixeater.view.windowremoved_force=: 强制关闭,因为在没有子窗口 +matrixeater.view.windowclosing_barproperties=:标题栏已可见 (关闭窗口) +matrixeater.view.windowclosing_singlechildview=: 标题栏已可见(关闭子窗口) +matrixeater.view.windowclosing_force=: 强制关闭,因为在没有子窗口 +matrixeater.view.windowadd=: 标题栏隐藏(显示子窗口) +matrixeater.view.windowadd_barproperties=: 标题栏隐藏(显示窗口) +matrixeater.view.left=侧视图 +matrixeater.view.front=正视图 +matrixeater.view.bottom=底视图 +matrixeater.view.perspective=透视图 +matrixeater.view.preview=预览 +matrixeater.view.timesliderandextra=页脚 +matrixeater.view.hacker=Matrix Eater 脚本 +matrixeater.view.run=运行 +matrixeater.view.mdltext=文本 +matrixeater.view.creator=模型 +matrixeater.view.animation_controller=动画控制 +matrixeater.view.camera_controller=镜头控制 + +matrixeater.traverseandreloadunit=单位树状图 +matrixeater.traverseandreloaddoodad=地表装饰物树状图 +matrixeater.traverseandreloadmpq=MPQ 树状图 + +matrixeater.message.opencomfail=打开命令失败 +matrixeater.message.proopen=打开文件时出错: +matrixeater.message.exporttextures_warning=警告: Alpha 通道已改为黑色。\n转成 BLP 将丢失部分数据。 +matrixeater.message.exporttextures_unknown=未知或无法识别的文件类型。 +matrixeater.message.exporttextures_nofiletype=未指定文件类型 +matrixeater.message.exporttextures_nooutput=未指定输出文件。 + +matrixeater.newmodel.layout=模型名称: +matrixeater.newmodel.empty=创建空模型 +matrixeater.newmodel.plane=创建平面 +matrixeater.newmodel.box=创建盒子 +matrixeater.newmodel.new=新建模型 +matrixeater.newmodel.createbox=盒子:选择模型 +matrixeater.newmodel.createplane=平面:选择模型 + +# matrixeater/src/com/matrixeater/AnimationFrame +matrixeater.animationframe.title=动画编辑器: +matrixeater.animation_transfer_done=动画转换完成! + +# matrixeater/src/com/matrixeater/AnimationPanel +matrixeater.animationpanel.global_sequence=全局时序 + +# matrixeater/src/com/matrixeater/ClonedNodeNamePickerImplementation +matrixeater.clonednodename.copy= 复制 +matrixeater.clonednodename.enter_name=输入克隆对象的名称(原名为 \" +matrixeater.clonednodename.choose_node_name=选择节点名称 + +# matrixeater/src/com/matrixeater/RedoActionImplementation +matrixeater.dialog.mpanel_redo=没有可重做的操作! + +# matrixeater/src/com/matrixeater/UndoActionImplementation +matrixeater.dialog.mpanel_undo=没有可撤销的操作! + +# matrixeater/src/com/matrixeater/ViewController +matrixeater.frame.viewcontroller=视图控制 +matrixeater.tab.geoscroll=控制可见性 + +# matrixeater/src/com/matrixeater/MainFrame +matrixeater.println.startupmodelpaths= 修改: +matrixeater.println.startupmodelpaths_unable=无法转换。如需转换,请提供输出路径,以确定保存格式。 +matrixeater.put.datapromptforced=桌面 +matrixeater.put.dataprompt_frame=: 安装 +matrixeater.dialog.wingutilities_setup=Retera Model Studio: 安装 +matrixeater.dialog.wingutilities_exit=Retera Model Studio已两次启动失败。程序现将退出。 +matrixeater.dialog.swingutilities=Retera Model Studio已两次启动失败。程序现将退出。 +matrixeater.display.defaultexceptionhandler=线程捕获异常 \" +matrixeater.println.defaultexceptionhandler=线程捕获异常: + +# matrixeater/src/com/matrixeater/blpconv/BlpConverterPanel +matrixeater.ExtensionFilter.blpconverterpanel_blp=BLP 文件 +matrixeater.ExtensionFilter.blpconverterpanel_tga=TGA 文件 +matrixeater.ExtensionFilter.blpconverterpanel_image= 贴图文件 +matrixeater.button.blpconverterpanel_load=加载文件 +matrixeater.button.blpconverterpanel_save=保存文件 +matrixeater.exception.blpconverterpanel_blp=无法加载: +matrixeater.exception.blpconverterpanel_tga=无法加载: +matrixeater.exception.blpconverterpanel_image=无法加载(格式错误?): +matrixeater.combobox.blpconverterpanel_paletted=调色板 +matrixeater.checkbox.blpconverterpanel_usealpha=使用 Alpha +matrixeater.checkbox.blpconverterpanel_generate=生成 Mip 地图 +matrixeater.checkbox.blpconverterpanel_anti=抗抖动 +matrixeater.dialog.blpconverterpanel_quality=质量: +matrixeater.dialog.blpconverterpanel_blp=BLP导出设置 +matrixeater.frame.editordisplaymanager=BLP转换器(DrSuperGood blp-iio插件) +matrixeater.layout.lefthandcardpanel_tex=纹理 +matrixeater.layout.lefthandcardpanel_model=模型 +matrixeater.dialog.lefthandcardpanel_run=此应用程序尚未实现。 + +# matrixeater/src/com/matrixeater/colorizer/MaydayColorizer +matrixeater.label.maydaycolorizer=输入文本: +matrixeater.dialog.colorchooser=选择颜色 +matrixeater.button.applyleftcolor=应用颜色 +matrixeater.button.apprightcolor=应用颜色 +matrixeater.button.applygradient=应用渐变 +matrixeater.button.valuelink=链接 +matrixeater.button.newline=新建链接 +matrixeater.frame.main=着色器 +matrixeater.exception.illegalargumentexception=无效轴 + +# matrixeater/src/com/matrixeater/hacks/blessing/BlessingWindow +matrixeater.string.blessingwindow=选择祝福 +matrixeater.blessing.gonk=狩猎之神 +matrixeater.blessing.pa=风之神灵 +matrixeater.blessing.rezan=诸王洛阿 +matrixeater.blessing.bwonsamdi=坟墓之神 +matrixeater.blessingitem.feralswipes=野蛮挥击 +matrixeater.blessingitem.feralswipes_text=击打面前的所有敌人,造成伤害。 +matrixeater.blessingitem.trolldaggers=巨魔匕首 +matrixeater.blessingitem.trolldaggers_text=提高所有基于毒药的技能和能力的伤害。 +matrixeater.blessingitem.mysticfogs=神秘迷雾 +matrixeater.blessingitem.mysticfogs_text=为所有盟友建筑提供范围效果,防止敌方施放法术。 +matrixeater.blessingitem.shieldsmash=盾牌猛击 +matrixeater.blessingitem.shieldsmash_text=使所有巨魔之塔造成混沌伤害,该伤害无视敌方护甲。 +matrixeater.blessingitem.crownofkings=国王头冠 +matrixeater.blessingitem.crownofkings_text=为所有巨魔英雄提供+5属性加成。 +matrixeater.frame.main=游戏 + +# matrixeater/src/com/matrixeater/hacks/converts/ConvertBLPToTGAWar3 +matrixeater.println.blptotgs_main_usage=使用: +matrixeater.println.blptotgs_main_passed=通过: +matrixeater.println.blptotgs_main_failed=失败: +matrixeater.println.blptotgs_main_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/converts/ConvertMDXToMDLWar3 +matrixeater.println.mdxtomdl_main_usage=使用: +matrixeater.println.mdxtomdl_main_passed=通过: +matrixeater.println.mdxtomdl_main_failed=失败: +matrixeater.println.mdxtomdl_main_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/converts/RecompileModelsDirectory +matrixeater.println.recompilemodel_main_usage=使用: +matrixeater.println.recompilemodel_main_passed=通过: +matrixeater.println.recompilemodel_main_failed=失败: +matrixeater.println.recompilemodel_main_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/BLPExtractorCompressorWar3 +matrixeater.println.blpextractorcompressor_main_usage=使用: +matrixeater.println.blpextractorcompressor_main_passed=通过: +matrixeater.println.blpextractorcompressor_main_failed=失败: +matrixeater.println.blpextractorcompressor_main_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/BLPNulltexGenWar3 +matrixeater.println.blpnulltexgen_main_usage=使用: +matrixeater.println.blpnulltexgen_main_passed=通过: +matrixeater.println.blpnulltexgen_main_failed=失败: +matrixeater.println.blpnulltexgen_main_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/ColorWheel +matrixeater.frame.main=测试 + +# matrixeater/src/com/matrixeater/hacks/ExpungeExtensionWar3 +matrixeater.println.expungeextension_main_usage=使用: +matrixeater.println.expungeextension_main_passed=通过: +matrixeater.println.expungeextension_main_failed=失败: +matrixeater.println.expungeextension_main_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/FindEverythingWithMissingFrames +matrixeater.println.findmiss_main_globa=:全局序列ID +matrixeater.println.findmiss_main_start=:缺失开始于 +matrixeater.println.findmiss_main_end=:缺失结束于 +matrixeater.println.findmiss_main_track= 轨迹 +matrixeater.println.findmiss_main_done=完成 + +# matrixeater/src/com/matrixeater/hacks/FindTreeBridgeTool2 +matrixeater.println.findtreebridge_checktb= 索引 + +# matrixeater/src/com/matrixeater/hacks/FtlopMaker +matrixeater.println.ftlopmaker_go=正在尝试移植 +matrixeater.println.ftlopmaker_items= 项 +matrixeater.println.ftlopmaker_processed=已处理100个项目...正在处理 + +# matrixeater/src/com/matrixeater/hacks/FtlopMaker2 +matrixeater.println.ftlopmaker2_copy=正在复制 + +# matrixeater/src/com/matrixeater/hacks/FtlopMaker4 +matrixeater.println.ftlopmaker4_go=正在尝试移植 +matrixeater.println.ftlopmaker4_items= 项 +matrixeater.println.ftlopmaker4_processed=已处理100个项目...正在处理 +matrixeater.println.ftlopmaker4_done=任务分配完成 + +# matrixeater/src/com/matrixeater/hacks/FtlopMaker5 +matrixeater.println.ftlopmaker5_go=正在尝试移植 +matrixeater.println.ftlopmaker5_items= 项 +matrixeater.println.ftlopmaker5_processed=已处理100个项目...正在处理 + +# matrixeater/src/com/matrixeater/hacks/GetMeDatas5 +matrixeater.frame.getmedatas5_main=Rigborn 旋转器 + +# matrixeater/src/com/matrixeater/hacks/GetMeDatas13 +matrixeater.println.getmedatas13_main_read=正在读取... +matrixeater.println.getmedatas13_main_out=疯狂报错: + +# matrixeater/src/com/matrixeater/hacks/GetMeDatas14 +matrixeater.println.getmedatas14_main_checked=已检查 +matrixeater.println.getmedatas14_main_of= 于 +matrixeater.println.getmedatas14_main_units= 单位 +matrixeater.println.getmedatas14_main_fail=失败: +matrixeater.println.getmedatas14_main_skip=跳过 +matrixeater.println.getmedatas14_main_bad=糟糕: + +# matrixeater/src/com/matrixeater/hacks/GridHotkeyMaker +matrixeater.println.sharedcommandcardbuttonsfound_zear1=找到Zear背包1! +matrixeater.exception.sharedcommandcardbuttonsfound_null= 为空 +matrixeater.println.sharedcommandcardbuttonsfound_ass=正在指定 +matrixeater.println.sharedcommandcardbuttonsfound_zear=找到Zear背包! +matrixeater.println.sharedcommandcardbuttonsfound_look=查找获取到的数据 +matrixeater.println.sharedcommandcardbuttonsfound_to= 到 ( + +# matrixeater/src/com/matrixeater/hacks/ListExtensionWar3 +matrixeater.println.listextension_main_usage=使用: +matrixeater.println.listextension_main_passed=通过: +matrixeater.println.listextension_main_failed=失败: +matrixeater.println.listextension_main_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/ListFileComparingGuy +matrixeater.println.listfilecomparingguy_mpq=未找到MPQ文件: +matrixeater.println.listfilecomparingguy_java=未找到Java代码: + +# matrixeater/src/com/matrixeater/hacks/ListFileFinder +matrixeater.println.listfilefinder_mutablegamedata=单位ID缺失: +matrixeater.println.listfilefinder_startingline=无效字符串: +matrixeater.println.listfilefinder_fieldasstring=无法解析模型: + +# matrixeater/src/com/matrixeater/hacks/LookAndFeelDemo +matrixeater.string.lookandfeeldemo_labelPrefix=点击数: +matrixeater.button.lookandfeeldemo_createcomponents=点击 +matrixeater.println.lookandfeeldemo_classnotfoundexception_1=未找到外观和材质: +matrixeater.println.lookandfeeldemo_classnotfoundexception_2=此路径包含外观和材质库? +matrixeater.println.lookandfeeldemo_classnotfoundexception_3=使用默认外观和材质. +matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_1=无法使用外观和材质( +matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_2=). +matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_3=使用默认外观和材质. +matrixeater.println.lookandfeeldemo_exception_1=无法使用外观和材质( +matrixeater.println.lookandfeeldemo_exception_2=). +matrixeater.println.lookandfeeldemo_exception_3=使用默认外观和材质. +matrixeater.frame.createandshowgui=交互程序 + +# matrixeater/src/com/matrixeater/hacks/Mp3ExtractWar3 +matrixeater.println.mp3extract_uasge=使用: +matrixeater.println.mp3extract_passed=通过: +matrixeater.println.mp3extract_fail=失败: +matrixeater.println.mp3extract_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/RecompileMDXWar3 +matrixeater.println.recompilemax_uasge=使用: +matrixeater.println.recompilemax_passed=通过: +matrixeater.println.recompilemax_fail=失败: +matrixeater.println.recompilemax_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/RegenErrors +matrixeater.println.inputstreamreader=源与目标: + +# matrixeater/src/com/matrixeater/hacks/RegenTexErrors +matrixeater.println.inputstreamreader=源与目标: + +# matrixeater/src/com/matrixeater/hacks/ReignOfChaosMissionFixerTool +matrixeater.println.blizzarddatainputstream=添加到英雄: + +# matrixeater/src/com/matrixeater/hacks/RigbornRotator +matrixeater.label.inputlabel=输入: +matrixeater.button.inputbutton=浏览 +matrixeater.label.outputlabel=输出: +matrixeater.button.outputbutton=浏览 +matrixeater.border.borderfactory=旋转 +matrixeater.label.axisx=X 轴: +matrixeater.label.axisy=Y 轴: +matrixeater.label.axisz=Z 轴: +matrixeater.label.angle=角度: +matrixeater.button.generatebutton=生成 +matrixeater.frame.setcontentpane=Rigborn 旋转器 + +# matrixeater/src/com/matrixeater/hacks/SanityFixer +matrixeater.println.sanityfixer_processmodel_values=相同值 +matrixeater.println.sanityfixer_processmodel_unused=不可用: +matrixeater.println.sanityfixer_processmodel_warn=警告: + +# matrixeater/src/com/matrixeater/hacks/SquishWar3 +matrixeater.println.squish_uasge=使用: +matrixeater.println.squish_passed=通过: +matrixeater.println.squish_fail=失败: +matrixeater.println.squish_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/TGAExtractorCompressorWar3 +matrixeater.println.compressroot_uasge=使用: +matrixeater.println.compressroot_passed=通过: +matrixeater.println.compressroot_fail=失败: +matrixeater.println.compressroot_faillist=失败列表: + +# matrixeater/src/com/matrixeater/hacks/WavExtractWar3 +matrixeater.println.wavextract_uasge=使用: +matrixeater.println.wavextract_passed=通过: +matrixeater.println.wavextract_fail=失败: +matrixeater.println.wavextract_faillist=失败列表: + +# matrixeater/src/com/matrixeater/imp/AnimationTransfer +matrixeater.label.basefilelabel=模板文件: +matrixeater.label.animfilelabel=动画文件: +matrixeater.label.outfilelabel=输出文件: +matrixeater.label.transsinglelabel=转换单个动画: +matrixeater.label.pickanimlabel=需要转换动画: +matrixeater.label.visfromlabel=可见性继承于: +matrixeater.button.transfer=转换 +matrixeater.button.done=完成 +matrixeater.button.goadvanced=高级 +matrixeater.settooltiptext.goadvanced=打开导入的传统 MatrixEater,以便在完成前精细管理特定设置。 +matrixeater.dialog.forcerefreshmodels_base=重载模板 +matrixeater.dialog.forcerefreshmodels_anim=重载动画 +matrixeater.dialog.basebrowse_title_base=打开 +matrixeater.dialog.basebrowse_title_anim=打开 +matrixeater.dialog.basebrowse_title_out=保存 +matrixeater.dialog.forcerefreshmodels_outfileinput=动画转换完成! +matrixeater.dialog.dotransfer_check1=检查1! +matrixeater.display.dotransfer=Java wait函数出错 +matrixeater.dialog.dotransfer_bad=损坏 +matrixeater.dialog.dotransfer_good=好 +matrixeater.dialog.dotransfer_check2=检查2! +matrixeater.dialog.dotransfer_done=动画转换完成! +matrixeater.dialog.dotransfer_just_done=动画转换完成99%! + +# matrixeater/src/com/matrixeater/imp/FaceEffectsAreNotModdableGUI +matrixeater.label.audiofilelabel=音频文件: +matrixeater.label.basesequencelabel=基础序列: +matrixeater.button.audiofilebrowse=浏览 + +# matrixeater/src/com/matrixeater/imp/ImportPanelSimple +matrixeater.frame.importpanelsimple=快速导出 +matrixeater.title.animationtransfer=动画转换 + +# matrixeater/src/com/matrixeater/imp/MDLOBJBuilderInterface +matrixeater.println.addvertexgeometric=添加几何顶点( +matrixeater.println.addvertextexture=添加纹理顶点( +matrixeater.println.addvertexnormal=添加普通顶点( +matrixeater.exception.addpoints=OBJ 转 MDL 尚未支持添加点 +matrixeater.exception.addline=OBJ 转 MDL 尚未支持添加线 +matrixeater.println.addface=添加肖像( +matrixeater.println.addobjectname=添加对象名称( +matrixeater.println.addmaplib=添加地图库 +matrixeater.exception.addmaplib=OBJ 转 MDL 的尚未支持添加地图库 +matrixeater.println.setcurrentsmoothinggroup=设置平滑组( +matrixeater.println.setcurrentusemap=设置地图( +matrixeater.println.setcurrentusematerial=设置材质( +matrixeater.layer.setcurrentusematerial=无 +matrixeater.println.newmtl=新建材质( +matrixeater.println.xyz=新建材质(类型为 +matrixeater.println.rgb=设置RGB(类型为 +matrixeater.println.illummodel=设置光照(光照模型为 +matrixeater.println.setd_1=设置D(光圈为 +matrixeater.println.setd_2=,系数= +matrixeater.println.setns=设置Ns(说明为 +matrixeater.println.setsharpness=设置锐度(值为 +matrixeater.println.setni=设置Ni(可见密度为 +matrixeater.println.setmapdecaldispbump_1=设置地图贴图(类型为 +matrixeater.println.setmapdecaldispbump_2=,文件名为 +matrixeater.println.setrefl_1=设置Refl(类型为 +matrixeater.println.setrefl_2=,文件名为 +matrixeater.println.doneparsingmaterial=材质解析完毕() +matrixeater.println.doneparsiongobj=对象解析完毕(文件名为 + +# matrixeater/src/com/matrixeater/imp/OBJImportSettingsPanel +matrixeater.frame.objimportsettingspanel=对象设置 + +# matrixeater/src/com/matrixeaterhayate/HayateMatrixEater +matrixeater.frame.hayatematrixeater=新建 Hayate Matrix Eater + +# matrixeater/src/com/matrixeaterhayate/HMToolbox +matrixeater.border.createpanel=创建 +matrixeater.border.transformpanel=转换 + +# matrixeater/src/com/matrixeaterhayate/TextureManager +matrixeater.label.modelstructurechangelistener=贴图 +matrixeater.checkbox.chckbxdisplaypath=显示路径 +matrixeater.border.panel_1=图像查看器 +matrixeater.button.texturemanager_import=导入 +matrixeater.button.texturemanager_export=导出 +matrixeater.button.texturemanager_replace=替换贴图 +matrixeater.button.texturemanager_remove=移除 +matrixeater.button.texturemanager_edit_path=编辑路径 +matrixeater.button.texturemanager_add_path=添加路径 +matrixeater.dialog.add_texture_1=输入贴图路径: +matrixeater.dialog.add_texture_2=添加贴图 + +# matrixeater/src/com/owens/oobjloader/builder/Build +matrixeater.settext.materialtosubgroup_collapsing=压缩 MatrixEater MDL +matrixeater.settext.materialtosubgroup_preparing=准备编辑模型... +matrixeater.settext.materialtosubgroup_adding_stand=添加 “Stand” 动画... +matrixeater.settext.materialtosubgroup_scanning_wow=扫描 WoW 大小... +matrixeater.string.materialtosubgroup_option_no=否 +matrixeater.dialog.materialtosubgroup_increase_1=该模型可能是 WoW 模型,或异常小。要放大吗? +matrixeater.dialog.materialtosubgroup_increase_2=WoW 缩放 +matrixeater.settext.materialtosubgroup_scan_textures=扫描可转换贴图... +matrixeater.dialog.materialtosubgroup_generated=该 OBJ 模型材质引用了非 BLP 文件。是否自动创建 BLP 文件?\n选“是”将自动生成 MDL 文件。 +matrixeater.dialog.materialtosubgroup_convert_textures=将贴图转换为 BLP +matrixeater.settext.materialtosubgroup_converting_textures=正在转换贴图... +matrixeater.exception.materialtosubgroup_readimage=图片读取失败: +matrixeater.display.materialtosubgroup_unable_convert_png=无法将 PNG 转换为 BLP。 +matrixeater.settext.materialtosubgroup_saving_file=正在保存文件... +matrixeater.settext.materialtosubgroup_converting=正在转换 %s ... +matrixeater.dialog.materialtosubgroup_mdlmaterial=一个或多个导入的纹理坐标超出纹理范围。\n\n这部分坐标在“Matrix Eater”无法正确渲染,\n这部分纹理将被标记为“宽度包裹”和“高度包裹”,\n从而在《魔兽争霸III》游戏和Magos的查看器中正确渲染。 +matrixeater.exception.materialtosubgroup_shadows_1=《魔兽争霸3》不支持投影 +matrixeater.exception.materialtosubgroup_shadows_2=不支持 + +# matrixeater/src/com/owens/oobjloader/builder/BuildWLists +matrixeater.string.buildwlists_option_no=否 +matrixeater.dialog.buildwlists_increase_1=该模型可能是 WoW 模型,或异常小。要放大吗? +matrixeater.dialog.buildwlists_increase_2=WoW 缩放 +matrixeater.settext.userwantsswaptoblp_1=该 OBJ 模型材质引用了非 BLP 文件。是否自动创建 BLP 文件?\n选“是”将自动生成 MDL 文件。 +matrixeater.settext.userwantsswaptoblp_2=将贴图转换为 BLP +matrixeater.exception.imagefilepng=图片读取失败: +matrixeater.display.imagefilepng=无法将 PNG 转换为 BLP。 +matrixeater.dialog.noteformatrixeateraboutwrap=一个或多个导入的纹理坐标超出纹理范围。\n\n这部分坐标在“Matrix Eater”无法正确渲染,\n这部分纹理将被标记为“宽度包裹”和“高度包裹”,\n从而在《魔兽争霸III》游戏和Magos的查看器中正确渲染。 +matrixeater.exception.convertmaterial_1=《魔兽争霸3》不支持投影 +matrixeater.exception.convertmaterial_2=不支持 + +# matrixeater/src/com/owens/oobjloader/builder/TrollyLoadbar +matrixeater.frame.trollyloadbar=加载中... +matrixeater.label.trollyloadbar=加载中... + +# matrixeater/src/com/owens/oobjloader/lwjgl/DisplayTest +matrixeater.string.displaytest_title=对象测试程序 +matrixeater.alert.displaytest_exit=程序错误,即将关闭 + +# matrixeater/src/com/owens/oobjloader/lwjgl/VBOFactory +matrixeater.exception.vbofactory=缺少三角形构建的顶点缓存对象(VBO),无法构建。 + +# craft3data/src/com/badlogic/gdx/backends/lwjgl/LwjglNativesLoader +exception.sharedlibraryloader=无法提取 natives LWJGL。 + +# craft3data/src/com/badlogic/gdx/utils/SharedLibraryLoader +exception.streamutils=输入不能为空 +exception.platformname_1=共享库 ' +exception.platformname_2=' 无法载入到: +exception.readfile=文件读取失败,无法提取: +exception.zipfile_1=未找到 ' +exception.zipfile_2=' 建议检查 JAR: +exception.zipfile_catch_1=无法读取 ' +exception.zipfile_catch_2=' 建议检查 JAR: +exception.extractfile_extractedfile=未找到可用路径以解压文件。用户主目录是否可写入? +exception.extractfile_extractedcrc_1=提取失败: +exception.extractfile_extractedcrc_2=\n位置: + +# craft3data/src/com/etheller/gdx/collections/AbstractCollection +memoryerror.hugecapacity=批量过大 + +# craft3data/src/com/etheller/gdx/collections/AbstractMap +exception.keysetforeachadapter=迭代器只读 +exception.abstractcollection=迭代器只读 +exception.defaultsize=批量列表不允许负数: +exception.rangecheck= 不在 +exception.abstractmap_remove=迭代器只读 +exception.listiterator=索引: + +# craft3data/src/com/etheller/gdx/collections/HashMap +exception.hashiterator_nextentry=迭代器节点不足 +exception.hashiterator_remove=迭代器只读 + +# craft3data/src/com/etheller/collections/TreeMap +exception.navigablesubmap=原按键 > 新按键: +exception.navigablesubmap_secondone=新按键超出范围 +exception.navigablemap_fromkey=原按键超出范围 +exception.navigablemap_tokey=新按键超出范围 + +# craft3data/src/com/hiveworkshop/blizzard/casc/info/FieldDescriptor +exception.fielddescriptor_nameend=名称终止符缺失 +exception.fielddescriptor_datatypeend=数据类型终止符缺失 + +# craft3data/src/com/hiveworkshop/blizzard/casc/info/Info +exception.nosuchelementexception=报头缺失 + +# craft3data/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC +exception.readfiledata_isfile=指定路径的文件无法解析 +exception.readfiledata_existsinstorage=未找到指定路径的文件 +exception.warcraftIIIcasc_1=构建信息不含任何记录 +exception.warcraftIIIcasc_2=构建信息不含活动字段 +exception.warcraftIIIcasc_3=构建信息不含活动记录 +exception.warcraftIIIcasc_4=构建信息不含构建关键字段 +exception.warcraftIIIcasc_5=数据文件夹缺失 +exception.getbranch=构建信息不含分支字段 + +# craft3data/src/com/hiveworkshop/blizzard/casc/nio/LittleHashBlockProcessor +exception.processblock=小哈希块报头太小,超出限制 +exception.bytebuffer_hash_block_header_out=小哈希块报头太小,超出限制 +exception.bytebuffer_hash_block_out=小哈希块超出界限 +exception.bytebuffer_hash_block=小哈希块 + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/BankStream +exception.bankstream_1=容器编码密钥不匹配 +exception.bankstream_2=容器缓存小于容器 +exception.bankstream_3=容器缓存大小不匹配 +exception.getnextbanklLength=无需再解码库 +exception.bytebuffer_hasnextbank=无需再解码库 +exception.bytebuffer_streambuffer=文件末尾后的编码数据 +exception.bytebuffer_bankbuffer=内存池过大,Java无法处理 +exception.bytebuffer_encodedbuffer=未压缩字节不足 +exception.bytebuffer_dataformatexception=zlib解压异常 +exception.bytebuffer_decodedsize=生成字节不足 +exception.bytebuffer_zlib=未完成的解压操作 +exception.bytebuffer_default=不支持编码模式: +exception.bytebuffer_bankbuffer_streambuffer=库缓存太小 + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/BLTEContent +exception.decodecontent=缺少 BLTE 标识符 +exception.decodecontent_header_preamble_out=报头前导超出边界 +exception.decodecontent_header_extends_buffer=BLTE报头超出缓存边界 +exception.decodecontent_flags=未知标志 +exception.decodecontent_zero_entry_count=显式0条目计数 +exception.decodecontent_header_goes_out=头部越界 +exception.decodecontent_unprocessed_blte_bytes=BLTE字节未处理 + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/IndexFile +exception.hashblockprocessor=头块损坏 +exception.hashblockprocessor_header_block_small=头块过小 +exception.hashblockprocessor_entries_corrupt=头块条目损坏 +exception.hashblockprocessor_unable_fully=无法完全读取头块 +exception.hashblockprocessor_binary_search_inverted=二进制搜索失败,索引顺序颠倒 + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/Storage +exception.storage_index_file_missing=未找到索引文件 +exception.storage_inconsistent_encoding_key_length=各索引文件编码密钥长度不一致 +exception.close_closure=关闭出现意外 +exception.getbanks_encoding_indicies=存储索引未找到编码键 +exception.getdatafilechannel_data_file_index_large=数据文件索引过大 +exception.getstoragebuffer_data_buffer_large=缓存过大 +exception.getstoragebuffer_unexpected_end=文件意外结束 +exception.loadfilefully_failed_file_fully=文件未完整加载 +exception.loadfilefully__unexpected_end=文件意外结束 + +# craft3data/src/com/hiveworkshop/blizzard/casc/storage/StorageContainer +exception.storagecontainer_storage_buffer_small=缓存过小 +exception.storagecontainer_a_mismatch=容器校验A不匹配 +exception.storagecontainer_b_mismatch=容器校验B不匹配 + +# craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalDataFiles +exception.localdatafiles_close_exception=关闭时发生了意外 +exception.localdatafiles_getfileentry_incomplete_read=读取不完整 +exception.localdatafiles_getfileentry_file_not_match_index=文件条目与索引条目不匹配 +exception.localdatafiles_getbltechunks_header_beyond_limits=BLTE 报头超限 +exception.localdatafiles_getfileentry_blte_mime=BLTE 类型不匹配 +exception.localdatafiles_getbltechunks_header_large=BLTE 报头过大 +exception.localdatafiles_getbltechunks_unknown_flags=未知 BLTE 标志 +exception.localdatafiles_getbltechunks_chunk_large=BLTE 块过大 +exception.localdatafiles_getbltechunks_invalid_chunk=BLTE 块无效 +exception.localdatafiles_getbltedata_beyond_data=BLTE 数据超限 +exception.localdatafiles_getfiledata_data_small=BLTE 过小 +exception.localdatafiles_getfiledata_not_uncompressed=BLTE 未解压 +exception.localdatafiles_getfiledata_zlib_inflate=Zlib 解压失败 +exception.localdatafiles_getfiledata_not_generated=空间不足: +exception.localdatafiles_getfiledata_unfinished_inflate=未解压 +exception.localdatafiles_getfiledata_unsupported_encoding=不支持编码: + +# craft3data/src/com/hiveworkshop/blizzard/casc/trash/LocalIndexFile +exception.localindexfile_decode_header_corrupt=索引报头损坏 +exception.localindexfile_decode_entries_corrupt=索引损坏 + +# craft3data/src/com/hiveworkshop/blizzard/casc/trash/VirtualFileSystem +exception.virtualfilesystem_missing_tvfs=TVFS 丢失 +exception.virtualfilesystem_unsupported_version=不支持 TVFS 版本: +exception.virtualfilesystem_header_small=TVFS 报头过小 + +# craft3data/src/com/hiveworkshop/blizzard/casc/vfs/TVFSDecoder +exception.tvfsdecoder_decode_node_beyond_path=前缀节点容器超限 +exception.tvfsdecoder_decode_path_beyond_path=路径容器超限 +exception.tvfsdecoder_storagereference_logical_beyond_file=引用逻辑偏移超限 +exception.tvfsdecoder_storagereference_storage_beyond_casc=引用存储偏移超限 +exception.tvfsdecoder_storagereference_storage_out=引用存储偏移越界 +exception.tvfsdecoder_storagereference_logical_out=引用逻辑偏移越界 +exception.tvfsdecoder_loadfile_missing_tvfs=TVFS 丢失 +exception.tvfsdecoder_loadfile_unsupported_version=不支持 TVFS 版本: +exception.tvfsdecoder_loadfile_header_past_end=TVFS 报头超出文件 +exception.tvfsdecoder_loadfile_path_past_end=TVFS 路径超出文件 +exception.tvfsdecoder_loadfile_logical_past_end=逻辑数据超出文件 +exception.tvfsdecoder_loadfile_storage_past_end=存储数据超出文件 + +# craft3data/src/com/hiveworkshop/blizzard/casc/vfs/VirtualFileSystem +exception.virtualfilesystem_readfile_result_not_file=无法解析文件 +error.virtualfilesystem_readfile_file_big=文件过大,无法加载 +exception.virtualfilesystem_readfile_inconsistent_size=大小不一致 +exception.fetchstoredbuffer_stored_large=缓存过大 +exception.fetchstoredbuffer_stored_bigger=缓存大于请求 +exception.fetchstoredbuffer_stored_smaller=缓存小于请求 +println.recursivefilepathretrieve_failed_decoding=tvfs 编码失败: +exception.fetchstoredbuffer_unsupported=不支持节点类型: +exception.recursiveresolvepathfragments_logic_defined=仅定义 1 个 TVFS 根节点 +exception.recursiveresolvepathfragments_unsupported=不支持节点类型: +exception.resolvepath_greater=pathFragments.length 必须大于 0 +exception.resolvepath_logic_defined=仅定义 1 个根节点 +exception.resolvepath_not_storage=未找到路径 + +# craft3data/src/com/hiveworkshop/blizzard/casc/ConfigurationFile +exception.configurationfile_configuration_no_assignment=配置文件行记录未赋值 +exception.configurationfile_configuration_key_duplicate=配置文件键声明重复 + +# craft3data/src/com/hiveworkshop/blizzard/casc/Key +exception.key_hashcode=由于系统间变量大小不同,使用哈希确定键不安全 + +# craft3data/src/com/hiveworkshop/blizzard/casc/StorageReference +exception.storagereference_storagereference_not_exist=配置不存在该名称 +exception.storagereference_storagereference_size_missing=配置大小异常 + +# craft3data/src/com/hiveworkshop/json/JSONObject +exception.jsonobject_invalid_number_1=值 [ +exception.jsonobject_invalid_number_2=] 无效 + +# craft3data/src/com/hiveworkshop/json/JSONPointer +exception.jsonpointer_builder_token_not_null=token 不能为空 +exception.jsonpointer_builder_pointer_not_null= 指针不能为空 +exception.jsonpointer_builder_pointer_should= 指针应以 '/' 或 '#/'开头 + +# craft3data/src/com/hiveworkshop/lang/Hex +exception.hex_decodehex_non_hex_character=非十六进制字符 + +# craft3data/src/com/hiveworkshop/wc3/casc/Cascket +exception.has_error=CASC 异常: + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TSpline +label.tspline_curve_properties=曲线属性 +label.tspline_tension=拉紧: +label.tspline_continuity=连续: +label.tspline_bias=倾斜: +exception.settcb_not_finished=尚未完成,需实现对存储关键帧数据和撤销管理的共享访问 + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/mdlvisripoff/TTan +exception.assignsubscript_unknown=未知下标(集合): +exception.getsubscript_unknown=未知下标(集合): + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/NodeAnimationModelEditor +exception.nodeanimationmodeleditor_autocenterselectedbones=无法自动居中骨骼 +exception.nodeanimationmodeleditor_setselectedbonename=无法修改骨骼名称 +exception.nodeanimationmodeleditor_setselectedbonesuffix=无法修改骨骼后缀 +exception.nodeanimationmodeleditor_addteamcolor=无法添加队伍颜色 +exception.nodeanimationmodeleditor_expandselection=无法展开选择 +setselection.nodeanimationmodeleditor_invertselection=无法反选 +setselection.nodeanimationmodeleditor_selectall=全选 +setselection.nodeanimationmodeleditor_selecthdunusednodes=选择未使用(高清) +exception.nodeanimationmodeleditor_selectionatpointttester=请在节点动画模型编辑器处理镜头镜头 +exception.nodeanimationmodeleditor_genericselectorvisitor=试图使用节点动画编辑器通用选择器处理相机!!! +exception.nodeanimationmodeleditor_copyselection=复制失败 +exception.nodeanimationmodeleditor_deleteselectedcomponents=删除失败 +exception.nodeanimationmodeleditor_setmatrix=矩阵设置失败 +exception.nodeanimationmodeleditor_snapnormals=法线设置失败 +exception.nodeanimationmodeleditor_recalcnormals=修改法线失败 +exception.nodeanimationmodeleditor_recalcextents=修改范围失败 +exception.nodeanimationmodeleditor_mirror=镜像尚未可用 +exception.nodeanimationmodeleditor_flipselectedfaces=翻转脸部失败 +exception.nodeanimationmodeleditor_flipselectednormals=翻转法线失败 +exception.nodeanimationmodeleditor_snapselectedvertices=捕捉顶点失败 +exception.nodeanimationmodeleditor_snapselectednormals=修改法线失败 +exception.nodeanimationmodeleditor_beginextrudingselection=拉伸失败 +exception.nodeanimationmodeleditor_beginextendingselection=拉伸失败 +exception.nodeanimationmodeleditor_cloneselectedcomponents=克隆失败 +exception.nodeanimationmodeleditor_addvertex=添加顶点失败 +exception.nodeanimationmodeleditor_addplane=添加平面失败 +exception.nodeanimationmodeleditor_rawscale=动画模式无法缩放,请使用其他系统 +exception.nodeanimationmodeleditor_rawrotate2d=动画模式无法旋转,请使用其他系统 +exception.nodeanimationmodeleditor_createfacefromselection=创建脸部失败 +exception.nodeanimationmodeleditor_addbox=创建盒子失败 +exception.nodeanimationmodeleditor_splitgeoset=拆分几何体失败 +exception.nodeanimationmodeleditor_setparent=父级设置失败 +exception.nodeanimationmodeleditor_reLinkrfbone=父级设置失败 +exception.nodeanimationmodeleditor_rig=绑定失败 +exception.nodeanimationmodeleditor_addbone=添加骨骼失败 +exception.nodeanimationmodeleditor_deletedowntoonetverticeslayer=删除失败 + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeBoundChooserPanel +button.timeboundchooserpanel_animationtime=动画时序 +button.timeboundchooserpanel_customtime=自定义时序 +button.timeboundchooserpanel_globalsequences=全局时序 +label.timeboundchooserpanel_start=开始: +label.timeboundchooserpanel_end=结束: +button.timeboundchooserpanel_createanimation=创建 +button.timeboundchooserpanel_duplicateanimation=复制 +dialog.timeboundchooserpanel_userchosenname_1=选择动画名称: +dialog.timeboundchooserpanel_userchosenname_2= 秒 +button.timeboundchooserpanel_deleteanimation=删除 +button.timeboundchooserpanel_editanimation=编辑 +button.timeboundchooserpanel_length=长度 +button.timeboundchooserpanel_timerange=时间范围 +label.timeboundchooserpanel_createanim_name=名称: +label.timeboundchooserpanel_createanim_length=长度: +label.timeboundchooserpanel_createanim_start=开始: +label.timeboundchooserpanel_createanim_end=结束: +border.timeboundchooserpanel_extraproperties_misc=其他 +checkbox.timeboundchooserpanel_nonloopingchooser_nonlooping=不循环 +label.timeboundchooserpanel_extraproperties_rarity=稀有度 +label.timeboundchooserpanel_extraproperties_movespeed=移动速度 +dialog.timeboundchooserpanel_result_create_animation=创建动画 +dialog.timeboundchooserpanel_deleteanimation_result_1=同时删除关键帧? +dialog.timeboundchooserpanel_deleteanimation_result_2=删除动画 +button.timeboundchooserpanel_createglobalseq=创建 +dialog.timeboundchooserpanel_createglobalseq_userchoice=设置长度 +dialog.timeboundchooserpanel_createglobalseq_globalseqs_1=已存在相同长度的全局序列。\n此程序不支持多个相同长度的全局序列。\n只需将动画数据添加到已存在的相同长度的序列中即可。 +dialog.timeboundchooserpanel_createglobalseq_globalseqs_2=错误 +button.timeboundchooserpanel_deleteglobalseq=删除 +dialog.timeboundchooserpanel_deleteglobalseq_result_1=同时删除关联的时间轴及其关键帧? +dialog.timeboundchooserpanel_deleteglobalseq_result_2=删除动画 +dialog.timeboundchooserpanel_applyto_timeenvironmentimpl_1=未选择全局序列! +dialog.timeboundchooserpanel_applyto_timeenvironmentimpl_2=错误 + +# craft3data/src/com/hiveworkshop/wc3/gui/animedit/TimeSliderPanel +menuitem.timesliderpanel_deleteall=删除全部 +menuitem.timesliderpanel_cut=剪切 +menuitem.timesliderpanel_copy=复制 +menuitem.timesliderpanel_copyframe=复制帧 +menuitem.timesliderpanel_paste=粘贴 +menuitem.timesliderpanel_delete=删除 +menuitem.timesliderpanel_cut_specific=剪切 +menuitem.timesliderpanel_copy_specific=复制 +menuitem.timesliderpanel_paste_specific=粘贴 +dialog.timesliderpanel_pastetospecifictimeline=请反馈研发跨节点数据粘贴功能! + +# craft3data/src/com/hiveworkshop/wc3/gui/datachooser/CascDataSource +dialog.cascdatasource_internalgetresourceasstream=CASC解析错误: +dialog.cascdatasource_internalread=CASC解析错误: +dialog.cascdatasource_internalgetfile=CASC解析错误: +dialog.cascdatasource_has_1=CASC解析错误: +dialog.cascdatasource_has_2=CASC解析错误: + +# craft3data/src/com/hiveworkshop/wc3/gui/datachooser/DataSourceChooserPanel +button.datasourcechooserpanel_clear_list=清除全部 +button.datasourcechooserpanel_add_war3_install=添加魔兽3安装目录 +button.datasourcechooserpanel_add_default_casc=添加 默认 CASC 存储路径 +button.datasourcechooserpanel_add_specific_casc=添加 指定 CASC 存储路径 +button.datasourcechooserpanel_delete_selection=删除所选 +button.datasourcechooserpanel_move_up=向上移动 +button.datasourcechooserpanel_move_down=向下移动 +button.datasourcechooserpanel_reforged_hd=重铸版 +button.datasourcechooserpanel_classic_mode=经典版 +button.datasourcechooserpanel_reforged_hd2_mode=重铸版(v2.0.0) +button.datasourcechooserpanel_classic2_mode=经典版(v2.0.0) +button.datasourcechooserpanel_reset_defaults=重置 +button.datasourcechooserpanel_add_casc=添加 CASC 存储路径 +dialog.datasourcechooserpanel_addCASC_choose_version_1=选择版本 +dialog.datasourcechooserpanel_addCASC_choose_version_2=版本 +dialog.datasourcechooserpanel_addCASC_public_test=Warcraft III PTR(测试服) +button.datasourcechooserpanel_add_mpq=添加 MPQ 文件 +extensionfilter.datasourcechooserpanel_addmpq=MPQ 文件 +button.datasourcechooserpanel_add_folder=添加文件夹 +button.datasourcechooserpanel_path_registry=从注册表添加路径 +button.datasourcechooserpanel_not_found=未找到 +dialog.datasourcechooserpanel_entersdmode_not_hd_1=未检测到重铸版,是否切换到经典版? +dialog.datasourcechooserpanel_entersdmode_not_hd_2=错误 +dialog.datasourcechooserpanel_entersdmode_not_hd_3=《魔兽争霸III》CASC非重制版模式,已禁用自动化。\n如需使用,请先点击“清除全部”,再点击“添加War3安装目录”重选“重制版”安装路径。 +dialog.datasourcechooserpanel_enterhdmode_not_sd_1=《魔兽争霸III》CASC非SD模式,或配置方式不符合预期。请添加适当的CASC以手动启用HD模式。 +dialog.datasourcechooserpanel_enterhdmode_not_sd_2=错误 +dialog.datasourcechooserpanel_enterhdmode_not_sd_3=《魔兽争霸III》CASC非SD模式。 +dialog.datasourcechooserpanel_entersd2mode_not_hd_1=《魔兽争霸III》CASC非重制版模式,已禁用自动化。\n如需使用,请先点击“清除全部”,再点击“添加War3安装目录”重选“重制版”安装路径。 +dialog.datasourcechooserpanel_entersd2mode_not_hd_2=错误 +dialog.datasourcechooserpanel_enterhd2mode_not_sd_1=《魔兽争霸III》CASC非重制版模式,已禁用自动化。\n如需使用,请先点击“清除全部”,再点击“添加War3安装目录”重选“重制版”安装路径。 +dialog.datasourcechooserpanel_enterhd2mode_not_sd_2=错误 +dialog.datasourcechooserpanel_addwar3installation_choose_ver=选择版本 +dialog.datasourcechooserpanel_addwar3installation_ver=版本 +dialog.datasourcechooserpanel_addwar3installation_ptr=Warcraft III PTR(测试服) +descriptor.datasourcechooserpanel_reloadtree= (警告:未选择模组) +frame.datasourcechooserpanel_datasourcechooserframe=选择数据源 +dialog.datasourcechooserpanel_addspecificCASC_1=选择 .w3mod 文件: +dialog.datasourcechooserpanel_addspecificCASC_2=选择模组 +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_1=初始安装路径: +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_2=, Launcher.db 路径: +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_3=无法自动定位路径。请手动设置。 +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_4=设置错误可能导致Retera Model Studio无法启动。 +label.datasourcechooserpanel_adddefaultCASC_userchooselocalepanel_5=如果使用所选语言环境至少运行过一次游戏,那任何设置都有效。 +dialog.datasourcechooserpanel_adddefaultCASC_confirmationresult=选择路径 +dialog.datasourcechooserpanel_adddefaultCASC_selected_1=未选择路径!中止程序! +dialog.datasourcechooserpanel_adddefaultCASC_selected_2=错误 +println.datasourcechooserpanel_adddefaultCASC_1.30=检测到 1.30 +println.datasourcechooserpanel_adddefaultCASC_1.31=检测到 1.31 +println.datasourcechooserpanel_adddefaultCASC_1.32=检测到 1.32或更高版本 +dialog.datasourcechooserpanel_adddefaultCASC_unknown_1=所选《魔兽争霸III》版本似乎过于高,或者不受支持。自动视为1.31。\n这很可能会失败,需要手动进行高级配置。 +dialog.datasourcechooserpanel_adddefaultCASC_unknown_2=错误 + +# craft3data/src/com/hiveworkshop/wc3/gui/datachooser/FolderDataSourceDescriptor +string.folderdatasourcedescriptor_getdisplayname=文件夹: + +# craft3data/src/com/hiveworkshop/wc3/gui/datachooser/MpqDataSourceDescriptor +string.mpqdatasourcedescriptor_getdisplayname=MPQ: + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalEndAction +string.setanimationintervalendaction_actionname=动画间隔终止点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationIntervalStartAction +string.setanimationintervalstartaction_actionname=动画间隔起始点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationMoveSpeedAction +string.setanimationmovespeedaction_actionname=动画移动速度 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNameAction +string.setanimationnameaction_actionname=设置动画名称 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationNonLoopingAction +string.setanimationnonloopingaction_actionname_1=设置动画循环 +string.setanimationnonloopingaction_actionname_2=设置动画不循环 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/animation/SetAnimationRarityAction +string.setanimationrarityaction_actionname=设置动画稀有度 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapPathAction +string.setbitmappathaction_actionname=设置贴图路径 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapReplaceableIdAction +string.setbitmapreplaceableidaction_actionname=设置贴图替换ID + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapHeightAction +string.setbitmapwrapheightaction_actionname=设置贴图替换ID + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/bitmap/SetBitmapWrapWidthAction +string.setbitmapwrapwidthaction_actionname=设置贴图替换ID + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/globalsequence/SetGlobalSequenceLengthAction +string.setglobalsequencelengthaction_actionname=设置全局序列长度 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetBlendTimeAction +string.setblendtimeaction_actionname=设置混合时间 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetFormatVersionAction +string.setformatversionaction_actionname=设置格式版本 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetHeaderExtentsAction +string.setheaderextentsaction_actionname=设置范围 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/header/SetNameAction +string.setnameaction_actionname=设置名称 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerBitmapAction +string.setlayerbitmapaction_actionname=设置图层贴图 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerCoordIdAction +string.setlayercoordidaction_actionname=设置图层坐标ID + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerFilterModeAction +string.setlayerfiltermodeaction_actionname=设置图层过滤模式 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerShaderAction +string.setlayershaderaction_actionname=设置图层着色器 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetLayerTextureAnimAction +string.setlayertextureanimaction_actionname=设置图层贴图动画 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/material/SetMaterialPriorityPlaneAction +string.setmaterialpriorityplaneaction_actionname=设置材质优先面 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloat3StaticValueAction +string.setfloat3staticvalueaction_actionname=设置 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/componenttree/timeline/SetFloatStaticValueAction +string.setfloatstaticvalueaction_actionname=设置 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitForUVAction +string.splitforuvaction_actionname=拆分几何体 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/SplitGeosetAction +string.splitgeosetaction_actionname=拆分几何体 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/newsys/TeamColorAddAction +string.teamcoloraddaction_actionname=添加队伍颜色 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/CloneAction +println.cloneaction_redo_1=应该: +println.cloneaction_redo_2=重做 +println.cloneaction_redo_3= 完成,但出现 +println.cloneaction_redo_4= 无法解释的错误。 +println.cloneaction_undo_1=应该: +println.cloneaction_undo_2=撤销 +println.cloneaction_undo_3= 完成,但出现 +println.cloneaction_undo_4= 无法解释的错误。 +string.cloneaction_actionname_1=拉伸 +string.cloneaction_actionname_2=拉伸 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/DeleteAction +string.deleteaction_actionname=删除顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/ExtrudeAction +string.extrudeaction_actionname_1=拉伸 +string.extrudeaction_actionname_2=拉伸 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/MoveAction +string.moveaction_actionname_move=移动 +string.moveaction_actionname_rotate=旋转 +string.moveaction_actionname_scale=缩放 +string.moveaction_actionname_unknown=错误,未知动作类型 +string.moveaction_actionname_actiontype=动作类型_ +string.moveaction_actionname_vertices= 顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateExtentsAction +string.recalculateextentsaction_actionname=重新计算范围 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction +string.recalculatenormalsaction_actionname=重新计算法线 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/RecalculateNormalsAction2 +string.recalculatenormalsaction2_actionname=重新计算法线 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SetModelContentsAction +string.setmodelcontentsaction_actionname=应用文本 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapAction +string.snapaction_actionname=捕捉顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SnapNormalsAction +string.snapnormalsaction_actionname=捕捉法线 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/SpecialDeleteAction +string.specialdeleteaction_actionname=删除顶点和几何体 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVMoveAction +string.uvmoveaction_actionname_move=移动 +string.uvmoveaction_actionname_rotate=旋转 +string.uvmoveaction_actionname_scale=缩放 +string.uvmoveaction_actionname_actiontype=动作类型_ +string.uvmoveaction_actionname_vertices= 顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVRemapAction +string.uvremapaction_actionname=交换顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapAction +string.uvsnapaction_actionname=捕捉顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/actions/UVSnapXAction +string.uvsnapxaction_actionname_snapxtvertices=捕捉顶点 X +string.uvsnapxaction_actionname_snapytvertices=捕捉顶点 Y +string.uvsnapxaction_actionname_snaptvertices=捕捉顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/ColorValuePanel +button.colorvaluepanel_static=静态 +button.colorvaluepanel_dynamic=动态 +button.colorvaluepanel_choose_color=选择颜色 +dialog.colorvaluepanel_choose=选择 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/FloatValuePanel +button.floatvaluepanel_static=静态 +button.floatvaluepanel_dynamic=动态 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/editors/ComponentLayerPanel +border.componentlayerpanel_setlayout_flags=标记 +label.componentlayerpanel_setlayout_filter=过滤模式: +label.componentlayerpanel_setlayout_shader=着色器: +label.componentlayerpanel_setlayout_texture= 贴图: +button.componentlayerpanel_setlayout_choose_texture=选择贴图 +scrollpane.componentlayerpanel_setlayout_choose_bitmap=选择图片 +label.componentlayerpanel_setlayout_tvertex_anim=顶点动画: +button.componentlayerpanel_setlayout_choose_tvertex_anim=选择顶点动画 +scrollpane.componentlayerpanel_setlayout_choose_textureanim=选择贴图动画 +label.componentlayerpanel_setlayout_coordid=坐标 ID: +floatvaluepanel.componentlayerpanel_setlayout_alpha=透明度 +floatvaluepanel.componentlayerpanel_setlayout_emissive_gain=光圈 +floatvaluepanel.componentlayerpanel_setlayout_fresnel_color=Fresnel 颜色 +floatvaluepanel.componentlayerpanel_setlayout_fresnel_opacity=Fresnel 不透明度 +floatvaluepanel.componentlayerpanel_setlayout_fresnel_team_color=Fresnel 队伍颜色 +text.componentlayerpanel_setlayer_texture=空: +text.componentlayerpanel_setlayer_tvertexanim_1=空: +text.componentlayerpanel_setlayer_tvertexanim_2=贴图动画 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/ComponentMaterialLayersPanel +string.componentmateriallayerspanel_reforged_layer_definitions_diffuse=发散 +string.componentmateriallayerspanel_reforged_layer_definitions_normal=正常 +string.componentmateriallayerspanel_reforged_layer_definitions_orm=映射 +string.componentmateriallayerspanel_reforged_layer_definitions_emissive=光圈 +string.componentmateriallayerspanel_reforged_layer_definitions_team_color=队伍颜色 +string.componentmateriallayerspanel_reforged_layer_definitions_reflections=反射 +string.componentmateriallayerspanel_reforged_layer_definitions_unknown=未知 +button.componentmateriallayerspanel_add_layer=添加图层 +button.componentmateriallayerspanel_layer=图层 +button.componentmateriallayerspanel_layerdelete=删除 +text.componentmateriallayerspanel_layer=图层 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/FloatTrackTableModel +string.floattracktablemodel_getcolumnname_keyframe=关键帧 +string.floattracktablemodel_getcolumnname_value=值 +string.floattracktablemodel_getcolumnname_intan=InTan +string.floattracktablemodel_getcolumnname_outtan=OutTan +string.floattracktablemodel_getcolumnname_delete=删除 +string.floattracktablemodel_getvalueat_delete=删除 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/material/LayerFlagsPanel +checkbox.layerflagspanel_unshaded=无阴影 +checkbox.layerflagspanel_sphere_env_map=球面环境映射 +checkbox.layerflagspanel_two_sided=两侧 +checkbox.layerflagspanel_unfogged=无迷雾 +checkbox.layerflagspanel_no_depth_test=无深度测试 +checkbox.layerflagspanel_no_depth_set=无深度设置 +checkbox.layerflagspanel_unlit=无光照 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentAnimationPanel +label.componentanimationpanel_componentanimationpanel_name=名称: +label.componentanimationpanel_componentanimationpanel_start=开始: +label.componentanimationpanel_componentanimationpanel_end=结束: +checkbox.componentanimationpanel_componentanimationpanel_nonloopingchooser=不循环 +label.componentanimationpanel_componentanimationpanel_rarity=稀有度 +label.componentanimationpanel_componentanimationpanel_movespeed=移动速度 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentBitmapPanel +checkbox.componentbitmappanel_componentbitmappanel_width=宽度 +checkbox.componentbitmappanel_componentbitmappanel_height=高度 +border.componentbitmappanel_componentbitmappanel_previewer=预览 +label.componentbitmappanel_componentbitmappanel_path=路径: +label.componentbitmappanel_componentbitmappanel_replaceableId=替换ID: +label.componentbitmappanel_componentbitmappanel_export_texture=导出贴图 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentGlobalSequencePanel +label.componentglobalsequencepanel_componentglobalsequencepanel_global_sequence=全局序列 +label.componentglobalsequencepanel_componentglobalsequencepanel_duration=持续时长: + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentHeaderPanel +label.componentheaderpanel_componentheaderpanel_model_name=模式名称: +label.componentheaderpanel_componentheaderpanel_format_version=格式版本: +label.componentheaderpanel_componentheaderpanel_blend_time=混合时间: +border.componentheaderpanel_componentheaderpanel_extents=范围 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentMaterialPanel +label.componentmaterialpanel_componentmaterialpanel_priority=优先面: + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ComponentsPanel +label.componentspanel_componentspanel_blankpanel=请选择模组... + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/components/ExtLogEditor +checkbox.extLogeditor_extLogeditor_minimum_extent=最小范围 +checkbox.extLogeditor_extLogeditor_maximum_extent=最大范围 +checkbox.extLogeditor_extLogeditor_bounds_radius=范围半径 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoneAction +string.drawboneaction_actionname=添加 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawBoxAction +string.drawboxaction_actionname=创建选项 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawCameraAction +string.drawcameraaction_actionname=添加 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawPlaneAction +string.drawplaneaction_actionname=创建面 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawVertexAction +string.drawvertexaction_actionname=添加顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/NewGeosetAction +string.newgeosetaction_actionname=创建几何体 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/actions/DrawPlaneManipulator +println.drawplanemnipulator.undoaction=无可撤销操作 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/creator/CreatorModelingPanel +element.creatormodelingpanel_creatormodelingpanel_mesh_basics=网格基础 +element.creatormodelingpanel_creatormodelingpanel_standard_primitives=标准基元 +element.creatormodelingpanel_creatormodelingpanel_extended_primitives=平铺基元 +element.creatormodelingpanel_creatormodelingpanel_animation_nodes=动画节点 +border.creatormodelingpanel_creatormodelingpanel_drawprimitivespanel=渲染 +button.creatormodelingpanel_creatormodelingpanel_planebutton=面 +button.creatormodelingpanel_creatormodelingpanel_box=框 +border.creatormodelingpanel_creatormodelingpanel_options=设置 +button.creatormodelingpanel_makemeshbasicspanel_vertex=顶点 +button.creatormodelingpanel_makemeshbasicspanel_face_election=所选脸部 +button.creatormodelingpanel_makemeshbasicspanel_bone=骨骼 +dialog.creatormodelingpanel_makemeshbasicspanel_unable_create_face=模式错误,面创建失败 +border.creatormodelingpanel_makemeshbasicspanel_draw=渲染 +border.creatormodelingpanel_makemeshbasicspanel_manipulate=操作 +border.creatormodelingpanel_makeanimationbasicspanel_manipulate=操作 +println.creatormodelingpanel_reloadanimationlist_custom_timeframe=自定时间帧 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/cutpaste/ViewportTransferHandler +println.viewporttransferhandler_importdata_unsupportedflavorexception=导入数据格式不受支持 +println.viewporttransferhandler_importdata_ioexception=导入数据:I/O异常 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddKeyframeAction +exception.addkeyframeaction_redo=无法为关键帧添加插值信息(inTan/outTan),因为之前操作的动画数据为“线性”或“不插值” +string.addkeyframeaction_actionname=添加关键帧 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelineAction +string.addtimelineaction_actionname=添加时间轴 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/AddTimelinesAction +string.addtimelinesaction_actionname=添加时间轴 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/RotationKeyframeAction +string.rotationkeyframeaction_actionname=编辑旋转 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/ScalingKeyframeAction +string.scalingkeyframeaction_actionname=编辑旋转 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SetKeyframeAction +exception.setkeyframeaction_undo=无法为关键帧添加插值信息(inTan/outTan),因为之前操作的动画数据为“线性”或“不插值” +exception.setkeyframeaction_redo=无法为关键帧设置插值信息(inTan/outTan),因为之前操作的动画数据为“线性”或“不插值” +string.setkeyframeaction_actionname=设置关键帧 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeAction +string.slidekeyframeaction_actionname=移动关键帧 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SlideKeyframeByIndexAction.ja +string.slidekeyframebyiindexaction_actionname=移动关键帧 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/SquatToolKeyframeAction +string.squattoolkeyframeaction_actionname=编辑旋转 squat + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/animation/TranslationKeyframeAction +string.translationkeyframeaction_actionname=编辑转换 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/ScaleAction +string.scaleaction_actionname=缩放 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/SimpleRotateAction +string.simplerotateaction_actionname=旋转 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshMoveAction +string.staticmeshmoveaction_actionname=移动 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshRotateAction +string.staticmeshrotateaction_actionname=旋转 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/editor/StaticMeshScaleAction +string.staticmeshscaleaction_actionname=缩放 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/nodes/DeleteNodesAction +string.deletenodesaction_actionname=删除节点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/AddSelectionAction +string.addselectionaction_actionname=添加选择 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/HideGeosetsAction +string.hidegeosetsaction_actionname=隐藏几何体 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeEditableAction +string.makeeditableaction_actionname=切换可见性 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/MakeNotEditableAction +string.makenoteditableaction_actionname=切换可见性 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/selection/RemoveSelectionAction +string.removeselectionaction_actionname=取消 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AddTriangleAction +string.addtriangleaction_actionname=添加脸部 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AdvancedCloneAction +string.advancedcloneaction_actionname=关闭 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/AutoCenterBonesAction +string.autocenterbonesaction_actionname=自动居中骨骼 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/CloneAction +string.cloneaction_actionname=关闭 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/DeleteDownToOneTVerticesLayerAction +string.deletedowntoonetverticeslayeraction_actionname=删除至仅剩一个顶点层 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/EditAnimationLengthsAction +string.editanimationlengthsaction_actionname=编辑动画长度(秒) + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipFacesAction +string.flipfacesaction_actionname=翻转脸部 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/FlipNormalsAction +string.flipnormalsaction_actionname=翻转法线 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/MirrorModelAction +string.mirrormodelaction_actionname=镜像 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/ReLinkRFBoneAction +string.reLinkrfboneaction_actionname=RF可能要再次连接骨骼 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RenameBoneAction +string.renameboneaction_actionname_rename=重命名 +string.renameboneaction_actionname_to= 为 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetMatrixAction +string.setmatrixaction_actionname=重新分配矩阵 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/RigAction +string.rigaction_actionname=装备 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/actions/tools/SetParentAction +string.setparentaction_actionname=设置父级 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/manipulator/AbstractExtrudeManipulator +string.abstractextrudemanipulator_undoAction=拉伸 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/MirrorTVerticesAction +string.mirrortverticesaction_actionname=镜像 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/SimpleRotateUVAction +string.simplerotateuvaction_actionname=转动 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVMoveAction +string.staticmeshuvmoveaction_actionname=移动 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVRotateAction +string.staticmeshuvrotateaction_actionname=转动 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/actions/StaticMeshUVScaleAction +string.staticmeshuvscaleaction_actionname=缩放 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/AbstractTVertexEditor +string.abstracttvertexeditor_selectfromviewer=从预览中选择UV + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/FaceTVertexEditor +string.facetvertexeditor_expandselection=展开选择 +string.facetvertexeditor_invertselection=反选 +string.facetvertexeditor_selectall=全选 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/GeosetVertexTVertexEditor +string.geosetvertextvertexeditor_expandselection=展开选择 +string.geosetvertextvertexeditor_invertselection=反选 +string.geosetvertextvertexeditor_selectall=全选 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/uv/TVertexEditorNotifier +exception.tvertexeditornotifier_getuvlayerindex=UV层索引存在差异: + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractModelEditor +println.abstractmodeleditor_beginextrudingselection_geosetvertex=几何体顶点 +println.abstractmodeleditor_beginextrudingselection_not_found= 未找到 +println.abstractmodeleditor_beginextrudingselection_bloody=这是场血腥的战争! +println.abstractmodeleditor_beginextrudingselection_verteces= 顶点被克隆到 +println.abstractmodeleditor_beginextrudingselection_more= 更多 +println.abstractmodeleditor_beginextrudingselection_holy=天啊! +println.abstractmodeleditor_beginextrudingselection_vertex_gvcopy=顶点复制为空! +println.abstractmodeleditor_beginextrudingselection_vertex_gvtempcopy=顶点(临时)复制为空! +println.abstractmodeleditor_beginextrudingselection_indeces= 索引: +println.abstractmodeleditor_beginextrudingselection_new_face=新脸部: +println.abstractmodeleditor_beginextrudingselection_new_alternate_face=新替换脸部: +println.abstractmodeleditor_beginextrudingselection_should=应该要: +println.abstractmodeleditor_beginextrudingselection_extrude=拉伸完成但遇到 +println.abstractmodeleditor_beginextrudingselection_inexplicable= 未知错误 +println.abstractmodeleditor_beginextendingselection_geosetvertex=几何体顶点 +println.abstractmodeleditor_beginextendingselection_not_found= 未找到 +println.abstractmodeleditor_beginextendingselection_more= 更多 +println.abstractmodeleditor_beginextendingselection_vertex_gvcopy=顶点复制为空! +println.abstractmodeleditor_beginextendingselection_vertex_gvtempcopy=顶点(临时)复制为空! +println.abstractmodeleditor_beginextendingselection_indeces= 索引: +println.abstractmodeleditor_beginextendingselection_new_face=新脸部: +println.abstractmodeleditor_beginextendingselection_new_alternate_face=新替换脸部: +println.abstractmodeleditor_beginextendingselection_verteces= 顶点被克隆到 +exception.abstractmodeleditor_cloneselectedcomponents=用户不希望继续,因此系统中断克隆(不影响模型) +action.abstractmodeleditor_rotate=转动 +exception.abstractmodeleditor_beginsquattool=禁止在动画编辑器外使用蹲下工具 +exception.abstractmodeleditor_createkeyframe=禁止在动画编辑器外创建关键帧 +layer.abstractmodeleditor_addplane_solidwhitegeoset=无 +action.abstractmodeleditor_addplane_create_plane=创建面 +layer.abstractmodeleditor_addbox_solidwhitegeoset=无 +action.abstractmodeleditor_addbox_create_plane=创建面 +exception.abstractmodeleditor_addbone=禁止在轴心点编辑器外添加骨骼 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/AbstractSelectingEditor +action.abstractselectingeditor_setselectionwithaction=选择 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/CloneContextHelper +exception.clonecontexthelper_cloneselectedcomponents=用户不希望继续,因此系统中断克隆(不影响模型) + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/FaceModelEditor +exception.facemodeleditor_autocenterselectedbones=脸部识别模式禁用此功能 +exception.facemodeleditor_setselectedbonename=脸部识别模式禁用此功能 +exception.facemodeleditor_addselectedbonesuffix=脸部识别模式禁用此功能 +action.facemodeleditor_expandselection=展开选择 +action.facemodeleditor_invertselection=反选 +action.facemodeleditor_selectall=全选 +action.facemodeleditor_selecthdunusednodes=选择未使用高清 +exception.facemodeleditor_addvertex=脸部选择模式禁止添加顶点 +exception.facemodeleditor_createfacefromselection=脸部选择模式下禁止创建脸部顶点 +exception.facemodeleditor_setparent=脸部识别模式禁用此功能 +exception.facemodeleditor_relinkrfbone=脸部识别模式禁用此功能 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/GeosetVertexModelEditor +exception.geosetvertexmodeleditor_autocenterselectedbones=几何体顶点模式禁用此功能 +exception.geosetvertexmodeleditor_setselectedbonename=几何体顶点模式禁用此功能 +exception.geosetvertexmodeleditor_addselectedbonesuffix=几何体顶点模式禁用此功能 +action.geosetvertexmodeleditor_expandselection=展开选择 +action.geosetvertexmodeleditor_invertselection=反选 +action.geosetvertexmodeleditor_selectall=全选 +action.geosetvertexmodeleditor_selecthdunusednodes=选择未使用高清 +layer.geosetvertexmodeleditor_addVertex_none=无 +action.geosetvertexmodeleditor_addVertex_add_vertex=添加顶点 +exception.geosetvertexmodeleditor_createfacefromselection_create_vertices=一张脸部只能拥有3个顶点(已有 +exception.geosetvertexmodeleditor_createfacefromselection_selected= 个选择) +exception.geosetvertexmodeleditor_createfacefromselection_all_create=一张脸部的三个顶点必须属于同一个几何体 +exception.geosetvertexmodeleditor_createfacefromselection_exists=三角形已存在 +exception.geosetvertexmodeleditor_setparent=几何体顶点模式禁用此功能 +exception.geosetvertexmodeleditor_relinkrfbone=几何体顶点模式禁用此功能 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/PivotPointModelEditor +exception.pivotpointmodeleditor_setselectedbonename_rename=一次只能重命名一根骨骼。 +exception.pivotpointmodeleditor_setselectedbonename_error=错误。多根骨骼绑定了同一内存地址。请保存并重启程序。 +exception.pivotpointmodeleditor_setselectedbonename_selection=选择的不是节点 +action.pivotpointmodeleditor_addselectedbonesuffix=添加所选骨骼后缀 +action.pivotpointmodeleditor_addteamcolor=添加队伍颜色 +action.pivotpointmodeleditor_split_geoset=拆分几何体 +action.pivotpointmodeleditor_expandselection=展开选择 +action.pivotpointmodeleditor_invertselection=反选 +action.pivotpointmodeleditor_selectall=全选 +println.pivotpointmodeleditor_selecthdunusednodes=注:是否要使用辅助函数: +action.pivotpointmodeleditor_selecthdunusednodes=选择未使用高清 +action.pivotpointmodeleditor_createfacefromselection=创建脸部 +action.pivotpointmodeleditor_addvertex=添加顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/TPoseModelEditor +exception.tposemodeleditor_setselectedbonename=一次只能重命名一根骨骼。 +exception.tposemodeleditor_setselectedbonename_selection=选择的不是节点 +exception.tposemodeleditor_setselectedbonename_add_bone=添加所选骨骼后缀 +exception.tposemodeleditor_addteamcolor=添加队伍颜色 +exception.tposemodeleditor_split_geoset=拆分几何体 +exception.tposemodeleditor_expandselection=T型姿势模式不支持此功能 +exception.tposemodeleditor_invertselection=T型姿势模式不支持此功能 +exception.tposemodeleditor_selectall=T型姿势模式不支持此功能 +exception.tposemodeleditor_selecthdunusednodes=T型姿势模式不支持此功能 +action.tposemodeleditor_createfacefromselection=创建脸部 +action.tposemodeleditor_addvertex=添加顶点 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterModelEditor +exception.vertexclustermodeleditor_autocenterselectedbones=顶点组模式禁用此功能 +exception.vertexclustermodeleditor_setselectedbonename=顶点组模式禁用此功能 +exception.vertexclustermodeleditor_addselectedbonesuffix=顶点组模式禁用此功能 +action.vertexclustermodeleditor_expandselection=展开选择 +action.vertexclustermodeleditor_invertselection=反选 +action.vertexclustermodeleditor_selectall=全选 +action.vertexclustermodeleditor_selecthdunusednodes=选择未使用高清 +exception.vertexclustermodeleditor_createfacefromselection=顶点组选择模式禁止创建脸部顶点 +exception.vertexclustermodeleditor_addvertex=顶点组选择模式禁止绘制顶点 +exception.vertexclustermodeleditor_setparent=顶点组模式禁用此功能 +exception.vertexclustermodeleditor_relinkrfbone=顶点组模式禁用此功能 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexClusterSelectionManager +exception.vertexclusterselectionmanager_getuvcenter=尚未实现 +exception.vertexclusterselectionmanager_getselectedtvertices=尚未实现 +exception.vertexclusterselectionmanager_getcircumscribedsphereradius=尚未实现 +exception.vertexclusterselectionmanager_rendeuvselection=尚未实现 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupModelEditor +exception.vertexgroupmodeleditor_autocenterselectedbones=顶点组模式禁用此功能 +exception.vertexgroupmodeleditor_setselectedbonename=顶点组模式禁用此功能 +exception.vertexgroupmodeleditor_addselectedbonesuffix=顶点组模式禁用此功能 +action.vertexgroupmodeleditor_expandselection=展开选择 +action.vertexgroupmodeleditor_invertselection=反选 +action.vertexgroupmodeleditor_selectall=全选 +action.vertexgroupmodeleditor_selecthdunusednodes=选择未使用高清 +exception.vertexgroupmodeleditor_createfacefromselection=顶点组选择模式禁止创建脸部顶点 +exception.vertexgroupmodeleditor_addvertex=顶点组选择模式禁止绘制顶点 +exception.vertexgroupmodeleditor_setparent=顶点组模式禁用此功能 +exception.vertexgroupmodeleditor_relinkrfbone=顶点组模式禁用此功能 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/newstuff/VertexGroupSelectionManager +exception.vertexgroupselectionmanager_getuvcenter=尚未实现 +exception.vertexgroupselectionmanager_getselectedtvertices=尚未实现 +exception.vertexgroupselectionmanager_getcircumscribedsphereradius=尚未实现 +exception.vertexgroupselectionmanager_renderuvselection=尚未实现 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionItemTypes +string.selectionitemtypes_select_vertices=选择顶点 +string.selectionitemtypes_select_faces=选择脸部 +string.selectionitemtypes_select_groups=选择组 +string.selectionitemtypes_select_nodes_animate=选择节点和动画 +string.selectionitemtypes_select_cluster=选择簇 +string.selectionitemtypes_sSelect_tpose=选择T型姿势 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/SelectionMode +string.selectionmode_select=选择 +string.selectionmode_add_selection=添加所选 +string.selectionmode_deselect=取消 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/selection/TVertexSelectionItemTypes +string.tvertexselectionitemtypes_select_vertices=选择顶点 +string.tvertexselectionitemtypes_select_faces=选择脸部 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/ModelComponentAnimFlagTree +string.layer_layer_none=无 +string.layer_layer_transparent=透明 +string.layer_layer_blend=混合 +string.layer_layer_additive=累加 +string.layer_layer_addalpha=添加Alpha +string.layer_layer_modulate=调制 +string.layer_layer_modulate2x=调制2x +println.modelcomponentanimflagtree=重新加载模型浏览器树 +string.modelcomponentanimflagtree_buildtreemodel_tvertexanims=顶点动画 +string.modelcomponentanimflagtree_buildtreemodel_geosetanims=几何体动画 +string.modelcomponentanimflagtree_buildtreemodel_nodes=节点 +string.modelcomponentanimflagtree_buildtreemodel_cameras=镜头 +string.modelcomponentanimflagtree_chooseablemodelroot_model=模型 +string.modelcomponentanimflagtree_chooseablemodelcomment_comment=备注 +string.modelcomponentanimflagtree_chooseablemodelheader_header=头部 +string.modelcomponentanimflagtree_chooseableanimationitem_anim=动画 +string.modelcomponentanimflagtree_chooseableglobalsequenceitem_1=全局序列 +string.modelcomponentanimflagtree_chooseableglobalsequenceitem_2=: 持续时长 +string.modelcomponentanimflagtree_chooseablematerialitem=材质: +string.modelcomponentanimflagtree_chooseableanimflagitem= 轨迹 +string.modelcomponentanimflagtree_chooseablebitmapitem=贴图 +string.modelcomponentanimflagtree_chooseabletextureanimitem=纹理动画 +string.modelcomponentanimflagtree_chooseablegeosetitem=几何体 +string.modelcomponentanimflagtree_chooseablegeosetanimitem_1=几何体动画 +string.modelcomponentanimflagtree_chooseablegeosetanimitem_2=几何体ID +string.modelcomponentanimflagtree_chooseableboneitem=无 +string.modelcomponentanimflagtree_chooseablehelperitem=帮助 +string.modelcomponentanimflagtree_chooseablelightiItem=光照 +string.modelcomponentanimflagtree_chooseableattachmentitem=附着 +string.modelcomponentanimflagtree_chooseableparticleemitteritem=粒子发射器 +string.modelcomponentanimflagtree_chooseableparticleemitter2item=粒子发射器2 +string.modelcomponentanimflagtree_chooseableparticleemitterpopcornitem=粒子发射器爆米花 +string.modelcomponentanimflagtree_chooseableribbonemitteritem=缎带发射器 +string.modelcomponentanimflagtree_chooseableeventobjectitem=对象事件 +string.modelcomponentanimflagtree_chooseablecollisionshapeitem=碰撞形状 +string.modelcomponentanimflagtree_chooseablecameraitem=镜头 +string.modelcomponentanimflagtree_chooseablefaceeffectschunkitem=脸部特效 +string.modelcomponentanimflagtree_chooseablebindposechunkitem=绑定姿势块 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/tracks/TracksEditorPanel +label.trackseditorpanel_trackseditorpanel_scale=缩放 +label.trackseditorpanel_trackseditorpanel_mouse=鼠标 +label.trackseditorpanel_deletekeyframes_delete_keyframe=删除关键帧 +label.trackseditorpanel_deletekeyframes_delete_keyframe_s=删除关键帧(s) +label.trackseditorpanel_mousereleased=滑动关键帧(s) + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/AnimatedViewportModelRenderer +exception.animatedviewportmodelrenderer_trianglerendererimpl_x=x 轴无效 +exception.animatedviewportmodelrenderer_trianglerendererimpl_y=y 轴无效 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/viewport/ViewportModelRenderer +exception.viewportmodelrenderer_trianglerendererimpl_x=x 轴无效 +exception.viewportmodelrenderer_trianglerendererimpl_y=y 轴无效 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ImportPanel +checkbox.importpanel_displayparents=显示父级名称 +button.importpanel_allmatroriginal=重置所有矩阵 +button.importpanel_allmatrsamename=将所有内容设置为可用,并保留原始名称 +button.importpanel_applysmartmapping=应用智能映射 +string.importpanel_importpanel_imported= (导入) +frame.importpanel_importpanel_imported=导入 +frame.importpanel_importpanel_into_itself= 到自身 +frame.importpanel_importpanel_into= 到 +dialog.importpanel_importpanel_error=错误:未找到图片!由于编程错误,可能导致程序崩溃! +tab.importpanel_importpanel_geosets=几何体 +tab.importpanel_importpanel_geosets_imported=导入的几何体 +tab.importpanel_importpanel_modify_geoset=点击修改几何体材质 +tab.importpanel_importpanel_modify_importing_geoset=点击修改导入和几何体材质 +button.importpanel_importpanel_importallgeos=导入全部 +button.importpanel_importpanel_uncheckallgeos=移除全部 +tab.importpanel_importpanel_animation=动画 +tab.importpanel_importpanel_animations_imported=选择导入的动画 +button.importpanel_importpanel_importallanims=导入全部 +button.importpanel_importpanel_timescaleallanims=时间缩放全部 +button.importpanel_importpanel_renameallanims=导入全部并重命名 +button.importpanel_importpanel_uncheckallanims=移除全部 +checkbox.importpanel_importpanel_clearexistinganims=清除现有动画 +tab.importpanel_importpanel_modify_animation_sequence=点击修改动画序列 +tab.importpanel_importpanel_bones=骨骼 +tab.importpanel_importpanel_bones_imported=选择导入的骨骼 +checkbox.importpanel_importpanel_clear_bones_helpers=清除现有骨骼和辅助对象 +button.importpanel_importpanel_importallbones=导入全部 +button.importpanel_importpanel_uncheckAllBones=移除全部 +button.importpanel_importpanel_motionfrombones=移动全部 +button.importpanel_importpanel_uncheckunusedbones=不选未使用 +tab.importpanel_importpanel_matrices=矩阵 +tab.importpanel_importpanel_bones_attached=选择附着到骨骼的几何体 +tab.importpanel_importpanel_modify_animation=点击修改几何体动画 +tab.importpanel_importpanel_from= 源自 +tab.importpanel_importpanel_objects=对象 +tab.importpanel_importpanel_objects_imported=选择导入对象 +button.importpanel_importpanel_importallobjs=导入全部 +button.importpanel_importpanel_uncheckallobjs=移除全部 +tab.importpanel_importpanel_visibility=可见性 +tab.importpanel_importpanel_visibility_model=设置模型可见性。 +button.importpanel_importpanel_invisible_exotic_anims=隐藏全部外部动画 +settooltiptext.importpanel_importpanel_forces_invisibile=除原有动画外,强制隐藏外部动画。 +button.importpanel_importpanel_visible_exotic_anims=显示全部外部动画 +settooltiptext.importpanel_importpanel_forces_visibile=显示全部动画,包括原有和外部。 +button.importpanel_importpanel_select_similar_options=选择类似选项 +settooltiptext.importpanel_importpanel_similar_options=同步所选外部动画类似组件的可见性。 +dialog.importpanel_importpanel_really_cancel_import=确定取消导入? +dialog.importpanel_importpanel_choose_naming=选择其他命名(例如 swim 或 alternate) +println.importpanel_importpanel_check_base=检查基础: +println.importpanel_importpanel_adding_base= @添加基础: +println.importpanel_importpanel_redirected_adding= @重定向 + 添加: +dialog.importpanel_importpanel_object_bone_parent_loop=意外:对象ID到骨骼父节点循环逻辑错误 +println.importpanel_importpanel_check_geoset=检查几何体: +println.importpanel_importpanel_check_matrixshell=检查矩阵框架: +println.importpanel_importpanel_check_matrixshell_sub=检查矩阵框架子程序: +dialog.importpanel_importpanel_applysmartmapping=应用智能映射 +println.importpanel_getfutureboneListeextended_average_add_time=平均添加时间: +println.importpanel_getfutureboneListeextended_add_count=添加数量: +println.importpanel_getfutureboneListeextended_average_remove_time=平均移除时间: +println.importpanel_getfutureboneListeextended_remove_count=移除数量: +println.importpanel_getfutureboneListeextended_allvisshells=全部可见框架: +println.importpanel_getfutureboneListeextended_new_old=新/旧: +dialog.importpanel_setparentmultibones_bones_set_parent=为所选骨骼设置父级 +dialog.importpanel_doimport_confused=程序异常 +println.importpanel_doimport_clear_animation=尝试清除动画: +println.importpanel_doimport_values= 值 +dialog.importpanel_doimport_geoset_attach_helper=错误:几何体不能附着辅助对象,只能附着骨骼! +dialog.importpanel_doimport_bone_shaving=修骨器 +dialog.importpanel_doimport_out_use= 已无法使用 +dialog.importpanel_doimport_matrix_destroyed=错误:导入时矩阵功能被破坏,可能导致程序崩溃! +dialog.importpanel_doimport_matrices_empty_dummy_bone=警告:系统检测到部分矩阵留空,已自动为其生成名为{0, 0, 0}的虚拟骨骼 +dialog.importpanel_doimport_multiple_geosets_attached_bone=\n此骨骼已附着多个几何体(此错误仅报告一次)。 +dialog.importpanel_animtransferparttwo_transfer_bug=动画转换错误:尝试了不必要的两部分转换 +dialog.importpanel_animtransferparttwo_visibility_component=可见性组件: +checkbox.importpanel_geosetpanel_import_geoset=导入几何体 +label.importpanel_geosetpanel_material=矩阵: +string.importpanel_getListcellrenderercomponent_original= (原初) +string.importpanel_getListcellrenderercomponent_import=导入: +string.importpanel_animpanel_import=按原样导入 +string.importpanel_animpanel_change=新名称: +string.importpanel_animpanel_time_scale=时间缩放融入现有: +string.importpanel_animpanel_rebuild=重建为全局序列 +checkbox.importpanel_animpanel_animpanel_import_sequence=导入序列 +checkbox.importpanel_animpanel_animpanel_reverse=翻转 +string.importpanel_bonepanel_import_bone=导入骨骼 +string.importpanel_bonepanel_import_motion=导入动作到: +string.importpanel_bonepanel_not_import=不导入 +string.importpanel_bonepanel_parent_old=父级: (旧父级: +string.importpanel_bonepanel_parent_old_no=父级: (旧父级: {无}) +println.importpanel_updateselectionpicks=更新未来骨骼列表耗时 +button.importpanel_multibonepanel_setallparent=设置所有父级 +label.importpanel_multibonepanel_multiple_selected=多选 +importtypebox.importpanel_setmultitypes=多选 +println.importpanel_actionperformed=MultiBonePanel.actionPerformed() 耗时 +settext.importpanel_getlistcellrenderercomponent=(无父级) +tab.importpanel_geosetanimationpanel_bones=骨骼 +tab.importpanel_geosetanimationpanel_edit_bone_references=允许编辑骨骼参考 +tab.importpanel_geosetanimationpanel_visibility=可见性 +tab.importpanel_geosetanimationpanel_edit_visibility=允许编辑可见性 +label.importpanel_boneattachmentpane_bones=骨骼 +button.importpanel_boneattachmentpane_use_bones=使用骨骼(s) +label.importpanel_boneattachmentpane_old_bone_references=旧骨骼的参考 +label.importpanel_boneattachmentpane_new_refs=新参考 +button.importpanel_boneattachmentpane_remove=删除 +println.importpanel_buildoldrefslist=处理矩阵时遇到一个空值,虽然可能不太好,但早有预料。 +checkbox.importpanel_objectpanel_import_object=导入对象 +label.importpanel_objectpanel_parent=父级 +label.importpanel_objectpanel_old_parent=(旧父级: +label.importpanel_objectpanel_old_parent_no=(旧父级: {无}) +label.importpanel_objectpanel_cameras_no_parents=(镜头无父级) +label.importpanel_multiobjectpanel_multiple_selected=多选 +checkbox.importpanel_multiobjectpanel_doImport=导入所选对象(点击可全部应用) +label.importpanel_multiobjectpanel_parent=父级: +label.importpanel_multiobjectpanel_parent_displayed=(旧父级只能为单个对象显示) +string.importpanel_visibilitypane_not_visible=不可见 +string.importpanel_visibilitypane_always_visible=总是可见 +label.importpanel_visibilitypane_existing_animation_visibility=当前动画可见性源自: +label.importpanel_visibilitypane_imported_animation_visibility=导入动画可见性源自: +checkbox.importpanel_visibilitypane_original_visibility=组合时保留组件原始可见性 +label.importpanel_multivisibilitypane_multiple_selected=多选 +label.importpanel_multivisibilitypane_existing_animation_visibilit=当前动画可见性源自: +label.importpanel_multivisibilitypane_imported_animation_visibility=导入动画可见性源自: +checkbox.importpanel_multivisibilitypane_original_visibility=组合时保留组件原始可见性 +string.importpanel_setmultipleold=多选 +string.importpanel_setmultiplenew=多选 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/MatrixPopup +checkbox.matrixpopup_matrixpopup_displayparents=显示父级 +label.matrixpopup_matrixpopup_boneslabel=骨骼 +label.matrixpopup_matrixpopup_usebone=使用骨骼(s) +label.matrixpopup_matrixpopup_newrefslabel=新参考 +button.matrixpopup_matrixpopup_removenewref=删除 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelComponentBrowserTree +string.modelcomponentbrowsertree_buildtreemodel_sequences=序列 +string.modelcomponentbrowsertree_buildtreemodel_globalsequences=全局序列 +string.modelcomponentbrowsertree_buildtreemodel_textures=纹理 +string.modelcomponentbrowsertree_buildtreemodel_materials=材质 +string.modelcomponentbrowsertree_buildtreemodel_tvertexanims=顶点动画 +string.modelcomponentbrowsertree_buildtreemodel_geosets=几何体 +string.modelcomponentbrowsertree_buildtreemodel_geosetsanims=几何体动画 +string.modelcomponentbrowsertree_buildtreemodel_nodes=节点 +string.modelcomponentbrowsertree_buildtreemodel_cameras=镜头 +string.modelcomponentbrowsertree_chooseablemodelroot_model=模型 +string.modelcomponentbrowsertree_chooseablemodelcomment_comment=备注 +string.modelcomponentbrowsertree_chooseablemodelheader_header=头部 +string.modelcomponentbrowsertree_chooseableanimationitem_anim=动画 +string.modelcomponentbrowsertree_chooseableglobalsequenceitem_globalsequence=全局序列 +string.modelcomponentbrowsertree_chooseableglobalsequenceitem_duration=: 持续时间 +string.modelcomponentbrowsertree_chooseablebitmapitem_bitmap=贴图 +string.modelcomponentbrowsertree_chooseablematerialitem_material=材质 +string.modelcomponentbrowsertree_chooseabletextureanimitem_textureanim=纹理动画 +string.modelcomponentbrowsertree_chooseablegeosetanimitem_geosetanim=几何体动画 +string.modelcomponentbrowsertree_chooseableboneitem_bone=骨骼 +string.modelcomponentbrowsertree_chooseablehelperitem_helper=帮助 +string.modelcomponentbrowsertree_chooseablelightitem_light=光照 +string.modelcomponentbrowsertree_chooseableattachmentitem_attachment=附着 +string.modelcomponentbrowsertree_chooseableparticleemitteritem_particleemitter=粒子发射器 +string.modelcomponentbrowsertree_chooseableparticleemitter2item_particleemitter=粒子发射器2 +string.modelcomponentbrowsertree_chooseableparticleemitterpopcornitem_particleemitter=粒子发射器爆米花 +string.modelcomponentbrowsertree_chooseableribbonemitteritem_ribbonemitter=缎带发射器 +string.modelcomponentbrowsertree_chooseableeventobjectitem_eventobject=对象事件 +string.modelcomponentbrowsertree_chooseablecollisionshapeitem_collisionshape=碰撞形状 +string.modelcomponentbrowsertree_chooseablecameraitem_camera=镜头 +string.modelcomponentbrowsertree_chooseablefaceeffectschunkitem_facefx=脸部特效 +string.modelcomponentbrowsertree_chooseablebindposechunkitem_bindposechunk=绑定姿势块 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelPanel +displayPanel.modelpanel_modelpanel_frontarea=正视图 +displayPanel.modelpanel_modelpanel_botarea=底视图 +displayPanel.modelpanel_modelpanel_sidearea=侧视图 +displayPanel.modelpanel_modelpanel_persparea=透视图 +description.modelpanel_actionperformed_control_model_editing=允许控制模型可显示部位以编辑。 +dialog.modelpanel_actionperformed_opening_command_failed=命令打开失败: +dialog.modelpanel_actionperformed_opening_file=文件打开异常: +dialog.modelpanel_close_1=是否保存 +dialog.modelpanel_close_2=? +dialog.modelpanel_close_3=警告 +string.modelpanel_viewmatrices_1= 和 +string.modelpanel_viewmatrices_2=未选择任何附着在骨骼上的内容。 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ModelViewManagingTree +checkboxtreenode.modelviewmanagingtree_buildtreemodel_mesh=网格 +checkboxtreenode.modelviewmanagingtree_buildtreemodel_nodes=节点 +checkboxtreenode.modelviewmanagingtree_buildtreemodel_cameras=镜头 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/PerspectiveViewport +menuitem.perspectiveviewport_perspectiveviewport_reassign_matrix=重分配矩阵 +menuitem.perspectiveviewport_perspectiveviewport_aAuto_center_bone=自动居中骨骼(s) +dialog.perspectiveviewport_initgl_failed=初始化 GL 失败,原因:\n +display.perspectiveviewport_paintgl_loading_textures=纹理加载错误: +display.perspectiveviewport_paintgl_loading_new_textures=新纹理加载错误: +dialog.perspectiveviewport_actionperformed_rebuild_matrix=重建矩阵 +dialog.perspectiveviewport_actionperformed_approved=同意 +dialog.perspectiveviewport_actionperformed_viewport_not_implemented=请使用其他窗口,当前窗口中无法执行此操作。 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/ProgramPreferencesPanel +label.programpreferencespanel_programpreferencespanel_viewmodelabel=3D视图 +radiobutton.programpreferencespanel_programpreferencespanel_wireframeviewmode=线框图 +radiobutton.programpreferencespanel_programpreferencespanel_solidviewmode=立面图 +label.programpreferencespanel_programpreferencespanel_gridlines=显示窗口网格线: +label.programpreferencespanel_programpreferencespanel_boxes=使用方格表示节点: +label.programpreferencespanel_programpreferencespanel_browse=快速浏览 +settooltiptext.programpreferencespanel_programpreferencespanel_close_model=打开新模型时,如果旧模型未修改,请将其关闭。 +label.programpreferencespanel_programpreferencespanel_loading_blp=允许加载非BLP纹理: +settooltiptext.programpreferencespanel_programpreferencespanel_opening_png=使用标准“文件打开”功能打开PNG文件 +label.programpreferencespanel_programpreferencespanel_render=渲染粒子发射器 +label.programpreferencespanel_programpreferencespanel_mdl_text=自动刷新MDL文本(启用会增大延迟): +label.programpreferencespanel_programpreferencespanel_opengl=强制使用OpenGL(可能修复Windows用户界面错误): +label.programpreferencespanel_programpreferencespanel_minimal_matrices=在高清中(\"4.5\"保存格式),请始终使用最小的矩阵: +addtab.programpreferencespanel_programpreferencespanel_general=常规 +dialog.programpreferencespanel_programpreferencespanel_restart=部分设置可能需要重启程序才能生效。 +dialog.programpreferencespanel_programpreferencespanel_restart_1=警告 +label.programpreferencespanel_programpreferencespanel_background_color=背景色: +label.programpreferencespanel_programpreferencespanel_vertex_color=顶点颜色: +label.programpreferencespanel_programpreferencespanel_triangle_color=三角颜色: +label.programpreferencespanel_programpreferencespanel_select_color=选择颜色: +label.programpreferencespanel_programpreferencespanel_triangle_highlight_color=三角高亮颜色: +label.programpreferencespanel_programpreferencespanel_vertex_highlight_color=顶点高亮颜色: +label.programpreferencespanel_programpreferencespanel_perspective_background_color=透视背景色: +label.programpreferencespanel_programpreferencespanel_visible_uneditable_mesh_color=可见且不可编辑的网格颜色: +label.programpreferencespanel_programpreferencespanel_animation_bone_color=动画编辑器骨骼颜色: +label.programpreferencespanel_programpreferencespanel_animation_selected_bone_color=动画编辑器选择骨骼颜色: +label.programpreferencespanel_programpreferencespanel_animation_selected_upstream_color=动画编辑器所选上游颜色: +label.programpreferencespanel_programpreferencespanel_pivot_color=支点颜色: +label.programpreferencespanel_programpreferencespanel_pivot_selected_color=选择支点颜色: +label.programpreferencespanel_programpreferencespanel_button_color_b1=按钮 B 第一种颜色: +label.programpreferencespanel_programpreferencespanel_button_color_b2=按钮 B 第二种颜色: +label.programpreferencespanel_programpreferencespanel_button_color_1=按钮第一种颜色: +label.programpreferencespanel_programpreferencespanel_button_color_2=按钮第二种颜色: +label.programpreferencespanel_programpreferencespanel_button_color_r1=按钮 R 第一种颜色: +label.programpreferencespanel_programpreferencespanel_button_color_r2=按钮 R 第二种颜色: +label.programpreferencespanel_programpreferencespanel_theme=主题: +label.programpreferencespanel_programpreferencespanel_color_theme=颜色/主题 +label.programpreferencespanel_programpreferencespanel_camera_spin=3D镜头旋转 +label.programpreferencespanel_programpreferencespanel_camera_pan=3D镜头全景拍摄 +addtab.programpreferencespanel_programpreferencespanel_hotkeys=快捷键 +addtab.programpreferencespanel_programpreferencespanel_data=魔兽数据 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/SmartMappingChooserPanel +checkbox.smartmappingchooserpanel_smartmappingchooserpanel_showparentsbox=显示父级 +println.smartmappingchooserpanel_smartmappingchooserpanel_select=选择 +println.smartmappingchooserpanel_smartmappingchooserpanel_select_good=精选 +println.smartmappingchooserpanel_smartmappingchooserpanel_select_real=甄选 +println.smartmappingchooserpanel_smartmappingchooserpanel_add=添加 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/TextureAnimListCellRenderer +string.textureanimListcellrenderer_textureanimListcellrenderer_no_value=(无值) +string.textureanimListcellrenderer_textureanimListcellrenderer_textureanim=纹理动画 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVPanel +string.uvpanel_uvpanel_selectallaction=全选 +string.uvpanel_uvpanel_invertselectaction=反选 +string.uvpanel_uvpanel_expandselectionaction=展开选择 +string.uvpanel_uvpanel_selfrommainaction=从查看器中选择 +string.uvpanel_uvpanel_mirrorxaction=X轴镜像 +string.uvpanel_uvpanel_mirroryaction=Y轴镜像 +button.uvpanel_uvpanel_select=选择 +button.uvpanel_uvpanel_add=添加 +button.uvpanel_uvpanel_deselect=取消 +button.uvpanel_uvpanel_loadimage=加载图片 +button.uvpanel_uvpanel_move=移动 +button.uvpanel_uvpanel_rotate=旋转 +button.uvpanel_uvpanel_scale=缩放 +button.uvpanel_uvpanel_unwrap=解压 UVs +dialog.uvpanel_uvpanel_select_direction=请选择方向 +label.uvpanel_uvpanel_uvlayerindexlabel=UV层索引: +string.uvpanel_uvpanel_move_linked=连接移动 +string.uvpanel_uvpanel_move_single=单独移动 +string.uvpanel_uvpanel_choose_settings=选择设置: +string.uvpanel_uvpanel_tpose_settings=T型姿势设置: +view.uvpanel_uvpanel_texture_coordinate_editor=纹理坐标编辑器: +string.uvpanel_createjtoolbar_undo=撤销 +dialog.uvpanel_createjtoolbar_nothing_undo=没有可撤销的操作! +string.uvpanel_createjtoolbar_redo=恢复 +dialog.uvpanel_createjtoolbar_nothing_redo=没有可恢复的操作! +string.uvpanel_createjtoolbar_selectandmovedescriptor=选择并移动 +string.uvpanel_createjtoolbar_selectandrotatedescriptor=选择并旋转 +string.uvpanel_createjtoolbar_selectandscale=选择并缩放 +string.uvpanel_createjtoolbar_snap=吸附 +string.uvpanel_createjtoolbar_snapx=X轴吸附 +string.uvpanel_createjtoolbar_snapy=Y轴吸附 +menu.uvpanel_createmenubar_editmenu=编辑 +description.uvpanel_createmenubar_editmenu=允许使用各种工具编辑所选模型顶点。 +menu.uvpanel_createmenubar_dispmenu=视图 +description.uvpanel_createmenubar_dispmenu=控制“纹理坐标编辑器”窗口显示设置。 +menuitem.uvpanel_createmenubar_selectall=全选 +menuitem.uvpanel_createmenubar_invertselect=反选 +menuitem.uvpanel_createmenubar_expandselection=展开选择 +menuitem.uvpanel_createmenubar_selfrommain=从查看器中选择 +menuitem.uvpanel_createmenubar_splitvertex=拆分顶点 +menuitem.uvpanel_createmenubar_wrapimage=环绕图像 +settooltiptext.uvpanel_createmenubar_wrapimage=在类似网格的显示中多次重复纹理。此功能不会以任何方式编辑模型;仅影响此查看窗口。 +menuitem.uvpanel_createmenubar_setaspectratio=设置宽高比 +settooltiptext.uvpanel_createmenubar_etaspectratio=设置纹理拉伸量,用于编辑宽度和高度不均匀的纹理。 +menuitem.uvpanel_createmenubar_mirrorsubmenu=镜像 +description.uvpanel_createmenubar_mirrorsubmenu=允许镜像对象。 +menuitem.uvpanel_createmenubar_mirrorx=X轴镜像 +menuitem.uvpanel_createmenubar_mirrory=Y轴镜像 +dialog.uvpanel_actionperformed_loadimage_1=是否自动查找可用纹理?\n选“否”手动查找文件。 +dialog.uvpanel_actionperformed_loadimage_2=加载图片 +display.uvpanel_actionperformed_unable_load_tag=无法加载图片(特殊TGA): +display.uvpanel_actionperformed_unable_load_image=无法加载图片: +dialog.uvpanel_actionperformed_blp_loader_failed=BLP 纹理加载失败。 +label.uvpanel_actionperformed_to= 到 +label.uvpanel_unwrapdirection_front=正视图 +label.uvpanel_unwrapdirection_right=侧视图 +label.uvpanel_unwrapdirection_bottom=底视图 +label.uvpanel_unwrapdirection_perspective=透视图 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/UVViewport +menuitem.uvviewport_uvviewport_placeholder=占位按钮 +dialog.uvviewport_uvviewport_placeholder=占位代码 + +# craft3data/src/com/hiveworkshop/wc3/gui/modeledit/Viewport +menuitem.viewport_viewport_createface=创建脸部 +menuitem.viewport_viewport_addteamcolor=拆分几何体并添加队伍颜色 +menuitem.viewport_viewport_splitgeo=拆分几何体 +menuitem.viewport_viewport_manualmove=输入转换 +menuitem.viewport_viewport_manualrotate=输入旋转 +menuitem.viewport_viewport_manualset=输入定位 +menuitem.viewport_viewport_manualscale=输入缩放 +menuitem.viewport_viewport_reassignmatrix=重新分配矩阵 +menuitem.viewport_viewport_setparent=设置父级 +menuitem.viewport_viewport_cogbone=自动居中骨骼 +menuitem.viewport_viewport_renamebone=重命名骨骼 +menuitem.viewport_viewport_appendbonebone=附加骨骼后缀 +dialog.viewport_paintcomponent_mouse_coordinates=检索鼠标坐标时出错。(可能不是大问题。是因为休眠模式吗?) +println.viewport_paintcomponent_delay=延迟 +dialog.viewport_paintcomponent_rebuild_matrix=重建矩阵 +dialog.viewport_paintcomponent_action_approved=行动已批准 +string.viewport_paintcomponent_no_parent=(无父级) +dialog.viewport_paintcomponent_parent_node=选择父节点 +dialog.viewport_paintcomponent_set_parent_node=设置父节点 +dialog.viewport_paintcomponent_bone_name=输入骨骼名称: +dialog.viewport_paintcomponent_bone_suffix=输入骨骼后缀: +label.viewport_manualmove_move_x=移动X轴: +label.viewport_manualmove_move_y=移动Y轴: +label.viewport_manualmove_move_z=移动Z轴: +dialog.viewport_manualmove_manual_translation=手动转换 +label.viewport_manualrotate_rotate_x=正面旋转X轴,度数: +label.viewport_manualrotate_rotate_y=向左旋转Y轴,度数: +label.viewport_manualrotate_rotate_z=朝上旋转Z轴,度数: +dialog.viewport_manualrotate_manual_rotation=手动旋转 +label.viewport_manualset_new_position_x=X轴新定位: +label.viewport_manualset_new_position_y=Y轴新定位: +label.viewport_manualset_new_position_z=Z轴新定位: +dialog.viewport_manualset_manual_rotation=手动定位 +label.viewport_manualscale_scale_x=X轴缩放: +label.viewport_manualscale_scale_y=Y轴缩放: +label.viewport_manualscale_scale_z=Z轴缩放: +checkbox.viewport_manualscale_scale_origin=自定义缩放原点 +label.viewport_manualscale_center_x=X轴居中: +label.viewport_manualscale_center_y=Y轴居中: +label.viewport_manualscale_center_z=Z轴居中: +dialog.viewport_manualscale_manual_scaling=手动缩放 + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimatedPerspectiveViewport +dialog.animatedperspectiveviewport_initgl_failed=初始化 GL 失败,原因:\n +println.animatedperspectiveviewport_paintgl_omitting_frames=为避免异常日志过多,AnimatedPerspectiveViewport正在省略帧 +display.animatedperspectiveviewport_paintgl_loading_textures=加载纹理异常: +display.animatedperspectiveviewport_paintgl_loading_new_textures=加载新纹理异常: +println.animatedperspectiveviewport_paintgl_max=最大: +println.animatedperspectiveviewport_paintgl_printinggl=打印GL +dialog.animatedperspectiveviewport_paintcomponent_retrieving_mouse=检索鼠标坐标出错。(可能不是大问题。是休眠模式的原因吗?) + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationController +label.animationcontroller_animationcontroller_speed=速度: +button.animationcontroller_animationcontroller_playanimation=播放动画 +button.animationcontroller_animationcontroller_defaultloop=默认循环 +button.animationcontroller_animationcontroller_alwaysloop=总是循环 +button.animationcontroller_animationcontroller_neverloop=从不循环 +label.animationcontroller_animationcontroller_levelofdetail=细节层次 +object.animationcontroller_animationcontroller_unanimated=(无动画) + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/AnimationViewer +string.animationviewer_animationviewer_unanimated=(无动画) + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/CameraManagerPanel +string.cameramanagerpanel_cameramanagerpanel_free=(自由) +button.cameramanagerpanel_cameramanagerpanel_createcamerafromview=从当前视图创建镜头 + +# craft3data/src/com/hiveworkshop/wc3/gui/modelviewer/ViewerCamera +exception.viewercamera_setrotationangles_function_not_exist=Ghostwolf调用了未知函数,系统无法处理 + +# craft3data/src/com/hiveworkshop/wc3/gui/mpqbrowser/MPQBrowser +menu.mpqbrowser_mpqbrowser_filemenu=文件 +menu.mpqbrowser_mpqbrowser_filtersmenu=过滤 +filter.mpqbrowser_mpqbrowser_text=文本 +filter.mpqbrowser_mpqbrowser_sylk=物编表格 +filter.mpqbrowser_mpqbrowser_script=脚本 +filter.mpqbrowser_mpqbrowser_html=网页 +filter.mpqbrowser_mpqbrowser_models=模型 +filter.mpqbrowser_mpqbrowser_images=图片 +filter.mpqbrowser_mpqbrowser_maps=地图 +filter.mpqbrowser_mpqbrowser_sounds=声音 +filter.mpqbrowser_mpqbrowser_music=音乐 +filter.mpqbrowser_mpqbrowser_other=其他 +menuitem.mpqbrowser_mpqbrowser_allitem=全部 +menuitem.mpqbrowser_mpqbrowser_noneitem=无 +menuitem.mpqbrowser_mpqbrowser_openitem=打开 +menuitem.mpqbrowser_mpqbrowser_extractitem=导出 +dialog.mpqbrowser_exportfilechooser_1=文件 +dialog.mpqbrowser_exportfilechooser_2=已经存在。是否仍要覆盖? +dialog.mpqbrowser_exportfilechooser_3=导出文件 +menuitem.mpqbrowser_mpqbrowser_copypathtoclipboarditem=复制路径到剪贴板 +menuitem.mpqbrowser_mpqbrowser_useastextureitem=用作纹理 + +# craft3data/src/com/hiveworkshop/wc3/gui/util/ColorChooserIcon +dialog.colorchoosericon_colorchoosericon_choose_background_color=选择背景色 + +# craft3data/src/com/hiveworkshop/wc3/gui/BLPHandler +exception.blphandler_forcebufferedimagesrgb_color_space=输入颜色空间的组件数量与sRGB不同。 +exception.blphandler_readcustom_stream=流 +dialog.blphandler_exportbitmaptexturefile_1=文件 +dialog.blphandler_exportbitmaptexturefile_2=已存在。是否继续? +dialog.blphandler_exportbitmaptexturefile_3=确认导出 +dialog.blphandler_exportbitmaptexturefile_alpha_black=警告:Alpha通道已转换为黑色。如果将此纹理转换回BLP,部分数据将丢失。 +dialog.blphandler_exportbitmaptexturefile_file_unknown=文件格式未知或不可用 + +# craft3data/src/com/hiveworkshop/wc3/gui/ExceptionPopup +dialog.exceptionpopup_display_create_info_popup_failed=MDL打开错误且未能创建信息弹窗。 +println.exceptionpopup_display_unknown=未知错误: + +# craft3data/src/com/hiveworkshop/wc3/gui/GUITheme +string.guitheme_guitheme_forest_green=丛林绿 +string.guitheme_guitheme_noire=黑 +string.guitheme_guitheme_windows=微软 +string.guitheme_guitheme_windows_lassic=微软经典 +string.guitheme_guitheme_soft_gray=浅灰 +string.guitheme_guitheme_java_default=Java 默认 +string.guitheme_guitheme_blue_ice=冰之蓝 +string.guitheme_guitheme_dark_blue_green=深蓝绿 +string.guitheme_guitheme_gray=灰 +string.guitheme_guitheme_hifi=高保真 +string.guitheme_guitheme_acryl=亚力克 +string.guitheme_guitheme_aluminium=铝质 +string.guitheme_guitheme_demonicmeme=恶魔武士 + +# craft3data/src/com/hiveworkshop/wc3/gui/OldBLPHandler +exception.oldblphandler_getTexture_failed_load_texture_1=加载纹理失败: +exception.oldblphandler_getTexture_failed_load_texture_2=于 +exception.oldblphandler_forcebufferedimagesrgb_color_different=输入颜色空间的组件数量与sRGB不同。 +exception.oldblphandler_readcustom_stream=流 + +# craft3data/src/com/hiveworkshop/wc3/mdl/render3d/RenderNode +exception.rendernode_updatechildren_not_find_child=未找到子级 +exception.rendernode_updatechildren_of=从 + +# craft3data/src/com/hiveworkshop/wc3/mdl/render3d/SoftwareParticleEmitterShader +exception.softwareparticleemittershader_renderparticles_alive= 激活项目, +exception.softwareparticleemittershader_renderparticles_buffer= 缓冲长度 + +# craft3data/src/com/hiveworkshop/wc3/mdl/v2/timelines/InterpolationType +string.interpolationyype_interpolationyype_dontinterp=不插值 +string.interpolationyype_interpolationyype_linear=线性 +string.interpolationyype_interpolationyype_bezier=贝塞尔曲线 +string.interpolationyype_interpolationyype_hermite=厄米特 + +# craft3data/src/com/hiveworkshop/wc3/mdl/v2/MaterialView +append.materialview_createdefaultname_over= 结束 +append.materialview_createdefaultname_alpha= (动画 Alpha) +string.materialview_createdefaultname_texture=动画纹理层 + +# craft3data/src/com/hiveworkshop/wc3/mdl/AbstractAnimatedNode +string.abstractanimatednode_updatetranslationkeyframe_translation=转换 +string.abstractanimatednode_updaterotationkeyframe_rotation=旋转 +string.abstractanimatednode_updatescalingkeyframe_scaling=缩放 +string.abstractanimatednode_updatelocalrotationkeyframe_rotation=旋转 +string.abstractanimatednode_updateLocalrotationkeyframeinverse_rotation=旋转 +string.abstractanimatednode_updatelocaltranslationkeyframe_translation=转换 +string.abstractanimatednode_updatelocalscalingkeyframe_scaling=缩放 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Animation +addtag.animation_animation_movespeed=移动速度 +addtag.animation_animation_nonlooping=无循环 +addtag.animation_animation_rarity=稀有 +addtag.animation_setrarity_rarity=稀有 +addtag.animation_setmovespeed_movespeed=移动速度 +addtag.animation_isnonlooping_nonlooping=无循环 +addtag.animation_setnonlooping_nonlooping=无循环 +println.animation_read_nameless=抛出无名动画: +dialog.animation_read_outside_geoset=动画超出几何体范围! +string.animation_read_interval=间隔 +dialog.animation_read_interval=无法解析动画:时间间隔无法以数字形式解析。\n这可能会破坏很多东西。 +println.animation_printto_anim=动画 +println.animation_printto_interval=间隔 + +# craft3data/src/com/hiveworkshop/wc3/mdl/AnimFlag +# string.animflag_materialtextureid=纹理ID +# string.animflag_materialemissivegain=光圈增益 +# string.animflag_materialfresnelcolor=菲涅尔颜色 +# string.animflag_materialfresnelopacity=菲涅尔不透明 +# string.animflag_materialfresnelteamcolor=菲涅尔队伍颜色 +# string.animflag_texturerotation=旋转 +# string.animflag_texturescaling=缩放 +# string.animflag_texturetranslation=转换 +# string.animflag_geosetcolor=颜色 +# string.animflag_geosettranslation=转换 +# string.animflag_geosetrotation=旋转 +# string.animflag_geosetscaling=缩放 +# string.animflag_lightvisibility=可见性 +# string.animflag_lightcolor=颜色 +# string.animflag_lightintensity=亮度 +# string.animflag_lightambientintensity=Amb亮度 +# string.animflag_lightattenuationstart=衰减开始 +# string.animflag_lightattenuationend=衰减结束 +# string.animflag_lightambientcolor=Amb颜色 +# string.animflag_attachmentvisibility=可见性 +# string.animflag_particleemitteremissionrate=散发率 +# string.animflag_particleemittergravity=重力 +# string.animflag_particleemitterlatitude=纬度 +# string.animflag_particleemitterlifespan=存在时间 +# string.animflag_particleemitterlongitude=经度 +# string.animflag_particleemitterspeed=初始速度 +# string.animflag_particleemittervisibility=可见性 +# string.animflag_particleemitter2visibility=可见性 +# string.animflag_particleemitter2variation=变化 +# string.animflag_particleemitter2gravity=重力 +# string.animflag_particleemitter2emissionrate=散发率 +# string.animflag_particleemitter2latitude=纬度 +# string.animflag_particleemitter2length=长度 +# string.animflag_particleemitter2speed=速度 +# string.animflag_particleemitter2width=宽度 +# string.animflag_cornemissionrate=散发率 +# string.animflag_cornvisibility=可见性 +# string.animflag_cornlifespan=存在时间 +# string.animflag_cornspeed=速度 +# string.animflag_corncolor=颜色 +# string.animflag_ribbonemittervisibility=可见性 +# string.animflag_ribbonemitterheightabove=离地高度 +# string.animflag_ribbonemitterheightbelow=离地深度 +# string.animflag_ribbonemittercolor=颜色 +# string.animflag_ribbonemittertextureslot=纹理槽 +# string.animflag_camerapositiontranslation=转换 +# string.animflag_cameratargettranslation=转换 +# string.animflag_camerarotation=旋转 +println.animflag_setinterptype=对setInterpType的不安全调用,请重写AnimFlag类中的代码 +dialog.animflag_parsetext_1=无法解析 +dialog.animflag_parsetext_2=缺少或无法识别打开指令。 +dialog.animflag_parsetext_3=解析异常 +dialog.animflag_parsetext_4=:在同一位置存在多个全局序列ID +dialog.animflag_read_1=解析异常 +dialog.animflag_read_2=:在同一位置存在多个全局序列ID +dialog.animflag_getmostvisible=错误:程序试图将可见性与非可见性动画组件进行比较。\n这可能意味着出现了严重错误。如果可以,请先保存。 +dialog.animflag_copyfrom=由于转换不兼容,部分动画将失去复杂性。可能不会有明显变化。 +println.animflag_deleteanim=关键帧删除被全局序列阻止 +dialog.animflag_copyfrom_source_1=错误!发现一个源同时具有线性和非线性运动。以下数据是否非零? +dialog.animflag_copyfrom_source_2=帮帮程序吧! +println.animflag_identity=渲染器中使用的纹理标识...研发待办:让这个功能更智能。 +exception.animflag_removekeyframe_1=尝试移除关键帧,但未找到任何关键帧 +exception.animflag_removekeyframe_2=时间 +exception.animflag_slidekeyframe_1=无法滑动关键帧:不存在帧 +exception.animflag_slidekeyframe_2=滑动此关键帧会重复创建条目! + +# craft3data/src/com/hiveworkshop/wc3/mdl/Attachment +println.attachment_attachment_1=错误:附着件 +println.attachment_attachment_2=在MDX中未被标记为附着件! +println.attachment_attachment_3=惊喜!这个模型有一个值得记录的特殊附着数据点! +dialog.attachment_read=无法解析附着件:缺少或无法识别打开指令。 +println.attachment_printto_object=\t对象Id +println.attachment_printto_parent=\t父级 +println.attachment_printto_path=\t路径 \" +println.attachment_printto_attachment=\t附着件ID +dialog.attachment_setvisibilityflag=覆盖时意外丢失部分可见动画 +dialog.attachment_getvisibilityflag=读取时意外丢失部分可见动画 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Bitmap +string.bitmap_getpath_blp_path=贴图路径损坏 +string.bitmap_getpath_team_color=队伍颜色 +string.bitmap_getpath_team_glow=队伍光环 +string.bitmap_getpath_replaceable=可替换 +dialog.bitmap_read_parsing_bitmap=无法解析贴图:无法识别指令 +dialog.bitmap_read_parse_bitmap=无法解析贴图:缺少或无法识别打开指令。 +println.bitmap_printto_bitmap=贴图 +println.bitmap_printto_image=\t图片 +println.bitmap_printto_wrapwidth=\t包裹宽度 +println.bitmap_printto_wrapheight=\t包裹高度 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Bone +println.bone_bone_bone_error=错误:骨骼 +println.bone_bone_flagged=在MDX中未标记为骨骼! +println.bone_read_interpret_integer=无法解析:以下内容的整数无法解释: +println.bone_read_parse_bone=无法解析骨骼:缺少或无法识别打开指令。 +println.bone_printto_objectid=\t对象ID +println.bone_printto_parent=\t父级 +println.bone_printto_geosetid_multiple=\t多个几何体ID, +println.bone_printto_geosetid=\t几何体ID +println.bone_printto_geosetanimid_none=\t几何体动画ID为空, +println.bone_printto_geosetanimid=\t几何体动画ID + +# craft3data/src/com/hiveworkshop/wc3/mdl/Camera +dialog.camera_read_target_not_recognize=镜头目标无法识别以下数据: +dialog.camera_read_major_issue=\n可能不是大问题? +dialog.camera_read_camera_not_recognize=镜头无法识别以下数据: +dialog.camera_read_parse_camera=无法解析镜头:缺少或无法识别打开指令。 +println.camera_printto_position=\t位置 +println.camera_printto_view=\t查看 +println.camera_printto_farclip=\t远裁剪面 +println.camera_printto_nearclip=\t近裁剪面 +println.camera_printto_target=\t目标 { +println.camera_printto_position_t=\t\t位置 +string.camera_sourcenode=源: +string.camera_target=目标: + +# craft3data/src/com/hiveworkshop/wc3/mdl/CollisionShape +println.collisionshape_collisionshape_error=错误:碰撞形状 +println.collisionshape_collisionshape_flagged=在MDX中未标记为碰撞形状! +dialog.collisionshape_read_parse=无法解析碰撞形状:缺少或无法识别打开指令。 +println.collisionshape_printto_objectid=\t对象ID +println.collisionshape_printto_parent=\t父级 +println.collisionshape_printto_vertices=\t顶点 + +# craft3data/src/com/hiveworkshop/wc3/mdl/EditableModel +addtoheader.editablemodel_editablemodel_converted=//此模型通过 ogre-lord MDX API和 Retera MDL API从MDX转换而来 +dialog.editablemodel_editablemodel_bug= ---\n警告:由于本地MDX解析器错误,Java Warcraft Libraries认为正在加载损坏镜头。\n如需正常编辑,请禁用\"视图 > 使用本地MDX解析器\" +dialog.editablemodel_editablemodel_continue=\".\n仍可继续编辑,但模型部分数据已丢失,即使保存也会丢失。 +dialog.editablemodel_editablemodel_warning=警告 +dialog.editablemodel_parsevertex_error=错误(行数为 +dialog.editablemodel_parsevertex_interpreted=): 无法顶点坐标解析。 +dialog.editablemodel_parsevertex_triangles=错误:无法解读三角形: +dialog.editablemodel_nextline_error=无法读取文件。 +dialog.editablemodel_getbone_reference=骨骼参考已损坏或无效! +string.editablemodel_addanimationsfrom_animation_source_file=动画源文件 +dialog.editablemodel_read_not_found=找不到所选文件: +dialog.editablemodel_read_not_read=无法读取所选文件: +dialog.editablemodel_read_version_missing=文件版本丢失! +dialog.editablemodel_read_format_confusing=格式版本异常! +dialog.editablemodel_read_understood=无法理解模型。程序无法理解此类文件。 +dialog.editablemodel_read_bindpose=BindPose块标记错误: +dialog.editablemodel_parse4floatbpos_interpreted=BindPose矩阵无法解释. +dialog.editablemodel_parse12floatbpos_interpreted=BindPose矩阵无法解释. +dialog.editablemodel_dopostread_invalid_geosetid=GeosetAnim数据指向无效的GeosetID!错误数据将被删除。请备份模型。 +dialog.editablemodel_printto_unable_to_save=无法保存MDL。 +println.editablemodel_printto_save_mdl_toolkit=// 由Retera的MDL工具包保存 +println.editablemodel_printto_version=版本 { +println.editablemodel_printto_format_version=\t格式版本 +println.editablemodel_printto_model=模型 +println.editablemodel_printto_numgeosets=\t几何体编号 +println.editablemodel_printto_numgeosetanims=\t几何体动画编号 +println.editablemodel_printto_numhelpers=\t帮助编号 +println.editablemodel_printto_numlights=\t光照编号 +println.editablemodel_printto_numbones=\t骨骼编号 +println.editablemodel_printto_numattachments=\t附着编号 +println.editablemodel_printto_numparticleemitters=\t粒子发射器编号 +println.editablemodel_printto_numparticleemitters2=\t粒子发射器2编号 +println.editablemodel_printto_numparticleemitterspopcorn=\t粒子发射器爆米花编号 +println.editablemodel_printto_numribbonemitters=\t缎带发射器编号 +println.editablemodel_printto_numevents=\t事件编号 +println.editablemodel_printto_numfacefx=\t面部特效编号 +println.editablemodel_printto_blendtime=\t混合时间 +println.editablemodel_printto_sequences=序列 +println.editablemodel_printto_globalsequences=全局序列 +println.editablemodel_printto_duration=\t持续时间 +println.editablemodel_printto_textures=纹理 +println.editablemodel_printto_materials=材质 +println.editablemodel_printto_texture_anims=纹理动画 +println.editablemodel_printto_pivotpoints=关键点 +println.editablemodel_printto_facefx=脸部特效 +println.editablemodel_printto_path=\t路径 +println.editablemodel_printto_bindpose=绑定姿势 +println.editablemodel_printto_matrix=\t矩阵 +println.editablemodel_printto_matrices=\t矩阵 +println.editablemodel_printto_for=因为 +dialog.editablemodel_printto_close_mdl=无法写入并关闭MDL--硬盘空间不足? +dialog.editablemodel_updateIdobjectreferences_additional_pivot=错误:找到的对象多于数据关键点。\n将添加位于{0,0,0}的额外枢轴。 +dialog.editablemodel_updateobjectIds_gleaning=收集 +dialog.editablemodel_updateobjectIds_chunk_with_size= 大小为0的块 +dialog.editablemodel_getallanimflags_time_scale_textureanims=警告:处理纹理动画时间刻度时出错!程序将尝试继续。 +dialog.editablemodel_getallanimflags_time_scale_geosetanims=警告:处理几何体动画时间刻度时出错!程序将尝试继续。 +dialog.editablemodel_add_anim=模型添加了空动画,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_globalseq=模型添加了空全局序列,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_bitmap=模型添加了空贴图,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_material=模型添加了空材质,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_textureanim=模型添加了空纹理动画,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_geoset=模型添加了空几何体,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_geosetvertex=模型添加了空几何体顶点,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_triangle=模型添加了空三角形,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_geosetanim=模型添加了空几何体动画,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_idobject=模型添加了空ID对象,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_add_camera=模型添加了空镜头,这真的很糟糕。将来报错,Retera已经警告过了。 +dialog.editablemodel_removealltimelinesforglobalseq_time_scale_textureanims=警告:处理纹理动画时间刻度时出错!程序将尝试继续。 +dialog.editablemodel_removealltimelinesforglobalseq_time_scale_geosetanims=警告:处理几何体动画时间刻度时出错!程序将尝试继续。 +dialog.editablemodel_converttov800_hero=英雄 英雄 英雄 +dialog.editablemodel_recalculatetangents_tangent_generation=切线已生成。\n好切线: +dialog.editablemodel_recalculatetangents_tangent_bad=坏切线 + +# craft3data/src/com/hiveworkshop/wc3/mdl/EventObject +println.eventobject_eventobject_error=MDX 转 MDL 错误: 事件对象 +println.eventobject_eventobject_not_flagged=在MDX中未标记为事件对象! +dialog.eventobject_eventobject_more_global_sequence=解析事件对象时出错:同一对象中存在多个全局序列Id! +dialog.eventobject_eventobject_unable_parse=无法解析事件对象:缺少或无法识别打开指令。 +println.eventobject_printto_objectid=\t对象ID +println.eventobject_printto_parent=\t父级 +println.eventobject_printto_eventtrack=\t事件轨迹 +println.eventobject_printto_globalseqid=\t\t全局序列ID +println.eventobject_add=错误:事件对象给定未知标志: + +# craft3data/src/com/hiveworkshop/wc3/mdl/ExtLog +dialog.extLog_parsetext_bounds_radius=边界半径无法解析。 +dialog.extLog_parsetext_unrecognized_input=无法解析ExtLog;无法识别输入: +dialog.extLog_parsetext_open_statement=无法解析ExtLog:缺少或无法识别打开指令。 +println.extLog_printto_minimum_extent=最小范围 +println.extLog_printto_maximum_extent=最大范围 +println.extLog_printto_bounds_radius=边界半径 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Geoset +string.geoset_getname_geoset=几何体 +string.geoset_getuiname_geoset=几何体 +string.geoset_add_riangles=2x 三角形 +dialog.geoset_parse8byteskin_skin_data=无法解析皮肤数据。 +dialog.geoset_parse4floattangent_tangent_data=无法解析切线数据。 +dialog.geoset_read_geoset_vertices=错误:在几何体开头找不到顶点! +dialog.geoset_read_vertex_groups=错误:顶点组丢失或无效! +dialog.geoset_read_faces=错误:脸部缺失或无效! +println.geoset_read_no_triangles=无三角形: +dialog.geoset_read_triangles=错误:三角形缺失或无效! +dialog.geoset_read_groups=错误:组(矩阵)丢失或无效! +dialog.geoset_read_parse_geoset=无法解析几何体:缺少或无法识别打开指令 ' +dialog.geoset_updatetoobjects_tvertices_and_vertices_length=错误:T顶点和顶点块长度不一致(或发生了其他未知错误)! +dialog.geoset_updatetoobjects_material_index=错误:材质索引超出几何体界限! +exception.geoset_applyverticestomatrices_geoset=几何体 \" +exception.geoset_applyverticestomatrices_convert=\": 使用了无法转换为HD的复杂SD矩阵和SD无法表示的HD权重。合并几何体以这种方式保存必然丢失数据。请拆分几何体或降低复杂性再重试。 +println.geoset_printto_geoset=几何体 +println.geoset_printto_vertices=\t顶点 +println.geoset_printto_empty_tvertices=错误:尝试保存T顶点数量不同的几何体顶点!将自动生成空T顶点。 +println.geoset_printto_normals_vertices=法线与顶点数量存在差异。模型文件将损坏。\n需要修复请删除或修复MDL的法线块。 +println.geoset_printto_normals=\t法线 +println.geoset_printto_vertexgroup=\t顶点组 +println.geoset_printto_tangents=\t切线 +println.geoset_printto_skinweights=\t皮肤权重 +println.geoset_printto_faces=\t脸部 +println.geoset_printto_triangles=\t\t三角形 +println.geoset_printto_groups=\t组 +println.geoset_printto_materialid=\t材质ID +println.geoset_printto_selectiongroup=\t选择组 +println.geoset_printto_levelofdetail=\t细节层次 +println.geoset_printto_name=\t名称 \" +dialog.geoset_dosaveprep_empty_tvertices=错误:尝试保存T顶点数量不同的几何体顶点!将自动生成空T顶点。 + +# craft3data/src/com/hiveworkshop/wc3/mdl/GeosetAnim +dialog.geosetanim_read_parse_geosetanim=无法解析几何体动画:缺少或无法识别打开指令 +println.geosetanim_printto_geosetanim=几何体动画 +println.geosetanim_printto_dropshadow=阴影, +println.geosetanim_printto_static_alpha=静态Alpha +println.geosetanim_printto_static_color=静态颜色 +println.geosetanim_printto_geosetid=\t几何体ID +dialog.geosetanim_setvisibilityflag_overwrite=覆盖时意外丢失部分动画 +dialog.geosetanim_getvisibilityflag_retrieval=检索时意外丢失部分动画 + +# craft3data/src/com/hiveworkshop/wc3/mdl/GeosetVertex +dialog.geosetvertex_updatematrixref_real_matrix_id=矩阵错误:顶点组未引用真实矩阵id! +dialog.geosetvertex_parsetext_interpreted=无法解释顶点坐标。 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Helper +println.helper_helper_error=MDX 转 MDL 错误: 帮助信息 ' +println.helper_helper_not_flagged=在MDX中未标记为帮助信息! +println.helper_read_error=解析出错:无法解析以下整数: +println.helper_read_parse_bone=无法解析骨骼:缺少或无法识别打开指令。 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Layer +dialog.layer_read_parse_layer=无法解析层:缺少或无法识别打开指令。 +println.layer_printto_layer=层 +println.layer_printto_filtermode=\t过滤模式 +println.layer_printto_shadertypeid=\t着色器类型ID +println.layer_printto_static=\t静态 +println.layer_printto_textureid=\t纹理ID +println.layer_printto_static_textureid=\t静态纹理ID +println.layer_printto_tvertexanimid=\tT顶点动画ID +println.layer_printto_coordid=\t坐标ID +println.layer_printto_static_alpha=\t静态Alpha +println.layer_printto_static_emissivegain=\t静态光圈增益 +println.layer_printto_static_fresnelcolor=\t静态菲涅尔颜色 +println.layer_printto_static_fresnelopacity=\t静态菲涅尔不透明度 +println.layer_printto_static_fresnelteamcolor=\t静态菲涅尔队伍颜色 +string.layer_getname_multi_textured=多纹理层 (模式: +string.layer_gettexturename_layer= 层 (模式: +dialog.layer_getflag_some=部分 +dialog.layer_getflag_retrieval= 在检索时动画意外丢失 +dialog.layer_setvisibilityflag_overwrite=覆盖时意外丢失部分动画 +dialog.layer_getvisibilityflag_retrieval=检索时意外丢失部分动画 +exception.layer_animatable=尚未实施 + +# craft3data/src/com/hiveworkshop/wc3/mdl/LayerShader +exception.layershader_layershader=未知层着色器ID: + +# craft3data/src/com/hiveworkshop/wc3/mdl/Light +println.light_light_error=MDX 转 MDL错误:光源 +println.light_light_not_flagged=' 在MDX中未标记为光源! +dialog.light_read_parse_light=无法解析光源:缺少或无法识别打开指令。 +println.light_printto_objectid=\t对象ID +println.light_printto_parent=\t父级 +println.light_printto_static=\t静态 +string.light_printto_attenuationstart=衰减开始 +string.light_printto_attenuationend=衰减结束 +string.light_printto_intensity=强度 +string.light_printto_color=颜色 +string.light_printto_ambintensity=Amb强度 +string.light_printto_shadowintensity=阴影强度 +string.light_printto_ambcolor=Amb颜色 +dialog.light_setvisibilityflag_overwrite=覆盖时意外丢失部分动画 +dialog.light_getvisibilityflag_retrieval=检索时意外丢失部分动画 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Material +string.material_getname_animated= (动画 Alpha): +string.material_getname_texture=动画纹理层 +string.material_getname_over= 之上 +string.material_getname_material=(无层材质) +exception.material_material_null=材质层为null +dialog.material_read_parse_material=无法解析材质:缺少或无法识别打开指令。 +println.material_printto_material=材质 +println.material_printto_Shader=\t着色器 \" +println.material_printto_priorityplane=\t优先平面 +println.material_getbakedhdnonemissivebufferedimage_diffuse=扩散: +println.material_getbakedhdnonemissivebufferedimage_normal=普通: +println.material_getbakedhdnonemissivebufferedimage_orm=映射: +println.material_getbakedhdnonemissivebufferedimage_reflections=反射: +exception.material_getbakedhdnonemissivebufferedimage_texture_widths=烘烤失败,纹理宽度不同;也许应该更新算法? +exception.material_getbakedhdnonemissivebufferedimage_texture_heights=烘烤失败,纹理高度不同;也许应该更新算法? +println.material_getbakedhdnonemissivebufferedimage_bake_texture=烘焙纹理 +println.material_getbakedhdnonemissivebufferedimage_pixels= 像素加载着色器和 +println.material_getbakedhdnonemissivebufferedimage_defaulting= 像素默认恢复为漫反射 +exception.material_getbakedhdnonemissivebufferedimage_baking_texture=高清转标清烘焙纹理失败,找不到6层! +dialog.material_bufferediimage_blp=加载BLP纹理失败 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Matrix +string.matrix_getname_list=错误,坏骨骼列表 +string.matrix_getname_ids=错误,坏骨骼ID +exception.matrix_updateids_matrix=矩阵错误 +dialog.matrix_updateids_model=错误:模型缺少矩阵骨骼参考!\n是否在模型间移动几何体时忘记更新骨骼? +dialog.matrix_updateids_bad_sizes=错误:矩阵大小不正确 ( +dialog.matrix_updateids_same_size= 差异大小应相同) +dialog.matrix_updatebones_attached=错误:上Helper附带了几何图形 +dialog.matrix_updatebones_bad=这太糟了! +dialog.matrix_updatebones_referencing=错误:矩阵骨骼id未引用真实骨骼! +dialog.matrix_size_warning=警告:使用了空矩阵! +dialog.matrix_parsetext_interpreted=无法解析矩阵。 +println.matrix_printto_matrices=矩阵 + +# craft3data/src/com/hiveworkshop/wc3/mdl/MDLFilter +exception.mdlfilter_mdlfilter_files=魔兽3模型文件 + +# craft3data/src/com/hiveworkshop/wc3/mdl/MDLReader +dialog.mdlreader_readint_parsing=解析错误:无法解析以下整数: +dialog.mdlreader_readbeforecolon_parsing=解析错误:无法解析以下整数: +dialog.mdlreader_readdouble_parsing=解析错误:无法解析以下倍数: +println.mdlreader_rmain_maximum_extent=最大范围 +println.mdlreader_rmain_matrices=矩阵 +println.mdlreader_rmain_dog=魔法值滴,你不知道你在跟踪你 +println.mdlreader_rmain_name=字符串名称: +println.mdlreader_rmain_it=这是: +println.mdlreader_nextlinespecial_error=读取文件时出错。 +string.mdlreader_nextlinespecial_parsing=解析完成 +println.mdlreader_nextline_error=读取文件时出错。 +string.mdlreader_nextline_parsing=解析完成 +println.mdlreader_reset_reset=从行重置行 +println.mdlreader_reset_back= 回到行 +exception.mdlreader_reset_infinite_loop=读取文件时检测到无限循环。可能是模型不好或解析器出错! +dialog.mdlreader_reset_io=IO严重错误:可能是行间长度 +dialog.mdlreader_reset_line= 和行 +dialog.mdlreader_reset_expected= 比预期要长?\n部分模型数据将丢失。 +println.mdlreader_reset_error=行重置错误: +dialog.mdlreader_mark_read_write=严重错误:无法读/写。可能导致加载内容严重损坏并失效。 +println.mdlreader_mark_mark=标记错误: +println.mdlreader_not_mark=未标记 +dialog.mdlreader_mark_read_write_will=严重错误:无法读/写。加载内容将严重损坏并失效。 +dialog.mdlreader_doubletostring_numeric=数值数据异常。 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Normal +dialog.normal_parsetext_coordinates=无法解析顶点坐标。 + +# craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter +println.particleemitter_particleemitter_particle_emitter=MDX 转 MDL 错误: 粒子发射器 ' +println.particleemitter_particleemitter_not_flagged=' 在MDX中未标记为粒子发射器! +println.particleemitter_particleemitter_special_emitter=惊喜!该模型有个值得记录的特殊粒子发射器! +println.particleemitter_particleemitter_unknown_type=MDX 转 MDL 警告:粒子发射器类型未知!MDL发射器默认类型为TGA! +dialog.particleemitter_read_parse=无法解析粒子发射器:缺少或无法识别打开指令。 +println.particleemitter_printto_objectid=\t对象ID +println.particleemitter_printto_parent=\t父级 +println.particleemitter_printto_emitterusesmdl=\t发射器使用MDL, +println.particleemitter_printto_emitterusestga=\t发射器使用TGA, +println.particleemitter_printto_static=\t静态 +println.particleemitter_printto_particle=\t粒子 +println.particleemitter_printto_path=\t路径 +println.particleemitter_setvisibilityflag_overwrite=覆盖时部分可访问动画意外丢失 +println.particleemitter_getvisibilityflag_retrieval=检索时部分可访问动画意外丢失 + +# craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitter2 +println.particleemitter2_particleemitter2_particle_emitter=MDX 转 MDL 错误: 粒子发射器 ' +println.particleemitter2_particleemitter2_not_flagged=' 在MDX中未标记为粒子发射器! +println.particleemitter2_particleemitter2_filter=过滤模式未知错误 +println.particleemitter2_particleemitter2_head_tail=头部或尾部未知错误 +dialog.particleemitter2_read_read=读取对象ID! +dialog.particleemitter2_read_objectid_from=对象Id行数: +dialog.particleemitter2_read_parent_from=父级行数: +dialog.particleemitter2_read_segmentcolor_from=片段颜色行数: +dialog.particleemitter2_read_from=行数: +dialog.particleemitter2_read_animflag_from=动画标志行数: +dialog.particleemitter2_read_recognize=粒子发射器2无法识别以下数据: +dialog.particleemitter2_read_issue=\n这可能不是大问题? +dialog.particleemitter2_read_parse=无法解析粒子发射器2:缺少或无法识别打开指令。 +println.particleemitter2_printto_objectid=\t对象Id +println.particleemitter2_printto_parent=\t父级 +println.particleemitter2_printto_static=\t静态 +println.particleemitter2_printto_segmentcolor=\t片段颜色 +println.particleemitter2_printto_color=\t颜色 +println.particleemitter2_setvisibilityflag_overwrite=覆盖时部分可访问动画意外丢失 +println.particleemitter2_getvisibilityflag_retrieval=检索时部分可访问动画意外丢失 + +# craft3data/src/com/hiveworkshop/wc3/mdl/ParticleEmitterPopcorn +dialog.particleemitterpopcorn_read_parse=无法解析粒子发射器爆米花:缺少或无法识别打开指令。 +println.particleemitterpopcorn_printto_objectid=\t对象Id +println.particleemitterpopcorn_printto_parent=\t父级 +println.particleemitterpopcorn_printto_static_lifespan=\t静态生命周期 +println.particleemitterpopcorn_printto_static_emissionrate=\t静态散发率 +println.particleemitterpopcorn_printto_static_speed=\t静态速度 +println.particleemitterpopcorn_printto_static_color=\t静态颜色 +println.particleemitterpopcorn_printto_static_alpha=\t静态Alpha +println.particleemitterpopcorn_printto_replaceableid=\t替换ID +println.particleemitterpopcorn_printto_path=\t路径 +println.particleemitterpopcorn_printto_animvisibilityguide=\t动画可见指南 +println.particleemitterpopcorn_setvisibilityflag_overwrite=覆盖时部分可访问动画意外丢失 +println.particleemitterpopcorn_getvisibilityflag_retrieval=检索时部分可访问动画意外丢失 + +# craft3data/src/com/hiveworkshop/wc3/mdl/QuaternionRotation +dialog.quaternionrotation_quaternionrotation_interpreted=无法解析四元数旋转坐标。 +println.quaternionrotation_main_time=该旋转了! + +# craft3data/src/com/hiveworkshop/wc3/mdl/RibbonEmitter +println.ribbonemitter_ribbonemitter_error=MDX 转 MDL错误:缎带发射器 ' +println.ribbonemitter_ribbonemitter_not_flagged=' 在MDX中未标记为缎带发射器! +dialog.ribbonemitter_read_recognize=缎带发射器无法识别以下数据: +dialog.ribbonemitter_read_major=\n这可能不是大问题? +dialog.ribbonemitter_read_parse=无法解析缎带发射器:缺少或无法识别打开指令。 +println.ribbonemitter_printto_objectid=\t对象Id +println.ribbonemitter_printto_parent=\t父级 +println.ribbonemitter_printto_static=\t静态 +dialog.ribbonemitter_setvisibilityflag_overwrite=覆盖时部分可访问动画意外丢失 +dialog.ribbonemitter_getvisibilityflag_retrieval=检索时部分可访问动画意外丢失 +println.ribbonemitter_add_error=错误:缎带发射器出现未知标志: + +# craft3data/src/com/hiveworkshop/wc3/mdl/Sequences +dialog.sequences_sequences_parse=无法解析序列:无法理解动画开场白 + +# craft3data/src/com/hiveworkshop/wc3/mdl/SoundEmitter +dialog.soundemitter_read_parse=无法解析声音发射器:缺少或无法识别打开指令。 +rintln.soundemitter_printto_objectid=\t对象ID +println.soundemitter_printto_parent=\t父级 +dialog.soundemitter_setvisibilityflag_overwrite=覆盖时部分可访问动画意外丢失 +dialog.soundemitter_getvisibilityflag_retrieval=检索时部分可访问动画意外丢失 +dialog.soundemitter_setsoundtrackglag_overwrite=覆盖时部分原生动画意外丢失 +dialog.soundemitter_getsoundtrackglag_retrieval=检索时部分原生动画意外丢失 + +# craft3data/src/com/hiveworkshop/wc3/mdl/SoundFile +dialog.soundfile_read_parse=无法解析声音文件:缺少或无法识别打开指令。 +println.soundfile_printto_soundfile=声音文件 +println.soundfile_printto_path=\t路径 +println.soundfile_printto_volume=\t音量 +println.soundfile_printto_pitch=\t音高 +println.soundfile_printto_soundchannel=\t声道 + +# craft3data/src/com/hiveworkshop/wc3/mdl/TextureAnim +dialog.textureanim_read_parse=无法解析纹理动画:缺少或无法识别打开指令。 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Triangle +dialog.triangle_parsetext_interpret=错误:无法解析三角形: +dialog.triangle_parsetext_or=或 +dialog.triangle_read_interpret=错误:无法解析三角形: +dialog.triangle_read_or=或 + +# craft3data/src/com/hiveworkshop/wc3/mdl/TVertex +dialog.tvertex_parsetext_interpreted=无法解析顶点坐标。 + +# craft3data/src/com/hiveworkshop/wc3/mdl/UVLayer +println.uvlayer_printto_tvertices=顶点 + +# craft3data/src/com/hiveworkshop/wc3/mdl/Vertex +dialog.vertex_parsetext_interpreted=无法解析顶点坐标。 + +# craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryBtTModel +println.parseeverybttmodel_main_sync=同步点非零: +println.parseeverybttmodel_main_in= 在 +println.parseeverybttmodel_main_parsed=解析 +println.parseeverybttmodel_main_successfully= 完成 + +# craft3data/src/com/hiveworkshop/wc3/mdlx/ParseEveryModel +println.parseeverymodel_main_parsed=解析 +println.parseeverymodel_main_successfully= 完成 +println.parseeverymodel_main_max_was=最大: + +# craft3data/src/com/hiveworkshop/wc3/mdx/AttachmentChunk +println.attachmentchunk_attachment_discarded=丢弃标识 + +# craft3data/src/com/hiveworkshop/wc3/mdx/CameraChunk +exception.camerachunk_save_array_position=批量位置需要长度为3或3的倍数。(获取 +exception.camerachunk_save_target_position=批量目标位置需要长度为3或3的倍数。(获取 +println.camerachunk_camera_discarded=丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/CameraPositionTranslation +exception.camerapositiontranslation_save_array_translation=批量转换需要长度为3或3的倍数。(获取 +exception.camerapositiontranslation_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.camerapositiontranslation_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/CameraTargetTranslation +exception.cameratargettranslation_save_array_translation=批量转换需要长度为3或3的倍数。(获取 +exception.cameratargettranslation_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.cameratargettranslation_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/CollisionShapeChunk +exception.collisionshapechunk_array_vertexs=批量顶点需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/CornChunk +println.cornchunk_particleemitterpopcorn_discarded=丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/CornColor +exception.corncolor_save_array_color=批量颜色需要长度为3或3的倍数。(获取 +exception.corncolor_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.corncolor_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/FaceEffectsChunk +dialog.faceeffectschunk_read_parse=无法解析脸部特效:缺少或无法识别打开指令。 + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetAnimationChunk +exception.geosetanimationchunk_save_array_color=批量颜色需要长度为3或3的倍数。(获取 +println.geosetanimationchunk_geosetanimation_discarded=丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetChunk +exception.gosetchunk_save_array_vertexpositions=批量顶点位置需要长度为3或3的倍数。(获取 +exception.gosetchunk_save_array_vertexNormals=批量顶点法线需要长度为3或3的倍数。(获取 +exception.gosetchunk_save_array_minimumextent=批量最小范围需要长度为3或3的倍数。(获取 +exception.gosetchunk_save_array_maximumextent=批量最大范围需要长度为3或3的倍数。(获取 +exception.gosetchunk_save_array_vertextexturepositions=批量顶点纹理位置需要长度为2或2的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetColor +exception.geosetcolor_save_array_color=批量颜色需要长度为3或3的倍数。(获取 +exception.geosetcolor_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.geosetcolor_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetRotation +exception.geosetrotation_save_array_rotation=批量旋转需要长度为4或4的倍数。(获取 +exception.geosetrotation_save_array_intan=批量inTan需要需要长度为4或4的倍数。(获取 +exception.geosetrotation_save_array_outtan=批量outTan需要长度为4或4的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetScaling +exception.geosetscaling_save_array_scaling=批量缩放需要长度为3或3的倍数。(获取 +exception.geosetscaling_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.geosetscaling_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/GeosetTranslation +exception.geosettranslation_save_array_translation=批量转换需要长度为3或3的倍数。(获取 +exception.geosettranslation_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.geosettranslation_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/LayerChunk.java +println.layerchunk_load_parser=MDX 1100 解析到意外着色器类型ID: +exception.layerchunk_load_what=什么? +exception.layerchunk_load_invalid=纹理类型索引无效: +exception.layerchunk_load_loading=:当前加载的模型可能源自未来魔兽版本,暂时无法处理。 +exception.layerchunk_load_sourcecode=\n 如果想打开这个文件,请修改模型编辑器程序源码。 +println.layerchunk_layer_discarded_flag=丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/LightAmbientColor +exception.lightambientcolor_save_array_ambientcolor=批量环境光颜色需要长度为3或3的倍数。(获取 +exception.lightambientcolor_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.lightambientcolor_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/LightChunk +exception.lightchunk_save_array_color=批量颜色需要长度为3或3的倍数。(获取 +exception.lightchunk_save_array_ambientcolor=批量环境光颜色需要长度为3或3的倍数。(获取 +println.lightchunk_light_discarded_flag=丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/LightColor +exception.lightcolor_save_array_color=批量颜色需要长度为3或3的倍数。(获取 +exception.lightcolor_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.lightcolor_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/MaterialFresnelColor +exception.materialfresnelcolor_save_array_color=批量颜色需要长度为3或3的倍数。(获取 +exception.materialfresnelcolor_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.materialfresnelcolor_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/MdxUtils +exception.mdxutils_checkId_loading=加载模型时出错:检查ID失败,需要 +exception.mdxutils_checkId_found= 发现 +exception.mdxutils_checkId_loading_check=加载模型时出错:使用可选项检查后检查ID失败,必填 + +# craft3data/src/com/hiveworkshop/wc3/mdx/ModelChunk +println.modelchunk_load_know=未知内容: +println.modelchunk_load_possible= (模型数据可能丢失) +exception.modelchunk_save_array_minimumextent=批量最小范围需要长度为3或3的倍数。(获取 +exception.modelchunk_save_array_maximumextent=批量最大范围需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/Node +println.node_node_node=节点丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitter2Chunk +exception.particleemitter2chunk_save_array_segmentcolor=批量片段颜色需要长度为9或9的倍数。(获取 +exception.particleemitter2chunk_save_array_segmentalpha=批量片段Alpha需要长度为3或3的倍数。(获取 +exception.particleemitter2chunk_save_array_segmentscaling=批量片段缩放需要长度为3或3的倍数。(获取 +println.particleemitter2chunk_particleemitter2_discarded_flag=丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/ParticleEmitterChunk +println.particleemitterchunk_particleemitter_discarded_flag=丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/PivotPointChunk +exception.pivotpointchunk_save_array_pivotpoints=批量轴心点需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterChunk +exception.ribbonemitterchunk_save_array_color=批量颜色需要长度为3或3的倍数。(获取 +println.ribbonemitterchunk_ribbonemitter_discarded_flag=丢弃标志 + +# craft3data/src/com/hiveworkshop/wc3/mdx/RibbonEmitterColor +exception.ribbonemittercolor_save_array_color=批量颜色需要长度为3或3的倍数。(获取 +exception.ribbonemittercolor_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.ribbonemittercolor_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/SequenceChunk +exception.sequencechunk_save_array_minimumextent=批量最小范围需要长度为3或3的倍数。(获取 +exception.sequencechunk_save_array_maximumextent=批量最大范围需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/TextureRotation +exception.texturerotation_save_array_rotation=批量旋转需要长度为4或4的倍数。(获取 +exception.texturerotation_save_array_intan=批量inTan需要需要长度为4或4的倍数。(获取 +exception.texturerotation_save_array_outtan=批量outTan需要长度为4或4的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/TextureScaling +exception.texturescaling_save_array_scaling=批量缩放需要长度为3或3的倍数。(获取 +exception.texturescaling_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.texturescaling_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/mdx/TextureTranslation +exception.texturetranslation_save_array_translation=批量转换需要长度为3或3的倍数。(获取 +exception.texturetranslation_save_array_intan=批量inTan需要需要长度为3或3的倍数。(获取 +exception.texturetranslation_save_array_outtan=批量outTan需要长度为3或3的倍数。(获取 + +# craft3data/src/com/hiveworkshop/wc3/units/objectdata/MutableObjectData +println.mutableobjectdata_mergechangset_merging=合并 +println.mutableobjectdata_mergechangset_for= 为 +println.mutableobjectdata_mutablegameobject_null=此对象的父对象为空 +assertionerror.mutableobjectdata_mutablegameobject_null=对象父对象不能为空 +println.mutableobjectdata_setfield_reset=字段已重置 +println.mutableobjectdata_setfield_unmodified=字段未修改 +println.mutableobjectdata_setfield_change=字段创建更改 +exception.mutableobjectdata_getfieldasstring_requested=请求的字符串 +exception.mutableobjectdata_getfieldasstring_from=来自 +exception.mutableobjectdata_getfieldasstring_vartype=但该字段不是字符串!变量类型 +exception.mutableobjectdata_getfieldstringfromslks_requested=请求的程序 +exception.mutableobjectdata_getfieldstringfromslks_from= 来自 +exception.mutableobjectdata_getfieldstringfromslks_corrupted=单位损坏,缺少父单位id +exception.mutableobjectdata_getfieldasinteger_requested=请求的整数 +exception.mutableobjectdata_getfieldasinteger_from=来自 +exception.mutableobjectdata_getfieldasinteger_vartype=但该字段不是整数!变量类型 +exception.mutableobjectdata_getfieldasboolean_requested=请求的布尔值 +exception.mutableobjectdata_getfieldasboolean_from=来自 +exception.mutableobjectdata_getfieldasboolean_vartype=但该字段不是布尔值!变量类型 +exception.mutableobjectdata_getfieldasfloat_requested=请求的浮点数 +exception.mutableobjectdata_getfieldasfloat_from=来自 +exception.mutableobjectdata_getfieldasfloat_vartype=但该字段不是浮点数!变量类型 + +# craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ID +println.war3id_fromString_metadata=为CURSE加载自定义数据,CURSE的元数据字段“Crs”是游戏中唯一3个字母组成的魔兽3ID。这可能会导致意外错误,因此请仔细观察自定义诅咒技能中错过的概率。 +exception.war3id_fromString_war3id=魔兽3ID长度必须为4个ascii字符(获取 + +# craft3data/src/com/hiveworkshop/wc3/units/objectdata/War3ObjectDataChangeset +exception.war3objectdatachangeset_loadtable_screwed=输入流可能被中断 +println.war3objectdatachangeset_loadtable_zeroes=似乎已到尽头,得到了零 +exception.war3objectdatachangeset_loadtable_custom_unit=自定义单位没有ID! +exception.war3objectdatachangeset_save_generate=失败,无法生成WTS,需要更多代码 +exception.war3objectdatachangeset_save_standard=保存标准单位自定义数据失败 +exception.war3objectdatachangeset_save_custom=保存自定义单位自定义数据失败 + +# craft3data/src/com/hiveworkshop/wc3/units/DataTable +println.datatable_readtxt_null=空的 +println.datatable_readslk_unusual=SLK格式不符合预期。 +println.datatable_main_build= 可以构建: +println.datatable_main_trains= 行: +println.datatable_main_upgrades= 科技: +println.datatable_main_researches= 研究: +println.datatable_main_stats= 统计: +println.datatable_main_goldcost=黄金数量 +println.datatable_main_lumbercost=木材数量 +println.datatable_main_fmade=格式 + +# craft3data/src/com/hiveworkshop/wc3/units/ModelOptionPane +dialog.modeloptionpane_modeloptionpane_choose=选择模型 + +# craft3data/src/com/hiveworkshop/wc3/units/StandardObjectData +txt.standardobjectdata_warcraftdata_profile=简介 +txt.standardobjectdata_warcraftdata_unitabilities=单位技能 +txt.standardobjectdata_warcraftdata_unitbalance=单位平衡 +txt.standardobjectdata_warcraftdata_unitdata=单位 +txt.standardobjectdata_warcraftdata_unitui=单位UI +txt.standardobjectdata_warcraftdata_unitweapons=单位武器 +txt.standardobjectdata_warcraftdata_profileskin=皮肤 +txt.standardobjectdata_warcraftdata_itemdata=物品 +txt.standardobjectdata_warcraftdata_doodaddata=地表装饰物 +txt.standardobjectdata_warcraftdata_abilitydata=技能 +txt.standardobjectdata_warcraftdata_upgradedata=科技 +exception.standardobjectdata_setfield_no_field=无字段 + +# craft3data/src/com/hiveworkshop/wc3/units/UnitOptionPane +dialog.unitoptionpane_show_type=选择单位类型 + +# craft3data/src/com/hiveworkshop/wc3/user/DirectorySelector +label.directoryselector_directoryselector_directory=请选择有效的魔兽争霸III目录: +button.directoryselector_directoryselector_browse=浏览 +dialog.directoryselector_directoryselector_permissions=所选文件夹没有访问权限。\n应该“以管理员身份运行”此程序,或者以其他方式获得目标文件夹权限,以便纹理加载器在该文件夹上工作。 +dialog.directoryselector_directoryselector_warning=警告:纹理加载器无法工作 + +# craft3data/src/com/hiveworkshop/wc3/user/SaveProfile +dialog.saveprofile_testtargetfolderreadonly_find=找不到war3.mpq。请选择有效的魔兽争霸III目录。 +dialog.saveprofile_testtargetfolderreadonly_needs=警告:需要安装魔兽争霸III + +# craft3data/src/de/wc3data/image/TgaFile +exception.tgafile_readtga_invalid_pixel_depth= 无效像素深度: +exception.tgafile_readtga_not_enaugh_pixel_data= 未启用像素数据 + +# craft3data/src/de/wc3data/stream/StreamUtils +exception.streamutils_checkId_failed=加载模型出错:检查ID失败,需要 +exception.streamutils_checkId_found= 发现 +exception.streamutils_checkId_failed_optional= 加载模型出错:可选检查后检查ID失败,必填 + +# craft3data/src/mpq/compression/pkware/PKExploder +exception.pkexploder_expand_pointing=输出前的距离指向 +exception.pkexploder_expand_compression=不支持pkware ascii压缩 +exception.pkexploder_expand_invalid=压缩模式无效 +exception.pkexploder_explode_received=收到错误数据 +exception.pkexploder_explode_dictionary=字典大小无效 +exception.pkexploder_explode_compression=不支持pkware ascii压缩 +exception.pkexploder_explode_invalid=压缩模式无效 +exception.pkexploder_explode_unexpected=数据意外结束 + +# craft3data/src/mpq/compression/Compression +exception.compression_blockdecompress3_unsupported=不支持压缩类型 +exception.compression_blockdecompress3_unknown=未知扇区压缩 +exception.compression_blockdecompress2_unsupported=不支持压缩类型 +exception.compression_blockdecompress2_compression=不太支持mpq稀疏压缩标志 +exception.compression_sectorexplode_explode=扇区展开异常 +exception.compression_sectorinflated_deflae=扇区收起异常 +exception.compression_sectorhuffmanexpand_huffman=扇区霍夫曼展开异常 +exception.compression_sectoradpcmreconstruct_adpcm=扇区adpcm重建异常 +println.compression_blockexplode_decompression=pkware解压异常: +println.compression_blockexplode_exploding=某个块展开失败 +println.compression_blockdecompress_supported=不支持严格压缩标志模式 +exception.compression_blockdecompress_bzip2=不支持压缩类型:BZIP2 +exception.compression_blockdecompress_pkware_decompression=PKWARE解压失败 +exception.compression_blockdecompress_zlib_decompression=ZLIB解压失败 +exception.compression_blockdecompress_sparse=不支持压缩类型:SPARSE +exception.compression_blockdecompress_smaller=解压结果小于预期 +println.compression_blockdecompress_size=扇区已解压,但大小未达预期 + +# craft3data/src/mpq/ArchivedFile +exception.archivedfile_invalid_block=无效块:一个块既被压缩又被展开 +exception.archivedfile_loadoffsets_intersects=块区与扇区偏移表相交 +printf.archivedfile_loadoffsets_detached=%X块已从%X开头扇区分离(距离扇区表末尾%d字节)%n +exception.archivedfile_loadoffsets_outside=位于通道外块扇区 +exception.archivedfile_loadoffsets_negative=块扇区大小为负 +printf.archivedfile_loadoffsets_supported=尚不支持读取块扇区CRC + +# craft3data/src/mpq/ArchivedFileExtractor +println.archivedfileextractor_readblock_supported=尚不支持验证块扇区CRC + +# craft3data/src/mpq/ArchivedFileStream +exception.archivedfilestream_position_negative=文件不能有负位置 + +# craft3data/src/mpq/HashTable +exception.hashtable_lookupblock_found=未找到 + +# craft3data/src/mpq/MPQArchive +exception.mqparchive_locatearchive_contain=通道未包含MPQ存档 +exception.mqparchive_deserializehashtable_power=哈希表不是次方(是 +println.mqparchive_deserializehashtable_expected=哈希表解压后大小不符预期 +println.mqparchive_deserializeblocktable_large=块过大 +println.mqparchive_deserializeblocktable_clamped=所以被夹在 +println.mqparchive_deserializeblocktable_expected=块解压后大小不符预期 +println.mqparchive_deserializeblocktable_high_expected=高块解压后大小不符预期 +println.mqparchive_loadarchive_supported=不支持het和bet表 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/BetterUnitEditorModelSelector +panel.betteruniteditormodelselector_betteruniteditormodelselector_blank=空 +description.betteruniteditormodelselector_filltable_control=允许用户控制显示模型可编辑部分。 +dialog.betteruniteditormodelselector_filltable_chosen=所选模型无法使用。 +dialog.betteruniteditormodelselector_filltable_error=程序错误 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/ObjectEditorModelingFrame +super.objecteditormodelingframe_objecteditormodelingframe_editor=对象编辑器-选择模型 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/models/UnitEditorModelSelector +panel.uniteditormodelselector_uniteditormodelselector_blank=空 +dialog.uniteditormodelselector_filltable_chosen=所选模型无法使用。 +dialog.uniteditormodelselector_filltable_error=程序错误 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/fields/FieldPopupUtils +dialog.fieldpopuputils_showconfirmdialog_edit=无法提交,因为: +println.fieldpopuputils_popupeditor_outside= 表面 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/better/EditorFieldTransferHandler +println.editorfieldtransferhandler_importdata_unsupported=导入数据:不支持该数据 +println.editorfieldtransferhandler_importdata_exception=导入数据: I/O 异常 +println.editorfieldtransferhandler_createtransferable_copy=复制失败 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorFrame +super.objecteditorframe_objecteditorframe_editor=对象编辑器 +menu.objecteditorframe_objecteditorframe_file=文件 +menu.objecteditorframe_objecteditorframe_edit=编辑 +menu.objecteditorframe_objecteditorframe_view=视图 +menu.objecteditorframe_objecteditorframe_module=模型 +menu.objecteditorframe_objecteditorframe_window=窗口 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectEditorPanel +addtab.objecteditorpanel_objecteditorpanel_terrain=地形 +addtab.objecteditorpanel_objecteditorpanel_lighting_effects=闪电特效 +addtab.objecteditorpanel_objecteditorpanel_weather=天气 +addtab.objecteditorpanel_objecteditorpanel_soundsets=音效 +makebutton.objecteditorpanel_createtoolbar_newmap=新建地图 +makebutton.objecteditorpanel_createtoolbar_openmap=打开地图 +makebutton.objecteditorpanel_createtoolbar_savemap=保存地图 +makebutton.objecteditorpanel_createtoolbar_copy=复制 +makebutton.objecteditorpanel_createtoolbar_paste=粘贴 +makebutton.objecteditorpanel_createtoolbar_createnew=新建 +makebutton.objecteditorpanel_createtoolbar_terraineditor=地形编辑器 +makebutton.objecteditorpanel_createtoolbar_scripteditor=脚本编辑器 +makebutton.objecteditorpanel_createtoolbar_soundeditor=音效编辑器 +makebutton.objecteditorpanel_createtoolbar_campaigneditor=战役编辑器 +makebutton.objecteditorpanel_createtoolbar_aieditor=AI编辑器 +makebutton.objecteditorpanel_createtoolbar_objecteditor=对象编辑器 +makebutton.objecteditorpanel_createtoolbar_importeditor=导入编辑器 +makebutton.objecteditorpanel_createtoolbar_testmap=测试地图 +dialog.objecteditorpanel_savespecifictabdata_export=从此选项卡导出数据 +dialog.objecteditorpanel_savespecifictabdata_export_go=正在导出... +dialog.objecteditorpanel_savespecifictabdata_overwrite= 已存在。是否覆盖? +dialog.objecteditorpanel_openspecifictabdata_export=从此选项卡导入数据 +dialog.objecteditorpanel_openspecifictabdata_export_go=正在导入... +dialog.objecteditorpanel_openspecifictabdata_replace=. 将替换所有设置,如地图编辑器。 +dialog.objecteditorpanel_openspecifictabdata_error=错误。所选文件不存在。是否重试? + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/ObjectTabTreeBrowserTransferHandler +println.objecttabtreebrowsertransferhandler_importdata_unsupported=导入数据:不支持该数据 +println.objecttabtreebrowsertransferhandler_importdata_exception=导入数据: I/O 异常 +println.objecttabtreebrowsertransferhandler_createtransferable_copy=复制失败 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorPanel +add.uniteditopanel_uniteditopanel_storm_bolt=暴风之锤 +add.uniteditopanel_uniteditopanel_local_variables=局部变量 +add.uniteditopanel_uniteditopanel_local_level=本地等级 +add.uniteditopanel_uniteditopanel_local_duration=本地持续时间 +add.uniteditopanel_uniteditopanel_local_buff_type=本地增益类型 +add.uniteditopanel_uniteditopanel_on_learn_actions=动作 - 学习 +add.uniteditopanel_uniteditopanel_set_local_level_triggering_unit=设置本地等级=(触发单位的技能等级) +add.uniteditopanel_uniteditopanel_command_card_add_icon=指令卡 - 为(单位目标)添加一个(此技能)指令卡图标,使用((技能:(此技能)的整数:按钮位置 - 普通(X)('abpx')),(技能:(此技能)的整数:按钮位置 - 普通(Y)('abpy'))) +add.uniteditopanel_uniteditopanel_command_card_set_icon=指令卡 - 将(最后创建的指令卡图标)的图标设为(此技能图标) +add.uniteditopanel_uniteditopanel_command_card_set_mana_cost=指令卡 - 将(最后创建的指令卡图标)的法力消耗设为(技能:(此技能)的整数:等级法力消耗('amcs'),等级:本地等级) +add.uniteditopanel_uniteditopanel_command_card_set_cooldown=指令卡 - 将(最后创建的指令卡图标)的冷却时间设置为(技能:(此技能)的实数等级:冷却时间('acdn'),等级:本地等级) +add.uniteditopanel_uniteditopanel_on_cast_actions=动作 - 施放 +add.uniteditopanel_uniteditopanel_set_local_level=设置本地等级=(施放单位的技能等级) +add.uniteditopanel_uniteditopanel_create_missile=投射物 - 在(施法单位位置)创建一个初始未发射投射物,Z高度为0.00,该投射物将追踪(正在施放技能的目标单位),其上方Z高度为0.00 +add.uniteditopanel_uniteditopanel_model_missile=投射物 - 将(最后创建的投射物)的模型文件改为(此技能投射物的美术路径(索引0)) +add.uniteditopanel_uniteditopanel_owner_missile=投射物 - 将(最后创建的投射物)所有者改为(施法单位所有者) +add.uniteditopanel_uniteditopanel_launch_missile=投射物 - 发射(最后创建的投射物),速度为(技能:(此技能)的整数:弹道速度('amsp')),弧度为(技能:(此技能)的实数:弹道弧度('amac')) +add.uniteditopanel_uniteditopanel_damage_unit=单位 - 使(施法单位)对(正在施放技能的目标单位)造成伤害,造成(技能:(该技能)的实数等级伤害('Htb1'),等级:本地等级)点,攻击类型为法术且伤害类型为普通的伤害 +add.uniteditopanel_uniteditopanel_set_local_buff_type=设置本地增益类型= (技能: (此技能)的增益等级 Buffs ('abuf'), 等级: 本地等级) +add.uniteditopanel_uniteditopanel_conditions=如果(所有条件为真)则执行(动作)否则执行(动作) +add.uniteditopanel_uniteditopanel_if=如果 - 条件 +add.uniteditopanel_uniteditopanel_hero_equal_true=((施放技能的目标单位)是英雄) 等于 真 +add.uniteditopanel_uniteditopanel_then=那么 - 动作 +add.uniteditopanel_uniteditopanel_set_localduration_hero=设置本地持续时间= (技能:(此技能)的实数等级持续时间 - 英雄 ('ahdu') 的等级:本地等级) +add.uniteditopanel_uniteditopanel_else=否则 - 动作 +add.uniteditopanel_uniteditopanel_set_localduration_normal=设置本地持续时间= (技能: (此技能) 的实数等级持续时间 - 正常 ('adur'),等级为: 本地等级) +add.uniteditopanel_uniteditopanel_local_buff_type_greater=(正在施放技能的目标单位的本地增益类型等级)大于 0 +add.uniteditopanel_uniteditopanel_buff_duration=增益 - 将本地持续时间添加到(对正在施放技能的目标单位指定类型的本地增益类型且技能类型为此技能的增益)的持续时间 +add.uniteditopanel_uniteditopanel_buff_new=增益 - 对(正在施放技能的目标单位)应用新增益,等级:本地等级,类型:本地增益类型 +add.uniteditopanel_uniteditopanel_buff_remaining_duration=增益 - 将(最后应用的增益)的剩余持续时间设为本地持续时间 +add.uniteditopanel_uniteditopanel_buff_applied_actions=动作 - 应用增益 +add.uniteditopanel_uniteditopanel_set_local_level_buffed=设置本地等级 = (被增益单位的(此技能)的等级) +add.uniteditopanel_uniteditopanel_stun_buffed=眩晕(增益单位) +add.uniteditopanel_uniteditopanel_buff_removed_actions=动作 - 移除增益 +add.uniteditopanel_uniteditopanel_unstun_buffed=解除眩晕(增益单位) +addtab.uniteditopanel_uniteditopanel_stats=统计 +addtab.uniteditopanel_uniteditopanel_behavior=行为 +println.uniteditopanel_uniteditopanel_categories=类别已更改( +println.uniteditopanel_uniteditopanel_found=未找到更改节点 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/objects/UnitEditorTreeBrowser +menuitem.uniteditortreebrowser_uniteditortreebrowser_open=打开 +menuitem.uniteditortreebrowser_uniteditortreebrowser_open_portrait=打开头像 +menuitem.uniteditortreebrowser_uniteditortreebrowser_extract=提取 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/gui/TriggerTree +exception.triggertree_createtrigger_cannot_create_at=无法创建选择的触发器 +exception.triggertree_createtrigger_cannot__create_with=无法使用选择创建触发器 +exception.triggertree_triggerelementtreenode_copy=无法复制: +println.triggertree_importdata_unsupported=不支持该数据: +println.triggertree_importdata_error=I/O 错误: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/impl/TriggerEnvironment +exception.triggerenvironment_createtrigger_invalid=在无效类别中创建触发器! + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerEditor +makebutton.triggereditor_triggereditor_newmap=新建地图 +makebutton.triggereditor_triggereditor_openmap=打开地图 +makebutton.triggereditor_triggereditor_savemap=保存地图 +dialog.triggereditor_triggereditor_savemap=保存地图 +makebutton.triggereditor_triggereditor_copy=复制 +makebutton.triggereditor_triggereditor_paste=粘贴 +makebutton.triggereditor_triggereditor_createnewcategory=新建类别 +makebutton.triggereditor_triggereditor_createnewtrigger=新建触发 +makebutton.triggereditor_triggereditor_createnewtriggercomment=新建触发注释 +makebutton.triggereditor_triggereditor_terraineditor=地形编辑器 +makebutton.triggereditor_triggereditor_soundeditor=音效编辑器 +makebutton.triggereditor_triggereditor_objecteditor=对象编辑器 +makebutton.triggereditor_triggereditor_campaigneditor=战役编辑器 +makebutton.triggereditor_triggereditor_aieditor=AI编辑器 +makebutton.triggereditor_triggereditor_importeditor=导入编辑器 +makebutton.triggereditor_triggereditor_testmap=测试地图 +frame.triggereditor_main_trigger_editor=触发编辑器 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/triggers/TriggerTreeCellRenderer +println.triggertreecellrenderer_component_gettreecellrenderercomponent=获取树单元渲染器组件 +println.triggertreecellrenderer_component_leaf_map=地图页 +println.triggertreecellrenderer_component_leaf_comment=评论页 +println.triggertreecellrenderer_component_leaf_trigger=触发页 +println.triggertreecellrenderer_component_leaf_category=类别页 +println.triggertreecellrenderer_component_leaf_state_corruption=状态损坏页 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AiBuffer +exception.aibuffer_fromcodename_exist=AI增益不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ArmorType +exception.armortype_fromcodename_exist=护甲类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackBits +exception.attackbits_fromcodename_exist=攻击位数不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttackType +exception.attacktype_fromcodename_exist=攻击类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/AttributeType +exception.attributetype_fromcodename_exist=属性类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelFlags +exception.channelflags_fromcodename_exist=通道标志不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ChannelType +exception.channeltype_fromcodename_exist=通道类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/CombatSound +exception.combatSound_fromcodename_exist=战斗声音不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DeathType +exception.deathType_fromcodename_exist=死亡类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseType +exception.defensetype_fromcodename_exist=防御类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DefenseTypeInt +exception.defensetypeint_fromcodename_exist=防御类型整数不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/DetectionType +exception.detectiontype_fromcodename_exist=探测类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/FullFlags +exception.fullflags_fromcodename_exist=完整标志不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/InteractionFlags +exception.interactionflags_fromcodename_exist=交互标志不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ItemClass +exception.itemclass_fromcodename_exist=物品类别不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/LightningEffect +exception.lightningeffect_fromcodename_exist=闪电特效不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MorphFlags +exception.morphflags_fromcodename_exist=变形标志不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/MoveType +exception.movetype_fromcodename_exist=移动类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListPrevent +exception.pathinglistprevent_fromcodename_exist=路径列表阻碍不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PathingListRequire +exception.pathinglistrequire_fromcodename_exist=路径列表需求不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/PickFlags +exception.pickflags_fromcodename_exist=拾取标志不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/RegenType +exception.regentype_fromcodename_exist=再生类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/ShadowImage +exception.shadowimage_fromcodename_exist=阴影图片不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SilenceFlags +exception.silenceflags_fromcodename_exist=静音标志不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/SpellDetail +exception.spelldetail_fromcodename_exist=施法细节不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/StackFlags +exception.stackflags_fromcodename_exist=堆叠标志不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetList +exception.targetlist_fromcodename_exist=目标列表不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TargetType +exception.targettype_fromcodename_exist=目标类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TeamColor +exception.teamcolor_fromcodename_exist=队伍颜色不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/TechAvail +exception.techavail_fromcodename_exist=科技可用性不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitClass +exception.unitclass_fromcodename_exist=单位类别不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UnitRace +exception.unitrace_fromcodename_exist=单位种族不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeClass +exception.upgradeclass_fromcodename_exist=升级类别不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/UpgradeEffect +exception.upgradeeffect_fromcodename_exist=升级效果不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/VersionFlags +exception.versionflags_fromcodename_exist=版本标志不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/enums/WeaponType +exception.weapontype_fromcodename_exist=武器类型不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/meta/Category +exception.category_fromcodename_exist=类别不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/wipdesign/units/Tileset +exception.tileset_fromcodename_exist=地表纹理不存在: + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/GoodSLKEdit +exception.goodslkedit_goodslkedit_slk=SLK文件 +frame.goodslkedit_goodslkedit_slk=编辑SLK文件 +menu.goodslkedit_goodslkedit_file=文件 +menu.goodslkedit_goodslkedit_open=打开 + +# craft3editor/src/com/hiveworkshop/wc3/jworldedit/TestMain +layer.testmain_main_none=空 \ No newline at end of file diff --git a/matrixeater/src/com/matrixeater/blpconv/BlpConverterPanel.java b/matrixeater/src/com/matrixeater/blpconv/BlpConverterPanel.java index fa150bafa..98538f54e 100644 --- a/matrixeater/src/com/matrixeater/blpconv/BlpConverterPanel.java +++ b/matrixeater/src/com/matrixeater/blpconv/BlpConverterPanel.java @@ -40,6 +40,7 @@ import com.hiveworkshop.wc3.mpq.MpqCodebase; import com.hiveworkshop.wc3.util.Callback; import com.matrixeater.src.EditorDisplayManager; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.image.BlpFile; import de.wc3data.image.TgaFile; @@ -57,18 +58,18 @@ public class BlpConverterPanel extends JPanel { public BlpConverterPanel() { fileChooser = new JFileChooser(); fileChooser.setAcceptAllFileFilterUsed(false); - final FileNameExtensionFilter blpFilter = new FileNameExtensionFilter("BLP image", "blp"); - final FileNameExtensionFilter tgaFilter = new FileNameExtensionFilter("TGA image", "tga"); + final FileNameExtensionFilter blpFilter = new FileNameExtensionFilter(LocalizationManager.getInstance().get("matrixeater.ExtensionFilter.blpconverterpanel_blp"), "blp"); + final FileNameExtensionFilter tgaFilter = new FileNameExtensionFilter(LocalizationManager.getInstance().get("matrixeater.ExtensionFilter.blpconverterpanel_tga"), "tga"); fileChooser.addChoosableFileFilter(blpFilter); fileChooser.addChoosableFileFilter(tgaFilter); for (final String ext : ImageIO.getReaderFileSuffixes()) { - fileChooser.addChoosableFileFilter(new FileNameExtensionFilter(ext.toUpperCase() + " image", ext)); + fileChooser.addChoosableFileFilter(new FileNameExtensionFilter(ext.toUpperCase() + LocalizationManager.getInstance().get("matrixeater.ExtensionFilter.blpconverterpanel_image"), ext)); } - loadFile = new JButton("Load File"); + loadFile = new JButton(LocalizationManager.getInstance().get("matrixeater.button.blpconverterpanel_load")); preview = new JLabel(); preview.setMinimumSize(new Dimension(512, 512)); preview.setPreferredSize(new Dimension(512, 512)); - saveFile = new JButton("Save File"); + saveFile = new JButton(LocalizationManager.getInstance().get("matrixeater.button.blpconverterpanel_save")); setLayout(new BorderLayout()); @@ -116,20 +117,20 @@ public void actionPerformed(final ActionEvent e) { if ((fileFilter == blpFilter) || selectedFile.getName().toLowerCase().endsWith("blp")) { final BufferedImage image = BlpFile.read(selectedFile); if (image == null) { - throw new RuntimeException("unable to load: " + selectedFile); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.blpconverterpanel_blp") + selectedFile); } setCurrentImage(image); } else if ((fileFilter == tgaFilter) || selectedFile.getName().toLowerCase().endsWith("tga")) { final BufferedImage image = TgaFile.readTGA(selectedFile); if (image == null) { - throw new RuntimeException("unable to load: " + selectedFile); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.blpconverterpanel_tga") + selectedFile); } setCurrentImage(image); } else { final BufferedImage image = ImageIO.read(selectedFile); if (image == null) { - throw new RuntimeException("Unable to load (bad format?): " + selectedFile); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.blpconverterpanel_image") + selectedFile); } setCurrentImage(image); } @@ -150,14 +151,14 @@ public void actionPerformed(final ActionEvent e) { if (selectedFile != null) { final FileFilter fileFilter = fileChooser.getFileFilter(); if ((fileFilter == blpFilter) || selectedFile.getName().toLowerCase().endsWith("blp")) { - final String[] types = { "Jpg", "Paletted" }; + final String[] types = { "Jpg", LocalizationManager.getInstance().get("matrixeater.combobox.blpconverterpanel_paletted") }; final JComboBox type = new JComboBox<>(types); type.setEditable(false); - final JCheckBox useAlpha = new JCheckBox("Use Alpha", true); + final JCheckBox useAlpha = new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.blpconverterpanel_usealpha"), true); final JSpinner quality = new JSpinner(new SpinnerNumberModel(100, 0, 100, 0.01)); - final JCheckBox generateMipMaps = new JCheckBox("Generate Mip Maps", true); - final JCheckBox antiDither = new JCheckBox("Anti Dither", true); + final JCheckBox generateMipMaps = new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.blpconverterpanel_generate"), true); + final JCheckBox antiDither = new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.blpconverterpanel_anti"), true); type.addActionListener(new ActionListener() { @Override @@ -171,9 +172,9 @@ public void actionPerformed(final ActionEvent e) { generateMipMaps.setEnabled(false); antiDither.setEnabled(false); JOptionPane.showMessageDialog(BlpConverterPanel.this, - new Object[] { type, useAlpha, new JLabel("Quality: "), quality, + new Object[] { type, useAlpha, new JLabel(LocalizationManager.getInstance().get("matrixeater.dialog.blpconverterpanel_quality")), quality, generateMipMaps, antiDither }, - "BLP Export Options", JOptionPane.PLAIN_MESSAGE); + LocalizationManager.getInstance().get("matrixeater.dialog.blpconverterpanel_blp"), JOptionPane.PLAIN_MESSAGE); final boolean isJpg = type.getSelectedItem() == types[0]; if (isJpg) { @@ -210,30 +211,30 @@ public void setCurrentImage(final BufferedImage currentImage) { public static void main(final String[] args) { LwjglNativesLoader.load(); EditorDisplayManager.setupLookAndFeel(); - final JFrame frame = new JFrame("BLP Converter (Using DrSuperGood blp-iio-plugin)"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.editordisplaymanager")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel leftHandCardPanel = new JPanel(); final CardLayout cardLayout = new CardLayout(); leftHandCardPanel.setLayout(cardLayout); final BlpConverterPanel converterPanel = new BlpConverterPanel(); - leftHandCardPanel.add("tex", converterPanel); + leftHandCardPanel.add(LocalizationManager.getInstance().get("matrixeater.layout.lefthandcardpanel_tex"), converterPanel); final EditableModel emptyModel = new EditableModel(); final PerspDisplayPanel modelViewport = new PerspDisplayPanel("", new ModelViewManager(emptyModel), new ProgramPreferences(), new RenderModel(emptyModel, null)); - leftHandCardPanel.add("model", modelViewport); + leftHandCardPanel.add(LocalizationManager.getInstance().get("matrixeater.layout.lefthandcardpanel_model"), modelViewport); final MpqCodebase mpqCodebase = MpqCodebase.get(); - cardLayout.show(leftHandCardPanel, "tex"); + cardLayout.show(leftHandCardPanel, LocalizationManager.getInstance().get("matrixeater.layout.lefthandcardpanel_tex")); final MPQBrowser mpqBrowser = new MPQBrowser(mpqCodebase, new Callback() { @Override public void run(final String object) { try { if (object.toLowerCase().endsWith("mdx")) { - cardLayout.show(leftHandCardPanel, "model"); + cardLayout.show(leftHandCardPanel, LocalizationManager.getInstance().get("matrixeater.layout.lefthandcardpanel_model")); modelViewport.setViewport(new ModelViewManager( MdxUtils.loadModel(new BlizzardDataInputStream(mpqCodebase.getResourceAsStream(object))) .toMDL())); } else { - cardLayout.show(leftHandCardPanel, "tex"); + cardLayout.show(leftHandCardPanel, LocalizationManager.getInstance().get("matrixeater.layout.lefthandcardpanel_tex")); converterPanel.setCurrentImage(BlpFile.read(object, mpqCodebase.getResourceAsStream(object))); } } catch (final IOException e) { @@ -244,7 +245,7 @@ public void run(final String object) { }, new Callback() { @Override public void run(final String object) { - JOptionPane.showMessageDialog(leftHandCardPanel, "Not yet implemented for this application."); + JOptionPane.showMessageDialog(leftHandCardPanel, LocalizationManager.getInstance().get("matrixeater.dialog.lefthandcardpanel_run")); } }); final JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftHandCardPanel, mpqBrowser); diff --git a/matrixeater/src/com/matrixeater/colorizer/MaydayColorizer.java b/matrixeater/src/com/matrixeater/colorizer/MaydayColorizer.java index 22c2e931b..5712e776e 100644 --- a/matrixeater/src/com/matrixeater/colorizer/MaydayColorizer.java +++ b/matrixeater/src/com/matrixeater/colorizer/MaydayColorizer.java @@ -1,4 +1,5 @@ package com.matrixeater.colorizer; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Color; import java.awt.Dimension; @@ -35,7 +36,7 @@ public class MaydayColorizer extends JPanel { private final JEditorPane editorPane; public MaydayColorizer() { - final JLabel label = new JLabel("Enter text:"); + final JLabel label = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.maydaycolorizer")); inputTextArea = new JTextArea(); inputTextArea.setLineWrap(true); final JButton leftColorDisplay = new JButton() { @@ -66,7 +67,7 @@ protected void paintComponent(final Graphics g) { leftColorDisplay.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - final Color userValue = JColorChooser.showDialog(MaydayColorizer.this, "Choose Color", leftColor); + final Color userValue = JColorChooser.showDialog(MaydayColorizer.this, LocalizationManager.getInstance().get("matrixeater.dialog.colorchooser"), leftColor); if (userValue != null) { leftColor = userValue; repaint(); @@ -77,7 +78,7 @@ public void actionPerformed(final ActionEvent e) { rightColorDisplay.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - final Color userValue = JColorChooser.showDialog(MaydayColorizer.this, "Choose Color", rightColor); + final Color userValue = JColorChooser.showDialog(MaydayColorizer.this, LocalizationManager.getInstance().get("matrixeater.dialog.colorchooser"), rightColor); if (userValue != null) { rightColor = userValue; repaint(); @@ -85,21 +86,21 @@ public void actionPerformed(final ActionEvent e) { } }); gradientDisplay.setMinimumSize(new Dimension(500, 25)); - final JButton applyLeftColor = new JButton("Apply Color"); + final JButton applyLeftColor = new JButton(LocalizationManager.getInstance().get("matrixeater.button.applyleftcolor")); applyLeftColor.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { applyColor(leftColor); } }); - final JButton applyRightColor = new JButton("Apply Color"); + final JButton applyRightColor = new JButton(LocalizationManager.getInstance().get("matrixeater.button.apprightcolor")); applyRightColor.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { applyColor(rightColor); } }); - final JButton applyGradient = new JButton("Apply Gradient"); + final JButton applyGradient = new JButton(LocalizationManager.getInstance().get("matrixeater.button.applygradient")); applyGradient.setMinimumSize(new Dimension(500, 25)); applyGradient.addActionListener(new ActionListener() { @@ -108,9 +109,9 @@ public void actionPerformed(final ActionEvent e) { applyColor(leftColor, rightColor); } }); - final JCheckBox valueLink = new JCheckBox("Value Link"); + final JCheckBox valueLink = new JCheckBox(LocalizationManager.getInstance().get("matrixeater.button.valuelink")); valueLink.setEnabled(false); - final JButton newLine = new JButton("New Line"); + final JButton newLine = new JButton(LocalizationManager.getInstance().get("matrixeater.button.newline")); newLine.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -340,7 +341,7 @@ private void applyColor(final Color leftColor, final Color rightColor) { } public static void main(final String[] args) { - final JFrame frame = new JFrame("Colorizer"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.main")); frame.setContentPane(new MaydayColorizer()); frame.setBounds(0, 0, 800, 600); frame.setLocationRelativeTo(null); @@ -398,7 +399,7 @@ public float getMinimumSpan(final int axis) { return super.getMinimumSpan(axis); } default: { - throw new IllegalArgumentException("Invalid axis: " + axis); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("matrixeater.exception.illegalargumentexception") + axis); } } } diff --git a/matrixeater/src/com/matrixeater/hacks/BLPExtractorCompressorWar3.java b/matrixeater/src/com/matrixeater/hacks/BLPExtractorCompressorWar3.java index 591501031..6b83ce0e2 100644 --- a/matrixeater/src/com/matrixeater/hacks/BLPExtractorCompressorWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/BLPExtractorCompressorWar3.java @@ -7,6 +7,7 @@ import java.util.List; import com.hiveworkshop.wc3.gui.OldBLPHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public final class BLPExtractorCompressorWar3 { private static final List failed = new ArrayList<>(); @@ -18,7 +19,7 @@ public final class BLPExtractorCompressorWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.blpextractorcompressor_main_usage")); System.exit(-1); } final File target = new File(args[0]); @@ -26,9 +27,9 @@ public static void main(final String[] args) { texRoot = new File(target.getParent() + "/Compressor"); compressRoot = new File(target.getParent() + "/CompressorOut"); operate(target); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blpextractorcompressor_main_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blpextractorcompressor_main_failed") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blpextractorcompressor_main_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/BLPNulltexGenWar3.java b/matrixeater/src/com/matrixeater/hacks/BLPNulltexGenWar3.java index 457b88d6f..7d0147d47 100644 --- a/matrixeater/src/com/matrixeater/hacks/BLPNulltexGenWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/BLPNulltexGenWar3.java @@ -1,5 +1,7 @@ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; + import java.io.File; import java.nio.file.Files; import java.nio.file.StandardCopyOption; @@ -19,7 +21,7 @@ public final class BLPNulltexGenWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.blpnulltexgen_main_usage")); System.exit(-1); } final File target = new File(args[0]); @@ -30,9 +32,9 @@ public static void main(final String[] args) { nulltex = new File(target.getParent() + "/scratch/nulltex.blp"); nullgenRoot = new File(target.getParent() + "/nullgenTextures"); operate(target); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blpnulltexgen_main_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blpnulltexgen_main_failed") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blpnulltexgen_main_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/ColorWheel.java b/matrixeater/src/com/matrixeater/hacks/ColorWheel.java index eecd40e72..d97a438d4 100644 --- a/matrixeater/src/com/matrixeater/hacks/ColorWheel.java +++ b/matrixeater/src/com/matrixeater/hacks/ColorWheel.java @@ -12,6 +12,8 @@ import javax.swing.JPanel; import javax.swing.WindowConstants; +import hiveworkshop.localizationmanager.LocalizationManager; + public class ColorWheel extends JPanel { private double angle; @@ -108,7 +110,7 @@ protected void paintComponent(final Graphics g) { } public static void main(final String[] args) { - final JFrame frame = new JFrame("Test"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.main")); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setContentPane(new ColorWheel()); frame.pack(); diff --git a/matrixeater/src/com/matrixeater/hacks/ExpungeExtensionWar3.java b/matrixeater/src/com/matrixeater/hacks/ExpungeExtensionWar3.java index d130a1de0..c8f84f800 100644 --- a/matrixeater/src/com/matrixeater/hacks/ExpungeExtensionWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/ExpungeExtensionWar3.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; +import hiveworkshop.localizationmanager.LocalizationManager; + public final class ExpungeExtensionWar3 { private static final List failed = new ArrayList<>(); private static final List passed = new ArrayList<>(); @@ -11,15 +13,15 @@ public final class ExpungeExtensionWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.expungeextension_main_usage")); System.exit(-1); } final File target = new File(args[0]); root = target; squish(target); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.expungeextension_main_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.expungeextension_main_failed") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.expungeextension_main_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/FindEverythingWithMissingFrames.java b/matrixeater/src/com/matrixeater/hacks/FindEverythingWithMissingFrames.java index acb6e1e29..fefb69ca7 100644 --- a/matrixeater/src/com/matrixeater/hacks/FindEverythingWithMissingFrames.java +++ b/matrixeater/src/com/matrixeater/hacks/FindEverythingWithMissingFrames.java @@ -12,6 +12,7 @@ import com.hiveworkshop.wc3.mdl.Named; import com.hiveworkshop.wc3.mdx.MdxUtils; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataInputStream; @@ -49,15 +50,15 @@ public static void main(final String[] args) { } if (hasSequence) { if (!hasStart) { - writer.println(path + ":" + getSource(model, flag) + ":GlobalSeqId" - + flag.getGlobalSeqId() + ":Missing start at " + 0 + " for track " + writer.println(path + ":" + getSource(model, flag) + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_globa") + + flag.getGlobalSeqId() + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_start") + 0 + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_track") + flag.getName()); } if (!hasEnd) { if (!hasStart || (inSequence > 1)) { - writer.println(path + ":" + getSource(model, flag) + ":GlobalSeqId" - + flag.getGlobalSeqId() + ":Missing end at " + flag.getGlobalSeq() - + " for track " + flag.getName()); + writer.println(path + ":" + getSource(model, flag) + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_globa") + + flag.getGlobalSeqId() + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_end") + flag.getGlobalSeq() + + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_track") + flag.getName()); } } } @@ -85,13 +86,13 @@ public static void main(final String[] args) { if (hasSequence) { if (!hasStart) { writer.println(path + ":" + getSource(model, flag) + ":" - + sequence.getName() + ":Missing start at " + start + " for track " + + sequence.getName() + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_start") + start + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_track") + flag.getName()); } if (!hasEnd) { if (!hasStart || (inSequence > 1)) { writer.println(path + ":" + getSource(model, flag) + ":" - + sequence.getName() + ":Missing end at " + end + " for track " + + sequence.getName() + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_end") + end + LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_track") + flag.getName()); } } @@ -111,7 +112,7 @@ public static void main(final String[] args) { } catch (final FileNotFoundException e1) { e1.printStackTrace(); } - System.out.println("done"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.findmiss_main_done")); } diff --git a/matrixeater/src/com/matrixeater/hacks/FindTreeBridgeTool2.java b/matrixeater/src/com/matrixeater/hacks/FindTreeBridgeTool2.java index 8f9f019ec..2cf1778a7 100644 --- a/matrixeater/src/com/matrixeater/hacks/FindTreeBridgeTool2.java +++ b/matrixeater/src/com/matrixeater/hacks/FindTreeBridgeTool2.java @@ -24,6 +24,7 @@ import com.hiveworkshop.wc3.units.objectdata.MutableObjectData; import com.hiveworkshop.wc3.units.objectdata.MutableObjectData.MutableGameObject; import com.hiveworkshop.wc3.units.objectdata.War3ID; +import hiveworkshop.localizationmanager.LocalizationManager; import mpq.MPQException; @@ -155,7 +156,7 @@ private static void checktb(final String gameFile, final byte[] data, final int } } if (match) { - System.err.println(gameFile + " at index " + i); + System.err.println(gameFile + LocalizationManager.getInstance().get("matrixeater.println.findtreebridge_checktb") + i); } } diff --git a/matrixeater/src/com/matrixeater/hacks/FtlopMaker.java b/matrixeater/src/com/matrixeater/hacks/FtlopMaker.java index 7ae7e5f3d..1bf6ce25e 100644 --- a/matrixeater/src/com/matrixeater/hacks/FtlopMaker.java +++ b/matrixeater/src/com/matrixeater/hacks/FtlopMaker.java @@ -12,6 +12,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdx.MdxUtils; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataInputStream; @@ -29,10 +30,10 @@ public static void main(final String[] args) { } final String outputDump = "E:\\Games\\FtlopMod\\_dev\\Build\\"; final int targetLevelOfDetail = 3; - System.out.println("Going to attempt to port " + betterList.size() + " items"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker_go") + betterList.size() + LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker_items")); for (int i = 0; i < betterList.size(); i++) { if (i % 100 == 0) { - System.out.println("Processed 100 items... now at " + i); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker_processed") + i); } final String item = betterList.get(i); System.out.println(item); diff --git a/matrixeater/src/com/matrixeater/hacks/FtlopMaker2.java b/matrixeater/src/com/matrixeater/hacks/FtlopMaker2.java index 971f45164..25386225a 100644 --- a/matrixeater/src/com/matrixeater/hacks/FtlopMaker2.java +++ b/matrixeater/src/com/matrixeater/hacks/FtlopMaker2.java @@ -11,6 +11,7 @@ import com.hiveworkshop.json.JSONObject; import com.hiveworkshop.json.JSONTokener; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; public class FtlopMaker2 { @@ -30,7 +31,7 @@ public static void main(final String[] args) { // dest.toLowerCase(Locale.US).replace('/', '\\')); final Path resolve = Paths.get("E:\\Games\\FtlopModLocalFiles\\").resolve(src); Files.createDirectories(resolve.getParent()); - System.out.println("copying " + dest + " -> " + src); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker2_copy") + dest + " -> " + src); try { Files.copy(Paths.get("E:\\Games\\FtlopModLocalFiles\\").resolve(dest), resolve, StandardCopyOption.REPLACE_EXISTING); diff --git a/matrixeater/src/com/matrixeater/hacks/FtlopMaker4.java b/matrixeater/src/com/matrixeater/hacks/FtlopMaker4.java index c6bca2535..9f2889d1d 100644 --- a/matrixeater/src/com/matrixeater/hacks/FtlopMaker4.java +++ b/matrixeater/src/com/matrixeater/hacks/FtlopMaker4.java @@ -14,6 +14,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdx.MdxUtils; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataInputStream; @@ -32,10 +33,10 @@ public static void main(final String[] args) { } final String outputDump = "E:\\Games\\FtlopModLocalFiles\\"; final int targetLevelOfDetail = 1; - System.out.println("Going to attempt to port " + betterList.size() + " items"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker4_go") + betterList.size() + LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker4_items")); for (int i = 0; i < betterList.size(); i++) { if (i % 100 == 0) { - System.out.println("Processed 100 items... now at " + i); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker4_processed") + i); } final String item = betterList.get(i); newFixedThreadPool.execute(new Runnable() { @@ -69,6 +70,6 @@ public void run() { } }); } - System.out.println("Done assigning jobs"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker4_done")); } } diff --git a/matrixeater/src/com/matrixeater/hacks/FtlopMaker5.java b/matrixeater/src/com/matrixeater/hacks/FtlopMaker5.java index 149741936..dcafd35cc 100644 --- a/matrixeater/src/com/matrixeater/hacks/FtlopMaker5.java +++ b/matrixeater/src/com/matrixeater/hacks/FtlopMaker5.java @@ -12,6 +12,7 @@ import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdx.MdxUtils; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.image.TgaFile; import de.wc3data.stream.BlizzardDataInputStream; @@ -34,10 +35,10 @@ public static void main(final String[] args) { final String outputDump = "C:\\Temp\\HiveForged\\Archive\\"; final int targetLevelOfDetail = 0; final int size = betterList.size(); - System.out.println("Going to attempt to port " + size + " items"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker5_go") + size + LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker5_items")); for (int i = 0; i < size; i++) { if (i % 100 == 0) { - System.out.println("Processed 100 items... now at " + i); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.ftlopmaker5_processed") + i); } final String item = betterList.get(i); final int fi = i; diff --git a/matrixeater/src/com/matrixeater/hacks/GetMeDatas13.java b/matrixeater/src/com/matrixeater/hacks/GetMeDatas13.java index d0b0efd52..e6afc7ecc 100644 --- a/matrixeater/src/com/matrixeater/hacks/GetMeDatas13.java +++ b/matrixeater/src/com/matrixeater/hacks/GetMeDatas13.java @@ -7,6 +7,7 @@ import com.hiveworkshop.wc3.mdx.MdxModel; import com.hiveworkshop.wc3.mdx.MdxUtils; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataInputStream; @@ -42,13 +43,13 @@ public static void main(final String[] args) { } index++; if ((index % 600) == 0) { - System.out.println("Reading... " + index + "/" + listFileSize); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas13_main_read") + index + "/" + listFileSize); } } for (int i = 0; i < tallies.length; i++) { System.out.println(i + ": " + tallies[i]); } - System.out.println("Crazy outliers: " + crazyOutliers); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas13_main_out") + crazyOutliers); } } diff --git a/matrixeater/src/com/matrixeater/hacks/GetMeDatas14.java b/matrixeater/src/com/matrixeater/hacks/GetMeDatas14.java index be9f5c147..20224e15f 100644 --- a/matrixeater/src/com/matrixeater/hacks/GetMeDatas14.java +++ b/matrixeater/src/com/matrixeater/hacks/GetMeDatas14.java @@ -14,6 +14,7 @@ import com.hiveworkshop.wc3.units.objectdata.MutableObjectData; import com.hiveworkshop.wc3.units.objectdata.MutableObjectData.MutableGameObject; import com.hiveworkshop.wc3.units.objectdata.War3ID; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataInputStream; @@ -39,7 +40,7 @@ public static void main(final String[] args) { // } n++; } - System.out.println("Checked " + static_counter + " of " + n + " units."); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_checked") + static_counter + LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_of") + n + LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_units")); } catch (final IOException e) { e.printStackTrace(); } @@ -58,7 +59,7 @@ private static void checkPath(final MpqCodebase mpqCodebase, String item) { model = EditableModel.read(inputStream); } } catch (final Exception e) { - System.err.println("FAIL: " + item); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_fail") + item); e.printStackTrace(); return; } @@ -66,14 +67,14 @@ private static void checkPath(final MpqCodebase mpqCodebase, String item) { if (item.toLowerCase().endsWith(".mdx")) { try (InputStream inputStream = mpqCodebase.getResourceAsStream(item)) { if (inputStream == null) { - System.err.println("skip: " + item); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_skip") + item); return; } try (BlizzardDataInputStream blzStream = new BlizzardDataInputStream(inputStream)) { model = new EditableModel(MdxUtils.loadModel(blzStream)); } } catch (final Exception e) { - System.err.println("FAIL: " + item); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_fail") + item); e.printStackTrace(); return; } @@ -90,11 +91,11 @@ private static void checkModel(final String item, final EditableModel model) { final double intensity = light.getIntensity(); final double ambIntensity = light.getAmbIntensity(); if (!light.getFlags().contains("Omnidirectional")) { - System.out.println("BAD: " + item); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_bad") + item); return; } if (intensity > 10000 || ambIntensity > 10000) { - System.out.println("BAD: " + item); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_bad") + item); return; } else { { @@ -103,7 +104,7 @@ private static void checkModel(final String item, final EditableModel model) { for (int i = 0; i < animIntensity.size(); i++) { final Double value = (Double) animIntensity.getValues().get(i); if (value > 10000) { - System.out.println("BAD: " + item); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_bad") + item); return; } } @@ -115,7 +116,7 @@ private static void checkModel(final String item, final EditableModel model) { for (int i = 0; i < animIntensity.size(); i++) { final Double value = (Double) animIntensity.getValues().get(i); if (value > 10000) { - System.out.println("BAD: " + item); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.getmedatas14_main_bad") + item); return; } } diff --git a/matrixeater/src/com/matrixeater/hacks/GetMeDatas5.java b/matrixeater/src/com/matrixeater/hacks/GetMeDatas5.java index d04b81a70..f11f957bb 100644 --- a/matrixeater/src/com/matrixeater/hacks/GetMeDatas5.java +++ b/matrixeater/src/com/matrixeater/hacks/GetMeDatas5.java @@ -16,13 +16,14 @@ import com.hiveworkshop.wc3.mdl.v2.timelines.InterpolationType; import com.hiveworkshop.wc3.mdx.MdxUtils; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataInputStream; public class GetMeDatas5 { public static void main(final String[] args) { - final JFrame frame = new JFrame("Rigborn Rotator"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.getmedatas5_main")); for (int ang = 0; ang < 36; ang++) { final InputStream footman = MpqCodebase.get() diff --git a/matrixeater/src/com/matrixeater/hacks/GridHotkeyMaker.java b/matrixeater/src/com/matrixeater/hacks/GridHotkeyMaker.java index 915d71441..0a117583d 100644 --- a/matrixeater/src/com/matrixeater/hacks/GridHotkeyMaker.java +++ b/matrixeater/src/com/matrixeater/hacks/GridHotkeyMaker.java @@ -12,6 +12,7 @@ import com.hiveworkshop.wc3.units.objectdata.MutableObjectData; import com.hiveworkshop.wc3.units.objectdata.MutableObjectData.MutableGameObject; import com.hiveworkshop.wc3.units.objectdata.War3ID; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataOutputStream; import mpq.MPQException; @@ -134,19 +135,19 @@ public static void main(final String[] args) { key = key.substring(0, 4); } if (key.equals("R00T")) { - System.err.println("Found Zear Backpack 1!"); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.sharedcommandcardbuttonsfound_zear1")); } final War3ID trainedUnitId = War3ID.fromString(key); final MutableObjectData dataByType = objectData.getDataByType(menuMakingKey.getDataType()); if (dataByType == null) { - throw new IllegalStateException(menuMakingKey.getDataType() + " is null"); + throw new IllegalStateException(menuMakingKey.getDataType() + LocalizationManager.getInstance().get("matrixeater.exception.sharedcommandcardbuttonsfound_null")); } final MutableGameObject trainedUnit = dataByType.get(trainedUnitId); if (trainedUnit == null) { System.err.println(trainedUnitId); } else { if (unitId.toString().equals("h013")) { - System.err.println("Assigning " + trainedUnit.getFieldAsString( + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.sharedcommandcardbuttonsfound_ass") + trainedUnit.getFieldAsString( menuMakingKey.getDataType() == MutableObjectData.WorldEditorDataType.UPGRADES ? War3ID.fromString("gnam") : menuMakingKey @@ -196,15 +197,15 @@ public static void main(final String[] args) { int xPosition = trainedUnit.getFieldAsInteger(buttonX, 0); int yPosition = trainedUnit.getFieldAsInteger(buttonY, 0); if (key.equals("R00T")) { - System.err.println("Found Zear Backpack!"); - System.err.println("Lookup to data got " + trainedUnit.getFieldAsString( + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.sharedcommandcardbuttonsfound_zear")); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.sharedcommandcardbuttonsfound_look") + trainedUnit.getFieldAsString( menuMakingKey.getDataType() == MutableObjectData.WorldEditorDataType.UPGRADES ? War3ID.fromString("gnam") : menuMakingKey .getDataType() == MutableObjectData.WorldEditorDataType.ABILITIES ? War3ID.fromString("anam") : War3ID.fromString("unam"), - 0) + " to (" + xPosition + "," + yPosition + ")"); + 0) + LocalizationManager.getInstance().get("matrixeater.println.sharedcommandcardbuttonsfound_to") + xPosition + "," + yPosition + ")"); } while ((xPosition >= 0) && (xPosition <= 3) && (yPosition >= 0) && (yPosition <= 2) @@ -217,14 +218,14 @@ public static void main(final String[] args) { } if ((xPosition >= 0) && (xPosition <= 3) && (yPosition >= 0) && (yPosition <= 2)) { if (unitId.toString().equals("h013")) { - System.err.println("Assigning " + trainedUnit.getFieldAsString( + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.sharedcommandcardbuttonsfound_ass") + trainedUnit.getFieldAsString( menuMakingKey.getDataType() == MutableObjectData.WorldEditorDataType.UPGRADES ? War3ID.fromString("gnam") : menuMakingKey .getDataType() == MutableObjectData.WorldEditorDataType.ABILITIES ? War3ID.fromString("anam") : War3ID.fromString("unam"), - 0) + " to (" + xPosition + "," + yPosition + ")"); + 0) + LocalizationManager.getInstance().get("matrixeater.println.sharedcommandcardbuttonsfound_to") + xPosition + "," + yPosition + ")"); } usedButtonPositions[yPosition][xPosition] = true; if (HERO_ABILITIES.equals(menuMakingKey.getFieldMetaKey())) { diff --git a/matrixeater/src/com/matrixeater/hacks/ListExtensionWar3.java b/matrixeater/src/com/matrixeater/hacks/ListExtensionWar3.java index fb35851b5..884cb6cc7 100644 --- a/matrixeater/src/com/matrixeater/hacks/ListExtensionWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/ListExtensionWar3.java @@ -1,4 +1,5 @@ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.util.ArrayList; @@ -11,15 +12,15 @@ public final class ListExtensionWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.listextension_main_usage")); System.exit(-1); } final File target = new File(args[0]); root = target; squish(target); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.listextension_main_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.listextension_main_failed") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.listextension_main_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/ListFileComparingGuy.java b/matrixeater/src/com/matrixeater/hacks/ListFileComparingGuy.java index 36f3775ca..b12b48e87 100644 --- a/matrixeater/src/com/matrixeater/hacks/ListFileComparingGuy.java +++ b/matrixeater/src/com/matrixeater/hacks/ListFileComparingGuy.java @@ -1,4 +1,5 @@ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; @@ -20,7 +21,7 @@ public static void traverseMyPath(final File file) { final String partialPathEnding = file.getAbsolutePath().substring(myPath.length()); final String zezulaPathOfFile = zezulaPath + partialPathEnding; if (!new File(zezulaPathOfFile).exists()) { - System.out.println("Not in MPQ Editor out: " + partialPathEnding); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.listfilecomparingguy_mpq") + partialPathEnding); } } } @@ -34,7 +35,7 @@ public static void traverseZPath(final File file) { final String partialPathEnding = file.getAbsolutePath().substring(zezulaPath.length()); final String myPathOfFile = myPath + partialPathEnding; if (!new File(myPathOfFile).exists()) { - System.out.println("Not in My Java code out: " + partialPathEnding); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.listfilecomparingguy_java") + partialPathEnding); } } } diff --git a/matrixeater/src/com/matrixeater/hacks/ListFileFinder.java b/matrixeater/src/com/matrixeater/hacks/ListFileFinder.java index 1dcf353e3..3a791e402 100644 --- a/matrixeater/src/com/matrixeater/hacks/ListFileFinder.java +++ b/matrixeater/src/com/matrixeater/hacks/ListFileFinder.java @@ -26,6 +26,7 @@ import com.hiveworkshop.wc3.units.objectdata.MutableObjectData; import com.hiveworkshop.wc3.units.objectdata.MutableObjectData.MutableGameObject; import com.hiveworkshop.wc3.units.objectdata.War3ID; +import hiveworkshop.localizationmanager.LocalizationManager; import mpq.MPQException; @@ -45,7 +46,7 @@ public static void main(final String[] args) { for (final War3ID unitId : unitData.keySet()) { final MutableGameObject unit = unitData.get(unitId); if (unit == null) { - System.err.println("no unit for id: " + unitId); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.listfilefinder_mutablegamedata") + unitId); continue; } final List idsToCheck = new ArrayList<>(); @@ -71,7 +72,7 @@ public static void main(final String[] args) { final String afterQuote = line.substring(firstQuote + 1); final int nextQuote = afterQuote.indexOf('"'); if (nextQuote == -1) { - System.err.println("invalid quoted string: " + startingLine); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.listfilefinder_startingline") + startingLine); break; } final String betweenQuotes = afterQuote.substring(nextQuote); @@ -133,7 +134,7 @@ private static void checkString(final Set usedFileList, final LoadedMPQ } } } catch (final Exception e) { - System.err.println("unable to parse model: " + fieldAsString); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.listfilefinder_fieldasstring") + fieldAsString); e.printStackTrace(); } } else if (mpq.has(extension(fieldAsString, "blp"))) { diff --git a/matrixeater/src/com/matrixeater/hacks/LookAndFeelDemo.java b/matrixeater/src/com/matrixeater/hacks/LookAndFeelDemo.java index dc91fa66d..4143ea225 100644 --- a/matrixeater/src/com/matrixeater/hacks/LookAndFeelDemo.java +++ b/matrixeater/src/com/matrixeater/hacks/LookAndFeelDemo.java @@ -31,6 +31,7 @@ */ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.BorderLayout; import java.awt.Component; @@ -55,7 +56,7 @@ import javax.swing.plaf.metal.OceanTheme; public class LookAndFeelDemo implements ActionListener { - private static String labelPrefix = "Number of button clicks: "; + private static String labelPrefix = LocalizationManager.getInstance().get("matrixeater.string.lookandfeeldemo_labelPrefix"); private int numClicks = 0; final JLabel label = new JLabel(labelPrefix + "0 "); @@ -70,7 +71,7 @@ public class LookAndFeelDemo implements ActionListener { final static String THEME = "Ocean"; public Component createComponents() { - final JButton button = new JButton("I'm a Swing button!"); + final JButton button = new JButton(LocalizationManager.getInstance().get("matrixeater.button.lookandfeeldemo_createcomponents")); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(this); label.setLabelFor(button); @@ -147,19 +148,25 @@ else if (LOOKANDFEEL.equals("GTK")) { } catch (final ClassNotFoundException e) { - System.err.println("Couldn't find class for specified look and feel:" + lookAndFeel); - System.err.println("Did you include the L&F library in the class path?"); - System.err.println("Using the default look and feel."); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_classnotfoundexception_1") + lookAndFeel); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_classnotfoundexception_2")); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_classnotfoundexception_3")); } catch (final UnsupportedLookAndFeelException e) { - System.err.println("Can't use the specified look and feel (" + lookAndFeel + ") on this platform."); - System.err.println("Using the default look and feel."); + System.err.println( + LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_1") + + lookAndFeel + + LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_2")); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_unsupportedlookandfeelexception_3")); } catch (final Exception e) { - System.err.println("Couldn't get specified look and feel (" + lookAndFeel + "), for some reason."); - System.err.println("Using the default look and feel."); + System.err.println( + LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_exception_1") + + lookAndFeel + + LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_exception_2")); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.lookandfeeldemo_exception_3")); e.printStackTrace(); } } @@ -177,7 +184,7 @@ private static void createAndShowGUI() { JFrame.setDefaultLookAndFeelDecorated(true); // Create and set up the window. - final JFrame frame = new JFrame("SwingApplication"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.createandshowgui")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final LookAndFeelDemo app = new LookAndFeelDemo(); diff --git a/matrixeater/src/com/matrixeater/hacks/Mp3ExtractWar3.java b/matrixeater/src/com/matrixeater/hacks/Mp3ExtractWar3.java index 2b1d2add6..6a11890f2 100644 --- a/matrixeater/src/com/matrixeater/hacks/Mp3ExtractWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/Mp3ExtractWar3.java @@ -1,4 +1,5 @@ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.nio.file.Files; @@ -14,16 +15,16 @@ public final class Mp3ExtractWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.mp3extract_uasge")); System.exit(-1); } final File target = new File(args[0]); root = target; texRoot = new File(target.getParent() + "/" + "mp3sqalot"); operate(target); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.mp3extract_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.mp3extract_fail") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.mp3extract_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/RecompileMDXWar3.java b/matrixeater/src/com/matrixeater/hacks/RecompileMDXWar3.java index 8b1e0de13..c0be6d10c 100644 --- a/matrixeater/src/com/matrixeater/hacks/RecompileMDXWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/RecompileMDXWar3.java @@ -5,6 +5,7 @@ import java.util.List; import com.hiveworkshop.wc3.mdl.MDXHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public final class RecompileMDXWar3 { private static final List failed = new ArrayList<>(); @@ -12,13 +13,13 @@ public final class RecompileMDXWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.recompilemax_uasge")); System.exit(-1); } squish(new File(args[0])); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.recompilemax_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.recompilemax_fail") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.recompilemax_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/RegenErrors.java b/matrixeater/src/com/matrixeater/hacks/RegenErrors.java index 0c462376d..890dafea1 100644 --- a/matrixeater/src/com/matrixeater/hacks/RegenErrors.java +++ b/matrixeater/src/com/matrixeater/hacks/RegenErrors.java @@ -1,4 +1,5 @@ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.IOException; @@ -15,7 +16,7 @@ public static void main(final String[] args) { String line; while ((line = reader.readLine()) != null) { final String replace = line.replace("msquish", "squish"); - System.out.println("Source then target:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.inputstreamreader")); System.out.println(replace); System.out.println(line); Files.copy(Paths.get(replace), Paths.get(line), StandardCopyOption.REPLACE_EXISTING); diff --git a/matrixeater/src/com/matrixeater/hacks/RegenTexErrors.java b/matrixeater/src/com/matrixeater/hacks/RegenTexErrors.java index e3b2a3d78..dbd0914e4 100644 --- a/matrixeater/src/com/matrixeater/hacks/RegenTexErrors.java +++ b/matrixeater/src/com/matrixeater/hacks/RegenTexErrors.java @@ -1,4 +1,5 @@ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.BufferedReader; import java.io.IOException; @@ -16,7 +17,7 @@ public static void main(final String[] args) { while ((line = reader.readLine()) != null) { line = "M:\\MiniWc3Lite\\explode\\wc3nosound\\" + line; final String replace = line.replace("wc3nosound", "squish"); - System.out.println("Source then target:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.inputstreamreader")); System.out.println(replace); System.out.println(line); Files.copy(Paths.get(replace), Paths.get(line), StandardCopyOption.REPLACE_EXISTING); diff --git a/matrixeater/src/com/matrixeater/hacks/ReignOfChaosMissionFixerTool.java b/matrixeater/src/com/matrixeater/hacks/ReignOfChaosMissionFixerTool.java index 4d3ffc0d6..f35ee5639 100644 --- a/matrixeater/src/com/matrixeater/hacks/ReignOfChaosMissionFixerTool.java +++ b/matrixeater/src/com/matrixeater/hacks/ReignOfChaosMissionFixerTool.java @@ -24,6 +24,7 @@ import com.hiveworkshop.wc3.units.objectdata.ObjectMap; import com.hiveworkshop.wc3.units.objectdata.War3ID; import com.hiveworkshop.wc3.units.objectdata.War3ObjectDataChangeset; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataInputStream; import de.wc3data.stream.BlizzardDataOutputStream; @@ -71,7 +72,7 @@ public static void main(final String[] args) { for (final Entry> changeEntry : changes) { if (changeEntry.getKey().equals(UABI)) { for (final Change change : changeEntry.getValue()) { - System.out.println("adding to hero: " + entry.getKey() + " " + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blizzarddatainputstream") + entry.getKey() + " " + change.getStrval() + ",AInv"); change.setStrval(change.getStrval() + ",AInv"); } diff --git a/matrixeater/src/com/matrixeater/hacks/RigbornRotator.java b/matrixeater/src/com/matrixeater/hacks/RigbornRotator.java index 069c9ce0c..b9d566793 100644 --- a/matrixeater/src/com/matrixeater/hacks/RigbornRotator.java +++ b/matrixeater/src/com/matrixeater/hacks/RigbornRotator.java @@ -31,6 +31,7 @@ import com.hiveworkshop.wc3.mdl.v2.timelines.InterpolationType; import com.hiveworkshop.wc3.mdx.MdxUtils; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataInputStream; @@ -41,8 +42,8 @@ public RigbornRotator() { jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Warcraft 3 Model", "mdl", "mdx")); jFileChooser.setAcceptAllFileFilterUsed(true); final JTextField inputField = new JTextField(45); - final JLabel inputLabel = new JLabel("Input: "); - final JButton inputButton = new JButton("Browse"); + final JLabel inputLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.inputlabel")); + final JButton inputButton = new JButton(LocalizationManager.getInstance().get("matrixeater.button.inputbutton")); inputButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -56,8 +57,8 @@ public void actionPerformed(final ActionEvent e) { }); final JTextField outputField = new JTextField(45); - final JLabel outputLabel = new JLabel("Output: "); - final JButton outputButton = new JButton("Browse"); + final JLabel outputLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.outputlabel")); + final JButton outputButton = new JButton(LocalizationManager.getInstance().get("matrixeater.button.outputbutton")); outputButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -72,26 +73,26 @@ public void actionPerformed(final ActionEvent e) { final JPanel rotatePanel = new JPanel(); rotatePanel.setLayout(new GridLayout(4, 3)); - rotatePanel.setBorder(BorderFactory.createTitledBorder("Rotate")); - final JLabel axisXLabel = new JLabel("Axis X:"); + rotatePanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("matrixeater.border.borderfactory"))); + final JLabel axisXLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.axisx")); rotatePanel.add(axisXLabel); final JSpinner axisXSpinner = new JSpinner(new SpinnerNumberModel(0.0, -Long.MAX_VALUE, Long.MAX_VALUE, 1)); rotatePanel.add(axisXSpinner); - final JLabel axisYLabel = new JLabel("Axis Y:"); + final JLabel axisYLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.axisy")); rotatePanel.add(axisYLabel); final JSpinner axisYSpinner = new JSpinner(new SpinnerNumberModel(0.0, -Long.MAX_VALUE, Long.MAX_VALUE, 1)); rotatePanel.add(axisYSpinner); - final JLabel axisZLabel = new JLabel("Axis Z:"); + final JLabel axisZLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.axisz")); rotatePanel.add(axisZLabel); final JSpinner axisZSpinner = new JSpinner(new SpinnerNumberModel(1.0, -Long.MAX_VALUE, Long.MAX_VALUE, 1)); rotatePanel.add(axisZSpinner); - final JLabel angleLabel = new JLabel("Angle: "); + final JLabel angleLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.angle")); rotatePanel.add(angleLabel); final JSpinner angleSpinner = new JSpinner(new SpinnerNumberModel(0.0, -Long.MAX_VALUE, Long.MAX_VALUE, 1)); rotatePanel.add(angleSpinner); - final JButton generateButton = new JButton("Generate"); + final JButton generateButton = new JButton(LocalizationManager.getInstance().get("matrixeater.button.generatebutton")); generateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -193,7 +194,7 @@ public static void asdf() { } public static void main(final String[] args) { - final JFrame frame = new JFrame("Rigborn Rotator"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.setcontentpane")); frame.setContentPane(new RigbornRotator()); frame.pack(); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); diff --git a/matrixeater/src/com/matrixeater/hacks/SanityFixer.java b/matrixeater/src/com/matrixeater/hacks/SanityFixer.java index edb99d9f0..fd86deda1 100644 --- a/matrixeater/src/com/matrixeater/hacks/SanityFixer.java +++ b/matrixeater/src/com/matrixeater/hacks/SanityFixer.java @@ -1,4 +1,5 @@ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.util.ArrayList; @@ -49,7 +50,7 @@ private static void processModel(final File modelFile) { final Animation curSeq = getSeqAtTime(model, time); final Animation nextSeq = getSeqAtTime(model, nextTime); if (prevSeq == curSeq && curSeq == nextSeq) { - System.out.println(i + ": same values (" + times.get(i) + ")"); + System.out.println(i + ": " + LocalizationManager.getInstance().get("matrixeater.println.sanityfixer_processmodel_values") + " (" + times.get(i) + ")"); unused++; if (fix) { removeIndex(flag, values, times, i); @@ -116,8 +117,8 @@ private static void processModel(final File modelFile) { for (EventObject eventObject: evtsToNuke) { model.remove(eventObject); } - System.out.println("unused: " + unused); - System.out.println("warn: " + warn); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.sanityfixer_processmodel_unused") + unused); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.sanityfixer_processmodel_warn") + warn); model.printTo( new File(PATHNAME + "/Output/" + model.getName() + ".mdx"), diff --git a/matrixeater/src/com/matrixeater/hacks/SquishWar3.java b/matrixeater/src/com/matrixeater/hacks/SquishWar3.java index f5bd1a883..05400bc55 100644 --- a/matrixeater/src/com/matrixeater/hacks/SquishWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/SquishWar3.java @@ -7,6 +7,7 @@ import com.hiveworkshop.wc3.mdl.AnimFlag; import com.hiveworkshop.wc3.mdl.EditableModel; import com.hiveworkshop.wc3.mdx.MdxModel; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.stream.BlizzardDataOutputStream; import de.wc3data.stream.SquishingBlizzardDataOutputStream; @@ -19,16 +20,16 @@ public final class SquishWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.squish_uasge")); System.exit(-1); } final File target = new File(args[0]); root = target; texRoot = new File(target.getParent() + "/" + "CompressorStep2"); squish(target); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.squish_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.squish_fail") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.squish_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/TGAExtractorCompressorWar3.java b/matrixeater/src/com/matrixeater/hacks/TGAExtractorCompressorWar3.java index 77d3a9c1c..3f7ff44a5 100644 --- a/matrixeater/src/com/matrixeater/hacks/TGAExtractorCompressorWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/TGAExtractorCompressorWar3.java @@ -7,6 +7,7 @@ import java.util.List; import com.hiveworkshop.wc3.gui.OldBLPHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public final class TGAExtractorCompressorWar3 { private static final List failed = new ArrayList<>(); @@ -18,7 +19,7 @@ public final class TGAExtractorCompressorWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.compressroot_uasge")); System.exit(-1); } final File target = new File(args[0]); @@ -26,9 +27,9 @@ public static void main(final String[] args) { texRoot = new File(target.getParent() + "/tga" + "Textures"); compressRoot = new File(target.getParent() + "/tga" + "TexturesCompressed"); operate(target); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.compressroot_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.compressroot_fail") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.compressroot_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/WavExtractWar3.java b/matrixeater/src/com/matrixeater/hacks/WavExtractWar3.java index fcf0a76e1..48fb16f70 100644 --- a/matrixeater/src/com/matrixeater/hacks/WavExtractWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/WavExtractWar3.java @@ -1,4 +1,5 @@ package com.matrixeater.hacks; +import hiveworkshop.localizationmanager.LocalizationManager; import java.io.File; import java.nio.file.Files; @@ -14,16 +15,16 @@ public final class WavExtractWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.wavextract_uasge")); System.exit(-1); } final File target = new File(args[0]); root = target; texRoot = new File(target.getParent() + "/" + "wavbase"); operate(target); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.wavextract_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.wavextract_fail") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.wavextract_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/blessing/BlessingWindow.java b/matrixeater/src/com/matrixeater/hacks/blessing/BlessingWindow.java index 1421a2717..ff1b6f5c8 100644 --- a/matrixeater/src/com/matrixeater/hacks/blessing/BlessingWindow.java +++ b/matrixeater/src/com/matrixeater/hacks/blessing/BlessingWindow.java @@ -23,16 +23,19 @@ import com.hiveworkshop.wc3.gui.BLPHandler; import com.hiveworkshop.wc3.mpq.MpqCodebase; +import hiveworkshop.localizationmanager.LocalizationManager; public class BlessingWindow extends JPanel { - private static final String CHOOSE_YOUR_BLESSING = "Choose your Blessing"; + private static final String CHOOSE_YOUR_BLESSING = LocalizationManager.getInstance().get("matrixeater.string.blessingwindow"); private Font font; private Font subtitleFont; private Font titleFont; - private final List possibleBlessings = Arrays.asList(new Blessing("Gonk", "Loa of the Pack"), - new Blessing("Pa'ku", "Loa of the Winds"), new Blessing("Rezan", "Loa of Kings"), - new Blessing("Bwonsamdi", "Loa of Graves")); + private final List possibleBlessings = Arrays.asList( + new Blessing("Gonk", LocalizationManager.getInstance().get("matrixeater.blessing.gonk")), + new Blessing("Pa'ku", LocalizationManager.getInstance().get("matrixeater.blessing.pa")), + new Blessing("Rezan", LocalizationManager.getInstance().get("matrixeater.blessing.rezan")), + new Blessing("Bwonsamdi", LocalizationManager.getInstance().get("matrixeater.blessing.bwonsamdi"))); private BorderedBox borderedBox; private BufferedImage optionsMenuBorder; private final Rectangle windowBounds; @@ -59,21 +62,24 @@ private BlessingWindow(final Rectangle windowBounds) { frameHandles.add(borderedBox); frameHandles.add(new BlessingItem(new Rectangle(windowBounds.x + 80, windowBounds.y + 350, 64, 64), BLPHandler.get().getGameTex("replaceabletextures\\commandbuttons\\btnberserkfortrolls.blp"), - "Feral Swipes", 50, - "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh")); + LocalizationManager.getInstance().get("matrixeater.blessingitem.feralswipes"), 50, + LocalizationManager.getInstance().get("matrixeater.blessingitem.feralswipes_text"))); frameHandles.add(new BlessingItem(new Rectangle(windowBounds.x + 150, windowBounds.y + 350, 64, 64), BLPHandler.get().getGameTex("replaceabletextures\\commandbuttons\\btnsacrificialdagger.blp"), - "Troll Daggers", 75, "Increases the damage of all poison based skills and abilities.")); + LocalizationManager.getInstance().get("matrixeater.blessingitem.trolldaggers"), 75, + LocalizationManager.getInstance().get("matrixeater.blessingitem.trolldaggers_text"))); frameHandles.add(new BlessingItem(new Rectangle(windowBounds.x + 220, windowBounds.y + 350, 64, 64), BLPHandler.get().getGameTex("replaceabletextures\\commandbuttons\\btncloudoffog.blp"), - "Mystic Fogs", 65, - "Provides an AoE around all allies structures that prevents the casting of enemy spells.")); + LocalizationManager.getInstance().get("matrixeater.blessingitem.mysticfogs"), 65, + LocalizationManager.getInstance().get("matrixeater.blessingitem.mysticfogs_text"))); frameHandles.add(new BlessingItem(new Rectangle(windowBounds.x + 820, windowBounds.y + 350, 64, 64), BLPHandler.get().getGameTex("replaceabletextures\\commandbuttons\\btnsunderingblades.blp"), - "Shield Smash", 65, "Causes all troll towers to do Chaos damage which ignores enemy armor.")); + LocalizationManager.getInstance().get("matrixeater.blessingitem.shieldsmash"), 65, + LocalizationManager.getInstance().get("matrixeater.blessingitem.shieldsmash_text"))); frameHandles.add(new BlessingItem(new Rectangle(windowBounds.x + 890, windowBounds.y + 350, 64, 64), BLPHandler.get().getGameTex("replaceabletextures\\commandbuttons\\btnhelmutpurple.blp"), - "Crown of Kings", 65, "Provides a +5 attribute bonus to all Troll heroes.")); + LocalizationManager.getInstance().get("matrixeater.blessingitem.crownofkings"), 65, + LocalizationManager.getInstance().get("matrixeater.blessingitem.crownofkings_text"))); tooltipBox = new BorderedBox(new Rectangle(384, 128), BLPHandler.get().getGameTex("ui\\widgets\\tooltips\\human\\human-tooltip-border.blp")); stonesIcon = BLPHandler.get().getGameTex("ui\\widgets\\tooltips\\human\\tooltipstonesicon.blp"); @@ -200,7 +206,7 @@ protected void paintComponent(final Graphics g) { } public static void main(final String[] args) { - final JFrame game = new JFrame("The Game"); + final JFrame game = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.main")); final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); final Rectangle windowBounds = new Rectangle(0, 0, screenSize.width, screenSize.height); final int borderBoxWidth = 64 * 24; diff --git a/matrixeater/src/com/matrixeater/hacks/converts/ConvertBLPToTGAWar3.java b/matrixeater/src/com/matrixeater/hacks/converts/ConvertBLPToTGAWar3.java index 39320f3f1..75d06690c 100644 --- a/matrixeater/src/com/matrixeater/hacks/converts/ConvertBLPToTGAWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/converts/ConvertBLPToTGAWar3.java @@ -5,6 +5,7 @@ import java.util.List; import com.hiveworkshop.wc3.gui.OldBLPHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public final class ConvertBLPToTGAWar3 { private static final List failed = new ArrayList<>(); @@ -13,13 +14,13 @@ public final class ConvertBLPToTGAWar3 { public static void main(final String[] args) { OldBLPHandler.WANT_DESTROY_SAVED_TGAS = false; if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.blptotgs_main_usage")); System.exit(-1); } squish(new File(args[0])); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blptotgs_main_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blptotgs_main_failed") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.blptotgs_main_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/converts/ConvertMDXToMDLWar3.java b/matrixeater/src/com/matrixeater/hacks/converts/ConvertMDXToMDLWar3.java index 5aac039e0..925a6f245 100644 --- a/matrixeater/src/com/matrixeater/hacks/converts/ConvertMDXToMDLWar3.java +++ b/matrixeater/src/com/matrixeater/hacks/converts/ConvertMDXToMDLWar3.java @@ -5,6 +5,7 @@ import java.util.List; import com.hiveworkshop.wc3.mdl.MDXHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public final class ConvertMDXToMDLWar3 { private static final List failed = new ArrayList<>(); @@ -12,13 +13,13 @@ public final class ConvertMDXToMDLWar3 { public static void main(final String[] args) { if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.mdxtomdl_main_usage")); System.exit(-1); } squish(new File(args[0])); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.mdxtomdl_main_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.mdxtomdl_main_failed") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.mdxtomdl_main_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/hacks/converts/RecompileModelsDirectory.java b/matrixeater/src/com/matrixeater/hacks/converts/RecompileModelsDirectory.java index 8aa72e5b4..83b65072b 100644 --- a/matrixeater/src/com/matrixeater/hacks/converts/RecompileModelsDirectory.java +++ b/matrixeater/src/com/matrixeater/hacks/converts/RecompileModelsDirectory.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.OldBLPHandler; import com.hiveworkshop.wc3.mdl.EditableModel; +import hiveworkshop.localizationmanager.LocalizationManager; public final class RecompileModelsDirectory { private static final List failed = new ArrayList<>(); @@ -14,13 +15,13 @@ public final class RecompileModelsDirectory { public static void main(final String[] args) { OldBLPHandler.WANT_DESTROY_SAVED_TGAS = false; if (args.length != 1) { - System.err.println("Usage: "); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.recompilemodel_main_usage")); System.exit(-1); } squish(new File(args[0])); - System.out.println("Passed: " + passed.size()); - System.out.println("Failed: " + failed.size()); - System.out.println("Fail list:"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.recompilemodel_main_passed") + passed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.recompilemodel_main_failed") + failed.size()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.recompilemodel_main_faillist")); for (final String failedName : failed) { System.out.println(failedName); } diff --git a/matrixeater/src/com/matrixeater/imp/AnimationTransfer.java b/matrixeater/src/com/matrixeater/imp/AnimationTransfer.java index ff5c40714..9f3837d31 100644 --- a/matrixeater/src/com/matrixeater/imp/AnimationTransfer.java +++ b/matrixeater/src/com/matrixeater/imp/AnimationTransfer.java @@ -31,6 +31,7 @@ import com.hiveworkshop.wc3.user.SaveProfile; import com.matrixeater.src.MainFrame; import com.matrixeater.src.MainPanel; +import hiveworkshop.localizationmanager.LocalizationManager; public class AnimationTransfer extends JPanel implements ActionListener { JLabel baseFileLabel, animFileLabel, outFileLabel, transSingleLabel, pickAnimLabel, visFromLabel; @@ -57,7 +58,7 @@ public AnimationTransfer(final JFrame parentFrame) { fc.setCurrentDirectory(new File(SaveProfile.get().getPath())); } - baseFileLabel = new JLabel("Base file:"); + baseFileLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.basefilelabel")); baseFileInput = new JTextField(""); baseFileInput.setMinimumSize(new Dimension(200, 18)); baseBrowse = new JButton("..."); @@ -67,7 +68,7 @@ public AnimationTransfer(final JFrame parentFrame) { baseBrowse.setPreferredSize(dim); baseBrowse.addActionListener(this); - animFileLabel = new JLabel("Animation file:"); + animFileLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.animfilelabel")); animFileInput = new JTextField(""); animFileInput.setMinimumSize(new Dimension(200, 18)); animBrowse = new JButton("..."); @@ -76,7 +77,7 @@ public AnimationTransfer(final JFrame parentFrame) { animBrowse.setPreferredSize(dim); animBrowse.addActionListener(this); - outFileLabel = new JLabel("Output file:"); + outFileLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.outfilelabel")); outFileInput = new JTextField(""); outFileInput.setMinimumSize(new Dimension(200, 18)); outBrowse = new JButton("..."); @@ -87,31 +88,31 @@ public AnimationTransfer(final JFrame parentFrame) { transferSingleAnimation = new JCheckBox("", false); transferSingleAnimation.addActionListener(this); - transSingleLabel = new JLabel("Transfer single animation:"); + transSingleLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.transsinglelabel")); - pickAnimLabel = new JLabel("Animation to transfer:"); + pickAnimLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.pickanimlabel")); pickAnimBox = new JComboBox<>(); pickAnimBox.setEnabled(false); - visFromLabel = new JLabel("Get visibility from:"); + visFromLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.visfromlabel")); visFromBox = new JComboBox<>(); visFromBox.setEnabled(false); - transfer = new JButton("Transfer"); + transfer = new JButton(LocalizationManager.getInstance().get("matrixeater.button.transfer")); transfer.setMnemonic(KeyEvent.VK_T); transfer.setMinimumSize(new Dimension(200, 35)); transfer.addActionListener(this); - done = new JButton("Done"); + done = new JButton(LocalizationManager.getInstance().get("matrixeater.button.done")); done.setMnemonic(KeyEvent.VK_D); done.setMinimumSize(new Dimension(80, 35)); done.addActionListener(this); - goAdvanced = new JButton("Go Advanced"); + goAdvanced = new JButton(LocalizationManager.getInstance().get("")); goAdvanced.setMnemonic(KeyEvent.VK_G); goAdvanced.addActionListener(this); goAdvanced.setToolTipText( - "Opens the traditional MatrixEater Import window responsible for this Simple Import, so that you can micro-manage particular settings before finishing the operation."); + LocalizationManager.getInstance().get("matrixeater.settooltiptext.goadvanced")); final GroupLayout layout = new GroupLayout(this); layout.setHorizontalGroup(layout.createSequentialGroup().addGap(12).addGroup(layout @@ -179,12 +180,12 @@ public void forceRefreshModels() { // if( (sourceFile == null && !baseFileInput.getText().equals("")) || // !baseFileInput.getText().equals(sourceFile.getFile().getPath()) ) { sourceFile = EditableModel.read(new File(baseFileInput.getText())); - // JOptionPane.showMessageDialog(null,"Reloaded base model"); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.forcerefreshmodels_base")); // } // if( (animFile == null && !animFileInput.getText().equals("")) || // !animFileInput.getText().equals(animFile.getFile().getPath()) ) { animFile = EditableModel.read(new File(animFileInput.getText())); - // JOptionPane.showMessageDialog(null,"Reloaded anim model"); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.forcerefreshmodels_anim")); // } updateBoxes(); } @@ -239,7 +240,7 @@ public void updateBoxes() { @Override public void actionPerformed(final ActionEvent e) { if (e.getSource() == baseBrowse) { - fc.setDialogTitle("Open"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.basebrowse_title_base")); final int returnValue = fc.showOpenDialog(this); if (returnValue == JFileChooser.APPROVE_OPTION) { @@ -252,7 +253,7 @@ public void actionPerformed(final ActionEvent e) { updateBoxes(); } } else if (e.getSource() == animBrowse) { - fc.setDialogTitle("Open"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.basebrowse_title_anim")); final int returnValue = fc.showOpenDialog(this); if (returnValue == JFileChooser.APPROVE_OPTION) { @@ -265,7 +266,7 @@ public void actionPerformed(final ActionEvent e) { updateBoxes(); } } else if (e.getSource() == outBrowse) { - fc.setDialogTitle("Save"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.basebrowse_title_out")); final int returnValue = fc.showSaveDialog(this); if (returnValue == JFileChooser.APPROVE_OPTION) { @@ -289,7 +290,7 @@ public void actionPerformed(final ActionEvent e) { // visFromBox.getItemAt(visFromBox.getSelectedIndex()),false); // // sourceFile.printTo(new File(outFileInput.getText())); - // JOptionPane.showMessageDialog(null, "Animation transfer done!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.forcerefreshmodels_outfileinput")); // // forceRefreshModels(); // } @@ -312,7 +313,7 @@ public void actionPerformed(final ActionEvent e) { // visFromBox.getItemAt(visFromBox.getSelectedIndex()),false); // // sourceFile.printTo(new File(outFileInput.getText())); - // JOptionPane.showMessageDialog(null, "Animation transfer done!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.forcerefreshmodels_outfileinput")); // // forceRefreshModels(); // @@ -344,20 +345,18 @@ public void run() { visFromBox.getItemAt(visFromBox.getSelectedIndex()), show); while (importPanel.getParentFrame().isVisible() && (!importPanel.importStarted() || importPanel.importEnded())) { - // JOptionPane.showMessageDialog(null, "check 1!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_check1")); try { Thread.sleep(1); } catch (final Exception e) { - ExceptionPopup.display("MatrixEater detected error with Java's wait function", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.dotransfer"), e); } } // if( !importPanel.getParentFrame().isVisible() && // !importPanel.importEnded() ) - // JOptionPane.showMessageDialog(null,"bad voodoo - // "+importPanel.importSuccessful()); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_bad")+importPanel.importSuccessful()); // else - // JOptionPane.showMessageDialog(null,"good voodoo - // "+importPanel.importSuccessful()); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_good")+importPanel.importSuccessful()); // if( importPanel.importSuccessful() ) // { // newModel.saveFile(); @@ -366,11 +365,11 @@ public void run() { if (importPanel.importStarted()) { while (!importPanel.importEnded()) { - // JOptionPane.showMessageDialog(null, "check 2!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_check2")); try { Thread.sleep(1); } catch (final Exception e) { - ExceptionPopup.display("MatrixEater detected error with Java's wait function", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.dotransfer"), e); } } @@ -383,7 +382,7 @@ public void run() { filepath += ".mdl"; } sourceFile.printTo(new File(filepath), preferences.isAlwaysUseMinimalMatricesInHD()); - JOptionPane.showMessageDialog(null, "Animation transfer done!"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_done")); } } @@ -404,20 +403,18 @@ public void run() { // importPanel.importEnded()) ) while (importPanel.getParentFrame().isVisible() && (!importPanel.importStarted() || importPanel.importEnded())) { - // JOptionPane.showMessageDialog(null, "check 1!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_check1")); try { Thread.sleep(1); } catch (final Exception e) { - ExceptionPopup.display("MatrixEater detected error with Java's wait function", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.dotransfer"), e); } } // if( !importPanel.getParentFrame().isVisible() && // !importPanel.importEnded() ) - // JOptionPane.showMessageDialog(null,"bad voodoo - // "+importPanel.importSuccessful()); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_bad")+importPanel.importSuccessful()); // else - // JOptionPane.showMessageDialog(null,"good voodoo - // "+importPanel.importSuccessful()); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_good")+importPanel.importSuccessful()); // if( importPanel.importSuccessful() ) // { // newModel.saveFile(); @@ -426,16 +423,15 @@ public void run() { if (importPanel.importStarted()) { while (!importPanel.importEnded()) { - // JOptionPane.showMessageDialog(null, "check 2!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_check2")); try { Thread.sleep(1); } catch (final Exception e) { - ExceptionPopup.display("MatrixEater detected error with Java's wait function", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.dotransfer"), e); } } - // JOptionPane.showMessageDialog(null, "Animation - // transfer 99% done!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_just_done")); if (importPanel.importSuccessful()) { final ImportPanel importPanel2 = new ImportPanel(sourceFile, @@ -446,21 +442,18 @@ public void run() { while (importPanel2.getParentFrame().isVisible() && (!importPanel2.importStarted() || importPanel2.importEnded())) { - // JOptionPane.showMessageDialog(null, "check - // 1!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_check1")); try { Thread.sleep(1); } catch (final Exception e) { - ExceptionPopup.display("MatrixEater detected error with Java's wait function", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.dotransfer"), e); } } // if( !importPanel.getParentFrame().isVisible() && // !importPanel.importEnded() ) - // JOptionPane.showMessageDialog(null,"bad voodoo - // "+importPanel.importSuccessful()); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_bad")+importPanel.importSuccessful()); // else - // JOptionPane.showMessageDialog(null,"good voodoo - // "+importPanel.importSuccessful()); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_good")+importPanel.importSuccessful()); // if( importPanel.importSuccessful() ) // { // newModel.saveFile(); @@ -469,21 +462,18 @@ public void run() { if (importPanel2.importStarted()) { while (!importPanel2.importEnded()) { - // JOptionPane.showMessageDialog(null, - // "check 2!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_check2")); try { Thread.sleep(1); } catch (final Exception e) { - ExceptionPopup.display("MatrixEater detected error with Java's wait function", - e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.dotransfer"), e); } } - // JOptionPane.showMessageDialog(null, - // "Animation transfer 99% done!"); + // JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_just_done")); if (importPanel2.importSuccessful()) { - JOptionPane.showMessageDialog(null, "Animation transfer done!"); + JOptionPane.showMessageDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.dotransfer_done")); sourceFile.printTo(new File(outFileInput.getText()), preferences.isAlwaysUseMinimalMatricesInHD()); diff --git a/matrixeater/src/com/matrixeater/imp/FaceEffectsAreNotModdableGUI.java b/matrixeater/src/com/matrixeater/imp/FaceEffectsAreNotModdableGUI.java index de80f16f5..dcd485194 100644 --- a/matrixeater/src/com/matrixeater/imp/FaceEffectsAreNotModdableGUI.java +++ b/matrixeater/src/com/matrixeater/imp/FaceEffectsAreNotModdableGUI.java @@ -9,13 +9,14 @@ import com.hiveworkshop.wc3.mdl.Animation; import com.hiveworkshop.wc3.mdl.EditableModel; +import hiveworkshop.localizationmanager.LocalizationManager; public class FaceEffectsAreNotModdableGUI extends JPanel { public FaceEffectsAreNotModdableGUI(final EditableModel model) { - final JLabel audioFileLabel = new JLabel("Audio File:"); + final JLabel audioFileLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.audiofilelabel")); final JTextField audioFilePath = new JTextField(); - final JButton audioFileBrowseBtn = new JButton("Browse"); - final JLabel baseSequenceLabel = new JLabel("Base Sequence:"); + final JButton audioFileBrowseBtn = new JButton(LocalizationManager.getInstance().get("matrixeater.button.audiofilebrowse")); + final JLabel baseSequenceLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.basesequencelabel")); final DefaultComboBoxModel animations = new DefaultComboBoxModel<>(); final JComboBox baseSequenceChooser = new JComboBox<>(); } diff --git a/matrixeater/src/com/matrixeater/imp/ImportPanelSimple.java b/matrixeater/src/com/matrixeater/imp/ImportPanelSimple.java index 64ba62273..8e4376889 100644 --- a/matrixeater/src/com/matrixeater/imp/ImportPanelSimple.java +++ b/matrixeater/src/com/matrixeater/imp/ImportPanelSimple.java @@ -1,6 +1,7 @@ package com.matrixeater.imp; import com.hiveworkshop.wc3.gui.icons.RMSIcons; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Dimension; import java.awt.event.ActionEvent; @@ -20,7 +21,7 @@ public ImportPanelSimple() { animationTransfer.addActionListener(this); setPreferredSize(new Dimension(800, 600)); - frame = new JFrame("Simple Import Handler"); + frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.importpanelsimple")); frame.setContentPane(this); frame.pack(); @@ -35,7 +36,7 @@ public ImportPanelSimple() { public void actionPerformed(final ActionEvent e) { if (e.getSource() == animationTransfer) { frame.setContentPane(new AnimationTransfer(frame)); - frame.setTitle("Animation Transferer"); + frame.setTitle(LocalizationManager.getInstance().get("matrixeater.title.animationtransfer")); frame.setIconImage(RMSIcons.AnimIcon.getImage()); frame.revalidate(); frame.pack(); diff --git a/matrixeater/src/com/matrixeater/imp/MDLOBJBuilderInterface.java b/matrixeater/src/com/matrixeater/imp/MDLOBJBuilderInterface.java index 566dbb942..c4e4a6e0d 100644 --- a/matrixeater/src/com/matrixeater/imp/MDLOBJBuilderInterface.java +++ b/matrixeater/src/com/matrixeater/imp/MDLOBJBuilderInterface.java @@ -17,6 +17,7 @@ import com.hiveworkshop.wc3.mdl.TVertex; import com.hiveworkshop.wc3.mdl.Vertex; import com.owens.oobjloader.parser.BuilderInterface; +import hiveworkshop.localizationmanager.LocalizationManager; public class MDLOBJBuilderInterface implements BuilderInterface { @@ -38,7 +39,7 @@ public void setObjFilename(final String filename) { @Override public void addVertexGeometric(final float x, final float y, final float z) { - System.out.println("addVertexGeometric(" + x + "," + y + "," + z + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.addvertexgeometric") + x + "," + y + "," + z + ")"); final GeosetVertex v = new GeosetVertex(x, y, z); currentGeoset.add(v); v.setGeoset(currentGeoset); @@ -46,29 +47,29 @@ public void addVertexGeometric(final float x, final float y, final float z) { @Override public void addVertexTexture(final float u, final float v) { - System.out.println("addVertexTexture(" + u + "," + v + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.addvertextexture") + u + "," + v + ")"); tvertices.add(new TVertex(u, v)); } @Override public void addVertexNormal(final float x, final float y, final float z) { - System.out.println("addVertexNormal(" + x + "," + y + "," + z + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.addvertexnormal") + x + "," + y + "," + z + ")"); normals.add(new Normal(x, y, z)); } @Override public void addPoints(final int[] values) { - throw new RuntimeException("addPoints not yet implemented for OBJ->MDL converter"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.addpoints")); } @Override public void addLine(final int[] values) { - throw new RuntimeException("addLine not yet implemented for OBJ->MDL converter"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.addline")); } @Override public void addFace(final int[] vertexIndices) { - System.out.println("addFace(" + Arrays.toString(vertexIndices) + ")"); + System.out.println(LocalizationManager.getInstance().get("") + Arrays.toString(vertexIndices) + ")"); // currentGeoset.addTriangle(new Triangle(vertexIndices[0],vertexIndices[1],vertexIndices[2])); // if( vertexIndices.length > 3 ) { // currentGeoset.addTriangle(new Triangle(vertexIndices[2],vertexIndices[3],vertexIndices[0])); @@ -77,7 +78,7 @@ public void addFace(final int[] vertexIndices) { @Override public void addObjectName(final String name) { - System.out.println("addObjectName(" + name + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.addobjectname") + name + ")"); // model.add(new Bone(name)); // if( currentGeoset != null ) { // model.add(currentGeoset); @@ -87,92 +88,92 @@ public void addObjectName(final String name) { @Override public void addMapLib(final String[] names) { - System.out.println("addMapLib" + Arrays.toString(names)); - throw new RuntimeException("addMapLib not yet implemented for OBJ->MDL converter"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.addmaplib") + Arrays.toString(names)); + throw new RuntimeException(""); } @Override public void setCurrentGroupNames(final String[] names) { - System.out.println("setCurrentGroupNames" + Arrays.toString(names)); + System.out.println(LocalizationManager.getInstance().get("matrixeater.exception.addmaplib") + Arrays.toString(names)); } @Override public void setCurrentSmoothingGroup(final int groupNumber) { - System.out.println("setCurrentSmoothingGroup(" + groupNumber + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setcurrentsmoothinggroup") + groupNumber + ")"); } @Override public void setCurrentUseMap(final String name) { - System.out.println("setCurrentUseMap(" + name + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setcurrentusemap") + name + ")"); } @Override public void setCurrentUseMaterial(final String name) { - System.out.println("setCurrentUseMaterial(" + name + ")"); - final Layer lay = new Layer("None", -1); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setcurrentusematerial") + name + ")"); + final Layer lay = new Layer(LocalizationManager.getInstance().get("matrixeater.layer.setcurrentusematerial"), -1); currentGeoset.setMaterial(new Material(lay)); lay.getShaderTextures().put(ShaderTextureTypeHD.Diffuse, new Bitmap(name, -1)); } @Override public void newMtl(final String name) { - System.out.println("newMtl(" + name + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.newmtl") + name + ")"); } @Override public void setXYZ(final int type, final float x, final float y, final float z) { - System.out.println("newMtl(type=" + type + ",x=" + x + ",y=" + y + ",z=" + z + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.xyz") + type + ",x=" + x + ",y=" + y + ",z=" + z + ")"); } @Override public void setRGB(final int type, final float r, final float g, final float b) { - System.out.println("setRGB(type=" + type + ",r=" + r + ",g=" + g + ",b=" + b + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.rgb") + type + ",r=" + r + ",g=" + g + ",b=" + b + ")"); } @Override public void setIllum(final int illumModel) { - System.out.println("setIllum(illumModel=" + illumModel + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.illummodel") + illumModel + ")"); } @Override public void setD(final boolean halo, final float factor) { - System.out.println("setD(halo=" + halo + ",factor=" + factor + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setd_1") + halo + LocalizationManager.getInstance().get("matrixeater.println.setd_2") + factor + ")"); } @Override public void setNs(final float exponent) { - System.out.println("setNs(exponent=" + exponent + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setns") + exponent + ")"); } @Override public void setSharpness(final float value) { - System.out.println("setSharpness(value=" + value + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setsharpness") + value + ")"); } @Override public void setNi(final float opticalDensity) { - System.out.println("setNi(opticalDensity=" + opticalDensity + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setni") + opticalDensity + ")"); } @Override public void setMapDecalDispBump(final int type, final String filename) { - System.out.println("setMapDecalDispBump(type=" + type + ",filename=" + filename + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setmapdecaldispbump_1") + type + LocalizationManager.getInstance().get("matrixeater.println.setmapdecaldispbump_2") + filename + ")"); } @Override public void setRefl(final int type, final String filename) { - System.out.println("setRefl(type=" + type + ",filename=" + filename + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.setrefl_1") + type + LocalizationManager.getInstance().get("matrixeater.println.setrefl_2") + filename + ")"); } @Override public void doneParsingMaterial() { - System.out.println("doneParsingMaterial()"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.doneparsingmaterial")); } @Override public void doneParsingObj(final String filename) { - System.out.println("doneParsingObj(filename=" + filename + ")"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.doneparsiongobj") + filename + ")"); } public EditableModel createModel() { diff --git a/matrixeater/src/com/matrixeater/imp/OBJImportSettingsPanel.java b/matrixeater/src/com/matrixeater/imp/OBJImportSettingsPanel.java index 5e243ec51..6c654b338 100644 --- a/matrixeater/src/com/matrixeater/imp/OBJImportSettingsPanel.java +++ b/matrixeater/src/com/matrixeater/imp/OBJImportSettingsPanel.java @@ -1,4 +1,5 @@ package com.matrixeater.imp; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.Font; @@ -13,14 +14,14 @@ public class OBJImportSettingsPanel extends JPanel { private final JLabel titleLabel; public OBJImportSettingsPanel(final Build builder) { - titleLabel = new JLabel("OBJ Settings"); + titleLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.frame.objimportsettingspanel")); final Font smallFont = new Font("Arial",Font.BOLD,16); final Font medFont = new Font("Arial",Font.BOLD,28); final Font bigFont = new Font("Arial",Font.BOLD,46); } public static void main(final String[] args) { - final JFrame testFrame = new JFrame("OBJ Settings"); + final JFrame testFrame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.objimportsettingspanel")); testFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); testFrame.setContentPane(new OBJImportSettingsPanel(null)); testFrame.pack(); diff --git a/matrixeater/src/com/matrixeater/src/AnimationFrame.java b/matrixeater/src/com/matrixeater/src/AnimationFrame.java index 6d73aa70c..e954517a4 100644 --- a/matrixeater/src/com/matrixeater/src/AnimationFrame.java +++ b/matrixeater/src/com/matrixeater/src/AnimationFrame.java @@ -5,10 +5,11 @@ import com.hiveworkshop.wc3.gui.icons.RMSIcons; import com.hiveworkshop.wc3.gui.modeledit.ModelPanel; +import hiveworkshop.localizationmanager.LocalizationManager; public class AnimationFrame extends JFrame { public AnimationFrame(final ModelPanel mdlDisp, final Runnable onFinish) { - super("Animation Editor: " + mdlDisp.getModel().getName()); + super(LocalizationManager.getInstance().get("matrixeater.animationframe.title") + mdlDisp.getModel().getName()); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setIconImage(RMSIcons.animIcon.getImage()); setContentPane(new JScrollPane( diff --git a/matrixeater/src/com/matrixeater/src/AnimationPanel.java b/matrixeater/src/com/matrixeater/src/AnimationPanel.java index 5f6a9a1cf..88f76cfa8 100644 --- a/matrixeater/src/com/matrixeater/src/AnimationPanel.java +++ b/matrixeater/src/com/matrixeater/src/AnimationPanel.java @@ -16,6 +16,7 @@ import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.gui.modeledit.activity.UndoActionListener; import com.hiveworkshop.wc3.gui.modeledit.newstuff.actions.tools.EditAnimationLengthsAction; import com.hiveworkshop.wc3.mdl.Animation; @@ -62,7 +63,7 @@ public AnimationPanel(final ModelView mdlDisp, final AnimationFrame frame, } int i = 0; for (final Integer globalSeq : mdlDisp.getModel().getGlobalSeqs()) { - final JLabel label = new JLabel("Global Sequence " + ++i + " (" + globalSeq / 1000.00 + " s)"); + final JLabel label = new JLabel(LocalizationManager.getInstance().get("matrixeater.animationpanel.global_sequence") + ++i + " (" + globalSeq / 1000.00 + " s)"); final int maxLength = Math.max(100000, globalSeq * 4); final JSlider bar = new JSlider(0, maxLength); bar.setValue(globalSeq); @@ -82,9 +83,9 @@ public AnimationPanel(final ModelView mdlDisp, final AnimationFrame frame, add(spinner); } - okay = new JButton("OK"); + okay = new JButton(LocalizationManager.getInstance().get("global.button.ok")); okay.addActionListener(this); - cancel = new JButton("Cancel"); + cancel = new JButton(LocalizationManager.getInstance().get("global.button.cancel")); cancel.addActionListener(this); add(cancel); add(okay); diff --git a/matrixeater/src/com/matrixeater/src/ClonedNodeNamePickerImplementation.java b/matrixeater/src/com/matrixeater/src/ClonedNodeNamePickerImplementation.java index 6b71e3f32..11d6cdb9a 100644 --- a/matrixeater/src/com/matrixeater/src/ClonedNodeNamePickerImplementation.java +++ b/matrixeater/src/com/matrixeater/src/ClonedNodeNamePickerImplementation.java @@ -12,6 +12,7 @@ import javax.swing.JScrollPane; import javax.swing.JTextField; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.gui.modeledit.newstuff.listener.ClonedNodeNamePicker; import com.hiveworkshop.wc3.mdl.IdObject; @@ -28,8 +29,8 @@ public Map pickNames(final Collection clonedNodes) { panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); final Map textFieldToObject = new HashMap<>(); for (final IdObject object : clonedNodes) { - final JTextField textField = new JTextField(object.getName() + " copy"); - final JLabel oldNameLabel = new JLabel("Enter name for clone of \"" + object.getName() + "\":"); + final JTextField textField = new JTextField(object.getName() + LocalizationManager.getInstance().get("matrixeater.clonednodename.copy")); + final JLabel oldNameLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.clonednodename.enter_name") + object.getName() + "\":"); panel.add(oldNameLabel); panel.add(textField); textFieldToObject.put(textField, object); @@ -38,7 +39,7 @@ public Map pickNames(final Collection clonedNodes) { dumbPanel.add(panel); final JScrollPane scrollPane = new JScrollPane(dumbPanel); scrollPane.setPreferredSize(new Dimension(450, 300)); - final int x = JOptionPane.showConfirmDialog(mainPanel, scrollPane, "Choose Node Names", + final int x = JOptionPane.showConfirmDialog(mainPanel, scrollPane, LocalizationManager.getInstance().get("matrixeater.clonednodename.choose_node_name"), JOptionPane.OK_CANCEL_OPTION); if (x != JOptionPane.OK_OPTION) { return null; diff --git a/matrixeater/src/com/matrixeater/src/MainFrame.java b/matrixeater/src/com/matrixeater/src/MainFrame.java index a250b9211..106fb29af 100644 --- a/matrixeater/src/com/matrixeater/src/MainFrame.java +++ b/matrixeater/src/com/matrixeater/src/MainFrame.java @@ -38,6 +38,7 @@ import com.hiveworkshop.wc3.user.SaveProfile; import com.owens.oobjloader.builder.Build; import com.owens.oobjloader.parser.Parse; +import hiveworkshop.localizationmanager.LocalizationManager; import de.wc3data.image.TgaFile; import net.infonode.gui.laf.InfoNodeLookAndFeel; @@ -80,7 +81,7 @@ public static void main(final String[] args) { } final File result = new File(destination); model.printTo(result, alwaysUseMinimalMatricesInHD); - System.out.println(RETERA_MODEL_STUDIO_VERSION + " converted: " + result); + System.out.println(RETERA_MODEL_STUDIO_VERSION + LocalizationManager.getInstance().get("matrixeater.println.startupmodelpaths") + result); } else if (mdlInput) { final EditableModel model = EditableModel.read(new File(path)); @@ -90,7 +91,7 @@ else if (mdlInput) { } final File result = new File(destination); model.printTo(result, alwaysUseMinimalMatricesInHD); - System.out.println(RETERA_MODEL_STUDIO_VERSION + " converted: " + result); + System.out.println(RETERA_MODEL_STUDIO_VERSION + LocalizationManager.getInstance().get("matrixeater.println.startupmodelpaths") + result); } else { String destination = path.substring(0, path.lastIndexOf('.')) + ".mdx"; @@ -104,7 +105,7 @@ else if (mdlInput) { final EditableModel mdl = builder.createMDL(); final File result = new File(destination); mdl.printTo(result, alwaysUseMinimalMatricesInHD); - System.out.println(RETERA_MODEL_STUDIO_VERSION + " converted: " + result); + System.out.println(RETERA_MODEL_STUDIO_VERSION + LocalizationManager.getInstance().get("matrixeater.println.startupmodelpaths") + result); } catch (final FileNotFoundException e) { ExceptionPopup.display(e); @@ -129,7 +130,7 @@ else if (args.length > 2) { else { ImageIO.write(sourceImage, destination.substring(destination.lastIndexOf('.') + 1), result); } - System.out.println(RETERA_MODEL_STUDIO_VERSION + " converted: " + result); + System.out.println(RETERA_MODEL_STUDIO_VERSION + LocalizationManager.getInstance().get("matrixeater.println.startupmodelpaths") + result); } catch (final IOException e) { e.printStackTrace(); @@ -138,7 +139,7 @@ else if (args.length > 2) { } else { System.out.println( - "Unable to convert. If you are converting an image, provide an output path to tell me what file extension to save as."); + LocalizationManager.getInstance().get("matrixeater.println.startupmodelpaths_unable")); } return; } @@ -219,7 +220,7 @@ else if (args[0].endsWith(".mdx") || args[0].endsWith(".mdl") || args[0].endsWit break; case WINDOWS: try { - UIManager.put("desktop", new ColorUIResource(Color.WHITE)); + UIManager.put(LocalizationManager.getInstance().get("matrixeater.put.datapromptforced"), new ColorUIResource(Color.WHITE)); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); System.out.println(UIManager.getLookAndFeel()); } @@ -377,7 +378,7 @@ public void run() { final DataSourceChooserPanel dataSourceChooserPanel = new DataSourceChooserPanel( dataSources); // JF - final JFrame jFrame = new JFrame(RETERA_MODEL_STUDIO_VERSION + ": Setup"); + final JFrame jFrame = new JFrame(RETERA_MODEL_STUDIO_VERSION + LocalizationManager.getInstance().get("matrixeater.put.dataprompt_frame")); // jFrame.setContentPane(dataSourceChooserPanel); jFrame.setUndecorated(true); jFrame.pack(); @@ -388,7 +389,7 @@ public void run() { jFrame.setVisible(true); try { if (JOptionPane.showConfirmDialog(jFrame, dataSourceChooserPanel, - "Retera Model Studio: Setup", JOptionPane.OK_CANCEL_OPTION, + LocalizationManager.getInstance().get("matrixeater.dialog.wingutilities_setup"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) != JOptionPane.OK_OPTION) { return; } @@ -429,8 +430,8 @@ public void run() { } else { JOptionPane.showMessageDialog(null, - "Retera Model Studio startup sequence has failed for two attempts. The program will now exit.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("matrixeater.dialog.wingutilities_exit"), + LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); System.exit(-1); } } @@ -453,8 +454,8 @@ public void run() { @Override public void run() { JOptionPane.showMessageDialog(null, - "Retera Model Studio startup sequence has failed for two attempts. The program will now exit.", - "Error", JOptionPane.ERROR_MESSAGE); + LocalizationManager.getInstance().get("matrixeater.dialog.swingutilities"), + LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); System.exit(-1); } }); @@ -491,8 +492,8 @@ public void windowClosing(final WindowEvent e) { currentThread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(final Thread t, final Throwable e) { - ExceptionPopup.display("Uncaught exception on Thread \"" + t.getName() + "\"", e); - System.err.println("Uncaught exception on thread: " + t.getName()); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.defaultexceptionhandler") + t.getName() + "\"", e); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.defaultexceptionhandler") + t.getName()); e.printStackTrace(); } }); diff --git a/matrixeater/src/com/matrixeater/src/MainPanel.java b/matrixeater/src/com/matrixeater/src/MainPanel.java index 143cf3bcd..87240cc93 100644 --- a/matrixeater/src/com/matrixeater/src/MainPanel.java +++ b/matrixeater/src/com/matrixeater/src/MainPanel.java @@ -113,6 +113,8 @@ import com.hiveworkshop.wc3.gui.BLPHandler; import com.hiveworkshop.wc3.gui.ExceptionPopup; import com.hiveworkshop.wc3.gui.GUIUtils; +import hiveworkshop.localizationmanager.LocalizationManager; +import java.util.Locale; import com.hiveworkshop.wc3.gui.ProgramPreferences; import com.hiveworkshop.wc3.gui.animedit.ControllableTimeBoundProvider; import com.hiveworkshop.wc3.gui.animedit.TimeBoundChangeListener; @@ -270,13 +272,13 @@ public class MainPanel extends JPanel implements ActionListener, UndoHandler, ModelEditorChangeActivityListener, ModelPanelCloseListener { JMenuBar menuBar; JMenu fileMenu, recentMenu, recentFetchMenu, editMenu, toolsMenu, mirrorSubmenu, tweaksSubmenu, viewMenu, - importMenu, addMenu, scriptsMenu, windowMenu, addParticle, animationMenu, singleAnimationMenu, aboutMenu, + importMenu, addMenu, scriptsMenu, windowMenu, addParticle, animationMenu, singleAnimationMenu, languageMenu, aboutMenu, fetch; JCheckBoxMenuItem mirrorFlip, fetchPortraitsToo, showNormals, textureModels, showVertexModifyControls; ArrayList geoItems = new ArrayList(); JMenuItem newModel, open, fetchUnit, fetchModel, fetchObject, save, close, exit, revert, mergeGeoset, saveAs, importButton, importUnit, importGameModel, importGameObject, importFromWorkspace, importButtonS, - newDirectory, creditsButton, changelogButton, clearRecent, clearRecentFetch, nullmodelButton, selectAll, + newDirectory, creditsButton, enItem, zhItem, changelogButton, clearRecent, clearRecentFetch, nullmodelButton, selectAll, invertSelect, expandSelection, snapNormals, snapVertices, flipAllUVsU, flipAllUVsV, inverseAllUVs, mirrorX, mirrorY, mirrorZ, insideOut, insideOutNormals, showMatrices, editUVs, exportTextures, editTextures, scaleAnimations, animationViewer, animationController, cameraController, modelingTab, mpqViewer, hiveViewer, @@ -508,7 +510,7 @@ public void actionPerformed(final ActionEvent e) { mpanel.getUndoManager().pushAction(mpanel.getModelEditorManager().getModelEditor().rig()); } else { - System.err.println("NOT RIGGING, NOT VALID"); + System.err.println(LocalizationManager.getInstance().get("matrixeater.println.rigAction")); } } repaint(); @@ -562,19 +564,19 @@ public void actionPerformed(final ActionEvent e) { final ModelPanel mpanel = currentModelPanel(); if (mpanel != null) { final JPanel messagePanel = new JPanel(new MigLayout()); - messagePanel.add(new JLabel("This will calculate the extents of all model components. Proceed?"), - "wrap"); - messagePanel.add(new JLabel("(It may destroy existing extents)"), "wrap"); - final JRadioButton considerAllBtn = new JRadioButton("Consider all geosets for calculation"); + messagePanel.add(new JLabel(LocalizationManager.getInstance().get("matrixeater.label.calculate_extents.prompt")), + LocalizationManager.getInstance().get("matrixeater.label.calculate_extents.wrap")); + messagePanel.add(new JLabel(LocalizationManager.getInstance().get("matrixeater.label.calculate_extents.warning")), LocalizationManager.getInstance().get("matrixeater.label.calculate_extents.wrap")); + final JRadioButton considerAllBtn = new JRadioButton(LocalizationManager.getInstance().get("matrixeater.label.calculate_extents.all_geosets")); final JRadioButton considerCurrentBtn = new JRadioButton( - "Consider current editable geosets for calculation"); + LocalizationManager.getInstance().get("matrixeater.label.calculate_extents.current_geosets")); final ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(considerAllBtn); buttonGroup.add(considerCurrentBtn); considerAllBtn.setSelected(true); - messagePanel.add(considerAllBtn, "wrap"); - messagePanel.add(considerCurrentBtn, "wrap"); - final int userChoice = JOptionPane.showConfirmDialog(MainPanel.this, messagePanel, "Message", + messagePanel.add(considerAllBtn, LocalizationManager.getInstance().get("matrixeater.label.calculate_extents.wrap")); + messagePanel.add(considerCurrentBtn, LocalizationManager.getInstance().get("matrixeater.label.calculate_extents.wrap")); + final int userChoice = JOptionPane.showConfirmDialog(MainPanel.this, messagePanel, LocalizationManager.getInstance().get("global.dialog.message"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (userChoice == JOptionPane.YES_OPTION) { mpanel.getUndoManager().pushAction(mpanel.getModelEditorManager().getModelEditor() @@ -808,7 +810,7 @@ public void actionPerformed(final ActionEvent e) { final List priorDataSources = SaveProfile.get().getDataSources(); final ProgramPreferencesPanel programPreferencesPanel = new ProgramPreferencesPanel(programPreferences, priorDataSources); - // final JFrame frame = new JFrame("Preferences"); + // final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.menu.perspective")); // frame.setIconImage(MainFrame.frame.getIconImage()); // frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // frame.setContentPane(programPreferencesPanel); @@ -816,7 +818,7 @@ public void actionPerformed(final ActionEvent e) { // frame.setLocationRelativeTo(MainPanel.this); // frame.setVisible(true); - final int ret = JOptionPane.showConfirmDialog(MainPanel.this, programPreferencesPanel, "Preferences", + final int ret = JOptionPane.showConfirmDialog(MainPanel.this, programPreferencesPanel, LocalizationManager.getInstance().get("matrixeater.dialog.openpreferencesaction"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (ret == JOptionPane.OK_OPTION) { prefs.loadFrom(programPreferences); @@ -845,7 +847,7 @@ public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) { final UnitEditorTree unitEditorTree = createUnitEditorTree(); rootWindow.setWindow(new SplitWindow(true, 0.75f, rootWindow.getWindow(), - new View("Unit Browser", + new View(LocalizationManager.getInstance().get("matrixeater.window.openunitvieweraction"), new ImageIcon(MainFrame.frame.getIconImage().getScaledInstance(16, 16, Image.SCALE_FAST)), new JScrollPane(unitEditorTree)))); } @@ -859,7 +861,7 @@ public void actionPerformed(final ActionEvent e) { // final FloatingWindow floatingWindow = // rootWindow.createFloatingWindow(rootWindow.getLocation(), // mpqBrowser.getPreferredSize(), - // new View("MPQ Browser", + // new View(LocalizationManager.getInstance().get("matrixeater.window.opendoodadvieweraction"), // new ImageIcon(MainFrame.frame.getIconImage().getScaledInstance(16, 16, // Image.SCALE_FAST)), // mpqBrowser)); @@ -892,7 +894,7 @@ public void mouseClicked(final MouseEvent e) { } }); rootWindow.setWindow(new SplitWindow(true, 0.75f, rootWindow.getWindow(), - new View("Doodad Browser", + new View(LocalizationManager.getInstance().get("matrixeater.view.opendoodadvieweraction"), new ImageIcon(MainFrame.frame.getIconImage().getScaledInstance(16, 16, Image.SCALE_FAST)), new JScrollPane(unitEditorTree)))); } @@ -904,13 +906,12 @@ public void actionPerformed(final ActionEvent e) { panel.setLayout(new BorderLayout()); panel.add(BorderLayout.BEFORE_FIRST_LINE, new JLabel(POWERED_BY_HIVE)); // final JPanel resourceFilters = new JPanel(); - // resourceFilters.setBorder(BorderFactory.createTitledBorder("Resource - // Filters")); + // resourceFilters.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("matrixeater.border.openhivevieweraction_resource"))); // panel.add(BorderLayout.BEFORE_LINE_BEGINS, resourceFilters); - // resourceFilters.add(new JLabel("Resource Type")); - // resourceFilters.add(new JComboBox<>(new String[] { "Any" })); + // resourceFilters.add(new JLabel(LocalizationManager.getInstance().get("matrixeater.label.openhivevieweraction"))); + // resourceFilters.add(new JComboBox<>(new String[] { LocalizationManager.getInstance().get("matrixeater.comboBox.openhivevieweraction") })); final JList view = new JList<>( - new String[] { "Bongo Bongo (Phantom Shadow Beast)", "Other Model", "Other Model" }); + new String[] {LocalizationManager.getInstance().get("matrixeater.view.openhivevieweraction_bo"), LocalizationManager.getInstance().get("matrixeater.view.openhivevieweraction_other"), LocalizationManager.getInstance().get("matrixeater.view.openhivevieweraction_other") }); view.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(final javax.swing.JList list, final Object value, @@ -925,16 +926,16 @@ public Component getListCellRendererComponent(final javax.swing.JList list, f panel.add(BorderLayout.BEFORE_LINE_BEGINS, new JScrollPane(view)); final JPanel tags = new JPanel(); - tags.setBorder(BorderFactory.createTitledBorder("Tags")); + tags.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("matrixeater.border.openhivevieweraction_tags"))); tags.setLayout(new GridLayout(30, 1)); - tags.add(new JCheckBox("Results must include all selected tags")); + tags.add(new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.openhivevieweraction_results"))); tags.add(new JSeparator()); - tags.add(new JLabel("Types (Models)")); + tags.add(new JLabel(LocalizationManager.getInstance().get("matrixeater.label.openhivevieweraction_types"))); tags.add(new JSeparator()); - tags.add(new JCheckBox("Building")); - tags.add(new JCheckBox("Doodad")); - tags.add(new JCheckBox("Item")); - tags.add(new JCheckBox("User Interface")); + tags.add(new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.openhivevieweraction_build"))); + tags.add(new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.openhivevieweraction_doodad"))); + tags.add(new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.openhivevieweraction_item"))); + tags.add(new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.openhivevieweraction_ui"))); panel.add(BorderLayout.CENTER, tags); // final FloatingWindow floatingWindow = // rootWindow.createFloatingWindow(rootWindow.getLocation(), @@ -944,7 +945,7 @@ public Component getListCellRendererComponent(final javax.swing.JList list, f // Image.SCALE_FAST)), // mpqBrowser)); // floatingWindow.getTopLevelAncestor().setVisible(true); - rootWindow.setWindow(new SplitWindow(true, 0.75f, rootWindow.getWindow(), new View("Hive Browser", + rootWindow.setWindow(new SplitWindow(true, 0.75f, rootWindow.getWindow(), new View(LocalizationManager.getInstance().get("matrixeater.view.openhivevieweraction_hive"), new ImageIcon(MainFrame.frame.getIconImage().getScaledInstance(16, 16, Image.SCALE_FAST)), panel))); } }; @@ -1035,7 +1036,7 @@ public void timeBoundsChanged(final int start, final int end) { }); setKeyframe = new JButton(RMSIcons.setKeyframeIcon); setKeyframe.setMargin(new Insets(0, 0, 0, 0)); - setKeyframe.setToolTipText("Create Keyframe"); + setKeyframe.setToolTipText(LocalizationManager.getInstance().get("matrixeater.tooltip.create_keyframe")); setKeyframe.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -1049,13 +1050,13 @@ public void actionPerformed(final ActionEvent e) { }); setTimeBounds = new JButton(RMSIcons.setTimeBoundsIcon); setTimeBounds.setMargin(new Insets(0, 0, 0, 0)); - setTimeBounds.setToolTipText("Choose Time Bounds"); + setTimeBounds.setToolTipText(LocalizationManager.getInstance().get("matrixeater.tooltip.choose_time_bounds")); setTimeBounds.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { final ModelPanel modelPanel = currentModelPanel(); if (modelPanel == null) { - JOptionPane.showMessageDialog(MainPanel.this, "Please open a model file.", "Error", + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.dialog.openmodelfile"), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); return; } @@ -1069,7 +1070,7 @@ public void run(final Animation object) { } }); final int confirmDialogResult = JOptionPane.showConfirmDialog(MainPanel.this, timeBoundChooserPanel, - "Set Time Bounds", JOptionPane.OK_CANCEL_OPTION); + LocalizationManager.getInstance().get("matrixeater.dialog.settime"), JOptionPane.OK_CANCEL_OPTION); if (confirmDialogResult == JOptionPane.OK_OPTION) { timeBoundChooserPanel.applyTo(animatedRenderEnvironment); if (modelPanel != null) { @@ -1082,19 +1083,19 @@ public void run(final Animation object) { } }); - animationModeButton = new ModeButton("Animate"); + animationModeButton = new ModeButton(LocalizationManager.getInstance().get("matrixeater.button.animation")); animationModeButton.setVisible(false);// TODO remove this if unused contextMenu = new JPopupMenu(); - contextClose = new JMenuItem("Close"); + contextClose = new JMenuItem(LocalizationManager.getInstance().get("global.button.close")); contextClose.addActionListener(this); contextMenu.add(contextClose); - contextCloseOthers = new JMenuItem("Close Others"); + contextCloseOthers = new JMenuItem(LocalizationManager.getInstance().get("global.button.close_other")); contextCloseOthers.addActionListener(this); contextMenu.add(contextCloseOthers); - contextCloseAll = new JMenuItem("Close All"); + contextCloseAll = new JMenuItem(LocalizationManager.getInstance().get("global.button.close_all")); contextCloseAll.addActionListener(this); contextMenu.add(contextCloseAll); @@ -1199,17 +1200,17 @@ public void viewFocusChanged(final View arg0, final View arg1) { }); final JPanel jPanel = new JPanel(); jPanel.add(new JLabel("...")); - viewportControllerWindowView = new View("Outliner", null, jPanel);// GlobalIcons.geoIcon + viewportControllerWindowView = new View(LocalizationManager.getInstance().get("matrixeater.view.viewportcontrollerwindowviewport"), null, jPanel);// GlobalIcons.geoIcon // viewportControllerWindowView.getWindowProperties().setCloseEnabled(false); // viewportControllerWindowView.getWindowProperties().setMaximizeEnabled(true); // viewportControllerWindowView.getWindowProperties().setMinimizeEnabled(true); // viewportControllerWindowView.getWindowProperties().setRestoreEnabled(true); - toolView = new View("Tools", null, new JPanel()); + toolView = new View(LocalizationManager.getInstance().get("matrixeater.view.toolview"), null, new JPanel()); final JPanel contentsDummy = new JPanel(); contentsDummy.add(new JLabel("...")); - modelDataView = new View("Contents", null, contentsDummy); - tracksView = new View("Tracks", null, new JPanel()); - modelComponentView = new View("Component", null, new JPanel()); + modelDataView = new View(LocalizationManager.getInstance().get("matrixeater.view.modeldataview"), null, contentsDummy); + tracksView = new View(LocalizationManager.getInstance().get("matrixeater.view.tracks"), null, new JPanel()); + modelComponentView = new View(LocalizationManager.getInstance().get("matrixeater.view.component"), null, new JPanel()); // toolView.getWindowProperties().setCloseEnabled(false); rootWindow.getWindowProperties().getTabProperties().getTitledTabProperties() .setSizePolicy(TitledTabSizePolicy.EQUAL_SIZE); @@ -1236,7 +1237,7 @@ public void windowUndocking(final DockingWindow removedWindow) throws OperationA final View view = (View) removedWindow; view.getViewProperties().getViewTitleBarProperties().setVisible(true); System.out.println( - view.getTitle() + ": (windowUndocking removedWindow as view) title bar visible now"); + view.getTitle() + LocalizationManager.getInstance().get("matrixeater.view.windowundocking")); } } else { @@ -1275,7 +1276,7 @@ public void windowRemoved(final DockingWindow removedFromWindow, final DockingWi if (removedWindow instanceof View) { final View view = (View) removedWindow; view.getViewProperties().getViewTitleBarProperties().setVisible(true); - System.out.println(view.getTitle() + ": (removedWindow as view) title bar visible now"); + System.out.println(view.getTitle() + LocalizationManager.getInstance().get("matrixeater.view.windowremoved_barproperties")); } final TabWindow tabWindow = (TabWindow) removedFromWindow; if (tabWindow.getChildWindowCount() == 1) { @@ -1283,13 +1284,13 @@ public void windowRemoved(final DockingWindow removedFromWindow, final DockingWi if (childWindow instanceof View) { final View singleChildView = (View) childWindow; System.out.println(singleChildView.getTitle() - + ": (singleChildView, windowRemoved()) title bar visible now"); + + LocalizationManager.getInstance().get("matrixeater.view.windowremoved_singlechildview")); singleChildView.getViewProperties().getViewTitleBarProperties().setVisible(true); } } else if (tabWindow.getChildWindowCount() == 0) { System.out.println( - tabWindow.getTitle() + ": force close because 0 child windows in windowRemoved()"); + tabWindow.getTitle() + LocalizationManager.getInstance().get("matrixeater.view.windowremoved_force")); // tabWindow.close(); } } @@ -1348,7 +1349,7 @@ public void windowClosing(final DockingWindow closingWindow) throws OperationAbo if (closingWindow instanceof View) { final View view = (View) closingWindow; view.getViewProperties().getViewTitleBarProperties().setVisible(true); - System.out.println(view.getTitle() + ": (closingWindow as view) title bar visible now"); + System.out.println(view.getTitle() + LocalizationManager.getInstance().get("matrixeater.view.windowclosing_barproperties")); } final TabWindow tabWindow = (TabWindow) closingWindow.getWindowParent(); if (tabWindow.getChildWindowCount() == 1) { @@ -1357,12 +1358,12 @@ public void windowClosing(final DockingWindow closingWindow) throws OperationAbo final View singleChildView = (View) childWindow; singleChildView.getViewProperties().getViewTitleBarProperties().setVisible(true); System.out.println(singleChildView.getTitle() - + ": (singleChildView, windowClosing()) title bar visible now"); + + LocalizationManager.getInstance().get("matrixeater.view.windowclosing_singlechildview")); } } else if (tabWindow.getChildWindowCount() == 0) { System.out.println( - tabWindow.getTitle() + ": force close because 0 child windows in windowClosing()"); + tabWindow.getTitle() + LocalizationManager.getInstance().get("matrixeater.view.windowclosing_force")); tabWindow.close(); } } @@ -1388,14 +1389,14 @@ public void windowAdded(final DockingWindow addedToWindow, final DockingWindow a final View singleChildView = (View) childWindow; singleChildView.getViewProperties().getViewTitleBarProperties().setVisible(false); System.out.println(singleChildView.getTitle() - + ": (singleChildView as view, windowAdded()) title bar NOT visible now"); + + LocalizationManager.getInstance().get("matrixeater.view.windowadd")); } } } if (addedWindow instanceof View) { final View view = (View) addedWindow; view.getViewProperties().getViewTitleBarProperties().setVisible(false); - System.out.println(view.getTitle() + ": (addedWindow as view) title bar NOT visible now"); + System.out.println(view.getTitle() + LocalizationManager.getInstance().get("matrixeater.view.windowadd_barproperties")); } } } @@ -1410,10 +1411,10 @@ public void viewFocusChanged(final View arg0, final View arg1) { } }); - leftView = new View("Side", null, new JPanel()); - frontView = new View("Front", null, new JPanel()); - bottomView = new View("Bottom", null, new JPanel()); - perspectiveView = new View("Perspective", null, new JPanel()); + leftView = new View(LocalizationManager.getInstance().get("matrixeater.view.left"), null, new JPanel()); + frontView = new View(LocalizationManager.getInstance().get("matrixeater.view.front"), null, new JPanel()); + bottomView = new View(LocalizationManager.getInstance().get("matrixeater.view.bottom"), null, new JPanel()); + perspectiveView = new View(LocalizationManager.getInstance().get("matrixeater.view.perspective"), null, new JPanel()); final DefaultStyledDocument panel = new DefaultStyledDocument(); final JTextPane epane = new JTextPane(); @@ -1438,7 +1439,7 @@ public void viewFocusChanged(final View arg0, final View arg1) { } epane.setDocument(panel); - previewView = new View("Preview", null, new JScrollPane(epane)); + previewView = new View(LocalizationManager.getInstance().get("matrixeater.view.preview"), null, new JScrollPane(epane)); final JPanel timeSliderAndExtra = new JPanel(); final GroupLayout tsaeLayout = new GroupLayout(timeSliderAndExtra); final Component horizontalGlue = Box.createHorizontalGlue(); @@ -1454,13 +1455,13 @@ public void viewFocusChanged(final View arg0, final View arg1) { .addComponent(horizontalGlue).addComponent(setKeyframe).addComponent(setTimeBounds))); timeSliderAndExtra.setLayout(tsaeLayout); - timeSliderView = new View("Footer", null, timeSliderAndExtra); + timeSliderView = new View(LocalizationManager.getInstance().get("matrixeater.view.timesliderandextra"), null, timeSliderAndExtra); final JPanel hackerPanel = new JPanel(new BorderLayout()); final RSyntaxTextArea matrixEaterScriptTextArea = new RSyntaxTextArea(20, 60); matrixEaterScriptTextArea.setCodeFoldingEnabled(true); matrixEaterScriptTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT); hackerPanel.add(new RTextScrollPane(matrixEaterScriptTextArea), BorderLayout.CENTER); - final JButton run = new JButton("Run", + final JButton run = new JButton(LocalizationManager.getInstance().get("matrixeater.view.run"), new ImageIcon(BLPHandler.get().getGameTex("ReplaceableTextures\\CommandButtons\\BTNReplay-Play.blp") .getScaledInstance(24, 24, Image.SCALE_FAST))); run.addActionListener(new ActionListener() { @@ -1480,18 +1481,18 @@ public void actionPerformed(final ActionEvent e) { } catch (final ScriptException e1) { e1.printStackTrace(); - JOptionPane.showMessageDialog(MainPanel.this, e1.getMessage(), "Error", + JOptionPane.showMessageDialog(MainPanel.this, e1.getMessage(), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } } else { - JOptionPane.showMessageDialog(MainPanel.this, "Must open a file!", "Error", + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.dialog.matrixeaterscripttextarea"), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } } }); hackerPanel.add(run, BorderLayout.NORTH); - hackerView = new View("Matrix Eater Script", null, hackerPanel); + hackerView = new View(LocalizationManager.getInstance().get("matrixeater.view.hacker"), null, hackerPanel); final JPanel mdlEditorPanel = new JPanel(new BorderLayout()); @@ -1499,9 +1500,9 @@ public void actionPerformed(final ActionEvent e) { mdlEditorTextArea.setCodeFoldingEnabled(true); mdlEditorTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT); mdlEditorPanel.add(new RTextScrollPane(mdlEditorTextArea), BorderLayout.CENTER); - final JButton refresh = new JButton("Refresh"); - final JButton apply = new JButton("Apply"); - final JButton mdlTextFind = new JButton("Find (F3)"); + final JButton refresh = new JButton(LocalizationManager.getInstance().get("matrixeater.button.refresh")); + final JButton apply = new JButton(LocalizationManager.getInstance().get("matrixeater.button.apply")); + final JButton mdlTextFind = new JButton(LocalizationManager.getInstance().get("matrixeater.button.find_f3")); mdlTextFind.setEnabled(false); refresh.addActionListener(new ActionListener() { @Override @@ -1571,7 +1572,7 @@ public void actionPerformed(final ActionEvent e) { mdlEditorButtonsPanel.add(mdlTextSearchField); mdlEditorButtonsPanel.add(mdlTextFind); mdlEditorPanel.add(mdlEditorButtonsPanel, BorderLayout.NORTH); - mdlTextView = new View("Text", null, mdlEditorPanel); + mdlTextView = new View(LocalizationManager.getInstance().get("matrixeater.view.mdltext"), null, mdlEditorPanel); creatorPanel = new CreatorModelingPanel(new ModelEditorChangeActivityListener() { @@ -1581,9 +1582,9 @@ public void changeActivity(final ActivityDescriptor newType) { MainPanel.this.changeActivity(newType); } }, prefs, actionTypeGroup, activeViewportWatcher, animatedRenderEnvironment); - creatorView = new View("Modeling", null, creatorPanel); - animationControllerView = new View("Animation Controller", null, new JPanel()); - cameraControllerView = new View("Camera Controller", null, new JPanel()); + creatorView = new View(LocalizationManager.getInstance().get("matrixeater.view.creator"), null, creatorPanel); + animationControllerView = new View(LocalizationManager.getInstance().get("matrixeater.view.animation_controller"), null, new JPanel()); + cameraControllerView = new View(LocalizationManager.getInstance().get("matrixeater.view.camera_controller"), null, new JPanel()); final TabWindow startupTabWindow = createMainLayout(); rootWindow.setWindow(startupTabWindow); rootWindow.getRootWindowProperties().getFloatingWindowProperties().setUseFrame(true); @@ -1597,17 +1598,17 @@ public void changeActivity(final ActivityDescriptor newType) { filterFile = new File("", ".mdl"); filter = new MDLFilter(); fc.setAcceptAllFileFilterUsed(false); - fc.addChoosableFileFilter(new FileNameExtensionFilter("Warcraft III Binary Model '-.mdx'", "mdx")); - fc.addChoosableFileFilter(new FileNameExtensionFilter("Warcraft III Texture '-.blp'", "blp")); - fc.addChoosableFileFilter(new FileNameExtensionFilter("PNG Image '-.png'", "png")); + fc.addChoosableFileFilter(new FileNameExtensionFilter(LocalizationManager.getInstance().get("matrixeater.filefilter_mdx"), "mdx")); + fc.addChoosableFileFilter(new FileNameExtensionFilter(LocalizationManager.getInstance().get("matrixeater.filefilter_blp"), "blp")); + fc.addChoosableFileFilter(new FileNameExtensionFilter(LocalizationManager.getInstance().get("matrixeater.filefilter_png"), "png")); fc.addChoosableFileFilter(filter); - fc.addChoosableFileFilter(new FileNameExtensionFilter("Wavefront OBJ '-.obj'", "obj")); + fc.addChoosableFileFilter(new FileNameExtensionFilter(LocalizationManager.getInstance().get("matrixeater.filefilter_obj"), "obj")); exportTextureDialog = new JFileChooser(); - exportTextureDialog.setDialogTitle("Export Texture"); + exportTextureDialog.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.export_texture")); final String[] imageTypes = ImageIO.getWriterFileSuffixes(); for (final String suffix : imageTypes) { exportTextureDialog - .addChoosableFileFilter(new FileNameExtensionFilter(suffix.toUpperCase() + " Image File", suffix)); + .addChoosableFileFilter(new FileNameExtensionFilter(suffix.toUpperCase() + LocalizationManager.getInstance().get("matrixeater.dialog.image_file"), suffix)); } // getInputMap(JPanel.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, @@ -1635,8 +1636,11 @@ public void run() { if (newType == SelectionItemTypes.TPOSE) { - final Object[] settings = { "Move Linked", "Move Single" }; - final Object dialogResult = JOptionPane.showInputDialog(null, "Choose settings:", "T-Pose Settings", + final Object[] settings = { + LocalizationManager.getInstance().get("matrixeater.dialog.selectionttemtypegroup_linked"), + LocalizationManager.getInstance().get("matrixeater.dialog.selectionttemtypegroup_single") + }; + final Object dialogResult = JOptionPane.showInputDialog(null, LocalizationManager.getInstance().get("matrixeater.dialog.addtoolbar_choose"), LocalizationManager.getInstance().get("matrixeater.dialog.addtoolbar_tp_settings"), JOptionPane.PLAIN_MESSAGE, null, settings, settings[0]); final boolean moveLinked = dialogResult == settings[0]; ModelEditorManager.MOVE_LINKED = moveLinked; @@ -1731,8 +1735,67 @@ public void drop(DropTargetDropEvent dtde) { } } })); + + // Add locale change listener to notify user about language change + LocalizationManager.getInstance().addPropertyChangeListener(evt -> { + if ("locale".equals(evt.getPropertyName())) { + // Show message to inform user that restart is recommended for full UI update + final Locale newLocale = (Locale) evt.getNewValue(); + final String languageName = newLocale.getDisplayLanguage(newLocale); + + SwingUtilities.invokeLater(() -> { + int result = JOptionPane.showConfirmDialog( + MainPanel.this, + LocalizationManager.getInstance().get("matrixeater.dialog.change_language_text"), + LocalizationManager.getInstance().get("matrixeater.dialog.change_language"), + JOptionPane.YES_NO_OPTION, + JOptionPane.INFORMATION_MESSAGE + ); + + if (result == JOptionPane.YES_OPTION) { + // 获取可执行文件所在的目录 + String exePath = System.getProperty("sun.java.command"); + File exeFile = new File(exePath); + File configFile = new File(exeFile.getParentFile(), "config.properties"); + + // 保存配置 + java.io.FileOutputStream out = null; + try { + out = new java.io.FileOutputStream(configFile); + java.util.Properties props = new java.util.Properties(); + props.setProperty("matrixeater.locale", newLocale.toString()); + props.store(out, ""); + } catch (java.io.IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (java.io.IOException e) { + e.printStackTrace(); + } + } + } + try { + ProcessBuilder pb = new ProcessBuilder(exePath); + pb.inheritIO(); // 继承输入输出 + Process process = pb.start(); + + Thread.sleep(1000); + + System.exit(0); + + } catch (Exception e) { + e.printStackTrace(); + // 配置已保存,重启失败时用户可手动重启 + } + } + }); + } + }); } + private TabWindow createMainLayout() { final TabWindow leftHandTabWindow = new TabWindow( new DockingWindow[] { viewportControllerWindowView, toolView }); @@ -1749,7 +1812,7 @@ private TabWindow createMainLayout() { editingTab.getWindowProperties().setTitleProvider(new DockingWindowTitleProvider() { @Override public String getTitle(final DockingWindow arg0) { - return "Edit"; + return LocalizationManager.getInstance().get("matrixeater.title.lefthandtab"); } }); ImageIcon imageIcon; @@ -1759,14 +1822,14 @@ public String getTitle(final DockingWindow arg0) { final UnitEditorTree unitEditorTree = createUnitEditorTree(); final TabWindow tabWindow = new TabWindow(new DockingWindow[] { - new View("Unit Browser", imageIcon, new JScrollPane(unitEditorTree)), mpqBrowserView }); + new View(LocalizationManager.getInstance().get("matrixeater.tab.view_unit_browser"), imageIcon, new JScrollPane(unitEditorTree)), mpqBrowserView }); tabWindow.setSelectedTab(0); final SplitWindow viewingTab = new SplitWindow(true, 0.8f, new SplitWindow(true, 0.8f, previewView, new SplitWindow(false, 0.7f, animationControllerView, cameraControllerView)), tabWindow); viewingTab.getWindowProperties().setTitleProvider(new DockingWindowTitleProvider() { @Override public String getTitle(final DockingWindow arg0) { - return "View"; + return LocalizationManager.getInstance().get("matrixeater.title.viewing"); } }); viewingTab.getWindowProperties().setCloseEnabled(false); @@ -1775,7 +1838,7 @@ public String getTitle(final DockingWindow arg0) { modelTab.getWindowProperties().setTitleProvider(new DockingWindowTitleProvider() { @Override public String getTitle(final DockingWindow arg0) { - return "Model"; + return LocalizationManager.getInstance().get("matrixeater.title.model"); } }); @@ -1842,7 +1905,7 @@ public void run(final String path) { } } }); - final View view = new View("Data Browser", imageIcon, mpqBrowser); + final View view = new View(LocalizationManager.getInstance().get("matrixeater.tab.view_data_browser"), imageIcon, mpqBrowser); view.getWindowProperties().setCloseEnabled(true); return view; } @@ -1892,17 +1955,17 @@ private void traverseAndReloadData(final DockingWindow window) { final UnitEditorTree unitEditorTree = (UnitEditorTree) viewportView; final WorldEditorDataType dataType = unitEditorTree.getDataType(); if (dataType == WorldEditorDataType.UNITS) { - System.out.println("saw unit tree"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.traverseandreloaddata.unit")); unitEditorTree.setUnitDataAndReloadVerySlowly(getUnitData()); } else if (dataType == WorldEditorDataType.DOODADS) { - System.out.println("saw doodad tree"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.traverseandreloaddata.doodad")); unitEditorTree.setUnitDataAndReloadVerySlowly(getDoodadData()); } } } else if (component instanceof MPQBrowser) { - System.out.println("saw mpq tree"); + System.out.println(LocalizationManager.getInstance().get("matrixeater.traverseandreloaddata.mpq")); final MPQBrowser comp = (MPQBrowser) component; comp.refreshTree(); } @@ -2124,7 +2187,7 @@ public void actionPerformed(final ActionEvent e) { currentModelPanel().getUndoManager().undo(); } catch (final NoSuchElementException exc) { - JOptionPane.showMessageDialog(MainPanel.this, "Nothing to undo!"); + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.action.nothing_to_undo")); } catch (final Exception exc) { ExceptionPopup.display(exc); @@ -2140,7 +2203,7 @@ public void actionPerformed(final ActionEvent e) { currentModelPanel().getUndoManager().redo(); } catch (final NoSuchElementException exc) { - JOptionPane.showMessageDialog(MainPanel.this, "Nothing to redo!"); + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.action.nothing_to_redo")); } catch (final Exception exc) { ExceptionPopup.display(exc); @@ -2155,7 +2218,7 @@ public void actionPerformed(final ActionEvent e) { selectionItemTypeGroup = new ToolbarButtonGroup<>(toolbar, SelectionItemTypes.values()); toolbar.addSeparator(); selectAndMoveDescriptor = new ToolbarActionButtonType(RMSIcons.loadToolBarImageIcon("move2.png"), - "Select and Move") { + LocalizationManager.getInstance().get("matrixeater.toobar.select_and_move")) { @Override public ModelEditorViewportActivity createActivity(final ModelEditorManager modelEditorManager, final ModelView modelView, final UndoActionListener undoActionListener) { @@ -2167,7 +2230,7 @@ public ModelEditorViewportActivity createActivity(final ModelEditorManager model } }; selectAndRotateDescriptor = new ToolbarActionButtonType(RMSIcons.loadToolBarImageIcon("rotate.png"), - "Select and Rotate") { + LocalizationManager.getInstance().get("matrixeater.toobar.select_and_rotate")) { @Override public ModelEditorViewportActivity createActivity(final ModelEditorManager modelEditorManager, final ModelView modelView, final UndoActionListener undoActionListener) { @@ -2179,7 +2242,7 @@ public ModelEditorViewportActivity createActivity(final ModelEditorManager model } }; selectAndScaleDescriptor = new ToolbarActionButtonType(RMSIcons.loadToolBarImageIcon("scale.png"), - "Select and Scale") { + LocalizationManager.getInstance().get("matrixeater.toobar.select_and_scale")) { @Override public ModelEditorViewportActivity createActivity(final ModelEditorManager modelEditorManager, final ModelView modelView, final UndoActionListener undoActionListener) { @@ -2191,7 +2254,7 @@ public ModelEditorViewportActivity createActivity(final ModelEditorManager model } }; selectAndExtrudeDescriptor = new ToolbarActionButtonType(RMSIcons.loadToolBarImageIcon("extrude.png"), - "Select and Extrude") { + LocalizationManager.getInstance().get("matrixeater.toobar.select_and_extrude")) { @Override public ModelEditorViewportActivity createActivity(final ModelEditorManager modelEditorManager, final ModelView modelView, final UndoActionListener undoActionListener) { @@ -2203,7 +2266,7 @@ public ModelEditorViewportActivity createActivity(final ModelEditorManager model } }; selectAndExtendDescriptor = new ToolbarActionButtonType(RMSIcons.loadToolBarImageIcon("extend.png"), - "Select and Extend") { + LocalizationManager.getInstance().get("matrixeater.toobar.select_and_extend")) { @Override public ModelEditorViewportActivity createActivity(final ModelEditorManager modelEditorManager, final ModelView modelView, final UndoActionListener undoActionListener) { @@ -2219,7 +2282,7 @@ public ModelEditorViewportActivity createActivity(final ModelEditorManager model selectAndScaleDescriptor, selectAndExtrudeDescriptor, selectAndExtendDescriptor, }); currentActivity = actionTypeGroup.getActiveButtonType(); toolbar.addSeparator(); - snapButton = toolbar.add(new AbstractAction("Snap", RMSIcons.loadToolBarImageIcon("snap.png")) { + snapButton = toolbar.add(new AbstractAction(LocalizationManager.getInstance().get("matrixeater.toobar.snap"), RMSIcons.loadToolBarImageIcon("snap.png")) { @Override public void actionPerformed(final ActionEvent e) { try { @@ -2230,7 +2293,7 @@ public void actionPerformed(final ActionEvent e) { } } catch (final NoSuchElementException exc) { - JOptionPane.showMessageDialog(MainPanel.this, "Nothing to undo!"); + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.action.nothing_to_undo")); } catch (final Exception exc) { ExceptionPopup.display(exc); @@ -2272,7 +2335,7 @@ private void linkActions(final JComponent root) { root.getActionMap().put("Delete", deleteHotkeyAction); root.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("DELETE"), "Delete"); - root.getActionMap().put("CloneSelection", cloneAction); + root.getActionMap().put("Clone Selection", cloneAction); root.getActionMap().put("MaximizeSpacebar", new AbstractAction() { @Override @@ -2555,7 +2618,7 @@ public void actionPerformed(final ActionEvent e) { } } catch (final FaceCreationException exc) { - JOptionPane.showMessageDialog(MainPanel.this, exc.getMessage(), "Error", + JOptionPane.showMessageDialog(MainPanel.this, exc.getMessage(), LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); } catch (final Exception exc) { @@ -2743,38 +2806,38 @@ public JMenuBar createMenuBar() { menuBar = new JMenuBar(); // Build the file menu - fileMenu = new JMenu("File"); + fileMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.file")); fileMenu.setMnemonic(KeyEvent.VK_F); fileMenu.getAccessibleContext() - .setAccessibleDescription("Allows the user to open, save, close, and manipulate files."); + .setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.file_description")); menuBar.add(fileMenu); - recentMenu = new JMenu("Open Recent"); + recentMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.open_recent")); recentMenu.setMnemonic(KeyEvent.VK_R); - recentMenu.getAccessibleContext().setAccessibleDescription("Allows you to access recently opened files."); + recentMenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.open_recent_description")); - editMenu = new JMenu("Edit"); + editMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.edit")); editMenu.setMnemonic(KeyEvent.VK_E); // editMenu.addMouseListener(this); editMenu.getAccessibleContext() - .setAccessibleDescription("Allows the user to use various tools to edit the currently selected model."); + .setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.edit_description")); menuBar.add(editMenu); - toolsMenu = new JMenu("Tools"); + toolsMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.tools")); toolsMenu.setMnemonic(KeyEvent.VK_T); toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to use various model editing tools. (You must open a model before you may use this menu.)"); + LocalizationManager.getInstance().get("matrixeater.menu.tools_description")); toolsMenu.setEnabled(false); menuBar.add(toolsMenu); - viewMenu = new JMenu("View"); + viewMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.view")); // viewMenu.setMnemonic(KeyEvent.VK_V); - viewMenu.getAccessibleContext().setAccessibleDescription("Allows the user to control view settings."); + viewMenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.view_description")); menuBar.add(viewMenu); - teamColorMenu = new JMenu("Team Color"); + teamColorMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.team_color")); teamColorMenu.getAccessibleContext() - .setAccessibleDescription("Allows the user to control team color settings."); + .setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.team_color_description")); menuBar.add(teamColorMenu); directoryChangeNotifier.subscribe(new WarcraftDataSourceChangeListener() { @@ -2795,13 +2858,13 @@ public void dataSourcesChanged() { }); createTeamColorMenuItems(); - windowMenu = new JMenu("Window"); + windowMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.window")); windowMenu.setMnemonic(KeyEvent.VK_W); windowMenu.getAccessibleContext() - .setAccessibleDescription("Allows the user to open various windows containing the program features."); + .setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.window_description")); menuBar.add(windowMenu); - final JMenuItem resetViewButton = new JMenuItem("Reset Layout"); + final JMenuItem resetViewButton = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.reset_layout")); resetViewButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -2813,12 +2876,12 @@ public void actionPerformed(final ActionEvent e) { }); windowMenu.add(resetViewButton); - final JMenu viewsMenu = new JMenu("Views"); + final JMenu viewsMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.views")); viewsMenu.setMnemonic(KeyEvent.VK_V); windowMenu.add(viewsMenu); - final JMenuItem testItem = new JMenuItem("test"); - testItem.addActionListener(new OpenViewAction("Animation Preview", new OpenViewGetter() { + final JMenuItem testItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.test")); + testItem.addActionListener(new OpenViewAction(LocalizationManager.getInstance().get("matrixeater.menu.animation_preview"), new OpenViewGetter() { @Override public View getView() { final JPanel testPanel = new JPanel(); @@ -2837,129 +2900,129 @@ public View getView() { // testPanel.add(animationController); } testPanel.setLayout(new GridLayout(1, 4)); - return new View("Test", null, testPanel); + return new View(LocalizationManager.getInstance().get("matrixeater.menu.test"), null, testPanel); } })); // viewsMenu.add(testItem); - animationViewer = new JMenuItem("Animation Preview"); + animationViewer = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.animation_preview")); animationViewer.setMnemonic(KeyEvent.VK_A); animationViewer.addActionListener(openAnimationViewerAction); viewsMenu.add(animationViewer); - animationController = new JMenuItem("Animation Controller"); + animationController = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.animation_controller")); animationController.setMnemonic(KeyEvent.VK_C); animationController.addActionListener(openAnimationControllerAction); viewsMenu.add(animationController); - cameraController = new JMenuItem("Camera Controller"); + cameraController = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.camera_controller")); cameraController.addActionListener(openCameraControllerAction); viewsMenu.add(cameraController); viewsMenu.addSeparator(); - modelingTab = new JMenuItem("Modeling"); + modelingTab = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.modeling")); modelingTab.setMnemonic(KeyEvent.VK_M); modelingTab.addActionListener(openModelingTabAction); viewsMenu.add(modelingTab); - final JMenuItem outlinerItem = new JMenuItem("Outliner"); + final JMenuItem outlinerItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.outliner")); outlinerItem.setMnemonic(KeyEvent.VK_O); outlinerItem.addActionListener(openOutlinerAction); viewsMenu.add(outlinerItem); - final JMenuItem perspectiveItem = new JMenuItem("Perspective"); + final JMenuItem perspectiveItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.perspective")); perspectiveItem.setMnemonic(KeyEvent.VK_P); perspectiveItem.addActionListener(openPerspectiveAction); viewsMenu.add(perspectiveItem); - final JMenuItem frontItem = new JMenuItem("Front"); + final JMenuItem frontItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.front")); frontItem.setMnemonic(KeyEvent.VK_F); frontItem.addActionListener(openFrontAction); viewsMenu.add(frontItem); - final JMenuItem sideItem = new JMenuItem("Side"); + final JMenuItem sideItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.side")); sideItem.setMnemonic(KeyEvent.VK_S); sideItem.addActionListener(openSideAction); viewsMenu.add(sideItem); - final JMenuItem bottomItem = new JMenuItem("Bottom"); + final JMenuItem bottomItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.bottom")); bottomItem.setMnemonic(KeyEvent.VK_B); bottomItem.addActionListener(openBottomAction); viewsMenu.add(bottomItem); - final JMenuItem toolsItem = new JMenuItem("Tools"); + final JMenuItem toolsItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.tools")); toolsItem.setMnemonic(KeyEvent.VK_T); toolsItem.addActionListener(openToolsAction); viewsMenu.add(toolsItem); - final JMenuItem timeItem = new JMenuItem("Footer"); + final JMenuItem timeItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.footer")); timeItem.addActionListener(openTimeSliderAction); viewsMenu.add(timeItem); viewsMenu.addSeparator(); - final JMenuItem tracksItem = new JMenuItem("Tracks"); + final JMenuItem tracksItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.tracks")); tracksItem.addActionListener(openTracksViewAction); viewsMenu.add(tracksItem); viewsMenu.addSeparator(); - final JMenuItem contentsItem = new JMenuItem("Contents"); + final JMenuItem contentsItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.contents")); contentsItem.setMnemonic(KeyEvent.VK_M); contentsItem.addActionListener(openModelDataContentsViewAction); viewsMenu.add(contentsItem); - final JMenuItem componentItem = new JMenuItem("Component"); + final JMenuItem componentItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.component")); componentItem.setMnemonic(KeyEvent.VK_C); componentItem.addActionListener(openModelDataComponentsViewAction); viewsMenu.add(componentItem); viewsMenu.addSeparator(); - final JMenuItem textItem = new JMenuItem("Text"); + final JMenuItem textItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.text")); textItem.addActionListener(openTextViewAction); viewsMenu.add(textItem); - final JMenuItem hackerViewItem = new JMenuItem("Matrix Eater Script"); + final JMenuItem hackerViewItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.matrix_eater_script")); hackerViewItem.setMnemonic(KeyEvent.VK_H); hackerViewItem.setAccelerator(KeyStroke.getKeyStroke("control P")); hackerViewItem.addActionListener(hackerViewAction); viewsMenu.add(hackerViewItem); - final JMenu browsersMenu = new JMenu("Browsers"); + final JMenu browsersMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.browsers")); browsersMenu.setMnemonic(KeyEvent.VK_B); windowMenu.add(browsersMenu); - mpqViewer = new JMenuItem("Data Browser"); + mpqViewer = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.data_browser")); mpqViewer.setMnemonic(KeyEvent.VK_A); mpqViewer.addActionListener(openMPQViewerAction); browsersMenu.add(mpqViewer); - unitViewer = new JMenuItem("Unit Browser"); + unitViewer = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.unit_browser")); unitViewer.setMnemonic(KeyEvent.VK_U); unitViewer.addActionListener(openUnitViewerAction); browsersMenu.add(unitViewer); - final JMenuItem doodadViewer = new JMenuItem("Doodad Browser"); + final JMenuItem doodadViewer = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.doodad_browser")); doodadViewer.setMnemonic(KeyEvent.VK_D); doodadViewer.addActionListener(openDoodadViewerAction); browsersMenu.add(doodadViewer); - hiveViewer = new JMenuItem("Hive Browser"); + hiveViewer = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.hive_browser")); hiveViewer.setMnemonic(KeyEvent.VK_H); hiveViewer.addActionListener(openHiveViewerAction); // browsersMenu.add(hiveViewer); windowMenu.addSeparator(); - addMenu = new JMenu("Add"); + addMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.add")); addMenu.setMnemonic(KeyEvent.VK_A); - addMenu.getAccessibleContext().setAccessibleDescription("Allows the user to add new components to the model."); + addMenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menuitem.add")); menuBar.add(addMenu); - addParticle = new JMenu("Particle"); + addParticle = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.particle")); addParticle.setMnemonic(KeyEvent.VK_P); addMenu.add(addParticle); @@ -2997,21 +3060,24 @@ public Component getListCellRendererComponent(final JList list, final Object val final int index, final boolean isSelected, final boolean cellHasFocus) { final IdObject idObject = (IdObject) value; if (idObject == nullBone) { - return super.getListCellRendererComponent(list, "No parent", index, - isSelected, cellHasFocus); + return super.getListCellRendererComponent(list, + LocalizationManager.getInstance().get("matrixeater.stockFiles.no_parent"), + index, isSelected, cellHasFocus); } return super.getListCellRendererComponent(list, value.getClass().getSimpleName() + " \"" + idObject.getName() + "\"", index, isSelected, cellHasFocus); } }); - final JLabel parentLabel = new JLabel("Parent:"); + final JLabel parentLabel = new JLabel(LocalizationManager.getInstance().get("matrixeater.stockFiles.parent")); final JLabel imageLabel = new JLabel( new ImageIcon(image.getScaledInstance(128, 128, Image.SCALE_SMOOTH))); - final JLabel titleLabel = new JLabel("Add " + basicName); + final JLabel titleLabel = new JLabel( + LocalizationManager.getInstance().get("matrixeater.stockFiles.add") + " " + basicName); titleLabel.setFont(new Font("Arial", Font.BOLD, 28)); - final JLabel nameLabel = new JLabel("Particle Name:"); + final JLabel nameLabel = new JLabel( + LocalizationManager.getInstance().get("matrixeater.stockFiles.particle_name")); final JTextField nameField = new JTextField("MyBlizParticle"); final JLabel xLabel = new JLabel("Z:"); @@ -3045,7 +3111,7 @@ public void actionPerformed(final ActionEvent e) { checkBoxes[animIndex].setSelected(true); animIndex++; } - final JButton chooseAnimations = new JButton("Choose when to show!"); + final JButton chooseAnimations = new JButton(LocalizationManager.getInstance().get("matrixeater.button.chooseanimations")); chooseAnimations.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -3059,7 +3125,7 @@ public void actionPerformed(final ActionEvent e) { final Color color = new Color((int) (colorValues.z * 255), (int) (colorValues.y * 255), (int) (colorValues.x * 255)); - final JButton button = new JButton("Color " + (i + 1), + final JButton button = new JButton(LocalizationManager.getInstance().get("matrixeater.button.color") + (i + 1), new ImageIcon(IconUtils.createBlank(color, 32, 32))); colors[i] = color; final int index = i; @@ -3067,7 +3133,7 @@ public void actionPerformed(final ActionEvent e) { @Override public void actionPerformed(final ActionEvent e) { final Color colorChoice = JColorChooser.showDialog(MainPanel.this, - "Chooser Color", colors[index]); + LocalizationManager.getInstance().get("matrixeater.dialog.color_chooser"), colors[index]); if (colorChoice != null) { colors[index] = colorChoice; button.setIcon( @@ -3115,7 +3181,7 @@ public void actionPerformed(final ActionEvent e) { .addComponent(colorButtons[2])))); particlePanel.setLayout(layout); final int x = JOptionPane.showConfirmDialog(MainPanel.this, particlePanel, - "Add " + basicName, JOptionPane.OK_CANCEL_OPTION); + LocalizationManager.getInstance().get("matrixeater.dialog.ethorizontalgroup.add") + basicName, JOptionPane.OK_CANCEL_OPTION); if (x == JOptionPane.OK_OPTION) { // do stuff particle.setPivotPoint(new Vertex(((Number) xSpinner.getValue()).doubleValue(), @@ -3134,7 +3200,7 @@ public void actionPerformed(final ActionEvent e) { } AnimFlag oldFlag = particle.getVisibilityFlag(); if (oldFlag == null) { - oldFlag = new AnimFlag("Visibility"); + oldFlag = new AnimFlag(LocalizationManager.getInstance().get("matrixeater.button.visibility")); } final AnimFlag visFlag = AnimFlag.buildEmptyFrom(oldFlag); animIndex = 0; @@ -3161,71 +3227,71 @@ public void actionPerformed(final ActionEvent e) { } } - animationMenu = new JMenu("Animation"); + animationMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.animation")); animationMenu.setMnemonic(KeyEvent.VK_A); addMenu.add(animationMenu); - riseFallBirth = new JMenuItem("Rising/Falling Birth/Death"); + riseFallBirth = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.ris_fall_bir_dea")); riseFallBirth.setMnemonic(KeyEvent.VK_R); riseFallBirth.addActionListener(this); animationMenu.add(riseFallBirth); - singleAnimationMenu = new JMenu("Single"); + singleAnimationMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.single")); singleAnimationMenu.setMnemonic(KeyEvent.VK_S); animationMenu.add(singleAnimationMenu); - animFromFile = new JMenuItem("From File"); + animFromFile = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.from_file")); animFromFile.setMnemonic(KeyEvent.VK_F); animFromFile.addActionListener(this); singleAnimationMenu.add(animFromFile); - animFromUnit = new JMenuItem("From Unit"); + animFromUnit = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.from_unit")); animFromUnit.setMnemonic(KeyEvent.VK_U); animFromUnit.addActionListener(this); singleAnimationMenu.add(animFromUnit); - animFromModel = new JMenuItem("From Model"); + animFromModel = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.from_model")); animFromModel.setMnemonic(KeyEvent.VK_M); animFromModel.addActionListener(this); singleAnimationMenu.add(animFromModel); - animFromObject = new JMenuItem("From Object"); + animFromObject = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.from_object")); animFromObject.setMnemonic(KeyEvent.VK_O); animFromObject.addActionListener(this); singleAnimationMenu.add(animFromObject); - scriptsMenu = new JMenu("Scripts"); + scriptsMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.scripts")); scriptsMenu.setMnemonic(KeyEvent.VK_A); - scriptsMenu.getAccessibleContext().setAccessibleDescription("Allows the user to execute model edit scripts."); + scriptsMenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.scripts_description")); menuBar.add(scriptsMenu); - importButtonS = new JMenuItem("Oinkerwinkle-Style AnimTransfer"); + importButtonS = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.oinkerwinkle_animtransfer")); importButtonS.setAccelerator(KeyStroke.getKeyStroke("control shift S")); importButtonS.setMnemonic(KeyEvent.VK_P); importButtonS.addActionListener(this); // importButtonS.setEnabled(false); scriptsMenu.add(importButtonS); - mergeGeoset = new JMenuItem("Oinkerwinkle-Style Merge Geoset"); + mergeGeoset = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.merge_geoset")); mergeGeoset.setAccelerator(KeyStroke.getKeyStroke("control M")); mergeGeoset.setMnemonic(KeyEvent.VK_M); mergeGeoset.addActionListener(this); scriptsMenu.add(mergeGeoset); - nullmodelButton = new JMenuItem("Edit/delete model components"); + nullmodelButton = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.nullmodel")); nullmodelButton.setAccelerator(KeyStroke.getKeyStroke("control E")); nullmodelButton.setMnemonic(KeyEvent.VK_E); nullmodelButton.addActionListener(this); scriptsMenu.add(nullmodelButton); - exportAnimatedToStaticMesh = new JMenuItem("Export Animated to Static Mesh"); + exportAnimatedToStaticMesh = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.exportanimated")); exportAnimatedToStaticMesh.setMnemonic(KeyEvent.VK_E); exportAnimatedToStaticMesh.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { if (!animationModeState) { - JOptionPane.showMessageDialog(MainPanel.this, "You must be in the Animation Editor to use that!", - "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.dialog.exportanimated"), + LocalizationManager.getInstance().get("global.dialog.error"), JOptionPane.ERROR_MESSAGE); return; } final Vector4f vertexHeap = new Vector4f(); @@ -3367,7 +3433,7 @@ public void actionPerformed(final ActionEvent e) { } } } - fc.setDialogTitle("Export Static Snapshot"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.snapshotmodel")); final int result = fc.showSaveDialog(MainPanel.this); if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = fc.getSelectedFile(); @@ -3383,7 +3449,7 @@ public void actionPerformed(final ActionEvent e) { }); scriptsMenu.add(exportAnimatedToStaticMesh); - exportAnimatedFramePNG = new JMenuItem("Export Animated Frame PNG"); + exportAnimatedFramePNG = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.export_animated_frame_png")); exportAnimatedFramePNG.setMnemonic(KeyEvent.VK_F); exportAnimatedFramePNG.addActionListener(new ActionListener() { @Override @@ -3416,7 +3482,7 @@ else if (profile.getPath() != null) { if (fileExtension.equals("BMP") || fileExtension.equals("JPG") || fileExtension.equals("JPEG")) { JOptionPane.showMessageDialog(MainPanel.this, - "Warning: Alpha channel was converted to black. Some data will be lost\nif you convert this texture back to Warcraft BLP."); + LocalizationManager.getInstance().get("matrixeater.dialog.exporttexture")); bufferedImage = BLPHandler.removeAlphaChannel(bufferedImage); } if (fileExtension.equals("BLP")) { @@ -3424,11 +3490,11 @@ else if (profile.getPath() != null) { } final boolean write = ImageIO.write(bufferedImage, fileExtension, file); if (!write) { - JOptionPane.showMessageDialog(MainPanel.this, "File type unknown or unavailable"); + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.dialog.exporttexture.file_type_unknown")); } } else { - JOptionPane.showMessageDialog(MainPanel.this, "No file type was specified"); + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.dialog.exporttexture.no_file_type")); } } catch (final IOException e1) { @@ -3441,30 +3507,30 @@ else if (profile.getPath() != null) { } } else { - JOptionPane.showMessageDialog(MainPanel.this, "No output file was specified"); + JOptionPane.showMessageDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.dialog.exporttexture.no_output_file")); } } } }); scriptsMenu.add(exportAnimatedFramePNG); - combineAnims = new JMenuItem("Create Back2Back Animation"); + combineAnims = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.combineanims")); combineAnims.setMnemonic(KeyEvent.VK_P); combineAnims.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { final ArrayList anims = currentMDL().getAnims(); final Animation[] array = anims.toArray(new Animation[0]); - final Object choice = JOptionPane.showInputDialog(MainPanel.this, "Pick the first animation", - "Choose 1st Anim", JOptionPane.PLAIN_MESSAGE, null, array, array[0]); + final Object choice = JOptionPane.showInputDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.dialog.combineanims.pick_one"), + LocalizationManager.getInstance().get("matrixeater.dialog.combineanims.choose_one"), JOptionPane.PLAIN_MESSAGE, null, array, array[0]); final Animation animation = (Animation) choice; - final Object choice2 = JOptionPane.showInputDialog(MainPanel.this, "Pick the second animation", - "Choose 2nd Anim", JOptionPane.PLAIN_MESSAGE, null, array, array[0]); + final Object choice2 = JOptionPane.showInputDialog(MainPanel.this, LocalizationManager.getInstance().get("matrixeater.dialog.combineanims.pick_two"), + LocalizationManager.getInstance().get("matrixeater.dialog.combineanims.choose_two"), JOptionPane.PLAIN_MESSAGE, null, array, array[0]); final Animation animation2 = (Animation) choice2; final String nameChoice = JOptionPane.showInputDialog(MainPanel.this, - "What should the combined animation be called?"); + LocalizationManager.getInstance().get("matrixeater.dialog.combineanims.call")); if (nameChoice != null) { final int anim1Length = animation.getEnd() - animation.getStart(); final int anim2Length = animation2.getEnd() - animation2.getStart(); @@ -3483,19 +3549,19 @@ public void actionPerformed(final ActionEvent e) { newAnimation.getTags().add("NonLooping"); newAnimation.setExtents(new ExtLog(animation.getExtents())); JOptionPane.showMessageDialog(MainPanel.this, - "DONE! Made a combined animation called " + newAnimation.getName(), "Success", + LocalizationManager.getInstance().get("matrixeater.dialog.combineanims.called") + newAnimation.getName(), LocalizationManager.getInstance().get("global.button.success"), JOptionPane.PLAIN_MESSAGE); } } }); scriptsMenu.add(combineAnims); - scaleAnimations = new JMenuItem("Change Animation Lengths by Scaling"); + scaleAnimations = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.scaleanimations")); scaleAnimations.setMnemonic(KeyEvent.VK_A); scaleAnimations.addActionListener(this); scriptsMenu.add(scaleAnimations); - final JMenuItem version800Toggle = new JMenuItem("Assign FormatVersion 800"); + final JMenuItem version800Toggle = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.version800")); version800Toggle.setMnemonic(KeyEvent.VK_A); version800Toggle.addActionListener(new ActionListener() { @Override @@ -3505,7 +3571,7 @@ public void actionPerformed(final ActionEvent e) { }); scriptsMenu.add(version800Toggle); - final JMenuItem version1000Toggle = new JMenuItem("Assign FormatVersion 1000"); + final JMenuItem version1000Toggle = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.version1000")); version1000Toggle.setMnemonic(KeyEvent.VK_A); version1000Toggle.addActionListener(new ActionListener() { @Override @@ -3515,7 +3581,7 @@ public void actionPerformed(final ActionEvent e) { }); scriptsMenu.add(version1000Toggle); - final JMenuItem makeItHDItem = new JMenuItem("SD -> HD (highly experimental, requires 900 or 1000)"); + final JMenuItem makeItHDItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.hditem")); makeItHDItem.setMnemonic(KeyEvent.VK_A); makeItHDItem.addActionListener(new ActionListener() { @Override @@ -3525,7 +3591,7 @@ public void actionPerformed(final ActionEvent e) { }); scriptsMenu.add(makeItHDItem); - final JMenuItem version800EditingToggle = new JMenuItem("HD -> SD with older code (becomes 800)"); + final JMenuItem version800EditingToggle = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.version800editing")); version800EditingToggle.setMnemonic(KeyEvent.VK_A); version800EditingToggle.addActionListener(new ActionListener() { @Override @@ -3535,7 +3601,7 @@ public void actionPerformed(final ActionEvent e) { }); scriptsMenu.add(version800EditingToggle); - final JMenuItem version800BakingToggle = new JMenuItem("HD -> SD with texture baking (becomes 800)"); + final JMenuItem version800BakingToggle = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.version800baking")); version800BakingToggle.setMnemonic(KeyEvent.VK_A); version800BakingToggle.addActionListener(new ActionListener() { @Override @@ -3559,7 +3625,7 @@ public void actionPerformed(final ActionEvent e) { scriptsMenu.add(version800BakingToggle); final JMenuItem recalculateTangents = new JMenuItem( - "Recalculate Tangents (requires 900 or 1000 or 1100 or 1200)"); + LocalizationManager.getInstance().get("matrixeater.menuitem.recalculatetangents")); recalculateTangents.setMnemonic(KeyEvent.VK_A); recalculateTangents.addActionListener(new ActionListener() { @Override @@ -3569,7 +3635,7 @@ public void actionPerformed(final ActionEvent e) { }); scriptsMenu.add(recalculateTangents); - final JMenuItem skinSpliceFromFile = new JMenuItem("From File"); + final JMenuItem skinSpliceFromFile = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.skinsplicefromfile")); skinSpliceFromFile.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -3581,7 +3647,7 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JMenuItem skinSpliceFromWorkspace = new JMenuItem("From Workspace"); + final JMenuItem skinSpliceFromWorkspace = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.skinsplicefromworkspace")); skinSpliceFromWorkspace.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -3591,7 +3657,7 @@ public void actionPerformed(final ActionEvent e) { optionNames.add(model); } final EditableModel choice = (EditableModel) JOptionPane.showInputDialog(MainPanel.this, - "Choose a workspace item to import data from:", "Import from Workspace", + LocalizationManager.getInstance().get("matrixeater.dialog.skinsplicefromworkspace"), LocalizationManager.getInstance().get("matrixeater.dialog.skinsplicefromworkspace_import"), JOptionPane.OK_CANCEL_OPTION, null, optionNames.toArray(), optionNames.get(0)); if (choice != null) { final EditableModel mdl = EditableModel.deepClone(choice, choice.getHeaderName()); @@ -3599,7 +3665,7 @@ public void actionPerformed(final ActionEvent e) { } } }); - final JMenuItem skinSpliceFromModel = new JMenuItem("From Model"); + final JMenuItem skinSpliceFromModel = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.skinsplicefrommodel")); skinSpliceFromModel.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent evt) { @@ -3616,18 +3682,18 @@ public void actionPerformed(final ActionEvent evt) { catch (final FileNotFoundException e) { e.printStackTrace(); ExceptionPopup.display(e); - throw new RuntimeException("Reading mdx failed"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.skinsplicefrommodel")); } catch (final IOException e) { e.printStackTrace(); ExceptionPopup.display(e); - throw new RuntimeException("Reading mdx failed"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.skinsplicefrommodel")); } } } } }); - final JMenuItem skinSpliceFromUnit = new JMenuItem("From Unit"); + final JMenuItem skinSpliceFromUnit = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.skinsplicefromunit")); skinSpliceFromUnit.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent evt) { @@ -3644,36 +3710,36 @@ public void actionPerformed(final ActionEvent evt) { catch (final FileNotFoundException e) { e.printStackTrace(); ExceptionPopup.display(e); - throw new RuntimeException("Reading mdx failed"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.skinsplicefromunit")); } catch (final IOException e) { e.printStackTrace(); ExceptionPopup.display(e); - throw new RuntimeException("Reading mdx failed"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.skinsplicefromunit")); } } } } }); - final JMenu skinSplice = new JMenu("Skin Splice Mesh into Current"); + final JMenu skinSplice = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.skinsplice")); skinSplice.add(skinSpliceFromFile); skinSplice.add(skinSpliceFromWorkspace); skinSplice.add(skinSpliceFromModel); skinSplice.add(skinSpliceFromUnit); scriptsMenu.add(skinSplice); - final JMenuItem removeAll3D = new JMenuItem("Remove All 3D"); + final JMenuItem removeAll3D = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.removeall3d")); removeAll3D.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { currentMDL().removeMesh(); } }); - final JMenu forDarkfang = new JMenu("For Darkfang"); + final JMenu forDarkfang = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.fordarkfang")); forDarkfang.add(removeAll3D); scriptsMenu.add(forDarkfang); - final JMenuItem selectHDUnused = new JMenuItem("Select HD Unused Bones"); + final JMenuItem selectHDUnused = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.selecthdunused")); selectHDUnused.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -3687,13 +3753,13 @@ public void actionPerformed(final ActionEvent e) { }); scriptsMenu.add(selectHDUnused); - final JMenuItem deleteDownToOneTVerticesLayer = new JMenuItem("Delete all TVertices layers beyond the first"); + final JMenuItem deleteDownToOneTVerticesLayer = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.deletedown")); deleteDownToOneTVerticesLayer.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { final int userResult = JOptionPane.showConfirmDialog(MainPanel.this, - "Are you sure? Deleting TVertices layers beyond the first can help to open the file in Magos War3ModelEditor\nif a software glitch added an extra layer,\n but it can also lose art information for some files.\n\nAlso, this action only applies to selected vertices.", - "Confirmation", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); + LocalizationManager.getInstance().get("matrixeater.dialog.deletedown_userresult"), + LocalizationManager.getInstance().get("global.button.confirmation"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (userResult == JOptionPane.OK_OPTION) { final ModelPanel mpanel = currentModelPanel(); if (mpanel != null) { @@ -3706,7 +3772,7 @@ public void actionPerformed(final ActionEvent e) { }); scriptsMenu.add(deleteDownToOneTVerticesLayer); - final JMenuItem relinkBoneRFWeapon = new JMenuItem("Re-link Bone (Such as RF Weapon)"); + final JMenuItem relinkBoneRFWeapon = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.relinkbone")); relinkBoneRFWeapon.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -3726,7 +3792,7 @@ public IdObject getNode() { @Override public String toString() { if (node == null) { - return "(No parent)"; + return LocalizationManager.getInstance().get("matrixeater.tostring.relinkbone"); } return node.getName(); } @@ -3741,7 +3807,7 @@ public String toString() { nodeOptions[i + 1] = new NodeShell(node); } final NodeShell result = (NodeShell) JOptionPane.showInputDialog(MainPanel.this, - "Choose a parent node", "Set Parent Node", JOptionPane.PLAIN_MESSAGE, null, nodeOptions, + LocalizationManager.getInstance().get("matrixeater.dialog.relinkbone_choose"), LocalizationManager.getInstance().get("matrixeater.dialog.relinkbone_set"), JOptionPane.PLAIN_MESSAGE, null, nodeOptions, defaultChoice); if (result != null) { mpanel.getUndoManager().pushAction( @@ -3753,7 +3819,7 @@ public String toString() { }); scriptsMenu.add(relinkBoneRFWeapon); - final JMenuItem deleteLODs = new JMenuItem("Delete LODs"); + final JMenuItem deleteLODs = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.deletelods")); deleteLODs.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -3785,7 +3851,7 @@ public void selectVertices(final Collection vertices) { }); scriptsMenu.add(deleteLODs); - final JMenuItem jokebutton = new JMenuItem("Load Retera Land"); + final JMenuItem jokebutton = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.jokebutton")); jokebutton.setMnemonic(KeyEvent.VK_A); jokebutton.addActionListener(new ActionListener() { @Override @@ -3849,7 +3915,7 @@ public void actionPerformed(final ActionEvent e) { }); // scriptsMenu.add(jokebutton); - final JMenuItem fixReteraLand = new JMenuItem("Fix Retera Land"); + final JMenuItem fixReteraLand = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.fixreteraLand")); fixReteraLand.setMnemonic(KeyEvent.VK_A); fixReteraLand.addActionListener(new ActionListener() { @Override @@ -3863,57 +3929,69 @@ public void actionPerformed(final ActionEvent e) { }); // scriptsMenu.add(fixReteraLand); - aboutMenu = new JMenu("Help"); + languageMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.language")); + languageMenu.setMnemonic(KeyEvent.VK_L); + menuBar.add(languageMenu); + enItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.language.en")); + enItem.setMnemonic(KeyEvent.VK_E); + enItem.addActionListener(e -> LocalizationManager.getInstance().setLocale(Locale.ENGLISH)); + languageMenu.add(enItem); + zhItem = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.language.zh_CN")); + zhItem.setMnemonic(KeyEvent.VK_Z); + zhItem.addActionListener(e -> LocalizationManager.getInstance().setLocale(new Locale("zh","CN"))); + languageMenu.add(zhItem); + + aboutMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.about")); aboutMenu.setMnemonic(KeyEvent.VK_H); menuBar.add(aboutMenu); recentMenu.add(new JSeparator()); - clearRecent = new JMenuItem("Clear"); + clearRecent = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menu.clear")); clearRecent.setMnemonic(KeyEvent.VK_C); clearRecent.addActionListener(this); recentMenu.add(clearRecent); - changelogButton = new JMenuItem("Changelog"); + changelogButton = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.changelog")); changelogButton.setMnemonic(KeyEvent.VK_A); changelogButton.addActionListener(this); aboutMenu.add(changelogButton); - creditsButton = new JMenuItem("About"); + creditsButton = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.about")); creditsButton.setMnemonic(KeyEvent.VK_A); creditsButton.addActionListener(this); aboutMenu.add(creditsButton); - showMatrices = new JMenuItem("View Selected \"Matrices\""); + showMatrices = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.showmatrices")); // showMatrices.setMnemonic(KeyEvent.VK_V); showMatrices.addActionListener(viewMatricesAction); toolsMenu.add(showMatrices); - insideOut = new JMenuItem("Flip all selected faces"); + insideOut = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.insideout")); insideOut.setMnemonic(KeyEvent.VK_I); insideOut.addActionListener(insideOutAction); insideOut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, KeyEvent.CTRL_DOWN_MASK)); toolsMenu.add(insideOut); - insideOutNormals = new JMenuItem("Flip all selected normals"); + insideOutNormals = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.insideoutnormals")); insideOutNormals.addActionListener(insideOutNormalsAction); toolsMenu.add(insideOutNormals); toolsMenu.add(new JSeparator()); - editUVs = new JMenuItem("Edit UV Mapping"); + editUVs = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.edituvs")); editUVs.setMnemonic(KeyEvent.VK_U); editUVs.addActionListener(this); toolsMenu.add(editUVs); - editTextures = new JMenuItem("Edit Textures"); + editTextures = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.edittextures")); editTextures.setMnemonic(KeyEvent.VK_T); editTextures.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { final TextureManager textureManager = new TextureManager(currentModelPanel().getModelViewManager(), modelStructureChangeListener, textureExporter); - final JFrame frame = new JFrame("Edit Textures"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.menuitem.edittextures")); textureManager.setSize(new Dimension(800, 650)); frame.setContentPane(textureManager); frame.setSize(textureManager.getSize()); @@ -3924,87 +4002,87 @@ public void actionPerformed(final ActionEvent e) { }); toolsMenu.add(editTextures); - rigButton = new JMenuItem("Rig Selection"); + rigButton = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.rigbutton")); rigButton.setMnemonic(KeyEvent.VK_R); rigButton.setAccelerator(KeyStroke.getKeyStroke("control W")); rigButton.addActionListener(rigAction); toolsMenu.add(rigButton); - tweaksSubmenu = new JMenu("Tweaks"); + tweaksSubmenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.tweakssubmenu")); tweaksSubmenu.setMnemonic(KeyEvent.VK_T); - tweaksSubmenu.getAccessibleContext().setAccessibleDescription("Allows the user to tweak conversion mistakes."); + tweaksSubmenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.tweakssubmenu_description")); toolsMenu.add(tweaksSubmenu); - flipAllUVsU = new JMenuItem("Flip All UVs U"); + flipAllUVsU = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.flipalluvsu")); flipAllUVsU.setMnemonic(KeyEvent.VK_U); flipAllUVsU.addActionListener(flipAllUVsUAction); tweaksSubmenu.add(flipAllUVsU); - flipAllUVsV = new JMenuItem("Flip All UVs V"); + flipAllUVsV = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.flipalluvsv")); // flipAllUVsV.setMnemonic(KeyEvent.VK_V); flipAllUVsV.addActionListener(flipAllUVsVAction); tweaksSubmenu.add(flipAllUVsV); - inverseAllUVs = new JMenuItem("Swap All UVs U for V"); + inverseAllUVs = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.swapalluvsvu")); inverseAllUVs.setMnemonic(KeyEvent.VK_S); inverseAllUVs.addActionListener(inverseAllUVsAction); tweaksSubmenu.add(inverseAllUVs); - mirrorSubmenu = new JMenu("Mirror"); + mirrorSubmenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.mirror")); mirrorSubmenu.setMnemonic(KeyEvent.VK_M); - mirrorSubmenu.getAccessibleContext().setAccessibleDescription("Allows the user to mirror objects."); + mirrorSubmenu.getAccessibleContext().setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.mirror_description")); toolsMenu.add(mirrorSubmenu); - mirrorX = new JMenuItem("Mirror X"); + mirrorX = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.mirrorx")); mirrorX.setMnemonic(KeyEvent.VK_X); mirrorX.addActionListener(mirrorXAction); mirrorSubmenu.add(mirrorX); - mirrorY = new JMenuItem("Mirror Y"); + mirrorY = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.mirrory")); mirrorY.setMnemonic(KeyEvent.VK_Y); mirrorY.addActionListener(mirrorYAction); mirrorSubmenu.add(mirrorY); - mirrorZ = new JMenuItem("Mirror Z"); + mirrorZ = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.mirrorz")); mirrorZ.setMnemonic(KeyEvent.VK_Z); mirrorZ.addActionListener(mirrorZAction); mirrorSubmenu.add(mirrorZ); mirrorSubmenu.add(new JSeparator()); - mirrorFlip = new JCheckBoxMenuItem("Automatically flip after mirror (preserves surface)", true); + mirrorFlip = new JCheckBoxMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.mirrorflip"), true); mirrorFlip.setMnemonic(KeyEvent.VK_A); mirrorSubmenu.add(mirrorFlip); - textureModels = new JCheckBoxMenuItem("Texture Models", true); + textureModels = new JCheckBoxMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.texturemodels"), true); textureModels.setMnemonic(KeyEvent.VK_T); textureModels.setSelected(true); textureModels.addActionListener(this); viewMenu.add(textureModels); - newDirectory = new JMenuItem("Change Game Directory"); + newDirectory = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.newdirectory")); newDirectory.setAccelerator(KeyStroke.getKeyStroke("control shift D")); - newDirectory.setToolTipText("Changes the directory from which to load texture files for the 3D display."); + newDirectory.setToolTipText(LocalizationManager.getInstance().get("matrixeater.tooltip.change_game_directory")); newDirectory.setMnemonic(KeyEvent.VK_D); newDirectory.addActionListener(this); // viewMenu.add(newDirectory); viewMenu.add(new JSeparator()); - showVertexModifyControls = new JCheckBoxMenuItem("Show Viewport Buttons", true); + showVertexModifyControls = new JCheckBoxMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.showvertexmodifycontrols"), true); // showVertexModifyControls.setMnemonic(KeyEvent.VK_V); showVertexModifyControls.addActionListener(this); viewMenu.add(showVertexModifyControls); viewMenu.add(new JSeparator()); - showNormals = new JCheckBoxMenuItem("Show Normals", true); + showNormals = new JCheckBoxMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.shownormals"), true); showNormals.setMnemonic(KeyEvent.VK_N); showNormals.setSelected(false); showNormals.addActionListener(this); viewMenu.add(showNormals); - viewMode = new JMenu("3D View Mode"); + viewMode = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.viewmode")); viewMenu.add(viewMode); viewModes = new ButtonGroup(); @@ -4025,25 +4103,25 @@ else if (solid.isSelected()) { } }; - wireframe = new JRadioButtonMenuItem("Wireframe"); + wireframe = new JRadioButtonMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.wireframe")); wireframe.addActionListener(repainter); viewMode.add(wireframe); viewModes.add(wireframe); - solid = new JRadioButtonMenuItem("Solid"); + solid = new JRadioButtonMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.solid")); solid.addActionListener(repainter); viewMode.add(solid); viewModes.add(solid); viewModes.setSelected(solid.getModel(), true); - newModel = new JMenuItem("New"); + newModel = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.newmodel")); newModel.setAccelerator(KeyStroke.getKeyStroke("control N")); newModel.setMnemonic(KeyEvent.VK_N); newModel.addActionListener(this); fileMenu.add(newModel); - open = new JMenuItem("Open"); + open = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.open")); open.setAccelerator(KeyStroke.getKeyStroke("control O")); open.setMnemonic(KeyEvent.VK_O); open.addActionListener(this); @@ -4051,37 +4129,37 @@ else if (solid.isSelected()) { fileMenu.add(recentMenu); - fetch = new JMenu("Open Internal"); + fetch = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.fetch")); fetch.setMnemonic(KeyEvent.VK_F); fileMenu.add(fetch); - fetchUnit = new JMenuItem("Unit"); + fetchUnit = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.fetchunit")); fetchUnit.setAccelerator(KeyStroke.getKeyStroke("control U")); fetchUnit.setMnemonic(KeyEvent.VK_U); fetchUnit.addActionListener(this); fetch.add(fetchUnit); - fetchModel = new JMenuItem("Model"); + fetchModel = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.fetchmodel")); fetchModel.setAccelerator(KeyStroke.getKeyStroke("control M")); fetchModel.setMnemonic(KeyEvent.VK_M); fetchModel.addActionListener(this); fetch.add(fetchModel); - fetchObject = new JMenuItem("Object Editor"); + fetchObject = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.fetchobject")); fetchObject.setAccelerator(KeyStroke.getKeyStroke("control O")); fetchObject.setMnemonic(KeyEvent.VK_O); fetchObject.addActionListener(this); fetch.add(fetchObject); - recentFetchMenu = new JMenu("Recent"); + recentFetchMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.recentfetch")); recentFetchMenu.setMnemonic(KeyEvent.VK_R); recentFetchMenu.getAccessibleContext() - .setAccessibleDescription("Allows you to access recently opened internal files."); + .setAccessibleDescription(LocalizationManager.getInstance().get("matrixeater.menu.recentfetch_description")); fetch.add(recentFetchMenu); recentFetchMenu.add(new JSeparator()); - clearRecentFetch = new JMenuItem("Clear"); + clearRecentFetch = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.clearrecent")); clearRecentFetch.setMnemonic(KeyEvent.VK_C); clearRecentFetch.addActionListener(this); recentFetchMenu.add(clearRecentFetch); @@ -4090,7 +4168,7 @@ else if (solid.isSelected()) { fetch.add(new JSeparator()); - fetchPortraitsToo = new JCheckBoxMenuItem("Fetch portraits, too!", true); + fetchPortraitsToo = new JCheckBoxMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.fetchportraits"), true); fetchPortraitsToo.setMnemonic(KeyEvent.VK_P); fetchPortraitsToo.setSelected(true); fetchPortraitsToo.addActionListener(new ActionListener() { @@ -4105,44 +4183,44 @@ public void actionPerformed(final ActionEvent e) { fileMenu.add(new JSeparator()); - importMenu = new JMenu("Import"); + importMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.import")); importMenu.setMnemonic(KeyEvent.VK_I); fileMenu.add(importMenu); - importButton = new JMenuItem("From File"); + importButton = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.import_from_file")); importButton.setAccelerator(KeyStroke.getKeyStroke("control shift I")); importButton.setMnemonic(KeyEvent.VK_I); importButton.addActionListener(this); importMenu.add(importButton); - importUnit = new JMenuItem("From Unit"); + importUnit = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.import_from_unit")); importUnit.setMnemonic(KeyEvent.VK_U); importUnit.setAccelerator(KeyStroke.getKeyStroke("control shift U")); importUnit.addActionListener(this); importMenu.add(importUnit); - importGameModel = new JMenuItem("From WC3 Model"); + importGameModel = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.import_from_wc3_model")); importGameModel.setMnemonic(KeyEvent.VK_M); importGameModel.addActionListener(this); importMenu.add(importGameModel); - importGameObject = new JMenuItem("From Object Editor"); + importGameObject = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.import_from_object")); importGameObject.setMnemonic(KeyEvent.VK_O); importGameObject.addActionListener(this); importMenu.add(importGameObject); - importFromWorkspace = new JMenuItem("From Workspace"); + importFromWorkspace = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.import_from_workspace")); importFromWorkspace.setMnemonic(KeyEvent.VK_O); importFromWorkspace.addActionListener(this); importMenu.add(importFromWorkspace); - save = new JMenuItem("Save"); + save = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.save")); save.setMnemonic(KeyEvent.VK_S); save.setAccelerator(KeyStroke.getKeyStroke("control S")); save.addActionListener(this); fileMenu.add(save); - saveAs = new JMenuItem("Save as"); + saveAs = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.saveas")); saveAs.setMnemonic(KeyEvent.VK_A); saveAs.setAccelerator(KeyStroke.getKeyStroke("control Q")); saveAs.addActionListener(this); @@ -4150,14 +4228,14 @@ public void actionPerformed(final ActionEvent e) { fileMenu.add(new JSeparator()); - exportTextures = new JMenuItem("Export Texture"); + exportTextures = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.exporttexture")); exportTextures.setMnemonic(KeyEvent.VK_E); exportTextures.addActionListener(this); fileMenu.add(exportTextures); fileMenu.add(new JSeparator()); - revert = new JMenuItem("Revert"); + revert = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.revert")); revert.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -4183,7 +4261,7 @@ public void actionPerformed(final ActionEvent e) { }); fileMenu.add(revert); - close = new JMenuItem("Close"); + close = new JMenuItem(LocalizationManager.getInstance().get("global.button.close")); close.setAccelerator(KeyStroke.getKeyStroke("control E")); close.setMnemonic(KeyEvent.VK_E); close.addActionListener(this); @@ -4191,7 +4269,7 @@ public void actionPerformed(final ActionEvent e) { fileMenu.add(new JSeparator()); - exit = new JMenuItem("Exit"); + exit = new JMenuItem(LocalizationManager.getInstance().get("global.button.exit")); exit.setMnemonic(KeyEvent.VK_E); exit.addActionListener(new ActionListener() { @Override @@ -4203,14 +4281,14 @@ public void actionPerformed(final ActionEvent e) { }); fileMenu.add(exit); - undo = new UndoMenuItem("Undo"); + undo = new UndoMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.undo")); undo.addActionListener(undoAction); undo.setAccelerator(KeyStroke.getKeyStroke("control Z")); // undo.addMouseListener(this); editMenu.add(undo); undo.setEnabled(undo.funcEnabled()); - redo = new RedoMenuItem("Redo"); + redo = new RedoMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.redo")); redo.addActionListener(redoAction); redo.setAccelerator(KeyStroke.getKeyStroke("control Y")); // redo.addMouseListener(this); @@ -4219,28 +4297,28 @@ public void actionPerformed(final ActionEvent e) { editMenu.add(new JSeparator()); - final JMenu optimizeMenu = new JMenu("Optimize"); + final JMenu optimizeMenu = new JMenu(LocalizationManager.getInstance().get("matrixeater.menu.optimize")); optimizeMenu.setMnemonic(KeyEvent.VK_O); editMenu.add(optimizeMenu); - linearizeAnimations = new JMenuItem("Linearize Animations"); + linearizeAnimations = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.linearizeanimations")); linearizeAnimations.setMnemonic(KeyEvent.VK_L); linearizeAnimations.addActionListener(this); optimizeMenu.add(linearizeAnimations); - simplifyKeyframes = new JMenuItem("Simplify Keyframes (Experimental)"); + simplifyKeyframes = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.simplifykeyframes")); simplifyKeyframes.setMnemonic(KeyEvent.VK_K); simplifyKeyframes.addActionListener(this); optimizeMenu.add(simplifyKeyframes); - final JMenuItem minimizeGeoset = new JMenuItem("Minimize Geosets"); + final JMenuItem minimizeGeoset = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.minimize_geosets")); minimizeGeoset.setMnemonic(KeyEvent.VK_K); minimizeGeoset.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { final int confirm = JOptionPane.showConfirmDialog(MainPanel.this, - "This is experimental and I did not code the Undo option for it yet. Continue?\nMy advice is to click cancel and save once first.", - "Confirmation", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); + LocalizationManager.getInstance().get("matrixeater.dialog.minimize_geosets"), + LocalizationManager.getInstance().get("global.button.confirmation"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); if (confirm != JOptionPane.OK_OPTION) { return; } @@ -4316,8 +4394,8 @@ private boolean mergableGeosetAnims(final GeosetAnim first, final GeosetAnim sec if ((first.getStaticColor() != null) && !first.getStaticColor().equalLocs(second.getStaticColor())) { return false; } - final AnimFlag firstAnimatedColor = AnimFlag.find(first.getAnimFlags(), "Color"); - final AnimFlag secondAnimatedColor = AnimFlag.find(second.getAnimFlags(), "Color"); + final AnimFlag firstAnimatedColor = AnimFlag.find(first.getAnimFlags(), LocalizationManager.getInstance().get("matrixeater.animflag.color")); + final AnimFlag secondAnimatedColor = AnimFlag.find(second.getAnimFlags(), LocalizationManager.getInstance().get("matrixeater.animflag.color")); if ((firstAnimatedColor == null) != (secondAnimatedColor == null)) { return false; } @@ -4329,7 +4407,7 @@ private boolean mergableGeosetAnims(final GeosetAnim first, final GeosetAnim sec }); optimizeMenu.add(minimizeGeoset); - sortBones = new JMenuItem("Sort Nodes"); + sortBones = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.sortbones")); sortBones.setMnemonic(KeyEvent.VK_S); sortBones.addActionListener(new ActionListener() { @Override @@ -4361,17 +4439,17 @@ public void actionPerformed(final ActionEvent e) { }); optimizeMenu.add(sortBones); - final JMenuItem flushUnusedTexture = new JMenuItem("Flush Unused Texture"); + final JMenuItem flushUnusedTexture = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.flushunusedtexture")); flushUnusedTexture.setEnabled(false); flushUnusedTexture.setMnemonic(KeyEvent.VK_F); optimizeMenu.add(flushUnusedTexture); - final JMenuItem recalcNormals = new JMenuItem("Recalculate Normals"); + final JMenuItem recalcNormals = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.recalcnormals")); recalcNormals.setAccelerator(KeyStroke.getKeyStroke("control N")); recalcNormals.addActionListener(recalcNormalsAction); editMenu.add(recalcNormals); - final JMenuItem recalcExtents = new JMenuItem("Recalculate Extents"); + final JMenuItem recalcExtents = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.recalcextents")); recalcExtents.setAccelerator(KeyStroke.getKeyStroke("control shift E")); recalcExtents.addActionListener(recalcExtentsAction); editMenu.add(recalcExtents); @@ -4396,25 +4474,25 @@ else if (e.getActionCommand().equals(TransferHandler.getPasteAction().getValue(A } } }; - cut = new JMenuItem("Cut"); + cut = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.cut")); cut.addActionListener(copyActionListener); cut.setActionCommand((String) TransferHandler.getCutAction().getValue(Action.NAME)); cut.setAccelerator(KeyStroke.getKeyStroke("control X")); editMenu.add(cut); - copy = new JMenuItem("Copy"); + copy = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.copy")); copy.addActionListener(copyActionListener); copy.setActionCommand((String) TransferHandler.getCopyAction().getValue(Action.NAME)); copy.setAccelerator(KeyStroke.getKeyStroke("control C")); editMenu.add(copy); - paste = new JMenuItem("Paste"); + paste = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.paste")); paste.addActionListener(copyActionListener); paste.setActionCommand((String) TransferHandler.getPasteAction().getValue(Action.NAME)); paste.setAccelerator(KeyStroke.getKeyStroke("control V")); editMenu.add(paste); - duplicateSelection = new JMenuItem("Duplicate"); + duplicateSelection = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.duplicateselection")); // divideVertices.setMnemonic(KeyEvent.VK_V); duplicateSelection.setAccelerator(KeyStroke.getKeyStroke("control D")); duplicateSelection.addActionListener(cloneAction); @@ -4422,43 +4500,43 @@ else if (e.getActionCommand().equals(TransferHandler.getPasteAction().getValue(A editMenu.add(new JSeparator()); - snapVertices = new JMenuItem("Snap Vertices"); + snapVertices = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.snapvertices")); snapVertices.setAccelerator(KeyStroke.getKeyStroke("control shift W")); snapVertices.addActionListener(snapVerticesAction); editMenu.add(snapVertices); - snapNormals = new JMenuItem("Snap Normals"); + snapNormals = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.snapnormals")); snapNormals.setAccelerator(KeyStroke.getKeyStroke("control L")); snapNormals.addActionListener(snapNormalsAction); editMenu.add(snapNormals); editMenu.add(new JSeparator()); - selectAll = new JMenuItem("Select All"); + selectAll = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.selectall")); selectAll.setAccelerator(KeyStroke.getKeyStroke("control A")); selectAll.addActionListener(selectAllAction); editMenu.add(selectAll); - invertSelect = new JMenuItem("Invert Selection"); + invertSelect = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.invertselection")); invertSelect.setAccelerator(KeyStroke.getKeyStroke("control I")); invertSelect.addActionListener(invertSelectAction); editMenu.add(invertSelect); - expandSelection = new JMenuItem("Expand Selection"); + expandSelection = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.expandselection")); expandSelection.setAccelerator(KeyStroke.getKeyStroke("control E")); expandSelection.addActionListener(expandSelectionAction); editMenu.add(expandSelection); editMenu.addSeparator(); - final JMenuItem deleteButton = new JMenuItem("Delete"); + final JMenuItem deleteButton = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.deletebutton")); deleteButton.setMnemonic(KeyEvent.VK_D); deleteButton.addActionListener(deleteAction); editMenu.add(deleteButton); editMenu.addSeparator(); - preferencesWindow = new JMenuItem("Preferences Window"); + preferencesWindow = new JMenuItem(LocalizationManager.getInstance().get("matrixeater.menuitem.preferenceswindow")); preferencesWindow.setMnemonic(KeyEvent.VK_P); preferencesWindow.addActionListener(openPreferencesAction); editMenu.add(preferencesWindow); @@ -4505,9 +4583,9 @@ protected void doSkinSpliceUI(final EditableModel meshModel) { } } if (replacement == null) { - warnings.add("Failed to replace: " + boneName); + warnings.add(LocalizationManager.getInstance().get("matrixeater.warnings.newgeosets") + boneName); replacement = animationModel.getBone(0); -// throw new IllegalStateException("failed to replace: " + boneName); +// throw new IllegalStateException(LocalizationManager.getInstance().get("matrixeater.exception.newgeosets") + boneName); } else { while ((upwardDepth > 0) && (replacement.getChildrenNodes().size() == 1) @@ -4624,7 +4702,7 @@ else if (e.getSource() == fetchObject) { } } else if (e.getSource() == importButton) { - fc.setDialogTitle("Import"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.import")); final EditableModel current = currentMDL(); if ((current != null) && !current.isTemp() && (current.getFile() != null)) { fc.setCurrentDirectory(current.getFile().getParentFile()); @@ -4638,7 +4716,7 @@ else if (profile.getPath() != null) { final File currentFile = fc.getSelectedFile(); profile.setPath(currentFile.getParent()); toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.import_description")); toolsMenu.setEnabled(true); importFile(currentFile); } @@ -4669,8 +4747,7 @@ else if (profile.getPath() != null) { // } // catch (Exception exc ) // { - // JOptionPane.showMessageDialog(this,"Opening command failed: - // "+exc.getLocalizedMessage()); + // JOptionPane.showMessageDialog(this,LocalizationManager.getInstance().get("matrixeater.message.opencomfail")+exc.getLocalizedMessage()); // } // } // @@ -4682,8 +4759,7 @@ else if (profile.getPath() != null) { // } // catch (IOException exc) // { - // JOptionPane.showMessageDialog(this,"Problem opening file: - // "+exc.getLocalizedMessage()); + // JOptionPane.showMessageDialog(this,LocalizationManager.getInstance().get("matrixeater.message.proopen")+exc.getLocalizedMessage()); // } // } refreshController(); @@ -4734,7 +4810,7 @@ else if (e.getSource() == importFromWorkspace) { optionNames.add(model); } final EditableModel choice = (EditableModel) JOptionPane.showInputDialog(this, - "Choose a workspace item to import data from:", "Import from Workspace", + LocalizationManager.getInstance().get("matrixeater.dialog.importfromworkspace"), LocalizationManager.getInstance().get("matrixeater.dialog.importfromworkspace_import"), JOptionPane.OK_CANCEL_OPTION, null, optionNames.toArray(), optionNames.get(0)); if (choice != null) { importFile(EditableModel.deepClone(choice, choice.getHeaderName())); @@ -4742,7 +4818,7 @@ else if (e.getSource() == importFromWorkspace) { refreshController(); } else if (e.getSource() == importButtonS) { - final JFrame frame = new JFrame("Animation Transferer"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.animationtransferer")); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setContentPane(new AnimationTransfer(frame)); frame.setIconImage(RMSIcons.AnimIcon.getImage()); @@ -4751,7 +4827,7 @@ else if (e.getSource() == importButtonS) { frame.setVisible(true); } else if (e.getSource() == mergeGeoset) { - fc.setDialogTitle("Merge Single Geoset (Oinker-based)"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.mergegeoset")); final EditableModel current = currentMDL(); if ((current != null) && !current.isTemp() && (current.getFile() != null)) { fc.setCurrentDirectory(current.getFile().getParentFile()); @@ -4769,7 +4845,7 @@ else if (profile.getPath() != null) { Geoset host = null; while (going) { final String s = JOptionPane.showInputDialog(this, - "Geoset into which to Import: (1 to " + current.getGeosetsSize() + ")"); + LocalizationManager.getInstance().get("matrixeater.dialog.geosetinto") + current.getGeosetsSize() + ")"); try { final int x = Integer.parseInt(s); if ((x >= 1) && (x <= current.getGeosetsSize())) { @@ -4785,7 +4861,7 @@ else if (profile.getPath() != null) { going = true; while (going) { final String s = JOptionPane.showInputDialog(this, - "Geoset to Import: (1 to " + geoSource.getGeosetsSize() + ")"); + LocalizationManager.getInstance().get("matrixeater.dialog.geosetimport") + geoSource.getGeosetsSize() + ")"); try { final int x = Integer.parseInt(s); if (x <= geoSource.getGeosetsSize()) { @@ -4798,7 +4874,7 @@ else if (profile.getPath() != null) { } } newGeoset.updateToObjects(current); - System.out.println("putting " + newGeoset.numUVLayers() + " into a nice " + host.numUVLayers()); + System.out.println(LocalizationManager.getInstance().get("matrixeater.println.putting") + newGeoset.numUVLayers() + LocalizationManager.getInstance().get("matrixeater.println.numuvlayers") + host.numUVLayers()); for (int i = 0; i < newGeoset.numVerteces(); i++) { final GeosetVertex ver = newGeoset.getVertex(i); host.add(ver); @@ -4819,7 +4895,7 @@ else if (profile.getPath() != null) { } else if (e.getSource() == clearRecent) { final int dialogResult = JOptionPane.showConfirmDialog(this, - "Are you sure you want to clear the Recent history?", "Confirm Clear", + LocalizationManager.getInstance().get("matrixeater.dialog.yes_no"), LocalizationManager.getInstance().get("matrixeater.dialog.yes_no_confirm"), JOptionPane.YES_NO_OPTION); if (dialogResult == JOptionPane.YES_OPTION) { SaveProfile.get().clearRecent(); @@ -4933,7 +5009,7 @@ else if (profile.getPath() != null) { if (fileExtension.equals("BMP") || fileExtension.equals("JPG") || fileExtension.equals("JPEG")) { JOptionPane.showMessageDialog(this, - "Warning: Alpha channel was converted to black. Some data will be lost\nif you convert this texture back to Warcraft BLP."); + LocalizationManager.getInstance().get("matrixeater.message.exporttextures_warning")); bufferedImage = BLPHandler.removeAlphaChannel(bufferedImage); } if (fileExtension.equals("BLP")) { @@ -4941,11 +5017,11 @@ else if (profile.getPath() != null) { } final boolean write = ImageIO.write(bufferedImage, fileExtension, file); if (!write) { - JOptionPane.showMessageDialog(this, "File type unknown or unavailable"); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("matrixeater.message.exporttextures_unknown")); } } else { - JOptionPane.showMessageDialog(this, "No file type was specified"); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("matrixeater.message.exporttextures_nofiletype")); } } catch (final IOException e1) { @@ -4958,7 +5034,7 @@ else if (profile.getPath() != null) { } } else { - JOptionPane.showMessageDialog(this, "No output file was specified"); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("matrixeater.message.exporttextures_nooutput")); } } } @@ -4983,8 +5059,8 @@ public void run() { } else if (e.getSource() == linearizeAnimations) { final int x = JOptionPane.showConfirmDialog(this, - "This is an irreversible process that will lose some of your model data,\nin exchange for making it a smaller storage size.\n\nContinue and simplify animations?", - "Warning: Linearize Animations", JOptionPane.OK_CANCEL_OPTION); + LocalizationManager.getInstance().get("matrixeater.dialog.linearizeanimations"), + LocalizationManager.getInstance().get("matrixeater.dialog.linearizeanimations_warn"), JOptionPane.OK_CANCEL_OPTION); if (x == JOptionPane.OK_OPTION) { final List allAnimFlags = currentMDL().getAllAnimFlags(); for (final AnimFlag flag : allAnimFlags) { @@ -5010,8 +5086,8 @@ else if (e.getSource() == duplicateSelection) { } else if (e.getSource() == simplifyKeyframes) { final int x = JOptionPane.showConfirmDialog(this, - "This is an irreversible process that will lose some of your model data,\nin exchange for making it a smaller storage size.\n\nContinue and simplify keyframes?", - "Warning: Simplify Keyframes", JOptionPane.OK_CANCEL_OPTION); + LocalizationManager.getInstance().get("matrixeater.dialog.simplifykeyframes"), + LocalizationManager.getInstance().get("matrixeater.dialog.simplifykeyframes_warn"), JOptionPane.OK_CANCEL_OPTION); if (x == JOptionPane.OK_OPTION) { simplifyKeyframes(); } @@ -5029,7 +5105,7 @@ else if (e.getSource() == riseFallBirth) { final Animation stand = model.findAnimByName("stand"); final int confirmed = JOptionPane.showConfirmDialog(this, - "This will permanently alter model. Are you sure?", "Confirmation", + LocalizationManager.getInstance().get("matrixeater.dialog.risefallbirth"), LocalizationManager.getInstance().get("global.button.confirmation"), JOptionPane.OK_CANCEL_OPTION); if (confirmed != JOptionPane.OK_OPTION) { return; @@ -5037,9 +5113,13 @@ else if (e.getSource() == riseFallBirth) { boolean wipeoutOldBirth = false; if (oldBirth != null) { - final String[] choices = { "Ignore", "Delete", "Overwrite" }; + final String[] choices = { + LocalizationManager.getInstance().get("global.button.ignore"), + LocalizationManager.getInstance().get("global.button.delete"), + LocalizationManager.getInstance().get("global.button.overwrite") + }; final Object x = JOptionPane.showInputDialog(this, - "Existing birth detected. What should be done with it?", "Question", + LocalizationManager.getInstance().get("matrixeater.dialog.oldbirth"), LocalizationManager.getInstance().get("global.button.question"), JOptionPane.PLAIN_MESSAGE, null, choices, choices[0]); if (x == choices[1]) { wipeoutOldBirth = true; @@ -5053,9 +5133,13 @@ else if (x == choices[2]) { } boolean wipeoutOldDeath = false; if (oldDeath != null) { - final String[] choices = { "Ignore", "Delete", "Overwrite" }; + final String[] choices = { + LocalizationManager.getInstance().get("global.button.ignore"), + LocalizationManager.getInstance().get("global.button.delete"), + LocalizationManager.getInstance().get("global.button.overwrite") + }; final Object x = JOptionPane.showInputDialog(this, - "Existing death detected. What should be done with it?", "Question", + LocalizationManager.getInstance().get("matrixeater.dialog.olddeath"), LocalizationManager.getInstance().get("global.button.question"), JOptionPane.PLAIN_MESSAGE, null, choices, choices[0]); if (x == choices[1]) { wipeoutOldDeath = true; @@ -5158,10 +5242,10 @@ else if (x == choices[2]) { model.add(death); } - JOptionPane.showMessageDialog(this, "Done!"); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("matrixeater.dialog.done")); } else if (e.getSource() == animFromFile) { - fc.setDialogTitle("Animation Source"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.animfromfile")); final EditableModel current = currentMDL(); if ((current != null) && !current.isTemp() && (current.getFile() != null)) { fc.setCurrentDirectory(current.getFile().getParentFile()); @@ -5183,7 +5267,7 @@ else if (profile.getPath() != null) { refreshController(); } else if (e.getSource() == animFromUnit) { - fc.setDialogTitle("Animation Source"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.animfromfile")); final GameObject fetchResult = fetchUnit(); if (fetchResult == null) { return; @@ -5196,7 +5280,7 @@ else if (e.getSource() == animFromUnit) { } } else if (e.getSource() == animFromModel) { - fc.setDialogTitle("Animation Source"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.animfromfile")); final ModelElement fetchResult = fetchModel(); if (fetchResult == null) { return; @@ -5209,7 +5293,7 @@ else if (e.getSource() == animFromModel) { } } else if (e.getSource() == animFromObject) { - fc.setDialogTitle("Animation Source"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.animfromfile")); final MutableGameObject fetchResult = fetchObject(); if (fetchResult == null) { return; @@ -5243,7 +5327,7 @@ else if (e.getSource() == creditsButton) { e1.printStackTrace(); } epane.setDocument(panel); - final JFrame frame = new JFrame("About"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.menuitem.about")); frame.setContentPane(new JScrollPane(epane)); frame.setSize(650, 500); frame.setLocationRelativeTo(null); @@ -5272,7 +5356,7 @@ else if (e.getSource() == changelogButton) { e1.printStackTrace(); } epane.setDocument(panel); - final JFrame frame = new JFrame("Changelog"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.menuitem.changelog")); frame.setContentPane(new JScrollPane(epane)); frame.setSize(650, 500); frame.setLocationRelativeTo(null); @@ -5304,7 +5388,7 @@ private void loadStreamMdxFromFetchedObject(final MutableGameObject objectFetche new ImageIcon( BLPHandler.get().getGameTex(objectFetched.getFieldAsString(UnitFields.INTERFACE_ICON, 0)) .getScaledInstance(16, 16, Image.SCALE_FAST))); - final String portrait = filepath.substring(0, filepath.lastIndexOf('.')) + "_portrait" + final String portrait = filepath.substring(0, filepath.lastIndexOf('.')) + LocalizationManager.getInstance().get("matrixeater.menuitem.fetchedobject_portrait") + filepath.substring(filepath.lastIndexOf('.'), filepath.length()); if (prefs.isLoadPortraits() && MpqCodebase.get().has(portrait)) { loadStreamMdx(MpqCodebase.get().getResourceAsStream(portrait), true, false, @@ -5313,7 +5397,7 @@ private void loadStreamMdxFromFetchedObject(final MutableGameObject objectFetche .getScaledInstance(16, 16, Image.SCALE_FAST))); } toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.fetchedobject_description")); toolsMenu.setEnabled(true); } } @@ -5326,13 +5410,13 @@ private void loadStreamMdxFromFetchedModel(final ModelElement model) { BLPHandler.get().getGameTex(model.getCachedIconPath()).getScaledInstance(16, 16, Image.SCALE_FAST)) : RMSIcons.MDLIcon; loadStreamMdx(MpqCodebase.get().getResourceAsStream(filepath), true, true, icon); - final String portrait = filepath.substring(0, filepath.lastIndexOf('.')) + "_portrait" + final String portrait = filepath.substring(0, filepath.lastIndexOf('.')) + LocalizationManager.getInstance().get("matrixeater.menuitem.fetchedobject_portrait") + filepath.substring(filepath.lastIndexOf('.'), filepath.length()); if (prefs.isLoadPortraits() && MpqCodebase.get().has(portrait)) { loadStreamMdx(MpqCodebase.get().getResourceAsStream(portrait), true, false, icon); } toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.fetchedmodel_description")); toolsMenu.setEnabled(true); } } @@ -5342,14 +5426,14 @@ private void loadStreamMdxFromFetchedUnit(final GameObject unitFetched) { if (filepath != null) { loadStreamMdx(MpqCodebase.get().getResourceAsStream(filepath), true, true, new ImageIcon(unitFetched.getImage().getScaledInstance(16, 16, Image.SCALE_DEFAULT))); - final String portrait = filepath.substring(0, filepath.lastIndexOf('.')) + "_portrait" + final String portrait = filepath.substring(0, filepath.lastIndexOf('.')) + LocalizationManager.getInstance().get("matrixeater.menuitem.fetchedobject_portrait") + filepath.substring(filepath.lastIndexOf('.'), filepath.length()); if (prefs.isLoadPortraits() && MpqCodebase.get().has(portrait)) { loadStreamMdx(MpqCodebase.get().getResourceAsStream(portrait), true, false, new ImageIcon(unitFetched.getImage().getScaledInstance(16, 16, Image.SCALE_DEFAULT))); } toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.fetchedunit_description")); toolsMenu.setEnabled(true); } } @@ -5382,7 +5466,7 @@ private void loadStreamMdxForEachDoodadVariation(final MutableGameObject obj) { } } toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.fetcheddoodad_description")); toolsMenu.setEnabled(true); } @@ -5436,7 +5520,7 @@ public void accept(final File t) { private boolean onClickSaveAs(final EditableModel current, final Consumer fileCallback) { try { - fc.setDialogTitle("Save as"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.exception.save_as")); if ((current != null) && !current.isTemp() && (current.getFile() != null)) { fc.setCurrentDirectory(current.getFile().getParentFile()); fc.setSelectedFile(current.getFile()); @@ -5451,7 +5535,7 @@ else if (profile.getPath() != null) { final FileFilter ff = fc.getFileFilter(); final String ext = ff.accept(new File("junk.mdl")) ? ".mdl" : ".mdx"; if (ff.accept(new File("junk.obj"))) { - throw new UnsupportedOperationException("OBJ saving has not been coded yet."); + throw new UnsupportedOperationException(LocalizationManager.getInstance().get("matrixeater.exception.clicksaveas")); } final String name = temp.getName(); if (name.lastIndexOf('.') != -1) { @@ -5465,9 +5549,12 @@ else if (profile.getPath() != null) { } final File currentFile = temp; if (temp.exists()) { - final Object[] options = { "Overwrite", "Cancel" }; - final int n = JOptionPane.showOptionDialog(MainFrame.frame, "Selected file already exists.", - "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, + final Object[] options = { + LocalizationManager.getInstance().get("global.button.overwrite"), + LocalizationManager.getInstance().get("global.button.cancel") + }; + final int n = JOptionPane.showOptionDialog(MainFrame.frame, LocalizationManager.getInstance().get("matrixeater.dialog.clicksaveas"), + LocalizationManager.getInstance().get("matrixeater.dialog.clicksaveas_warn"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]); if (n == 1) { fc.setSelectedFile(null); @@ -5479,7 +5566,7 @@ else if (profile.getPath() != null) { } else { JOptionPane.showMessageDialog(this, - "You tried to save, but you somehow didn't select a file.\nThat is bad."); + LocalizationManager.getInstance().get("matrixeater.dialog.clicksaveas_notselect")); } } fc.setSelectedFile(null); @@ -5508,7 +5595,7 @@ private void onClickSave() { } private void onClickOpen() { - fc.setDialogTitle("Open"); + fc.setDialogTitle(LocalizationManager.getInstance().get("matrixeater.dialog.clickopen")); final EditableModel current = currentMDL(); if ((current != null) && !current.isTemp() && (current.getFile() != null)) { fc.setCurrentDirectory(current.getFile().getParentFile()); @@ -5548,8 +5635,7 @@ else if (profile.getPath() != null) { // } // catch (Exception exc ) // { - // JOptionPane.showMessageDialog(this,"Opening command failed: - // "+exc.getLocalizedMessage()); + // JOptionPane.showMessageDialog(this,LocalizationManager.getInstance().get("matrixeater.dialog.openfile")+exc.getLocalizedMessage()); // } // } // @@ -5561,8 +5647,7 @@ else if (profile.getPath() != null) { // } // catch (IOException exc) // { - // JOptionPane.showMessageDialog(this,"Problem opening file: - // "+exc.getLocalizedMessage()); + // JOptionPane.showMessageDialog(this,LocalizationManager.getInstance().get("matrixeater.dialog.openfileproblem")+exc.getLocalizedMessage()); // } // } } @@ -5570,28 +5655,28 @@ else if (profile.getPath() != null) { private void newModel() { final JPanel newModelPanel = new JPanel(); newModelPanel.setLayout(new MigLayout()); - newModelPanel.add(new JLabel("Model Name: "), "cell 0 0"); + newModelPanel.add(new JLabel(LocalizationManager.getInstance().get("matrixeater.newmodel.layout")), "cell 0 0"); final JTextField newModelNameField = new JTextField("MrNew", 25); newModelPanel.add(newModelNameField, "cell 1 0"); - final JRadioButton createEmptyButton = new JRadioButton("Create Empty", true); + final JRadioButton createEmptyButton = new JRadioButton(LocalizationManager.getInstance().get("matrixeater.newmodel.empty"), true); newModelPanel.add(createEmptyButton, "cell 0 1"); - final JRadioButton createPlaneButton = new JRadioButton("Create Plane"); + final JRadioButton createPlaneButton = new JRadioButton(LocalizationManager.getInstance().get("matrixeater.newmodel.plane")); newModelPanel.add(createPlaneButton, "cell 0 2"); - final JRadioButton createBoxButton = new JRadioButton("Create Box"); + final JRadioButton createBoxButton = new JRadioButton(LocalizationManager.getInstance().get("matrixeater.newmodel.box")); newModelPanel.add(createBoxButton, "cell 0 3"); final ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(createBoxButton); buttonGroup.add(createPlaneButton); buttonGroup.add(createEmptyButton); - final int userDialogResult = JOptionPane.showConfirmDialog(this, newModelPanel, "New Model", + final int userDialogResult = JOptionPane.showConfirmDialog(this, newModelPanel, LocalizationManager.getInstance().get("matrixeater.newmodel.new"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (userDialogResult == JOptionPane.OK_OPTION) { final EditableModel mdl = new EditableModel(newModelNameField.getText()); if (createBoxButton.isSelected()) { final SpinnerNumberModel sModel = new SpinnerNumberModel(1, 1, Integer.MAX_VALUE, 1); final JSpinner spinner = new JSpinner(sModel); - final int userChoice = JOptionPane.showConfirmDialog(this, spinner, "Box: Choose Segments", + final int userChoice = JOptionPane.showConfirmDialog(this, spinner, LocalizationManager.getInstance().get("matrixeater.newmodel.createbox"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (userChoice != JOptionPane.OK_OPTION) { return; @@ -5602,7 +5687,7 @@ private void newModel() { else if (createPlaneButton.isSelected()) { final SpinnerNumberModel sModel = new SpinnerNumberModel(1, 1, Integer.MAX_VALUE, 1); final JSpinner spinner = new JSpinner(sModel); - final int userChoice = JOptionPane.showConfirmDialog(this, spinner, "Plane: Choose Segments", + final int userChoice = JOptionPane.showConfirmDialog(this, spinner, LocalizationManager.getInstance().get("matrixeater.newmodel.createplane"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (userChoice != JOptionPane.OK_OPTION) { return; @@ -5636,7 +5721,7 @@ private GameObject fetchUnit() { catch (final Exception exc) { exc.printStackTrace(); // bad model! - JOptionPane.showMessageDialog(MainFrame.frame, "The chosen model could not be used.", "Program Error", + JOptionPane.showMessageDialog(MainFrame.frame, LocalizationManager.getInstance().get("matrixeater.dialog.fetchunit"), LocalizationManager.getInstance().get("matrixeater.dialog.fetchunit_error"), JOptionPane.ERROR_MESSAGE); return null; } @@ -5671,7 +5756,7 @@ private ModelOptionPane.ModelElement fetchModel() { catch (final Exception exc) { exc.printStackTrace(); // bad model! - JOptionPane.showMessageDialog(MainFrame.frame, "The chosen model could not be used.", "Program Error", + JOptionPane.showMessageDialog(MainFrame.frame, LocalizationManager.getInstance().get("matrixeater.dialog.modeloptionpane"), LocalizationManager.getInstance().get("matrixeater.dialog.modeloptionpane_error"), JOptionPane.ERROR_MESSAGE); return null; } @@ -5681,7 +5766,7 @@ private ModelOptionPane.ModelElement fetchModel() { private MutableGameObject fetchObject() { final BetterUnitEditorModelSelector selector = new BetterUnitEditorModelSelector(getUnitData(), getUnitEditorSettings()); - final int x = JOptionPane.showConfirmDialog(this, selector, "Object Editor - Select Unit", + final int x = JOptionPane.showConfirmDialog(this, selector, LocalizationManager.getInstance().get("matrixeater.dialog.fetchobject"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); final MutableGameObject choice = selector.getSelection(); if ((choice == null) || (x != JOptionPane.OK_OPTION)) { @@ -5696,7 +5781,7 @@ private MutableGameObject fetchObject() { catch (final Exception exc) { exc.printStackTrace(); // bad model! - JOptionPane.showMessageDialog(MainFrame.frame, "The chosen model could not be used.", "Program Error", + JOptionPane.showMessageDialog(MainFrame.frame, LocalizationManager.getInstance().get("matrixeater.dialog.fetchobject_notuse"), LocalizationManager.getInstance().get("matrixeater.dialog.fetchobject_error"), JOptionPane.ERROR_MESSAGE); return null; } @@ -5705,26 +5790,26 @@ private MutableGameObject fetchObject() { private void addSingleAnimation(final EditableModel current, final EditableModel animationSourceModel) { Animation choice = null; - choice = (Animation) JOptionPane.showInputDialog(this, "Choose an animation!", "Add Animation", + choice = (Animation) JOptionPane.showInputDialog(this, LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_choose"), LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_add"), JOptionPane.QUESTION_MESSAGE, null, animationSourceModel.getAnims().toArray(), animationSourceModel.getAnims().get(0)); if (choice == null) { - JOptionPane.showMessageDialog(this, "Bad choice. No animation added."); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_no_animation")); return; } final Animation visibilitySource = (Animation) JOptionPane.showInputDialog(this, - "Which animation from THIS model to copy visiblity from?", "Add Animation", + LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_copy"), LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_add"), JOptionPane.QUESTION_MESSAGE, null, current.getAnims().toArray(), current.getAnims().get(0)); if (visibilitySource == null) { - JOptionPane.showMessageDialog(this, "No visibility will be copied."); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_no_visibility")); } final List animationsAdded = current.addAnimationsFrom(animationSourceModel, Collections.singletonList(choice)); for (final Animation anim : animationsAdded) { current.copyVisibility(visibilitySource, anim); } - JOptionPane.showMessageDialog(this, "Added " + animationSourceModel.getName() + "'s " + choice.getName() - + " with " + visibilitySource.getName() + "'s visibility OK!"); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_added") + animationSourceModel.getName() + LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_s") + choice.getName() + + LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_with") + visibilitySource.getName() + LocalizationManager.getInstance().get("matrixeater.dialog.addsingleanimation_ok")); modelStructureChangeListener.animationsAdded(animationsAdded); } @@ -6064,7 +6149,7 @@ public void actionPerformed(final ActionEvent e) { // sideArea.clearGeosets(); // botArea.clearGeosets(); toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.updaterecent_description")); toolsMenu.setEnabled(true); SaveProfile.get().addRecent(currentFile.getPath()); updateRecent(); @@ -6097,7 +6182,7 @@ public void actionPerformed(final ActionEvent e) { final Element element = dataTable.get(item.fetchInfo.getId()); toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.recentfetches_unit_description")); toolsMenu.setEnabled(true); SaveProfile.get().addRecentFetch(item.fetchInfo); updateRecent(); @@ -6110,7 +6195,7 @@ public void actionPerformed(final ActionEvent e) { item.fetchInfo.getIconPathIfAvailable()); toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.recentfetches_model_description")); toolsMenu.setEnabled(true); SaveProfile.get().addRecentFetch(item.fetchInfo); updateRecent(); @@ -6124,7 +6209,7 @@ public void actionPerformed(final ActionEvent e) { .get(War3ID.fromString(item.fetchInfo.getId())); toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.recentfetches_object_description")); toolsMenu.setEnabled(true); SaveProfile.get().addRecentFetch(item.fetchInfo); updateRecent(); @@ -6137,7 +6222,7 @@ public void actionPerformed(final ActionEvent e) { .get(War3ID.fromString(item.fetchInfo.getId())); toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.recentfetches_doodad_description")); toolsMenu.setEnabled(true); SaveProfile.get().addRecentFetch(item.fetchInfo); updateRecent(); @@ -6147,7 +6232,7 @@ public void actionPerformed(final ActionEvent e) { } case MPQ_BROWSER_MDX: { toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.recentfetches_mqpmdx_description")); toolsMenu.setEnabled(true); SaveProfile.get().addRecentFetch(item.fetchInfo); updateRecent(); @@ -6156,7 +6241,7 @@ public void actionPerformed(final ActionEvent e) { } case MPQ_BROWSER_BLP: { toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.recentfetches_mqpblp_description")); toolsMenu.setEnabled(true); SaveProfile.get().addRecentFetch(item.fetchInfo); updateRecent(); @@ -6165,7 +6250,7 @@ public void actionPerformed(final ActionEvent e) { } case MPQ_BROWSER_DDS: { toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.menuitem.recentfetches_mqpdds_description")); toolsMenu.setEnabled(true); SaveProfile.get().addRecentFetch(item.fetchInfo); updateRecent(); @@ -6173,7 +6258,7 @@ public void actionPerformed(final ActionEvent e) { break; } default: - throw new IllegalArgumentException("Unexpected value: " + item.fetchInfo.getType()); + throw new IllegalArgumentException(LocalizationManager.getInstance().get("matrixeater.exception.recentfetches") + item.fetchInfo.getType()); } } }); @@ -6245,12 +6330,12 @@ public void loadFile(final File f, final boolean temporary, final boolean select catch (final FileNotFoundException e) { e.printStackTrace(); ExceptionPopup.display(e); - throw new RuntimeException("Reading mdx failed"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.loadfile_notfound")); } catch (final IOException e) { e.printStackTrace(); ExceptionPopup.display(e); - throw new RuntimeException("Reading mdx failed"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.loadfile")); } } else if (f.getPath().toLowerCase().endsWith("obj")) { @@ -6295,12 +6380,12 @@ public void loadStreamMdx(final InputStream f, final boolean temporary, final bo catch (final FileNotFoundException e) { e.printStackTrace(); ExceptionPopup.display(e); - throw new RuntimeException("Reading mdx failed"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.loadstreammdx_notfound")); } catch (final IOException e) { e.printStackTrace(); ExceptionPopup.display(e); - throw new RuntimeException("Reading mdx failed"); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.loadstreammdx")); } loadModel(temporary, selectNewTab, temp); } @@ -6477,7 +6562,7 @@ public void setCurrentModel(final ModelPanel modelContextManager) { leftView.setComponent(new JPanel()); perspectiveView.setComponent(new JPanel()); previewView.setComponent(new JPanel()); - mdlEditorTextArea.setText("// empty"); + mdlEditorTextArea.setText(LocalizationManager.getInstance().get("matrixeater.settext.modelcontextmanager_empty")); animationControllerView.setComponent(new JPanel()); cameraControllerView.setComponent(new JPanel()); refreshAnimationModeState(); @@ -6504,7 +6589,7 @@ public void setCurrentModel(final ModelPanel modelContextManager) { } else { mdlEditorTextArea.setText( - "// click on \"Refresh\" to populate this UI.\n// If you want to populate this view automatically, you can do so in the preferences window\n// (but it may degrade performance)."); + LocalizationManager.getInstance().get("matrixeater.settext.modelcontextmanager_refresh")); } animationControllerView.setComponent(modelContextManager.getAnimationController()); @@ -6552,7 +6637,7 @@ public void openFile(final File f) { // sideArea.clearGeosets(); // botArea.clearGeosets(); toolsMenu.getAccessibleContext().setAccessibleDescription( - "Allows the user to control which parts of the model are displayed for editing."); + LocalizationManager.getInstance().get("matrixeater.exception.openfile")); toolsMenu.setEnabled(true); SaveProfile.get().addRecent(currentFile.getPath()); updateRecent(); @@ -6654,16 +6739,16 @@ public void run() { Thread.sleep(1); } catch (final Exception e) { - ExceptionPopup.display("MatrixEater detected error with Java's wait function", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.nullmodelfile_getparentframe"), e); } } // if( !importPanel.getParentFrame().isVisible() && // !importPanel.importEnded() ) - // JOptionPane.showMessageDialog(null,"bad voodoo - // "+importPanel.importSuccessful()); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.nullmodelfile_bad") + // +importPanel.importSuccessful()); // else - // JOptionPane.showMessageDialog(null,"good voodoo - // "+importPanel.importSuccessful()); + // JOptionPane.showMessageDialog(null,LocalizationManager.getInstance().get("matrixeater.dialog.nullmodelfile_good") + // +importPanel.importSuccessful()); // if( importPanel.importSuccessful() ) // { // newModel.saveFile(); @@ -6676,7 +6761,7 @@ public void run() { Thread.sleep(1); } catch (final Exception e) { - ExceptionPopup.display("MatrixEater detected error with Java's wait function", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.nullmodelfile_importstarted"), e); } } @@ -6710,8 +6795,8 @@ public void parseTriangles(final String input, final Geoset g) { Integer.parseInt(s[t + 2]), g)); } catch (final NumberFormatException e) { - JOptionPane.showMessageDialog(this, "Error: Unable to interpret information in Triangles: " + s[t] - + ", " + s[t + 1] + ", or " + s[t + 2]); + JOptionPane.showMessageDialog(this, LocalizationManager.getInstance().get("matrixeater.dialog.parsetriangles_error") + s[t] + + ", " + s[t + 1] + LocalizationManager.getInstance().get("matrixeater.dialog.parsetriangles_or") + s[t + 2]); } } // try @@ -6722,8 +6807,7 @@ public void parseTriangles(final String input, final Geoset g) { // } // catch (NumberFormatException e) // { - // JOptionPane.showMessageDialog(this,"Error: Unable to interpret - // information in Triangles."); + // JOptionPane.showMessageDialog(LocalizationManager.getInstance().get("matrixeater.dialog.parsetriangles_error")); // } } @@ -6828,11 +6912,11 @@ public UndoMenuItem(final String text) { @Override public String getText() { if (funcEnabled()) { - return "Undo " + currentModelPanel().getUndoManager().getUndoText();// +" + return LocalizationManager.getInstance().get("matrixeater.menuitem.undomenuitem_do") + currentModelPanel().getUndoManager().getUndoText();// +" // Ctrl+Z"; } else { - return "Can't undo";// +" Ctrl+Z"; + return LocalizationManager.getInstance().get("matrixeater.menuitem.undomenuitem_notdo");// +" Ctrl+Z"; } } @@ -6854,11 +6938,11 @@ public RedoMenuItem(final String text) { @Override public String getText() { if (funcEnabled()) { - return "Redo " + currentModelPanel().getUndoManager().getRedoText();// +" + return LocalizationManager.getInstance().get("matrixeater.menuitem.redomenuitem_do") + currentModelPanel().getUndoManager().getRedoText();// +" // Ctrl+Y"; } else { - return "Can't redo";// +" Ctrl+Y"; + return LocalizationManager.getInstance().get("matrixeater.menuitem.redomenuitem_notdo");// +" Ctrl+Y"; } } @@ -6965,7 +7049,7 @@ else if (profile.getPath() != null) { fileHandler.onClickOK(file, exportTextureDialog.getFileFilter()); } else { - JOptionPane.showMessageDialog(parent, "No import file was specified"); + JOptionPane.showMessageDialog(parent, LocalizationManager.getInstance().get("matrixeater.dialog.suggestedname")); } } } @@ -6997,7 +7081,7 @@ else if (profile.getPath() != null) { fileHandler.onClickOK(file, exportTextureDialog.getFileFilter()); } else { - JOptionPane.showMessageDialog(parent, "No file type was specified"); + JOptionPane.showMessageDialog(parent, LocalizationManager.getInstance().get("matrixeater.dialog.filehandler")); } } catch (final Exception e2) { @@ -7006,7 +7090,7 @@ else if (profile.getPath() != null) { } } else { - JOptionPane.showMessageDialog(parent, "No output file was specified"); + JOptionPane.showMessageDialog(parent, LocalizationManager.getInstance().get("matrixeater.dialog.filehandler_output")); } } } @@ -7052,7 +7136,7 @@ private void mdlEditorFindNext() { } if (!foundMatch) { final int result = JOptionPane.showConfirmDialog(MainPanel.this, - "Finished searching document, continue from top?", "Find", JOptionPane.YES_NO_OPTION); + LocalizationManager.getInstance().get("matrixeater.dialog.mdlEditorfindnext"), LocalizationManager.getInstance().get("matrixeater.dialog.mdlEditorfindnext_find"), JOptionPane.YES_NO_OPTION); if (result == JOptionPane.YES_OPTION) { for (int i = 0; (i < selectionEnd) && !foundMatch; i++) { final String text = document.getText(i, textToFindLength); diff --git a/matrixeater/src/com/matrixeater/src/RedoActionImplementation.java b/matrixeater/src/com/matrixeater/src/RedoActionImplementation.java index 23bd014e7..debc50791 100644 --- a/matrixeater/src/com/matrixeater/src/RedoActionImplementation.java +++ b/matrixeater/src/com/matrixeater/src/RedoActionImplementation.java @@ -6,6 +6,7 @@ import javax.swing.AbstractAction; import javax.swing.JOptionPane; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.gui.ExceptionPopup; import com.hiveworkshop.wc3.gui.modeledit.ModelPanel; @@ -24,7 +25,7 @@ public void actionPerformed(final ActionEvent e) { try { mpanel.getUndoManager().redo(); } catch (final NoSuchElementException exc) { - JOptionPane.showMessageDialog(mainPanel, "Nothing to redo!"); + JOptionPane.showMessageDialog(mainPanel, LocalizationManager.getInstance().get("matrixeater.dialog.mpanel_redo")); } catch (final Exception exc) { ExceptionPopup.display(exc); } diff --git a/matrixeater/src/com/matrixeater/src/UndoActionImplementation.java b/matrixeater/src/com/matrixeater/src/UndoActionImplementation.java index de9c40d1e..70e74becc 100644 --- a/matrixeater/src/com/matrixeater/src/UndoActionImplementation.java +++ b/matrixeater/src/com/matrixeater/src/UndoActionImplementation.java @@ -6,6 +6,7 @@ import javax.swing.AbstractAction; import javax.swing.JOptionPane; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.gui.ExceptionPopup; import com.hiveworkshop.wc3.gui.modeledit.ModelPanel; @@ -24,7 +25,7 @@ public void actionPerformed(final ActionEvent e) { try { mpanel.getUndoManager().undo(); } catch (final NoSuchElementException exc) { - JOptionPane.showMessageDialog(mainPanel, "Nothing to undo!"); + JOptionPane.showMessageDialog(mainPanel, LocalizationManager.getInstance().get("matrixeater.dialog.mpanel_undo")); } catch (final Exception exc) { ExceptionPopup.display(exc); } diff --git a/matrixeater/src/com/matrixeater/src/ViewController.java b/matrixeater/src/com/matrixeater/src/ViewController.java index 68b997513..774fb5c07 100644 --- a/matrixeater/src/com/matrixeater/src/ViewController.java +++ b/matrixeater/src/com/matrixeater/src/ViewController.java @@ -6,6 +6,7 @@ import com.hiveworkshop.wc3.gui.icons.RMSIcons; import com.hiveworkshop.wc3.gui.modeledit.ModelViewManagingTree; +import hiveworkshop.localizationmanager.LocalizationManager; /** * A view control, containing several control options @@ -20,13 +21,13 @@ public class ViewController extends JTabbedPane { public ViewController(final ModelViewManagingTree disp, final boolean spawnFrame) { super(); if (spawnFrame) { - frame = new JFrame("View Controller"); + frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.viewcontroller")); frame.setContentPane(this); frame.setIconImage(RMSIcons.redIcon.getImage()); } modelViewManagingTree = disp; geoScroll = new JScrollPane(modelViewManagingTree); - addTab("", RMSIcons.geoIcon, geoScroll, "Controls visibility"); + addTab(LocalizationManager.getInstance().get("matrixeater.tab.geoscroll"), RMSIcons.geoIcon, geoScroll, ""); if (spawnFrame) { frame.setVisible(true); frame.pack(); diff --git a/matrixeater/src/com/matrixeaterhayate/HMToolbox.java b/matrixeater/src/com/matrixeaterhayate/HMToolbox.java index 7b499dbf5..49d4bbf9d 100644 --- a/matrixeater/src/com/matrixeaterhayate/HMToolbox.java +++ b/matrixeater/src/com/matrixeaterhayate/HMToolbox.java @@ -1,4 +1,5 @@ package com.matrixeaterhayate; +import hiveworkshop.localizationmanager.LocalizationManager; import java.awt.GridLayout; @@ -10,12 +11,12 @@ public class HMToolbox extends JPanel { public HMToolbox() { setLayout(new GridLayout(2, 1)); final JPanel createPanel = new JPanel(); - createPanel.setBorder(BorderFactory.createTitledBorder("Create")); + createPanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("matrixeater.border.createpanel"))); createPanel.setLayout(new GridLayout(3, 2)); createPanel.add(new JButton("")); final JPanel transformPanel = new JPanel(); - transformPanel.setBorder(BorderFactory.createTitledBorder("Transform")); + transformPanel.setBorder(BorderFactory.createTitledBorder(LocalizationManager.getInstance().get("matrixeater.border.transformpanel"))); transformPanel.setLayout(new GridLayout(3, 2)); } } diff --git a/matrixeater/src/com/matrixeaterhayate/HayateMatrixEater.java b/matrixeater/src/com/matrixeaterhayate/HayateMatrixEater.java index 5c257dc87..36ef5730e 100644 --- a/matrixeater/src/com/matrixeaterhayate/HayateMatrixEater.java +++ b/matrixeater/src/com/matrixeaterhayate/HayateMatrixEater.java @@ -5,11 +5,12 @@ import javax.swing.WindowConstants; import com.hiveworkshop.wc3.gui.BLPHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public class HayateMatrixEater extends JPanel { public static void main(final String[] args) { - final JFrame frame = new JFrame("New Hayate Matrix Eater"); + final JFrame frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.hayatematrixeater")); final HayateMatrixEater hayateMatrixEater = new HayateMatrixEater(); frame.setIconImage(BLPHandler.get().getGameTex("Textures\\Blue_star2.blp")); frame.setContentPane(hayateMatrixEater); diff --git a/matrixeater/src/com/matrixeaterhayate/TextureManager.java b/matrixeater/src/com/matrixeaterhayate/TextureManager.java index 90ab4d8c7..65059548e 100644 --- a/matrixeater/src/com/matrixeaterhayate/TextureManager.java +++ b/matrixeater/src/com/matrixeaterhayate/TextureManager.java @@ -23,6 +23,7 @@ import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileFilter; +import hiveworkshop.localizationmanager.LocalizationManager; import com.hiveworkshop.wc3.gui.BLPHandler; import com.hiveworkshop.wc3.gui.datachooser.DataSource; import com.hiveworkshop.wc3.gui.modeledit.actions.newsys.ModelStructureChangeListener; @@ -48,12 +49,12 @@ public TextureManager(final ModelView modelView, final ModelStructureChangeListe setLayout(null); final JPanel panel = new JPanel(); - panel.setBorder(new TitledBorder(null, "Textures", TitledBorder.LEADING, TitledBorder.TOP, null, null)); + panel.setBorder(new TitledBorder(null, LocalizationManager.getInstance().get("matrixeater.label.modelstructurechangelistener"), TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel.setBounds(16, 17, 297, 507); add(panel); panel.setLayout(new BorderLayout(0, 0)); - final JCheckBox chckbxDisplayPath = new JCheckBox("Display Path"); + final JCheckBox chckbxDisplayPath = new JCheckBox(LocalizationManager.getInstance().get("matrixeater.checkbox.chckbxdisplaypath")); final JList list = new JList(); chckbxDisplayPath.addActionListener(new ActionListener() { @@ -103,14 +104,14 @@ public void valueChanged(final ListSelectionEvent e) { panel.add(chckbxDisplayPath, BorderLayout.SOUTH); panel_1 = new JPanel(); - panel_1.setBorder(new TitledBorder(null, "Image Viewer", TitledBorder.LEADING, TitledBorder.TOP, null, null)); + panel_1.setBorder(new TitledBorder(null, LocalizationManager.getInstance().get("matrixeater.border.panel_1"), TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel_1.setBounds(323, 17, 439, 507); panel_1.setLayout(new BorderLayout()); add(panel_1); loadBitmap(modelView, defaultTexture); - final JButton importButton = new JButton("Import"); + final JButton importButton = new JButton(LocalizationManager.getInstance().get("matrixeater.button.texturemanager_import")); importButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -129,7 +130,7 @@ public void onClickOK(final File file, final FileFilter filter) { importButton.setBounds(26, 535, 89, 23); add(importButton); - final JButton exportButton = new JButton("Export"); + final JButton exportButton = new JButton(LocalizationManager.getInstance().get("matrixeater.button.texturemanager_export")); exportButton.setBounds(125, 535, 89, 23); add(exportButton); exportButton.addActionListener(new ActionListener() { @@ -152,7 +153,7 @@ public void onClickOK(final File file, final FileFilter filter) { } }); - final JButton btnReplaceTexture = new JButton("Replace Texture"); + final JButton btnReplaceTexture = new JButton(LocalizationManager.getInstance().get("matrixeater.button.texturemanager_replace")); btnReplaceTexture.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { @@ -173,7 +174,7 @@ public void onClickOK(final File file, final FileFilter filter) { btnReplaceTexture.setBounds(25, 569, 185, 23); add(btnReplaceTexture); - final JButton btnRemove = new JButton("Remove"); + final JButton btnRemove = new JButton(LocalizationManager.getInstance().get("matrixeater.button.texturemanager_remove")); btnRemove.setBounds(224, 535, 89, 23); btnRemove.addActionListener(new ActionListener() { @Override @@ -188,7 +189,7 @@ public void actionPerformed(final ActionEvent e) { }); add(btnRemove); - final JButton btnEditTexture = new JButton("Edit Path"); + final JButton btnEditTexture = new JButton(LocalizationManager.getInstance().get("matrixeater.button.texturemanager_edit_path")); btnEditTexture.setBounds(415, 535, 88, 23); add(btnEditTexture); btnEditTexture.addActionListener(new ActionListener() { @@ -209,12 +210,12 @@ public void actionPerformed(final ActionEvent e) { add(pathField); pathField.setColumns(10); - final JButton btnAdd = new JButton("Add Path"); + final JButton btnAdd = new JButton(LocalizationManager.getInstance().get("matrixeater.button.texturemanager_add_path")); btnAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - final String path = JOptionPane.showInputDialog(TextureManager.this, "Enter texture path:", - "Add Texture", JOptionPane.PLAIN_MESSAGE); + final String path = JOptionPane.showInputDialog(TextureManager.this, LocalizationManager.getInstance().get("matrixeater.dialog.add_texture_1"), + LocalizationManager.getInstance().get("matrixeater.dialog.add_texture_2"), JOptionPane.PLAIN_MESSAGE); if (path != null) { final Bitmap newBitmap = new Bitmap(path); modelView.getModel().add(newBitmap); diff --git a/matrixeater/src/com/owens/oobjloader/builder/Build.java b/matrixeater/src/com/owens/oobjloader/builder/Build.java index cefdb8e8e..79cec3ba9 100644 --- a/matrixeater/src/com/owens/oobjloader/builder/Build.java +++ b/matrixeater/src/com/owens/oobjloader/builder/Build.java @@ -18,6 +18,8 @@ import javax.imageio.ImageIO; import javax.swing.JOptionPane; +import hiveworkshop.localizationmanager.LocalizationManager; + import com.hiveworkshop.wc3.gui.ExceptionPopup; import com.hiveworkshop.wc3.gui.modeledit.TargaReader; import com.hiveworkshop.wc3.mdl.Animation; @@ -765,24 +767,24 @@ public EditableModel createMDL() { // ========================================= if (loadbar.isVisible()) { loadbar.setPercent(0f); - loadbar.setText("Collapsing MatrixEater MDL representation"); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_collapsing")); } mdl.doSavePreps(false); if (loadbar.isVisible()) { loadbar.setPercent(0.5f); - loadbar.setText("Preparing model for editing..."); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_preparing")); } mdl.doPostRead(); if (loadbar.isVisible()) { loadbar.setPercent(1.0f); - loadbar.setText("Adding \"Stand\" animation..."); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_adding_stand")); } mdl.add(new Animation("Stand", 333, 1333)); boolean allLessThan2 = true; final int sizeLimit = 10; if (loadbar.isVisible()) { loadbar.setPercent(0.0f); - loadbar.setText("Scanning for WoW sizing..."); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_scanning_wow")); } for (final Geoset geo : mdl.getGeosets()) { for (final GeosetVertex gv : geo.getVertices()) { @@ -797,15 +799,20 @@ public EditableModel createMDL() { } } if (allLessThan2) { - final String[] options = { "x32", "x64", "x128", "No" }; + final String[] options = { + "x32", + "x64", + "x128", + LocalizationManager.getInstance().get("matrixeater.string.materialtosubgroup_option_no") + }; final int option = JOptionPane.showOptionDialog(null, - "This model might be a WoW model, or peculiarly small. Would you like to increase its size?", - "WoW Scaling", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, + LocalizationManager.getInstance().get("matrixeater.dialog.materialtosubgroup_increase_1"), + LocalizationManager.getInstance().get("matrixeater.dialog.materialtosubgroup_increase_2"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); - // final int result = JOptionPane.showConfirmDialog(null, "This - // model might be a WoW model, or peculiarly small. Would you - // like to increase its size?","WoW - // Scaling",JOptionPane.YES_NO_OPTION); + // final int result = JOptionPane.showConfirmDialog(null, + // LocalizationManager.getInstance().get("matrixeater.dialog.materialtosubgroup_increase_1"), + // LocalizationManager.getInstance().get("matrixeater.dialog.materialtosubgroup_increase_2"), + // JOptionPane.YES_NO_OPTION); if (option != JOptionPane.CLOSED_OPTION && option != 3) { final int factor = (int) (32 * Math.pow(2, option)); for (final Geoset geo : mdl.getGeosets()) { @@ -824,7 +831,7 @@ public EditableModel createMDL() { } if (loadbar.isVisible()) { loadbar.setPercent(0.0f); - loadbar.setText("Scanning for convertable textures..."); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_scan_textures")); } boolean hasPNGs = false; int index = 0; @@ -840,15 +847,15 @@ public EditableModel createMDL() { } if (loadbar.isVisible()) { loadbar.setPercent(index / (float) mdl.getMaterials().size()); - loadbar.setText("Scanning for convertable textures..."); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_scan_textures")); index++; } } boolean userWantsSwapToBLP = false; if (hasPNGs) { final int result = JOptionPane.showConfirmDialog(null, - "This OBJ model contains references to non-BLP files in its materials. Automatically create corresponding BLP files?\n\nIf you choose YES, the MDL format of this OBJ will also be generated to support Matrix Eater 3D viewing.", - "Convert Textures to BLPs", JOptionPane.YES_NO_OPTION); + LocalizationManager.getInstance().get("matrixeater.dialog.materialtosubgroup_generated"), + LocalizationManager.getInstance().get("matrixeater.dialog.materialtosubgroup_convert_textures"), JOptionPane.YES_NO_OPTION); userWantsSwapToBLP = result == JOptionPane.YES_OPTION; } final File objFile = new File(objFilename); @@ -860,7 +867,7 @@ public EditableModel createMDL() { } if (loadbar.isVisible()) { loadbar.setPercent(0.0f); - loadbar.setText("Converting textures..."); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_converting_textures")); index = 0; } for (final com.hiveworkshop.wc3.mdl.Material material : mdl.getMaterials()) { @@ -887,7 +894,7 @@ public EditableModel createMDL() { imageData = TargaReader.getImage(imageFilePNG.getPath()); } if (imageData == null) { - throw new RuntimeException("Java/MatrixEater failed to read image data: " + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.materialtosubgroup_readimage") + imageFilePNG.getAbsolutePath()); } final File imageFileBLP = new File( @@ -898,7 +905,7 @@ public EditableModel createMDL() { // BlpFile.writePalettedBLP(imageData, // imageFileBLP, true, true, false); } catch (final Exception e) { - ExceptionPopup.display("Unable to convert PNG to BLP: " + imageFilePNG.toString(), e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.materialtosubgroup_unable_convert_png") + ": " + imageFilePNG.toString(), e); } } name = name.substring(0, name.lastIndexOf('.')) + ".blp"; @@ -906,7 +913,7 @@ public EditableModel createMDL() { } if (loadbar.isVisible()) { loadbar.setPercent(index / (float) nLayers); - loadbar.setText("Converting textures.."); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_converting_textures")); index++; } } @@ -914,7 +921,7 @@ public EditableModel createMDL() { if (userWantsSwapToBLP) { if (loadbar.isVisible()) { loadbar.setPercent(0); - loadbar.setText("Saving file..."); + loadbar.setText(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_saving_file")); } mdl.saveFile(false); } @@ -929,7 +936,7 @@ public EditableModel createMDL() { private void convertMesh(final EditableModel mdl, final Set processedFaces, final String groupName, final Map materialToSubgroup, final ArrayList faceList) { if (loadbar.isVisible()) { - loadbar.setText("Converting " + groupName + " ..."); + loadbar.setText(String.format(LocalizationManager.getInstance().get("matrixeater.settext.materialtosubgroup_converting"), groupName)); } FaceIteration: for (final Face face : faceList) { if (processedFaces.contains(face)) { @@ -1024,13 +1031,9 @@ public int compare(final VertexKey a, final VertexKey b) { for (final Layer layer : layers) { layer.getShaderTextures().get(ShaderTextureTypeHD.Diffuse).setWrapHeight(true); layer.getShaderTextures().get(ShaderTextureTypeHD.Diffuse).setWrapWidth(true); - // JOptionPane.showMessageDialog(null, "One or more meshes - // were imported with texture coordinates stretching outside - // the texture.\n\nThese will not render correctly in the - // Matrix Eater viewport, but their\ncorresponding textures - // will be flagged to WrapWidth and WrapHeight and - // render\ncorrectly in the Warcraft III game and Magos's - // viewer."); + // JOptionPane.showMessageDialog(null, + // LocalizationManager.getInstance().get("matrixeater.dialog.materialtosubgroup_mdlmaterial") + // ); } } geo.setMaterial(mdlMaterial); @@ -1100,7 +1103,7 @@ private com.hiveworkshop.wc3.mdl.Material convertMaterial(final Geoset geo, fina break; // 9. Transparency: Glass on, Reflection: Ray trace off case 10: - ExceptionPopup.display("Casting shadows not supported in WC3", new Exception("Not supported")); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.exception.materialtosubgroup_shadows_1"), new Exception(LocalizationManager.getInstance().get("matrixeater.exception.materialtosubgroup_shadows_2"))); break; // 10. Casts shadows onto invisible surfaces } diff --git a/matrixeater/src/com/owens/oobjloader/builder/BuildWLists.java b/matrixeater/src/com/owens/oobjloader/builder/BuildWLists.java index 0ea30423e..9b6ceed58 100644 --- a/matrixeater/src/com/owens/oobjloader/builder/BuildWLists.java +++ b/matrixeater/src/com/owens/oobjloader/builder/BuildWLists.java @@ -16,6 +16,8 @@ import javax.imageio.ImageIO; import javax.swing.JOptionPane; +import hiveworkshop.localizationmanager.LocalizationManager; + import com.hiveworkshop.wc3.gui.ExceptionPopup; import com.hiveworkshop.wc3.gui.modeledit.TargaReader; import com.hiveworkshop.wc3.mdl.Animation; @@ -772,13 +774,19 @@ public EditableModel createMDL() { } } if (allLessThan2) { - final String[] options = { "x32", "x64", "x128", "No" }; + final String[] options = { + "x32", + "x64", + "x128", + LocalizationManager.getInstance().get("matrixeater.string.buildwlists_option_no") + }; final int option = JOptionPane.showOptionDialog(null, - "This model might be a WoW model, or peculiarly small. Would you like to increase its size?", - "WoW Scaling", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); - // final int result = JOptionPane.showConfirmDialog(null, "This - // model might be a WoW model, or peculiarly small. Would you like - // to increase its size?","WoW Scaling",JOptionPane.YES_NO_OPTION); + LocalizationManager.getInstance().get("matrixeater.dialog.buildwlists_increase_1"), + LocalizationManager.getInstance().get("matrixeater.dialog.buildwlists_increase_2"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); + // final int result = JOptionPane.showConfirmDialog(null, + // LocalizationManager.getInstance().get("matrixeater.dialog.buildwlists_increase_1"), + // LocalizationManager.getInstance().get("matrixeater.dialog.buildwlists_increase_2"), + // JOptionPane.YES_NO_OPTION); if (option != JOptionPane.CLOSED_OPTION && option != 3) { final int factor = (int) (32 * Math.pow(2, option)); for (final Geoset geo : mdl.getGeosets()) { @@ -808,8 +816,8 @@ public EditableModel createMDL() { boolean userWantsSwapToBLP = false; if (hasPNGs) { final int result = JOptionPane.showConfirmDialog(null, - "This OBJ model contains references to non-BLP files in its materials. Automatically create corresponding BLP files?\n\nIf you choose YES, the MDL format of this OBJ will also be generated to support Matrix Eater 3D viewing.", - "Convert Textures to BLPs", JOptionPane.YES_NO_OPTION); + LocalizationManager.getInstance().get("matrixeater.settext.userwantsswaptoblp_1"), + LocalizationManager.getInstance().get("matrixeater.settext.userwantsswaptoblp_2"), JOptionPane.YES_NO_OPTION); userWantsSwapToBLP = result == JOptionPane.YES_OPTION; } final File objFile = new File(objFilename); @@ -843,7 +851,7 @@ public EditableModel createMDL() { imageData = TargaReader.getImage(imageFilePNG.getPath()); } if (imageData == null) { - throw new RuntimeException("Java/MatrixEater failed to read image data: " + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.imagefilepng") + imageFilePNG.getAbsolutePath()); } final File imageFileBLP = new File( @@ -854,7 +862,7 @@ public EditableModel createMDL() { // BlpFile.writePalettedBLP(imageData, imageFileBLP, // true, true, false); } catch (final Exception e) { - ExceptionPopup.display("Unable to convert PNG to BLP.", e); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.display.imagefilepng"), e); } } name = name.replace(".png", ".blp").replace(".PNG", ".BLP"); @@ -951,13 +959,8 @@ private void convertMesh(final EditableModel mdl, final Set processedFaces for (final Layer layer : layers) { layer.getShaderTextures().get(ShaderTextureTypeHD.Diffuse).setWrapHeight(true); layer.getShaderTextures().get(ShaderTextureTypeHD.Diffuse).setWrapWidth(true); - // JOptionPane.showMessageDialog(null, "One or more meshes - // were imported with texture coordinates stretching outside - // the texture.\n\nThese will not render correctly in the - // Matrix Eater viewport, but their\ncorresponding textures - // will be flagged to WrapWidth and WrapHeight and - // render\ncorrectly in the Warcraft III game and Magos's - // viewer."); + // JOptionPane.showMessageDialog(null, + // LocalizationManager.getInstance().get("matrixeater.dialog.noteformatrixeateraboutwrap")); } } geo.setMaterial(mdlMaterial); @@ -1027,7 +1030,7 @@ private com.hiveworkshop.wc3.mdl.Material convertMaterial(final Geoset geo, fina break; // 9. Transparency: Glass on, Reflection: Ray trace off case 10: - ExceptionPopup.display("Casting shadows not supported in WC3", new Exception("Not supported")); + ExceptionPopup.display(LocalizationManager.getInstance().get("matrixeater.exception.convertmaterial_1"), new Exception(LocalizationManager.getInstance().get("matrixeater.exception.convertmaterial_2"))); break; // 10. Casts shadows onto invisible surfaces } diff --git a/matrixeater/src/com/owens/oobjloader/builder/TrollyLoadbar.java b/matrixeater/src/com/owens/oobjloader/builder/TrollyLoadbar.java index b4fff6929..e30fbd061 100644 --- a/matrixeater/src/com/owens/oobjloader/builder/TrollyLoadbar.java +++ b/matrixeater/src/com/owens/oobjloader/builder/TrollyLoadbar.java @@ -7,6 +7,8 @@ import javax.swing.JPanel; import javax.swing.JProgressBar; +import hiveworkshop.localizationmanager.LocalizationManager; + /** * This is not thread safe and not very well programmed... It's 5 am. * @@ -19,10 +21,10 @@ public class TrollyLoadbar { private final JLabel text; private final JProgressBar bar; public TrollyLoadbar() { - frame = new JFrame("Loading..."); + frame = new JFrame(LocalizationManager.getInstance().get("matrixeater.frame.trollyloadbar")); frame.setUndecorated(true); panel = new JPanel(); - text = new JLabel("Loading..."); + text = new JLabel(LocalizationManager.getInstance().get("matrixeater.label.trollyloadbar")); bar = new JProgressBar(0, 100); bar.setPreferredSize(new Dimension(270,20)); panel.add(text); diff --git a/matrixeater/src/com/owens/oobjloader/lwjgl/DisplayTest.java b/matrixeater/src/com/owens/oobjloader/lwjgl/DisplayTest.java index 7d3c27448..36e4520ec 100644 --- a/matrixeater/src/com/owens/oobjloader/lwjgl/DisplayTest.java +++ b/matrixeater/src/com/owens/oobjloader/lwjgl/DisplayTest.java @@ -33,13 +33,14 @@ import com.owens.oobjloader.builder.FaceVertex; import com.owens.oobjloader.builder.Material; import com.owens.oobjloader.parser.Parse; +import hiveworkshop.localizationmanager.LocalizationManager; // Based on tutorial code from http://lwjgl.org/wiki/doku.php/lwjgl/tutorials/opengl/basicopengl public class DisplayTest { private static Logger log = Logger.getLogger(DisplayTest.class.getName()); - public static final String WINDOW_TITLE = "Test OBJ loader"; + public static final String WINDOW_TITLE = LocalizationManager.getInstance().get("matrixeater.string.displaytest_title"); /** * Desired frame time */ @@ -76,7 +77,7 @@ public static void main(String[] args) { run(filename, defaultTextureMaterial); } catch (Exception e) { e.printStackTrace(System.err); - Sys.alert(WINDOW_TITLE, "An error occured and the program will exit."); + Sys.alert(WINDOW_TITLE, LocalizationManager.getInstance().get("matrixeater.alert.displaytest_exit")); } finally { cleanup(); } diff --git a/matrixeater/src/com/owens/oobjloader/lwjgl/VBOFactory.java b/matrixeater/src/com/owens/oobjloader/lwjgl/VBOFactory.java index 33470dee0..73460c769 100644 --- a/matrixeater/src/com/owens/oobjloader/lwjgl/VBOFactory.java +++ b/matrixeater/src/com/owens/oobjloader/lwjgl/VBOFactory.java @@ -13,6 +13,7 @@ import org.lwjgl.opengl.ARBVertexBufferObject; import com.owens.oobjloader.builder.Face; +import hiveworkshop.localizationmanager.LocalizationManager; // This code was written by myself, Sean R. Owens, sean at guild dot net, // and is released to the public domain. Share and enjoy. Since some @@ -34,7 +35,7 @@ public static VBO build(int textureID, ArrayList triangles) { // log.log(INFO, "building a vbo!"); if (triangles.size() <= 0) { - throw new RuntimeException("Can not build a VBO if we have no triangles with which to build it."); + throw new RuntimeException(LocalizationManager.getInstance().get("matrixeater.exception.vbofactory")); } // Now sort out the triangle/vertex indices, so we can use a diff --git a/matrixeater/src/ysera/YseraFrame.java b/matrixeater/src/ysera/YseraFrame.java index 762174609..085e56665 100644 --- a/matrixeater/src/ysera/YseraFrame.java +++ b/matrixeater/src/ysera/YseraFrame.java @@ -6,13 +6,14 @@ import com.badlogic.gdx.backends.lwjgl.LwjglNativesLoader; import com.hiveworkshop.wc3.gui.BLPHandler; +import hiveworkshop.localizationmanager.LocalizationManager; public class YseraFrame extends JFrame { public YseraFrame() { // super("The Great and Powerful Warcraft 3 Model Editor Written in Java and // Chosen By Retera to Have the // Greatest of All Names Given to a Model Editor of All Time"); - super("Ysera War3 Model Editor Pre-Alpha .01"); + super(LocalizationManager.getInstance().get("ysera.app.title")); setDefaultCloseOperation(EXIT_ON_CLOSE); final YseraPanel contentPane = new YseraPanel(); setContentPane(contentPane); diff --git a/matrixeater/src/ysera/YseraPanel.java b/matrixeater/src/ysera/YseraPanel.java index e6f75b0db..cfca3badb 100644 --- a/matrixeater/src/ysera/YseraPanel.java +++ b/matrixeater/src/ysera/YseraPanel.java @@ -8,6 +8,8 @@ import javax.swing.JMenuBar; import javax.swing.JPanel; +import hiveworkshop.localizationmanager.LocalizationManager; + import org.lwjgl.LWJGLException; import org.lwjgl.util.vector.Quaternion; @@ -49,15 +51,15 @@ public YseraPanel() { public JMenuBar createJMenuBar() { final JMenuBar jMenuBar = new JMenuBar(); - final JMenu fileMenu = new JMenu("File"); + final JMenu fileMenu = new JMenu(LocalizationManager.getInstance().get("ysera.menu.file")); jMenuBar.add(fileMenu); - jMenuBar.add(new JMenu("Recent Files")); - jMenuBar.add(new JMenu("Edit")); - jMenuBar.add(new JMenu("View")); - jMenuBar.add(new JMenu("Team Color")); - jMenuBar.add(new JMenu("Windows")); - jMenuBar.add(new JMenu("Extras")); - jMenuBar.add(new JMenu("Help")); + jMenuBar.add(new JMenu(LocalizationManager.getInstance().get("ysera.menu.recent_files"))); + jMenuBar.add(new JMenu(LocalizationManager.getInstance().get("ysera.menu.edit"))); + jMenuBar.add(new JMenu(LocalizationManager.getInstance().get("ysera.menu.view"))); + jMenuBar.add(new JMenu(LocalizationManager.getInstance().get("ysera.menu.team_color"))); + jMenuBar.add(new JMenu(LocalizationManager.getInstance().get("ysera.menu.windows"))); + jMenuBar.add(new JMenu(LocalizationManager.getInstance().get("ysera.menu.extras"))); + jMenuBar.add(new JMenu(LocalizationManager.getInstance().get("ysera.menu.help"))); return jMenuBar; } diff --git a/settings.gradle b/settings.gradle index 143457efb..962868552 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include 'craft3data', 'craft3editor', 'matrixeater' \ No newline at end of file +include 'localizationmanager', 'craft3data', 'craft3editor', 'matrixeater' \ No newline at end of file