-
+
diff --git a/js/texturing/uv.js b/js/texturing/uv.js
index 283cd5c9a..1c4467a5c 100644
--- a/js/texturing/uv.js
+++ b/js/texturing/uv.js
@@ -7,6 +7,12 @@ const UVEditor = {
panel: null,
sliders: {},
selected_element_faces: {},
+ previous_animation_frame: 1,
+ overlay_canvas: (() => {
+ let canvas = document.createElement('canvas');
+ canvas.classList.add('overlay_canvas');
+ return canvas;
+ })(),
get vue() {
return this.panel.inside_vue;
@@ -60,6 +66,14 @@ const UVEditor = {
if (tex) {
if (tex.frameCount) result.y += (tex.height / tex.frameCount) * tex.currentFrame;
if (!tex.frameCount && tex.ratio != tex.getUVWidth() / tex.getUVHeight()) result.y /= tex.ratio;
+ if (BarItems.image_tiled_view.value == true) {
+ if (Painter.image_tiled_view_options.mirrored) {
+ if (result.x < 0 || result.x >= tex.width) result.x = tex.width - result.x - 1;
+ if (result.y < 0 || result.y >= tex.display_height) result.y = tex.display_height - result.y - 1;
+ }
+ result.x = (tex.width + result.x) % tex.width;
+ result.y = (tex.display_height + result.y) % tex.display_height;
+ }
}
return result;
},
@@ -248,6 +262,79 @@ const UVEditor = {
scrollTop: focus[1] + margin[1] - UVEditor.height / 2,
}, 100)
},
+
+ updateOverlayCanvas() {
+ if (!UVEditor.texture) return;
+ let canvas = UVEditor.overlay_canvas;
+ let texture = UVEditor.texture;
+ let ctx = canvas.getContext('2d');
+ canvas.width = texture.width;
+
+ if (BarItems.image_tiled_view.value == true) {
+ canvas.setAttribute('overlay_mode', 'tiled');
+ canvas.width = texture.width * 3;
+ canvas.height = texture.display_height * 3;
+ if (Painter.image_tiled_view_options.mirrored) {
+ // X
+ ctx.scale(-1, 1);
+ ctx.drawImage(texture.canvas, -1 * texture.width, 1 * texture.display_height);
+ ctx.drawImage(texture.canvas, -3 * texture.width, 1 * texture.display_height);
+ // Y
+ ctx.scale(-1, -1);
+ ctx.drawImage(texture.canvas, 1 * texture.width, -1 * texture.display_height);
+ ctx.drawImage(texture.canvas, 1 * texture.width, -3 * texture.display_height);
+ // XY
+ ctx.scale(-1, 1);
+ ctx.drawImage(texture.canvas, -1 * texture.width, -1 * texture.display_height);
+ ctx.drawImage(texture.canvas, -1 * texture.width, -3 * texture.display_height);
+ ctx.drawImage(texture.canvas, -3 * texture.width, -1 * texture.display_height);
+ ctx.drawImage(texture.canvas, -3 * texture.width, -3 * texture.display_height);
+ ctx.scale(-1, -1);
+
+ } else {
+ for (let x = 0; x < 3; x++) {
+ for (let y = 0; y < 3; y++) {
+ ctx.drawImage(texture.canvas, x * texture.width, y * texture.display_height);
+ }
+ }
+ }
+ } else if (BarItems.image_onion_skin_view.value == true && texture.frameCount > 2) {
+ canvas.setAttribute('overlay_mode', 'onion_skin');
+ let frames = [];
+ switch (Painter.image_onion_skin_view_options.frame) {
+ case 'last_viewed': frames = [UVEditor.previous_animation_frame]; break;
+ case 'previous': frames = [texture.currentFrame-1]; break;
+ case 'next': frames = [texture.currentFrame+1]; break;
+ case 'both': frames = [texture.currentFrame-1, texture.currentFrame+1]; break;
+ }
+ frames = frames.map(f => (f+texture.frameCount) % texture.frameCount).filter(f => f != texture.currentFrame);
+
+ if (Painter.image_onion_skin_view_options.display == 'transparent') {
+ canvas.width = texture.width;
+ canvas.height = texture.display_height;
+ ctx.filter = `opacity(${45}%)`;
+ for (let frame_offset of frames) {
+ ctx.drawImage(texture.canvas, 0, frame_offset * -texture.display_height);
+ }
+ } else {
+ canvas.width = texture.width * 4;
+ canvas.height = texture.display_height * 4;
+ ctx.filter = "";
+ for (let frame_offset of frames) {
+ let image_data = texture.canvas.getContext('2d').getImageData(0, frame_offset * texture.display_height, texture.width, texture.display_height);
+ for (let i = 0; i < image_data.data.length; i += 4) {
+ if (image_data.data[i+3] < 2) continue;
+ ctx.fillStyle = `rgba(${image_data.data[i]}, ${image_data.data[i+1]}, ${image_data.data[i+2]}, ${image_data.data[i+3] / 460})`;
+ let x = (i / 4) % texture.width;
+ let y = Math.floor((i / 4) / texture.width);
+ ctx.fillRect(x * 4 + 1, y * 4 + 1, 2, 2);
+ }
+ }
+ }
+ }
+ let is_above = BarItems.image_onion_skin_view.value && Painter.image_onion_skin_view_options.above;
+ canvas.classList.toggle('above', !!is_above);
+ },
//Get
get width() {
return this.vue.width;
@@ -294,9 +381,9 @@ const UVEditor = {
: UVEditor.getUVWidth()
);
},
- getFaces(element, event) {
+ getFaces(element, event, action) {
let available = Object.keys(element.faces)
- if (event && event.shiftKey) {
+ if (event && (action ? action.keybind.additionalModifierTriggered(event, 'all_faces') : event.shiftKey)) {
return available;
} else {
return UVEditor.getSelectedFaces(element).filter(key => available.includes(key));
@@ -515,8 +602,10 @@ const UVEditor = {
let face = UVEditor.getReferenceFace();
if (face instanceof CubeFace) {
BarItems.uv_rotation.set((face && face.rotation)||0);
- if (Format.java_face_properties) {
+ if (Format.cullfaces) {
BarItems.cullface.set(face.cullface||'off')
+ }
+ if (Format.java_face_properties) {
BarItems.face_tint.setIcon(face.tint !== -1 ? 'check_box' : 'check_box_outline_blank')
BarItems.slider_face_tint.update()
}
@@ -724,7 +813,7 @@ const UVEditor = {
maximize(event) {
var scope = this;
this.forCubes(obj => {
- scope.getFaces(obj, event).forEach(function(side) {
+ scope.getFaces(obj, event, BarItems.uv_maximize).forEach(function(side) {
obj.faces[side].uv = [0, 0, scope.getResolution(0, obj.faces[side]), scope.getResolution(1, obj.faces[side])]
})
obj.autouv = 0;
@@ -736,7 +825,7 @@ const UVEditor = {
turnMapping(event) {
var scope = this;
this.forCubes(obj => {
- scope.getFaces(obj, event).forEach(function(side) {
+ scope.getFaces(obj, event, BarItems.uv_turn_mapping).forEach(function(side) {
var uv = obj.faces[side].uv_size;
obj.faces[side].uv_size = [uv[1], uv[0]];
if (uv[0] < 0) {
@@ -773,7 +862,7 @@ const UVEditor = {
this.getMappableElements().forEach(obj => {
let height, width;
- let faces = face_keys || this.getFaces(obj, event);
+ let faces = face_keys || this.getFaces(obj, event, BarItems.uv_auto);
if (obj instanceof Cube) {
faces.forEach(function(side) {
let face = obj.faces[side];
@@ -913,7 +1002,7 @@ const UVEditor = {
setRelativeAutoSize(event) {
var scope = this;
this.forCubes(obj => {
- scope.getFaces(obj, event).forEach(function(side) {
+ scope.getFaces(obj, event, BarItems.uv_rel_auto).forEach(function(side) {
var uv = obj.faces[side].uv,
ru = scope.getResolution(0, obj.faces[side]),
rv = scope.getResolution(1, obj.faces[side]);
@@ -982,7 +1071,7 @@ const UVEditor = {
var scope = this;
this.forElements(obj => {
if (obj instanceof Cube) {
- scope.getFaces(obj, event).forEach((side) => {
+ scope.getFaces(obj, event, BarItems.uv_mirror_x).forEach((side) => {
var proxy = obj.faces[side].uv[0]
obj.faces[side].uv[0] = obj.faces[side].uv[2]
obj.faces[side].uv[2] = proxy
@@ -990,7 +1079,7 @@ const UVEditor = {
} else if (obj instanceof Mesh) {
let min = Infinity;
let max = -Infinity;
- scope.getFaces(obj, event).forEach((side) => {
+ scope.getFaces(obj, event, BarItems.uv_mirror_x).forEach((side) => {
obj.faces[side].vertices.forEach(vkey => {
min = Math.min(min, obj.faces[side].uv[vkey][0]);
max = Math.max(max, obj.faces[side].uv[vkey][0]);
@@ -998,7 +1087,7 @@ const UVEditor = {
})
let center = Math.lerp(min, max, 0.5);
- scope.getFaces(obj, event).forEach((side) => {
+ scope.getFaces(obj, event, BarItems.uv_mirror_x).forEach((side) => {
obj.faces[side].vertices.forEach(vkey => {
obj.faces[side].uv[vkey][0] = center*2 - obj.faces[side].uv[vkey][0];
})
@@ -1014,7 +1103,7 @@ const UVEditor = {
var scope = this;
this.forElements(obj => {
if (obj instanceof Cube) {
- scope.getFaces(obj, event).forEach((side) => {
+ scope.getFaces(obj, event, BarItems.uv_mirror_y).forEach((side) => {
var proxy = obj.faces[side].uv[1]
obj.faces[side].uv[1] = obj.faces[side].uv[3]
obj.faces[side].uv[3] = proxy
@@ -1022,7 +1111,7 @@ const UVEditor = {
} else if (obj instanceof Mesh) {
let min = Infinity;
let max = -Infinity;
- scope.getFaces(obj, event).forEach((side) => {
+ scope.getFaces(obj, event, BarItems.uv_mirror_y).forEach((side) => {
obj.faces[side].vertices.forEach(vkey => {
min = Math.min(min, obj.faces[side].uv[vkey][1]);
max = Math.max(max, obj.faces[side].uv[vkey][1]);
@@ -1030,7 +1119,7 @@ const UVEditor = {
})
let center = Math.lerp(min, max, 0.5);
- scope.getFaces(obj, event).forEach((side) => {
+ scope.getFaces(obj, event, BarItems.uv_mirror_y).forEach((side) => {
obj.faces[side].vertices.forEach(vkey => {
obj.faces[side].uv[vkey][1] = center*2 - obj.faces[side].uv[vkey][1];
})
@@ -1058,7 +1147,7 @@ const UVEditor = {
var scope = this;
Undo.initEdit({elements: Cube.selected, uv_only: true})
this.forCubes(obj => {
- scope.getFaces(obj, event).forEach(function(side) {
+ scope.getFaces(obj, event, BarItems.uv_transparent).forEach(function(side) {
obj.faces[side].uv = [0, 0, 0, 0]
obj.faces[side].texture = null;
})
@@ -1165,7 +1254,7 @@ const UVEditor = {
autoCullface(event) {
var scope = this;
this.forCubes(obj => {
- scope.getFaces(obj, event).forEach(function(side) {
+ scope.getFaces(obj, event, BarItems.auto_cullface).forEach(function(side) {
obj.faces[side].cullface = side
})
})
@@ -1175,6 +1264,7 @@ const UVEditor = {
copy(event) {
let elements = this.getMappableElements();
if (!elements.length) return;
+ let multiple = BarItems.copy.keybind.additionalModifierTriggered(event) == 'multiple';
UVEditor.clipboard = []
@@ -1203,7 +1293,7 @@ const UVEditor = {
}
UVEditor.clipboard.push(new_face);
}
- if (event.shiftKey) {
+ if (multiple) {
for (let key in elements[0].faces) {
addToClipboard(key)
}
@@ -1218,6 +1308,7 @@ const UVEditor = {
let elements = UVEditor.getMappableElements();
if (UVEditor.clipboard === null || elements.length === 0) return;
+ let multiple = BarItems.paste.keybind.additionalModifierTriggered(event) == 'multiple';
Undo.initEdit({elements, uv_only: true})
@@ -1246,15 +1337,14 @@ const UVEditor = {
}
}
- let shifting = (event && event.shiftKey) || Pressing.overrides.shift;
- if (shifting || UVEditor.clipboard.length === 1) {
+ if (multiple || UVEditor.clipboard.length === 1) {
let tag = UVEditor.clipboard[0];
elements.forEach(el => {
if (el instanceof Cube && el.box_uv) return;
if ((el instanceof Cube && tag instanceof CubeFace) || (el instanceof Mesh && tag instanceof MeshFace)) {
let selected_faces = UVEditor.getSelectedFaces(el);
for (let key in el.faces) {
- if (shifting || selected_faces.includes(key)) {
+ if (multiple || selected_faces.includes(key)) {
mergeFace(el, key, tag);
}
}
@@ -1287,7 +1377,7 @@ const UVEditor = {
reset(event) {
var scope = this;
this.forCubes(obj => {
- scope.getFaces(obj, event).forEach(function(side) {
+ scope.getFaces(obj, event, BarItems.uv_reset).forEach(function(side) {
obj.faces[side].reset()
})
obj.preview_controller.updateFaces(obj);
@@ -1407,7 +1497,7 @@ const UVEditor = {
},
new MenuSeparator('face_options'),
'face_tint',
- {icon: 'flip_to_back', condition: () => (Format.java_face_properties && Cube.selected.length && UVEditor.getReferenceFace()), name: 'action.cullface' , children: function() {
+ {icon: 'flip_to_back', condition: () => (Format.cullfaces && Cube.selected.length && UVEditor.getReferenceFace()), name: 'action.cullface' , children: function() {
let off = 'far.fa-circle';
let on = 'far.fa-dot-circle';
function setCullface(cullface) {
@@ -1467,6 +1557,7 @@ const UVEditor = {
arr.push({
name: t.name,
icon: (t.mode === 'link' ? t.img : t.source),
+ marked: t == UVEditor.texture,
click() {
UVEditor.applyTexture(t);
}
@@ -1562,6 +1653,12 @@ BARS.defineActions(function() {
icon: 'zoom_out_map',
category: 'uv',
condition: () => UVEditor.isFaceUV() && Cube.selected.length,
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: Cube.selected, uv_only: true})
UVEditor.forSelection('maximize', event)
@@ -1572,6 +1669,12 @@ BARS.defineActions(function() {
icon: 'screen_rotation',
category: 'uv',
condition: () => UVEditor.isFaceUV() && Cube.selected.length,
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: Cube.selected, uv_only: true})
UVEditor.forSelection('turnMapping', event)
@@ -1582,6 +1685,12 @@ BARS.defineActions(function() {
icon: 'brightness_auto',
category: 'uv',
condition: () => (UVEditor.isFaceUV() && Cube.selected.length) || Mesh.selected.length,
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: UVEditor.getMappableElements(), uv_only: true})
UVEditor.forSelection('setAutoSize', event)
@@ -1656,6 +1765,12 @@ BARS.defineActions(function() {
icon: 'brightness_auto',
category: 'uv',
condition: () => UVEditor.isFaceUV() && Cube.selected.length,
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: Cube.selected, uv_only: true})
UVEditor.forSelection('setRelativeAutoSize', event)
@@ -1666,6 +1781,12 @@ BARS.defineActions(function() {
icon: 'icon-mirror_x',
category: 'uv',
condition: () => UVEditor.isFaceUV() && UVEditor.hasElements(),
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: UVEditor.getMappableElements(), uv_only: true})
UVEditor.forSelection('mirrorX', event)
@@ -1676,6 +1797,12 @@ BARS.defineActions(function() {
icon: 'icon-mirror_y',
category: 'uv',
condition: () => UVEditor.isFaceUV() && UVEditor.hasElements(),
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: UVEditor.getMappableElements(), uv_only: true})
UVEditor.forSelection('mirrorY', event)
@@ -1686,6 +1813,12 @@ BARS.defineActions(function() {
icon: 'rotate_left',
category: 'uv',
condition: () => Mesh.selected.length,
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: Mesh.selected, uv_only: true})
UVEditor.rotate(-90);
@@ -1696,6 +1829,12 @@ BARS.defineActions(function() {
icon: 'rotate_right',
category: 'uv',
condition: () => Mesh.selected.length,
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: Mesh.selected, uv_only: true})
UVEditor.rotate(90);
@@ -1706,6 +1845,12 @@ BARS.defineActions(function() {
icon: 'clear',
category: 'uv',
condition: () => UVEditor.isFaceUV() && Cube.selected.length,
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
UVEditor.forSelection('clear', event)
}
@@ -1714,6 +1859,12 @@ BARS.defineActions(function() {
icon: 'replay',
category: 'uv',
condition: () => UVEditor.isFaceUV() && Cube.selected.length,
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: Cube.selected, uv_only: true})
UVEditor.forSelection('reset', event)
@@ -1732,7 +1883,7 @@ BARS.defineActions(function() {
})
new BarSelect('cullface', {
category: 'uv',
- condition: () => UVEditor.isFaceUV() && Format.java_face_properties && Cube.selected.length && UVEditor.getReferenceFace(),
+ condition: () => UVEditor.isFaceUV() && Format.cullfaces && Cube.selected.length && UVEditor.getReferenceFace(),
label: true,
options: {
off: tl('uv_editor.no_faces'),
@@ -1752,7 +1903,13 @@ BARS.defineActions(function() {
new Action('auto_cullface', {
icon: 'block',
category: 'uv',
- condition: () => UVEditor.isFaceUV() && Format.java_face_properties && Cube.selected.length && UVEditor.getReferenceFace(),
+ condition: () => UVEditor.isFaceUV() && Format.cullfaces && Cube.selected.length && UVEditor.getReferenceFace(),
+ keybind: new Keybind({}, {
+ all_faces: 'shift'
+ }),
+ variations: {
+ all_faces: {name: 'action.uv_maximize.all_faces'}
+ },
click: function (event) {
Undo.initEdit({elements: Cube.selected, uv_only: true})
UVEditor.forSelection('autoCullface', event)
@@ -2055,6 +2212,8 @@ Interface.definePanels(function() {
float_size: [500, 600],
height: 500
},
+ min_height: 200,
+ resizable: true,
toolbars: [
new Toolbar('uv_editor', {
children: [
@@ -2104,6 +2263,7 @@ Interface.definePanels(function() {
copy_brush_source: null,
helper_lines: {x: -1, y: -1},
brush_type: BarItems.brush_shape.value,
+ overlay_canvas_mode: null,
selection_rect: {
pos_x: 0,
pos_y: 0,
@@ -2247,8 +2407,8 @@ Interface.definePanels(function() {
if (panel) this.height -= panel.height;
}
- } else if (Panels.uv.slot.includes('_bar')) {
- this.height = size * Math.clamp(this.uv_resolution[1] / this.uv_resolution[0], 0.5, 1);
+ } else if (Panels.uv.slot.includes('_bar') && !UVEditor.panel.fixed_height) {
+ this.height = size;
} else {
this.height = Math.clamp(
@@ -2269,8 +2429,10 @@ Interface.definePanels(function() {
UVEditor.updateSelectionOutline(false);
},
centerView() {
- this.$refs.viewport.scrollLeft = this.width/2;
- this.$refs.viewport.scrollTop = this.height/2;
+ if (this.$refs.viewport) {
+ this.$refs.viewport.scrollLeft = this.width/2;
+ this.$refs.viewport.scrollTop = this.height/2;
+ }
this.centered_view = true;
},
setMode(mode) {
@@ -2315,12 +2477,19 @@ Interface.definePanels(function() {
this.texture.canvas.style.objectFit = this.texture.frameCount > 1 ? 'cover' : 'fill';
this.texture.canvas.style.imageRendering = this.texture.width < this.inner_width ? 'inherit' : 'auto';
+ UVEditor.updateOverlayCanvas();
+
Vue.nextTick(() => {
let wrapper = this.$refs.texture_canvas_wrapper;
- if (!wrapper || wrapper.firstChild == this.texture.canvas) return;
- if (wrapper.firstChild) {
+ let overlay_canvas_mode = this.overlay_canvas_mode;
+ if (this.mode != 'paint') overlay_canvas_mode = null;
+ if (!wrapper || (wrapper.firstChild == this.texture.canvas && !overlay_canvas_mode)) return;
+ while (wrapper.firstChild) {
wrapper.firstChild.remove();
}
+ if (UVEditor.overlay_canvas && overlay_canvas_mode) {
+ wrapper.append(UVEditor.overlay_canvas);
+ }
wrapper.append(this.texture.canvas);
})
},
@@ -2604,6 +2773,7 @@ Interface.definePanels(function() {
return {
name: tex.name,
icon: tex.img,
+ marked: tex == UVEditor.texture,
click(event) {
tex.select(event);
}
@@ -3793,6 +3963,7 @@ Interface.definePanels(function() {
return {
name: tex.name,
icon: tex.img,
+ marked: tex == UVEditor.texture,
click(event) {
UVEditor.applyTexture(tex);
}
@@ -3876,7 +4047,9 @@ Interface.definePanels(function() {
${tl('action.face_tint')}
info
+
+
+
+
@@ -3940,6 +4115,7 @@ Interface.definePanels(function() {
@mouseenter="onMouseEnter($event)"
@mouseleave="onMouseLeave($event)"
class="checkerboard_target"
+ :class="{tiled_mode: overlay_canvas_mode == 'tiled'}"
ref="viewport"
v-if="!hidden && mode !== 'face_properties'"
:style="{width: (width+8) + 'px', height: (height+8) + 'px', overflowX: (zoom > 1) ? 'scroll' : 'hidden', overflowY: (inner_height > height) ? 'scroll' : 'hidden'}"
@@ -3949,7 +4125,7 @@ Interface.definePanels(function() {
v-if="texture !== null"
@click.stop="reverseSelect($event)"
:class="{overlay_mode: uv_overlay && mode == 'paint'}"
- :style="{width: inner_width + 'px', height: inner_height + 'px', margin: getFrameMargin(true)}"
+ :style="{width: inner_width + 'px', height: inner_height + 'px', margin: getFrameMargin(true), '--inner-width': inner_width + 'px', '--inner-height': inner_height + 'px'}"
>
diff --git a/js/undo.js b/js/undo.js
index a8d77fb62..55d36d70b 100644
--- a/js/undo.js
+++ b/js/undo.js
@@ -323,6 +323,34 @@ class UndoSystem {
}
}
+ if (save.texture_groups) {
+ for (let uuid in save.texture_groups) {
+ let group;
+ let data = save.texture_groups[uuid];
+ if (reference.texture_groups[uuid]) {
+ group = TextureGroup.all.find(tg => tg.uuid == uuid);
+ if (group) {
+ group.extend(data);
+ }
+ } else {
+ group = new TextureGroup(data, uuid).add(false);
+ }
+ //order
+ let index = TextureGroup.all.indexOf(group);
+ if (index != -1 && index != data.index && typeof data.index == 'number') {
+ TextureGroup.all.remove(group);
+ TextureGroup.all.splice(data.index, 0, group);
+ }
+ }
+ for (let uuid in reference.texture_groups) {
+ if (!save.texture_groups[uuid]) {
+ let group = TextureGroup.all.find(tg => tg.uuid == uuid);
+ if (group) {
+ TextureGroup.all.remove(group);
+ }
+ }
+ }
+ }
if (save.textures) {
Painter.current = {}
for (var uuid in save.textures) {
@@ -591,6 +619,14 @@ UndoSystem.save = class {
})
}
+ if (aspects.texture_groups) {
+ this.texture_groups = {};
+ aspects.texture_groups.forEach(tg => {
+ let copy = tg.getUndoCopy()
+ this.texture_groups[tg.uuid] = copy;
+ })
+ }
+
if (aspects.layers) {
this.layers = {};
aspects.layers.forEach(layer => {
diff --git a/js/util/array_util.js b/js/util/array_util.js
index 00c170e92..80eb3200d 100644
--- a/js/util/array_util.js
+++ b/js/util/array_util.js
@@ -43,6 +43,10 @@ Array.prototype.purge = function() {
this.splice(0, this.length);
return this;
}
+Array.prototype.set = function(index, value) {
+ this.splice(index, 1, value);
+ return this;
+}
Array.prototype.replace = function(items) {
this.splice(0, this.length, ...items);
return this;
diff --git a/js/util/util.js b/js/util/util.js
index 422906323..566dbe8f2 100644
--- a/js/util/util.js
+++ b/js/util/util.js
@@ -167,9 +167,13 @@ function removeEventListeners(el, events, func, option) {
}
function patchedAtob(base64) {
- return (typeof Buffer == 'function')
- ? Buffer.from(base64, 'base64').toString()
- : atob(base64);
+ if (typeof Buffer == 'function') {
+ return Buffer.from(base64, 'base64').toString();
+ } else {
+ return decodeURIComponent(atob(base64).split('').map((c) => {
+ return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
+ }).join(''));
+ }
}
function highestInObject(obj, inverse) {
@@ -476,6 +480,17 @@ Object.defineProperty(String.prototype, 'hashCode', {
}
});
+// HTML
+function isNodeUnderCursor(node, event) {
+ if (!node) return;
+ let rect = node.getBoundingClientRect();
+ return pointInRectangle([event.clientX, event.clientY], [rect.x, rect.y], [rect.right+1, rect.bottom+1]);
+}
+function findNodeUnderCursor(selector, event) {
+ return document.querySelectorAll(selector).entries().map(([i, node]) => node).find(node => isNodeUnderCursor(node, event));
+}
+
+
//Color
tinycolor.prototype.toInt = function() {
let {r, g, b, a} = this.toRgb();
diff --git a/js/validator.js b/js/validator.js
index d5b7c5516..a44f26a3a 100644
--- a/js/validator.js
+++ b/js/validator.js
@@ -4,7 +4,14 @@ const Validator = {
warnings: [],
errors: [],
_timeout: null,
+ accumulated_triggers: [],
+ wildcard_trigger: false,
validate(trigger) {
+ if (trigger) {
+ this.accumulated_triggers.safePush(trigger);
+ } else {
+ this.wildcard_trigger = true;
+ }
if (this._timeout) {
clearTimeout(this._timeout);
this._timeout = null;
@@ -20,7 +27,7 @@ const Validator = {
try {
if (!Condition(check.condition)) return;
- if (!trigger || check.update_triggers.includes(trigger)) {
+ if (this.wildcard_trigger || check.update_triggers.includes(trigger) || this.accumulated_triggers.find(t => check.update_triggers.includes(t))) {
check.update();
}
Validator.warnings.push(...check.warnings);
@@ -30,6 +37,8 @@ const Validator = {
console.error(error);
}
})
+ this.accumulated_triggers.empty();
+ this.wildcard_trigger = false;
}, 40)
},
openDialog() {
diff --git a/lang/cz.json b/lang/cz.json
index 8afd241f2..3b66ebf1f 100644
--- a/lang/cz.json
+++ b/lang/cz.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Přepne UV zrcadlení vybraných kostek na ose X",
"menu.texture.blank": "Aplikovat na Plochy bez Textury",
"dialog.scale.select_overflow": "Vybrat přebytečné",
- "dialog.create_texture.compress": "Komprimovaná šablona",
"action.action_control": "Ovládání Akce",
"action.action_control.desc": "Pro vyhledání a provedení všech dostupných akcí",
"keybindings.recording": "Nahrávání klávesy",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Mapování kláves načteno",
"dialog.convert_project.current_format": "Tento formát",
"dialog.create_texture.rearrange_uv.desc": "Vytvořit nové UV uspořádání, aby každá plocha měla vlastní místo na textuře",
- "dialog.create_texture.compress.desc": "Uspořádat UV mapy v hustém rozložení pro minimalizaci velikosti textury",
"dialog.create_texture.power.desc": "Uzamknout automatickou velikost textury na mocninu 2, například 64 nebo 128. Některé renderery to můžou vyžadovat",
"dialog.create_texture.double_use.desc": "Pokud již dva prvky mají přiřazen stejný UV prostor, ponechat je tak i v nové mapě",
"dialog.create_texture.padding.desc": "Přidat malou mezeru mezi jednotlivými částmi textury",
@@ -1400,8 +1398,8 @@
"settings.status_bar_modifier_keys.desc": "Display context aware suggested modifier keys in the status bar",
"settings.ground_plane": "Ground Plane",
"settings.ground_plane.desc": "Show a floor plane below the model",
- "settings.preview_paste_behavior": "Default Preview Paste Behavior",
- "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the preview in Edit mode and multiple options are available",
+ "settings.preview_paste_behavior": "Default Viewport Paste Behavior",
+ "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the viewport in Edit mode and multiple options are available",
"settings.preview_paste_behavior.always_ask": "Always Ask",
"action.new_window": "New Window",
"action.new_window.desc": "Opens a new Blockbench window",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Jumping",
"panel.skin_pose.aiming": "Aiming",
"edit.loop_cut.direction": "Direction",
- "message.meshes_and_box_uv": "Meshes are not compatible with Box UV. Go to File > Project... and switch to Per-face UV.",
"data.texture_mesh": "Texture Mesh",
"generic.left": "Left",
"generic.right": "Right",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/de.json b/lang/de.json
index c72cb2c86..2722d5d32 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "UV-Mapping der ausgewählten Quader auf der X-Achse spiegeln.",
"menu.texture.blank": "Auf leere Flächen anwenden",
"dialog.scale.select_overflow": "Überstehendes auswählen",
- "dialog.create_texture.compress": "Template verdichten",
"action.action_control": "Kommandozentrale",
"action.action_control.desc": "Suche und benutze jede verfügbare Aktion",
"keybindings.recording": "Tastenkombination wird aufgezeichnet",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Tastenbelegung wurde geladen",
"dialog.convert_project.current_format": "Aktuelles Format",
"dialog.create_texture.rearrange_uv.desc": "Eine neue UV-Anordnung anlegen, um jeder Fläche ihren eigenen Platz auf der Textur zuzuweisen",
- "dialog.create_texture.compress.desc": "Die UV-Maps dicht aneinander anordnen, um Platz zu sparen",
"dialog.create_texture.power.desc": "Die automatische Größe der generierten Textur auf eine Zweierpotenz begrenzen. Dies wird von einigen Renderingprogrammen vorausgesetzt.",
"dialog.create_texture.double_use.desc": "Wenn zwei Elemente den gleichen Platz auf der Textur verwenden, wird dies in der neuen Anordnung beibehalten",
"dialog.create_texture.padding.desc": "Einen kleinen Zwischenraum zwischen den einzelnen Teilen des Templates lassen",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Springend",
"panel.skin_pose.aiming": "Zielend",
"edit.loop_cut.direction": "Ausrichtung",
- "message.meshes_and_box_uv": "Maschen sind nicht mit Box-UV kompatibel. Gehe zu „Datei“ > „Projekt ...“ und wähle Flächen-UV als UV-Modus.",
"data.texture_mesh": "3D-Textur",
"generic.left": "Links",
"generic.right": "Rechts",
@@ -2137,5 +2134,96 @@
"edit.solidify_mesh_selection.thickness": "Dicke",
"reference_image.sync_to_timeline": "Mit der Zeitleiste synchronisieren",
"reference_image.toggle_playback": "Abspielen/Pausieren",
- "dialog.add_primitive.shape.beveled_cuboid": "Abgeschrägter Quader"
+ "dialog.add_primitive.shape.beveled_cuboid": "Abgeschrägter Quader",
+ "dialog.ignore_all": "Alle ignorieren",
+ "data.texture_group": "Texturengruppe",
+ "data.animation": "Animation",
+ "generic.on": "An",
+ "generic.off": "Aus",
+ "format.free.info.3d_printing": "3D Druck",
+ "message.invalid_file.merge_conflict": "Diese Datei beinhaltet ungelöste Git Merge-Konflikte.",
+ "dialog.expand_texture_selection.radius": "Wert",
+ "dialog.expand_texture_selection.corner": "Form der Ecken",
+ "dialog.expand_texture_selection.corner.round": "Rund",
+ "dialog.expand_texture_selection.corner.square": "Eckig",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Zusammenführen mit",
+ "keybindings.variation_conflict": "Die Tastenbelegung der Variation kollidiert mit der Haupt Tastenbelegung",
+ "settings.recovery_save_interval": "Speicherintervall für Wiederherstellungspunkte",
+ "settings.recovery_save_interval.desc": "Blockbench speichert das offene Project un regelmäßigen Zeitabständen, um es im Fall eines Computerabsturzes wiederherstellen zu können. Wähle den Intervall in Sekunden. Wähle 0 um das Speichern zu deaktivieren.",
+ "settings.save_view_per_tab": "Ansicht per Tab speichern",
+ "settings.save_view_per_tab.desc": "Speichere die aktuelle Ansicht für jeden Tab einzeln",
+ "settings.inherit_parent_color": "Übergeordnete Farbe übernehmen",
+ "settings.inherit_parent_color.desc": "Übernehme bei neu erstellten Elementen die Kennzeichnungsfarbe der übergeordneten Gruppe, statt eine zufällig ausgewählte Farbe zu verwenden",
+ "keybind.preview_select.multi_select": "Mehrfachauswahl",
+ "keybind.preview_select.group_select": "Gruppenauswahl",
+ "keybind.preview_select.loop_select": "Ringauswahl",
+ "action.fill_mode.selection": "Auswahl",
+ "action.fill_mode.selected_elements": "Ausgewählte Elemente",
+ "action.image_tiled_view": "Kachelansicht",
+ "action.image_tiled_view.description": "Die sich wiederholende Kachelansicht im 2D Editor aktivieren",
+ "action.image_onion_skin_view": "Zwiebelschalenansicht in Bildbearbeitung",
+ "action.image_onion_skin_view.description": "Zwiebelschalenansicht im 2D Bildbearbeitungsfenster aktivieren",
+ "action.expand_texture_selection": "Texturauswahl erweitern",
+ "action.expand_texture_selection.desc": "Die Texturauswahl erweitern oder verkleinern",
+ "action.switch_tabs.reverse_order": "Umgekehrte Reihenfolge",
+ "action.save_project_incremental": "Speichern mit nächster Versionsnummer",
+ "action.save_project_incremental.desc": "Speichere das Modell als eine Projektdatei mit der nächsthöheren Versionsnummer (z. B. projekt_2.bbmodel)",
+ "action.copy.multiple": "Alle kopieren",
+ "action.copy.multiple.desc": "Alle verfügbaren Daten individuell kopieren",
+ "action.paste.multiple": "Alle einfügen",
+ "action.randomize_marker_colors": "Kennzeichnungsfarben zufällig vergeben",
+ "action.cube_light_emission": "Lichtemission",
+ "action.cube_light_emission.desc": "Wähle die Helligkeit der ausgewählten Quader mit einem Wert zwischen 0 und 15",
+ "action.view_mode.colored_solid": "Kennzeichnungsfarben",
+ "action.focus_on_selection.rotate_only": "Nur drehen",
+ "action.create_texture_group": "Texturengruppe erstellen",
+ "action.create_texture_group.desc": "Erstelle eine Texturengruppe",
+ "action.uv_maximize.all_faces": "Auf alle Flächen anwenden",
+ "action.retarget_animators": "Animationen neu belegen",
+ "action.retarget_animators.desc": "Lege fest, welcher Animator welche Gruppen oder Elemente animiert",
+ "action.merge_animation": "Animationen zusammenführen",
+ "action.merge_animation.desc": "Führe die Animation mit einer anderen Animation zusammen",
+ "action.add_keyframe.reset_values": "Mit Standardwerten",
+ "action.set_timeline_range_start": "Wiedergabebereich Start setzen",
+ "action.set_timeline_range_start.desc": "Setze den Startpunkt für den Wiedergabebereich in der Animationszeitleiste",
+ "action.set_timeline_range_end": "Wiedergabebereich Ende setzen",
+ "action.set_timeline_range_end.desc": "Setze den Endpunkt für den Wiedergabebereich in der Animationszeitleiste",
+ "action.disable_timeline_range": "Wiedergabebereich deaktivieren",
+ "action.disable_timeline_range.desc": "Deaktiviere den Wiedergabebereich in der Animationszeitleiste",
+ "menu.texture_group.resolve": "Auflösen",
+ "menu.image_tiled_view.mirrored": "Gespiegelt",
+ "menu.image_onion_skin_view.frame": "Einzelbilder",
+ "menu.image_onion_skin_view.frame.last_viewed": "Letzter angesehener Frame",
+ "menu.image_onion_skin_view.frame.previous": "Voriger Frame",
+ "menu.image_onion_skin_view.frame.next": "Nächster Frame",
+ "menu.image_onion_skin_view.frame.both": "Voriger + Nächster",
+ "menu.image_onion_skin_view.display": "Anzeige",
+ "menu.image_onion_skin_view.display.pixels": "Kleinere Pixel",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Darüber anzeigen",
+ "menu.animation.reload": "Neu laden",
+ "switches.autouv.alt": "Relativ",
+ "display.rotation_pivot": "Angelpunkt für Drehung",
+ "display.scale_pivot": "Angelpunkt für Skalierung",
+ "display.reference.fox": "Fuchs",
+ "display.reference.eating": "Ess Animation",
+ "preview_scene.sky": "Himmel",
+ "preview_scene.space": "Weltraum",
+ "preview_scene.minecraft_ocean": "Ozean",
+ "message.import_palette.selection_only": "Auf Auswahl beschränken",
+ "dialog.blend_transition_edit.ease_in_out": "Weicher Übergang (%0)",
+ "dialog.blend_transition_edit.generate": "Generieren...",
+ "dialog.blend_transition_edit.generate.learn_more": "Mehr Infos und Vorschau",
+ "dialog.blend_transition_edit.generate.curve": "Kurvenform",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Lege eine Obergrenze für die Bildwiederholrate fest. Die tatsächliche Bildwiederholrate hängt von deinem Gerät ab.",
+ "settings.outliner_reveal_on_select": "Ausgewählte Elemente aufdecken",
+ "settings.outliner_reveal_on_select.desc": "Zeige Elemente im Outliner wenn diese ausgewählt werden",
+ "settings.java_export_pivots": "Angelpunkte in Java Block/Item-Modellen exportieren",
+ "settings.java_export_pivots.desc": "Speichere Angelpunkte von Quadern ohne Drehung in Java Block/Item-Modellen",
+ "animation_controllers.state.blend_transition_curve": "Übergangskurve",
+ "menu.slider.reset_vector": "Vektor zurücksetzen",
+ "dialog.blend_transition_edit.extended": "Erweiterter Graph"
}
\ No newline at end of file
diff --git a/lang/en.json b/lang/en.json
index 1100de5f5..43e1362e3 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -12,6 +12,7 @@
"dialog.discard": "Discard",
"dialog.continue": "Continue",
"dialog.ignore": "Ignore",
+ "dialog.ignore_all": "Ignore All",
"dialog.dontshowagain": "Don't Show Again",
"dialog.copy_to_clipboard": "Copy to clipboard",
"dialog.open_url": "Open URL",
@@ -26,6 +27,8 @@
"data.texture_mesh": "Texture Mesh",
"data.group": "Group",
"data.texture": "Texture",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
"data.layer": "Layer",
"data.origin": "Pivot",
"data.plugin": "Plugin",
@@ -66,6 +69,8 @@
"generic.select_all": "Select All",
"generic.select_none": "Select None",
"generic.delete_all": "Delete All",
+ "generic.on": "On",
+ "generic.off": "Off",
"generic.left": "Left",
"generic.right": "Right",
"generic.navigate_forward": "Forward",
@@ -119,6 +124,7 @@
"format.free": "Generic Model",
"format.free.desc": "Model without restrictions. For game engines, rendering etc.",
+ "format.free.info.3d_printing": "3D Printing",
"format.free.info.meshes": "In this format, you can create low poly models using cubes and custom shaped meshes.",
"format.free.info.limitation": "Models cannot be loaded into games that need specialized formats, such as Minecraft.",
@@ -244,6 +250,7 @@
"message.screenshot.right_click": "Right click or long press the screenshot to copy",
"message.invalid_file.title": "Invalid File",
"message.invalid_file.message": "Could not open json file: %0",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
"message.invalid_model.title": "Invalid Model File",
"message.invalid_model.message": "This file does not contain valid model data.",
"message.invalid_format.title": "Invalid Format",
@@ -362,7 +369,6 @@
"message.keymap_loaded": "Keymap loaded",
"message.no_animation_to_import": "No animations to import",
"message.copy_paste_tool_viewport": "This tool can only be used in the 2D editor",
- "message.meshes_and_box_uv": "Meshes are not compatible with Box UV. Go to File > Project... and switch to Per-face UV.",
"message.no_valid_elements": "No valid elements selected...",
"message.palette_locked": "The palette is locked",
"message.knife_tool.confirm": "Press %0 or click here to apply Knife Tool",
@@ -404,6 +410,7 @@
"message.load_images.edit_image": "Edit Image",
"message.load_images.add_image": "Add Image",
+ "message.import_palette.selection_only": "Selection only",
"message.import_palette.replace_palette": "Replace old palette",
"message.import_palette.threshold": "Merge Threshold",
@@ -494,6 +501,12 @@
"dialog.edit_texture.preview": "Preview",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+
"dialog.extrude.title": "Extrude Image",
"dialog.extrude.mode": "Scan Mode",
"dialog.extrude.mode.areas": "Areas",
@@ -611,6 +624,14 @@
"dialog.optimize_animation.selection.selected_animation": "Selected Animation",
"dialog.optimize_animation.selection.all_animations": "All Animations",
"dialog.optimize_animation.thresholds": "Threshold values",
+ "dialog.merge_animation.merge_target": "Merge into",
+
+ "dialog.blend_transition_edit.extended": "Extended Graph",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
"dialog.create_texture.folder": "Folder",
"dialog.create_texture.type": "Type",
@@ -619,8 +640,6 @@
"dialog.create_texture.type.color_map": "Solid Color Template",
"dialog.create_texture.rearrange_uv": "Rearrange UV",
"dialog.create_texture.rearrange_uv.desc": "Create a new UV arrangement to give every face its own spot on the texture",
- "dialog.create_texture.compress": "Compress Template",
- "dialog.create_texture.compress.desc": "Arrange the UV maps in a dense layout to minimize the texture size",
"dialog.create_texture.power": "Power-of-2 Size",
"dialog.create_texture.power.desc": "Lock the automatic texture size to a power-of-2, such as 64 or 128. This is required by some renderers",
"dialog.create_texture.double_use": "Keep Multi Texture Occupancy",
@@ -781,6 +800,7 @@
"keybindings.clear": "Empty",
"keybindings.recording": "Recording Keybinding",
"keybindings.press": "Press a key or key combination or click anywhere on the screen to record your keybinding.",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
"keybindings.item.num_slider.increase": "Increase",
"keybindings.item.num_slider.decrease": "Decrease",
@@ -868,6 +888,8 @@
"settings.streamer_mode.desc": "Hides sensitive information like recent models",
"settings.cdn_mirror": "Use CDN Mirror",
"settings.cdn_mirror.desc": "Use the mirror CDN to download plugins. The mirror receives updates faster and works in some regions where the default does not work.",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
"settings.interface_scale": "Interface Scale",
"settings.interface_scale.desc": "Scale of the entire Blockbench interface",
@@ -890,6 +912,8 @@
"settings.control_size.desc": "Size of the transform gizmo",
"settings.motion_trails": "Motion Trails",
"settings.motion_trails.desc": "Show motion trails in the animation editor",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
"settings.display_skin": "Minecraft Skin",
"settings.display_skin.desc": "Skin used for the reference player model",
"settings.seethrough_outline": "X-Ray Outlines",
@@ -909,6 +933,8 @@
"settings.render_sides.auto": "Auto",
"settings.render_sides.front": "Outside",
"settings.render_sides.double": "Inside and Outside",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
"settings.background_rendering": "Background Rendering",
"settings.background_rendering.desc": "Update the preview while the window is not focused",
"settings.texture_fps": "Animated Texture FPS",
@@ -967,6 +993,8 @@
"settings.double_click_switch_tools.desc": "Double click the viewport to switch between tools",
"settings.highlight_cubes": "Highlight Elements",
"settings.highlight_cubes.desc": "Highlight elements when you hover over them or select them",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
"settings.deactivate_size_limit": "Deactivate Size Limit",
"settings.deactivate_size_limit.desc": "Deactivate the size limit for specific model formats. WARNING: This can cause invalid models.",
"settings.modded_entity_integer_size": "Modded Entity Integer Size",
@@ -975,14 +1003,16 @@
"settings.allow_display_slot_mirror.desc": "Allow Display slots for Java item models to be mirrored. WARNING: This only works in Minecraft 1.14 or earlier or in special cases.",
"settings.vertex_merge_distance": "Vertex Merge Distance",
"settings.vertex_merge_distance.desc": "Distance within which vertices are merged using merging by distance",
- "settings.preview_paste_behavior": "Default Preview Paste Behavior",
- "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the preview in Edit mode and multiple options are available",
+ "settings.preview_paste_behavior": "Default Viewport Paste Behavior",
+ "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the viewport in Edit mode and multiple options are available",
"settings.preview_paste_behavior.always_ask": "Always Ask",
"settings.autouv": "Auto UV",
"settings.autouv.desc": "Enable Auto UV by default",
"settings.default_cube_size": "Cube Size",
"settings.default_cube_size.desc": "Set the default cube size when creating a new cube",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
"settings.create_rename": "Rename New Element",
"settings.create_rename.desc": "Focus name field when creating new element or group",
"settings.show_only_selected_uv": "Show Only Selected UV",
@@ -1053,6 +1083,8 @@
"settings.export_empty_groups.desc": "Include groups without content in exported files",
"settings.export_groups": "Export Groups in Java block/item models",
"settings.export_groups.desc": "Save groups in java block or item model JSON files",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
"settings.obj_face_export_mode": "OBJ Face Export Mode",
"settings.obj_face_export_mode.desc": "Choose to let the OBJ exporter convert all faces into tris or quads",
"settings.obj_face_export_mode.both": "Default",
@@ -1102,6 +1134,9 @@
"category.separators": "Separators",
"keybind.preview_select": "Select",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
"keybind.preview_rotate": "Rotate View",
"keybind.preview_drag": "Drag View",
"keybind.preview_zoom": "Zoom View",
@@ -1125,9 +1160,11 @@
"action.fill_mode": "Fill Mode",
"action.fill_mode.face": "Face",
+ "action.fill_mode.selection": "Selection",
"action.fill_mode.color_connected": "Connected Colors",
"action.fill_mode.color": "Colors",
"action.fill_mode.element": "Element",
+ "action.fill_mode.selected_elements": "Selected Elements",
"action.draw_shape_type": "Shape Type",
"action.draw_shape_type.rectangle": "Rectangle",
"action.draw_shape_type.rectangle_h": "Rectangle (Hollow)",
@@ -1149,6 +1186,10 @@
"action.mirror_painting.description": "Mirror your paint strokes to the other side of the model",
"action.lock_alpha": "Lock Alpha Channel",
"action.lock_alpha.description": "Lock the transparency of all pixels",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
"action.slider_brush_size": "Size",
"action.slider_brush_size.desc": "Radius of the brush in pixels",
"action.slider_brush_opacity": "Opacity",
@@ -1175,6 +1216,8 @@
"action.blend_mode.overlay": "Overlay",
"action.blend_mode.hard_light": "Hard Light",
"action.blend_mode.difference": "Difference",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
"action.uv_slider_pos_x": "Move Horizontal",
"action.uv_slider_pos_x.desc": "Move all selected UV faces horizontally",
@@ -1261,6 +1304,7 @@
"action.tab_overview.desc": "View all open tabs in a grid and jump to one",
"action.switch_tabs": "Switch Tabs",
"action.switch_tabs.desc": "Cycle between opened tabs. Hold shift to cycle in the opposite direction.",
+ "action.switch_tabs.reverse_order": "Reverse order",
"action.validator_window": "View Model Issues...",
"action.validator_window.desc": "Opens the validator, which lists issues with the current model.",
"action.import_obj": "Import OBJ Model",
@@ -1306,6 +1350,8 @@
"action.save_project.desc": "Saves the current model as a project file",
"action.save_project_as": "Save Project As",
"action.save_project_as.desc": "Saves the current model as a project file at a new location",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
"action.import_project": "Import Project",
"action.import_project.desc": "Import another project from a .bbmodel file into the current project",
"action.export_over": "Save Model",
@@ -1363,8 +1409,11 @@
"action.edit_history.desc": "View the editing history and undo or redo steps",
"action.copy": "Copy",
"action.copy.desc": "Copy the selected selection, face or display settings",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
"action.paste": "Paste",
"action.paste.desc": "Paste the selected selection, face or display settings",
+ "action.paste.multiple": "Paste All",
"action.cut": "Cut",
"action.cut.desc": "Cut the selected selection, face or display settings",
"action.add_cube": "Add Cube",
@@ -1389,6 +1438,7 @@
"action.cube_counter.desc": "Displays the current number of elements and other statistics",
"action.search_outliner": "Search Outliner",
"action.search_outliner.desc": "Search for specific element names in the outliner",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
"action.duplicate": "Duplicate",
"action.duplicate.desc": "Duplicates the selected elements or group",
@@ -1424,6 +1474,8 @@
"action.element_render_order.default": "Auto",
"action.element_render_order.behind": "Behind",
"action.element_render_order.in_front": "In Front",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
"action.slider_color_h": "Hue",
"action.slider_color_s": "Saturation",
@@ -1618,6 +1670,7 @@
"action.view_mode.desc": "Change the model view mode",
"action.view_mode.textured": "Textured",
"action.view_mode.solid": "Solid",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
"action.view_mode.wireframe": "Wireframe",
"action.view_mode.uv": "UV Preview",
"action.view_mode.normal": "Face Orientation",
@@ -1652,6 +1705,7 @@
"action.load_camera_angle.desc": "Load the camera angle '%0'",
"action.focus_on_selection": "Center View on Selection",
"action.focus_on_selection.desc": "Align the camera to face the center of the current selection",
+ "action.focus_on_selection.rotate_only": "Rotate only",
"action.edit_reference_images": "Edit Reference Images",
"action.edit_reference_images.desc": "Turn on reference image mode to add or edit reference images and blueprints",
@@ -1665,6 +1719,8 @@
"action.import_texture.desc": "Import one or more textures from your file system",
"action.create_texture": "Create Texture",
"action.create_texture.desc": "Create a blank texture or template texture",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
"action.append_to_template": "Append Elements to Template...",
"action.append_to_template.desc": "Add the currently selected elements to the texture template",
"action.save_textures": "Save Textures",
@@ -1698,6 +1754,7 @@
"action.uv_apply_all.desc": "Applies the settings of the current face to all faces",
"action.uv_maximize": "Maximize UV",
"action.uv_maximize.desc": "Sets the UV for this face to the full texture",
+ "action.uv_maximize.all_faces": "Affect all faces",
"action.uv_turn_mapping": "Turn Mapping",
"action.uv_turn_mapping.desc": "Turn the UV mapping around 90 degrees",
"action.uv_auto": "Auto UV",
@@ -1768,6 +1825,10 @@
"action.export_animation_file.desc": "Export a selection of animations into a new file",
"action.optimize_animation": "Optimize Animation",
"action.optimize_animation.desc": "Optimize the current animation and reduce the keyframe count",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
"action.bake_ik_animation": "Bake Inverse Kinematics",
"action.bake_ik_animation.desc": "Bake the rotations applied by inverse kinematics into the selected animation",
"action.bake_animation_into_model": "Bake Animation into Model",
@@ -1811,7 +1872,8 @@
"action.slider_animation_speed": "Playback Speed",
"action.slider_animation_speed.desc": "Playback speed of the timeline in percent",
"action.add_keyframe": "Add Keyframe",
- "action.add_keyframe.desc": "Automatically add a keyframe. Press shift to force default values",
+ "action.add_keyframe.desc": "Add a keyframe to the selected animator",
+ "action.add_keyframe.reset_values": "With default values",
"action.add_marker": "Set Marker",
"action.add_marker.desc": "Set a timeline marker",
"action.timeline_setups": "Timeline Setups",
@@ -1827,6 +1889,12 @@
"action.jump_to_timeline_end": "Jump to Animation End",
"action.timeline_frame_back": "Jump 1 Frame Back",
"action.timeline_frame_forth": "Jump 1 Frame Forth",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
"action.bring_up_all_animations": "Bring Up All Animators",
"action.bring_up_all_animations.desc": "Brings all modified animators into the timeline",
"action.fold_all_animations": "Fold All Animators",
@@ -1892,6 +1960,7 @@
"animation_controllers.state.transitions": "Transitions",
"animation_controllers.state.condition": "Condition",
"animation_controllers.state.blend_transition": "Blend Time",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
"animation_controllers.state.shortest_path": "Blend by Shortest Path",
"animation_controllers.state.edit_transition": "Edit Transition",
@@ -1903,6 +1972,7 @@
"menu.options": "Options...",
"menu.slider.round_value": "Round Value",
+ "menu.slider.reset_vector": "Reset Vector",
"menu.file": "File",
"menu.edit": "Edit",
@@ -2010,6 +2080,8 @@
"menu.texture.save": "Save",
"menu.texture.properties": "Properties...",
+ "menu.texture_group.resolve": "Resolve",
+
"menu.preview.background": "Background",
"menu.preview.background.load": "Load",
"menu.preview.background.clipboard": "Load from Clipboard",
@@ -2054,6 +2126,18 @@
"menu.mirror_painting.texture_frames": "Repeat on Animated Texture Frames",
"menu.mirror_painting.texture_frames.desc": "Mirror paint strokes to every frame of animated textures",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+
"menu.toolbar.edit": "Customize Toolbar",
"menu.toolbar.reset": "Reset Toolbar",
"menu.toolbar.overflow": "Toolbar Overflow",
@@ -2072,6 +2156,7 @@
"menu.animation.file": "File",
"menu.animation.snapping": "Snapping",
"menu.animation.open_location": "Show in File Explorer",
+ "menu.animation.reload": "Reload",
"menu.animation.unload": "Unload",
"menu.animation.flip_keyframes": "Flip Keyframes",
@@ -2117,6 +2202,7 @@
"switches.shade": "Shade",
"switches.mirror": "Mirror UV",
"switches.autouv": "Auto UV",
+ "switches.autouv.alt": "Relative",
"texture.error.file": "File not found",
"texture.error.too_large": "Resolution exceeds the maximum of %0",
@@ -2276,6 +2362,8 @@
"display.translation": "Translation",
"display.scale": "Scale",
"display.mirror": "Mirror",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
"display.slot": "Slot",
"display.reference": "Reference Model",
"display.pose_angle": "Pose Angle (For Preview Only)",
@@ -2285,9 +2373,11 @@
"display.reference.armor_stand": "Armor Stand",
"display.reference.baby_zombie": "Baby Zombie",
"display.reference.armor_stand_small": "Armor Stand Small",
+ "display.reference.fox": "Fox",
"display.reference.monitor": "Normal",
"display.reference.bow": "Charged Bow",
"display.reference.crossbow": "Charged Crossbow",
+ "display.reference.eating": "Eating",
"display.reference.block": "Block",
"display.reference.frame": "Item Frame",
"display.reference.frame_invisible": "Item Frame (Invisible)",
@@ -2305,6 +2395,8 @@
"display.preset.armor_stand": "Ground (Armor Stand)",
"preview_scene.studio": "Studio",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
"preview_scene.minecraft_overworld": "Overworld",
"preview_scene.minecraft_nether": "Nether",
"preview_scene.minecraft_end": "End",
@@ -2315,6 +2407,7 @@
"preview_scene.minecraft_night": "Night",
"preview_scene.minecraft_desert": "Desert",
"preview_scene.minecraft_underwater": "Underwater",
+ "preview_scene.minecraft_ocean": "Ocean",
"preview_scene.minecraft_coral_reef": "Coral Reef",
"preview_scene.minecraft_lush_cave": "Lush Cave",
"preview_scene.minecraft_deep_dark": "Deep Dark"
diff --git a/lang/es.json b/lang/es.json
index 55aa09b24..242c193c7 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Activa el invertido de UV en el eje X de los cubos seleccionados",
"menu.texture.blank": "Aplicar a Caras sin Textura",
"dialog.scale.select_overflow": "Seleccionar Overflow",
- "dialog.create_texture.compress": "Comprimir Plantilla",
"action.action_control": "Control de Acción",
"action.action_control.desc": "Busca y ejecuta cualquier acción disponible",
"keybindings.recording": "Anotando Atajo de Teclado",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Mapa de Teclas cargado",
"dialog.convert_project.current_format": "Formato Actual",
"dialog.create_texture.rearrange_uv.desc": "Crear una nueva UV de arreglo para otorgar a cada cara un lugar único en la textura",
- "dialog.create_texture.compress.desc": "Organice los mapas UV en un diseño denso para minimizar el tamaño de la textura",
"dialog.create_texture.power.desc": "Bloquea la textura automática al tamaño de poder-de-2, de 64 o 128. Esto requiere varios renderizados",
"dialog.create_texture.double_use.desc": "Si dos elementos tienen el mismo espacio del UV asignado, mantenlo así para un nuevo mapa",
"dialog.create_texture.padding.desc": "Añadir un pequeño relleno entre partes individuales de la plantilla",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Saltando",
"panel.skin_pose.aiming": "Apuntando",
"edit.loop_cut.direction": "Dirección",
- "message.meshes_and_box_uv": "Las mallas no son compatibles con la caja UV. Ve a Archivo > Projecto... y cambia a UV por cara",
"data.texture_mesh": "Texture Mesh",
"generic.left": "Left",
"generic.right": "Right",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/fr.json b/lang/fr.json
index e2dc207a6..6a83cb868 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Active/désactive la réflexion UV selon l'axe X des cubes sélectionnés.",
"menu.texture.blank": "Appliquer aux faces non texturées",
"dialog.scale.select_overflow": "Sélectionner le débordement",
- "dialog.create_texture.compress": "Compresser l'étalon",
"action.action_control": "Contrôle d'action",
"action.action_control.desc": "Rechercher et exécuter toute action disponible",
"keybindings.recording": "Enregistrer un raccourci clavier",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Configuration clavier chargée",
"dialog.convert_project.current_format": "Format acuel",
"dialog.create_texture.rearrange_uv.desc": "Créer une nouvelle disposition UV donne à chaque face sa propre place sur la texture",
- "dialog.create_texture.compress.desc": "Dispose les cartes UV de façon dense pour minimiser la taille de la texture",
"dialog.create_texture.power.desc": "Verrouille la taille de texture automatique sur une puissance de 2, comme 64 ou 128. Cela est nécessaire pour certains moteurs de rendu.",
"dialog.create_texture.double_use.desc": "Si deux éléments ont déjà le même espace UV attribué, cela sera conservé dans la nouvelle disposition",
"dialog.create_texture.padding.desc": "Ajoutez un petit décalage entre les différentes parties du modèle",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "En train de sauter",
"panel.skin_pose.aiming": "En train de viser",
"edit.loop_cut.direction": "Direction",
- "message.meshes_and_box_uv": "Les mailles ne sont pas compatibles avec Encadrement UV. Allez dans Fichier → Projet… et choisissez UV par face comme Mode UV.",
"data.texture_mesh": "Maille texturée",
"generic.left": "Gauche",
"generic.right": "Droite",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/it.json b/lang/it.json
index a14d38c57..7903cb10d 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Alterna lo specchiamento UV sull'asse delle X dei cubi selezionati",
"menu.texture.blank": "Applica alle Facce Senza Texture",
"dialog.scale.select_overflow": "Seleziona Cubi Traboccanti",
- "dialog.create_texture.compress": "Comprimere Sagoma",
"action.action_control": "Controllo Azioni",
"action.action_control.desc": "Cerca ed esegui ogni azione disponibile",
"keybindings.recording": "Registrando Tasti",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Keymap loaded",
"dialog.convert_project.current_format": "Current Format",
"dialog.create_texture.rearrange_uv.desc": "Create a new UV arrangement to give every face its own spot on the texture",
- "dialog.create_texture.compress.desc": "Arrange the UV maps in a dense layout to minimize the texture size",
"dialog.create_texture.power.desc": "Lock the automatic texture size to a power-of-2, such as 64 or 128. This is required by some renderers",
"dialog.create_texture.double_use.desc": "If two elements already have the same UV space assigned, keep it that way in the new map",
"dialog.create_texture.padding.desc": "Add a small padding between the individual parts of the template",
@@ -1400,8 +1398,8 @@
"settings.status_bar_modifier_keys.desc": "Display context aware suggested modifier keys in the status bar",
"settings.ground_plane": "Ground Plane",
"settings.ground_plane.desc": "Show a floor plane below the model",
- "settings.preview_paste_behavior": "Default Preview Paste Behavior",
- "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the preview in Edit mode and multiple options are available",
+ "settings.preview_paste_behavior": "Default Viewport Paste Behavior",
+ "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the viewport in Edit mode and multiple options are available",
"settings.preview_paste_behavior.always_ask": "Always Ask",
"action.new_window": "New Window",
"action.new_window.desc": "Opens a new Blockbench window",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Jumping",
"panel.skin_pose.aiming": "Aiming",
"edit.loop_cut.direction": "Direction",
- "message.meshes_and_box_uv": "Meshes are not compatible with Box UV. Go to File > Project... and switch to Per-face UV.",
"data.texture_mesh": "Texture Mesh",
"generic.left": "Left",
"generic.right": "Right",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/ja.json b/lang/ja.json
index f5a338bf2..846a26fa2 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "選択したキューブの UV ミラーリングを切り替えます",
"menu.texture.blank": "テクスチャのないフェイスに適用",
"dialog.scale.select_overflow": "オーバーフローを選択",
- "dialog.create_texture.compress": "テンプレートを圧縮",
"action.action_control": "アクションコントロール",
"action.action_control.desc": "利用可能なアクションを検索します",
"keybindings.recording": "キー設定を記録",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "キーマップのロード",
"dialog.convert_project.current_format": "現在のフォーマット",
"dialog.create_texture.rearrange_uv.desc": "新しい UV アレンジメントを作成して、全てのフェイスに独自のテクスチャを与えます",
- "dialog.create_texture.compress.desc": "テクスチャサイズを縮小するために、レイアウトを再配置します",
"dialog.create_texture.power.desc": "オートテクスチャサイズを正方形に固定します。",
"dialog.create_texture.double_use.desc": "2つの要素に同じ UV スペースが割り当てられている場合、新しいマップでも維持します",
"dialog.create_texture.padding.desc": "テンプレートの間にパディングを追加します",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "ジャンプ",
"panel.skin_pose.aiming": "弓を構える",
"edit.loop_cut.direction": "向き",
- "message.meshes_and_box_uv": "メッシュは Box UV と互換性がありません。 File > Project... に移動し、Per-face UV に切り替えます。",
"data.texture_mesh": "メッシュテクスチャ",
"generic.left": "Left",
"generic.right": "Right",
@@ -2049,19 +2046,19 @@
"menu.texture.discard_changes": "元に戻す",
"menu.texture.discard_changes.desc": "ファイルから最新バージョンをダウンロードします",
"panel.textures.images": "Images",
- "dialog.advanced": "Advanced",
- "dialog.recommended_option": "recommended",
- "modifier_actions.snap_to_center": "Snap to Center",
- "modifier_actions.snap_to_pixels": "Snap to Pixels",
- "message.invalid_format.install_plugin": "Install plugin '%0'",
- "message.plugin_deprecated.message": "Are you sure you want to install this deprecated plugin?",
- "message.plugin_deprecated.install_anyway": "Install Anyway",
- "message.image_editor.not_found": "Could not find the selected image editor. Please select a different option.",
+ "dialog.advanced": "アドバンスド",
+ "dialog.recommended_option": "推奨",
+ "modifier_actions.snap_to_center": "センターへスナップ",
+ "modifier_actions.snap_to_pixels": "ピクセルへスナップ",
+ "message.invalid_format.install_plugin": "プラグイン '%0' をインストール",
+ "message.plugin_deprecated.message": "このプラグインは推奨されていません、インストールしてもよろしいですか?",
+ "message.plugin_deprecated.install_anyway": "無視してインストール",
+ "message.image_editor.not_found": "選択した画像エディタが見つかりませんでした。別のオプションを選択してください。",
"message.knife_tool.confirm": "Press %0 or click here to apply Knife Tool",
"message.knife_tool.skipped_face": "Cannot cut between different faces. Include the edges or vertices between them!",
- "message.optimize_animation.keyframes_removed": "Removed %0 redundant keyframes",
- "message.optimize_animation.nothing_to_optimize": "Found nothing to optimize!",
- "message.duplicate_bone_copy_animation.title": "Copy Animation",
+ "message.optimize_animation.keyframes_removed": "%0 個の余分なキーフレームを削除しました",
+ "message.optimize_animation.nothing_to_optimize": "すでに最適化されています",
+ "message.duplicate_bone_copy_animation.title": "アニメーションをコピー",
"message.duplicate_bone_copy_animation.message": "The duplicated bone is animated in %0 animations. Do you want to copy the keyframes over to the new bone?",
"message.auto_fix_mesh_edit.title": "Auto Fix",
"message.auto_fix_mesh_edit.revert": "Revert Edit",
@@ -2069,53 +2066,52 @@
"message.auto_fix_mesh_edit.concave_quads": "One or more quad faces are now concave, which can cause issues in UV-mapping and rendering. Blockbench can automatically fix it for you:",
"message.auto_fix_mesh_edit.merge_vertices": "Merge Vertices",
"message.auto_fix_mesh_edit.split_quads": "Split Quads",
- "message.load_images.add_image": "Add Image",
+ "message.load_images.add_image": "画像を追加",
"dialog.project.modded_entity_entity_class": "Entity Class",
"dialog.resize_texture.offset": "Offset",
"dialog.animated_texture_editor.code_reference": "Code Reference",
- "dialog.animated_texture_editor.code_reference.about": "This code to implement the texture animation was generated as a reference and does not necessarily work without modification. Check out the documentation to learn more.",
+ "dialog.animated_texture_editor.code_reference.about": "このコードはテクスチャアニメーションを実装するための参考用に作成されたものであり、そのままでは動作しない場合があります。詳細については、ドキュメントを参照してください。",
"dialog.animated_texture_editor.code_reference.docs": "Documentation",
- "dialog.animated_texture_editor.reframe": "Reframe",
- "dialog.animated_texture_editor.stride": "Frame Size",
- "dialog.animated_texture_editor.frames": "Number of Frames",
- "dialog.animated_texture_editor.add_frame": "Add Frame",
- "dialog.animated_texture_editor.resize_frames": "Resize Frames...",
- "dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.animated_texture_editor.reframe": "リフレーム",
+ "dialog.animated_texture_editor.stride": "フレームサイズ",
+ "dialog.animated_texture_editor.frames": "フレーム数",
+ "dialog.animated_texture_editor.add_frame": "フレームを追加",
+ "dialog.animated_texture_editor.resize_frames": "フレームをリサイズ...",
+ "dialog.animated_texture_editor.apply": "適応",
"dialog.add_primitive.edge_size": "Edge Size",
- "dialog.change_animation_speed.speed": "Speed",
+ "dialog.change_animation_speed.speed": "スピード",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
"dialog.optimize_animation.selection": "Selection",
- "dialog.optimize_animation.selection.selected_keyframes": "Selected Keyframes",
- "dialog.optimize_animation.selection.selected_animation": "Selected Animation",
- "dialog.optimize_animation.selection.all_animations": "All Animations",
+ "dialog.optimize_animation.selection.selected_keyframes": "キーフレーム",
+ "dialog.optimize_animation.selection.selected_animation": "アニメーション",
+ "dialog.optimize_animation.selection.all_animations": "全てのアニメーション",
"dialog.optimize_animation.thresholds": "Threshold values",
- "dialog.import_obj.obj": "OBJ File",
- "dialog.import_obj.mtl": "MTL File",
- "dialog.import_obj.scale": "Scale",
+ "dialog.import_obj.obj": "OBJ ファイル",
+ "dialog.import_obj.mtl": "MTL ファイル",
+ "dialog.import_obj.scale": "スケール",
"layout.thumbnail": "Custom Thumbnail CSS",
- "settings.pixel_grid": "Pixel Grid",
- "settings.pixel_grid.desc": "Show texture pixel grid on elements in edit mode",
- "settings.image_editor_grid_size": "Image Editor Grid Size",
- "settings.image_editor_grid_size.desc": "Size of the large grid in the 2D image editor",
+ "settings.pixel_grid": "ピクセルグリット",
+ "settings.pixel_grid.desc": "エディットモードで、テクスチャにピクセルグリッドを表示します",
+ "settings.image_editor_grid_size": "画像エディタのグリットサイズ",
+ "settings.image_editor_grid_size.desc": "画像エディタの最大グリットサイズを変更します",
"settings.ground_plane_double_side": "Ground Plane Double-sided",
"settings.ground_plane_double_side.desc": "Make the ground plane visible from below",
"settings.optifine_save_default_texture": "OptiFine JEM: Export selected texture",
- "settings.optifine_save_default_texture.desc": "Export the selected texture as the default texture of the model",
+ "settings.optifine_save_default_texture.desc": "選択したテクスチャをモデルのデフォルトテクスチャとしてエクスポートします",
"action.slider_color_select_threshold": "Color Select Threshold",
"action.slider_color_select_threshold.desc": "How close the color of a neighboring pixel has to be to get selected by color or wand select",
- "action.stretch_tool": "Stretch",
+ "action.stretch_tool": "ストレッチ",
"action.stretch_tool.desc": "Tool to select and stretch elements",
- "action.knife_tool": "Knife Tool",
+ "action.knife_tool": "ナイフ",
"action.knife_tool.desc": "Tool to cut mesh faces into smaller pieces",
- "action.duplicate_project": "Duplicate Project",
+ "action.duplicate_project": "プロジェクトを複製",
"action.duplicate_project.desc": "Creates a copy of the open project",
"action.transform_space.parent": "Parent",
"action.transform_pivot_space": "Pivot Transform Space",
"action.solidify_mesh_selection": "Solidify Faces",
"action.solidify_mesh_selection.desc": "Solidify the selected faces of the mesh",
- "action.animated_texture_editor": "Flipbook Animation...",
- "action.animated_texture_editor.desc": "Setup or edit the flipbook animation of the selected texture",
+ "action.animated_texture_editor": "フリップブックアニメーション...",
+ "action.animated_texture_editor.desc": "テクスチャのフリップブックアニメーションを設定、または編集します",
"action.center_individual_pivots": "Center Individual Pivots",
"action.center_individual_pivots.desc": "Set the pivot point of each selected element to its center",
"action.uv_cycle": "Cycle UV",
@@ -2123,19 +2119,111 @@
"action.uv_cycle_invert": "Cycle Invert UV",
"action.uv_cycle_invert.desc": "Reverse the order of UV vertices without changing the UV positions",
"action.slider_animation_controller_speed": "Controller Playback Speed",
- "action.slider_animation_controller_speed.desc": "The playback speed of animation controllers in percent",
- "action.optimize_animation": "Optimize Animation",
- "action.optimize_animation.desc": "Optimize the current animation and reduce the keyframe count",
- "action.change_animation_speed": "Change Animation Speed...",
- "action.change_animation_speed.desc": "Change the speed of the selected animation",
- "timeline.select_particle_file": "Select Particle File",
- "timeline.select_sound_file": "Select Sound File",
- "menu.cube.texture.default": "Default",
- "menu.texture.particle.clear": "Stop using for Particles",
- "menu.texture.use_as_default": "Set as Default",
- "menu.texture.use_as_default.clear": "Unassign as Default",
+ "action.slider_animation_controller_speed.desc": "アニメーションコントローラの再生速度",
+ "action.optimize_animation": "アニメーションを最適化",
+ "action.optimize_animation.desc": "キーフレームの数を減らして、アニメーションを最適化します",
+ "action.change_animation_speed": "アニメーションスピードを変更...",
+ "action.change_animation_speed.desc": "アニメーションの再生速度を変更します",
+ "timeline.select_particle_file": "パーティクルファイルを選択",
+ "timeline.select_sound_file": "サウンドファイルを選択",
+ "menu.cube.texture.default": "デフォルト",
+ "menu.texture.particle.clear": "パーティクルを使用しない",
+ "menu.texture.use_as_default": "デフォルトに設定",
+ "menu.texture.use_as_default.clear": "デフォルトを解除",
"menu.toolbar.overflow": "Toolbar Overflow",
- "edit.solidify_mesh_selection.thickness": "Thickness",
- "reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "edit.solidify_mesh_selection.thickness": "ティックネス",
+ "reference_image.sync_to_timeline": "タイムラインに同期",
+ "reference_image.toggle_playback": "プレイ/ポーズ",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/ko.json b/lang/ko.json
index b25129f4c..20ca4a00d 100644
--- a/lang/ko.json
+++ b/lang/ko.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "선택한 큐브의 X축에서 UV 미러링 토글",
"menu.texture.blank": "텍스쳐가 없는 표면에 적용",
"dialog.scale.select_overflow": "오버플로우 선택",
- "dialog.create_texture.compress": "템플릿 압축",
"action.action_control": "행동 제어",
"action.action_control.desc": "사용 가능한 모든 행동을 검색하고 실행",
"keybindings.recording": "키바인딩 녹화중",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "키맵핑 로드됨",
"dialog.convert_project.current_format": "현재 포맷",
"dialog.create_texture.rearrange_uv.desc": "새로운 UV 배열을 만들어 모든 표면에 질감에 대한 자체 지점을 생성",
- "dialog.create_texture.compress.desc": "UV 맵을 조밀한 레이아웃으로 배열하여 텍스쳐 크기를 최소화",
"dialog.create_texture.power.desc": "자동 텍스쳐 크기를 64 또는 128과 같은 2의 거듭제곱으로 잠금. 일부 렌더러가 요구됨",
"dialog.create_texture.double_use.desc": "두 요소가 이미 동일한 UV 공간을 할당한 경우 새 맵에 그대로 유지",
"dialog.create_texture.padding.desc": "템플릿의 개별 부위 사이에 작은 여백을 추가",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "점프",
"panel.skin_pose.aiming": "사격",
"edit.loop_cut.direction": "방향",
- "message.meshes_and_box_uv": "메쉬들은 상자 UV와 호환되지 않습니다. 파일 > 프로젝트... 로 이동하고 표면별 UV로 전환하십시오.",
"data.texture_mesh": "텍스쳐 메쉬",
"generic.left": "왼쪽",
"generic.right": "오른쪽",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/nl.json b/lang/nl.json
index 6a750699b..b4e32f2bb 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Zet de UV spiegeling op de X as van de geselecteerde kubus aan/uit",
"menu.texture.blank": "Breng aan op Ongetextuurde Vlakken",
"dialog.scale.select_overflow": "Selecteer Overflow",
- "dialog.create_texture.compress": "Druk Sjabloon Samen",
"action.action_control": "Actie Controle",
"action.action_control.desc": "Zoek en voer elke beschikbare actie uit",
"keybindings.recording": "Neem Toetsbinding Op",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Toetsenbordindeling geladen",
"dialog.convert_project.current_format": "Huidig Formaat",
"dialog.create_texture.rearrange_uv.desc": "Maak een nieuwe UV-indeling om elk vlak zijn eigen plek op de textuur te geven",
- "dialog.create_texture.compress.desc": "Schik de UV-maps in een dichte lay-out om de textuurgrootte te minimaliseren",
"dialog.create_texture.power.desc": "Beperk de automatische textuurgrootte tot een macht van 2, bijvoorbeeld 64 of 128. Dit is vereist voor sommige renderers",
"dialog.create_texture.double_use.desc": "Als aan twee elementen al dezelfde UV-ruimte is toegewezen, moet dat zo blijven in de nieuwe map",
"dialog.create_texture.padding.desc": "Voeg een kleine vulling toe tussen individuele onderdelen van de sjabloon",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Springen",
"panel.skin_pose.aiming": "Richten",
"edit.loop_cut.direction": "Richting",
- "message.meshes_and_box_uv": "Meshes zijn niet compatibel met Box UV. Ga naar Bestand > Project... en schakel over op Per-face UV.",
"data.texture_mesh": "Textuur Mesh",
"generic.left": "Links",
"generic.right": "Rechts",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/pl.json b/lang/pl.json
index 86fd91f10..442336039 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Przełącz odbicie lustrzane UV na osi X wybranych kostek",
"menu.texture.blank": "Stosuj na ścianę bez tekstury",
"dialog.scale.select_overflow": "Select Overflow",
- "dialog.create_texture.compress": "Skompresuj Szablon",
"action.action_control": "Kontroler akcji",
"action.action_control.desc": "Wyszukaj i wykonaj każdą dostępną akcję",
"keybindings.recording": "Nagrywanie skrótów klawiszowych",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Mapa klawiszy załadowana",
"dialog.convert_project.current_format": "Aktualny format",
"dialog.create_texture.rearrange_uv.desc": "Utwórz nowy układ UV, aby nadać każdej ścianie jej własne miejsce na teksturze",
- "dialog.create_texture.compress.desc": "Rozmieść mapy UV w gęstym układzie, aby zminimalizować rozmiar tekstury",
"dialog.create_texture.power.desc": "Zablokuj automatyczny rozmiar tekstury do potęgi 2, takiej jak 64 lub 128. Jest to wymagane przez niektóre programy",
"dialog.create_texture.double_use.desc": "Jeśli dwa elementy mają już przypisaną tę samą przestrzeń UV, zachowaj ją w ten sposób w nowej mapie",
"dialog.create_texture.padding.desc": "Dodaj niewielkie wypełnienie między poszczególnymi częściami szablonu",
@@ -1400,8 +1398,8 @@
"settings.status_bar_modifier_keys.desc": "Display context aware suggested modifier keys in the status bar",
"settings.ground_plane": "Ground Plane",
"settings.ground_plane.desc": "Show a floor plane below the model",
- "settings.preview_paste_behavior": "Default Preview Paste Behavior",
- "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the preview in Edit mode and multiple options are available",
+ "settings.preview_paste_behavior": "Default Viewport Paste Behavior",
+ "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the viewport in Edit mode and multiple options are available",
"settings.preview_paste_behavior.always_ask": "Zawsze pytaj",
"action.new_window": "Nowe okno",
"action.new_window.desc": "Otwiera nowe okno Blockbencha",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Skakanie",
"panel.skin_pose.aiming": "Celowanie",
"edit.loop_cut.direction": "Kierunek",
- "message.meshes_and_box_uv": "Meshes are not compatible with Box UV. Go to File > Project... and switch to Per-face UV.",
"data.texture_mesh": "Texture Mesh",
"generic.left": "Left",
"generic.right": "Right",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/pt.json b/lang/pt.json
index bbe5f975e..783ecb555 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Alternar o espelhamento UV no eixo X dos cubos selecionados.",
"menu.texture.blank": "Aplicar a Faces Não Texturizadas",
"dialog.scale.select_overflow": "Selecionar Estouro",
- "dialog.create_texture.compress": "Comprimir Modelo",
"action.action_control": "Controle de Ação",
"action.action_control.desc": "Pesquise e execute qualquer ação disponível",
"keybindings.recording": "Gravando de Atalho do Teclado",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Atalhos carregados",
"dialog.convert_project.current_format": "Formato atual",
"dialog.create_texture.rearrange_uv.desc": "Criar um novo arranjamento UV para dar destaque a cada face na textura",
- "dialog.create_texture.compress.desc": "Organizar os mapas UV em um modo denso para minimizar o tamanho da textura",
"dialog.create_texture.power.desc": "Prender o tamanho da textura automática para uma potência de 2, como 64 ou 128. Isso é necessário para alguns renderers",
"dialog.create_texture.double_use.desc": "Se dois elementos já tem o mesmo espaço UV correspondente, mantenha assim no novo mapa",
"dialog.create_texture.padding.desc": "Adicione uma pequena pintura entre as partes individuais do template",
@@ -1401,7 +1399,7 @@
"settings.ground_plane": "plana de chão",
"settings.ground_plane.desc": "Show a floor plane below the model",
"settings.preview_paste_behavior": "Comportamento de colagem de visualização padrão",
- "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the preview in Edit mode and multiple options are available",
+ "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the viewport in Edit mode and multiple options are available",
"settings.preview_paste_behavior.always_ask": "Always Ask",
"action.new_window": "nova aba",
"action.new_window.desc": "abrir nova aba do blockbench",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "pulando",
"panel.skin_pose.aiming": "Aiming",
"edit.loop_cut.direction": "direção",
- "message.meshes_and_box_uv": "meshes não camtivel com box uv. va para arquivo > projeto e troque para per-face uv.",
"data.texture_mesh": "Texture Mesh",
"generic.left": "Left",
"generic.right": "Right",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/ru.json b/lang/ru.json
index 33e36a739..f697c1514 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Переключить зеркальность UV на оси X выделенных кубов",
"menu.texture.blank": "Добавить к граням без текстуры",
"dialog.scale.select_overflow": "Выбрать кубы за границей",
- "dialog.create_texture.compress": "Сжать шаблон",
"action.action_control": "Контроль действий",
"action.action_control.desc": "Найти и выполнить любое доступное действие",
"keybindings.recording": "Запись",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Схема загружена",
"dialog.convert_project.current_format": "Текущий формат",
"dialog.create_texture.rearrange_uv.desc": "Создайте новое расположение UV, чтобы придать каждой стороне своё собственное место на текстуре",
- "dialog.create_texture.compress.desc": "Расположите UV-карты в плотном макете, чтобы минимизировать размер текстуры.",
"dialog.create_texture.power.desc": "Заблокировать автоматический размер текстуры в мощность двух, такие как 64 или 128. Это может потребоваться некоторыми рендерами",
"dialog.create_texture.double_use.desc": "Если два элемента уже имеют одинаковые UV пространства назначенными, оставить так на новом плане",
"dialog.create_texture.padding.desc": "Заполнить маленькие пространства между индивидуальными частями и шаблоном",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Прыжок",
"panel.skin_pose.aiming": "Прицеливание",
"edit.loop_cut.direction": "Направление",
- "message.meshes_and_box_uv": "Меши не поддерживают UV-коробку. Перейдите в Файл > Проект и переключитесь на UV по граням. ",
"data.texture_mesh": "Текстурная сетка",
"generic.left": "Левый",
"generic.right": "Правый",
@@ -2137,5 +2134,96 @@
"edit.solidify_mesh_selection.thickness": "Толщина",
"reference_image.sync_to_timeline": "Синхронизация с временной шкалой",
"reference_image.toggle_playback": "Воспроизведение/Пауза",
- "dialog.add_primitive.shape.beveled_cuboid": "Скошенный кубоид"
+ "dialog.add_primitive.shape.beveled_cuboid": "Скошенный кубоид",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/sv.json b/lang/sv.json
index 68ae8f984..4514941e2 100644
--- a/lang/sv.json
+++ b/lang/sv.json
@@ -401,7 +401,7 @@
"menu.texture.refresh": "Ladda om",
"menu.texture.change": "Ändra fil",
"menu.texture.folder": "Öppna i mapp",
- "menu.texture.edit": "Edit",
+ "menu.texture.edit": "Redigera",
"menu.texture.export": "Spara som",
"menu.texture.save": "Spara",
"menu.texture.properties": "Egenskaper",
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Växla UV-spegling på X axeln för de valda kuberna.",
"menu.texture.blank": "Applicera på otexturerade Ytor",
"dialog.scale.select_overflow": "Välj överflöde",
- "dialog.create_texture.compress": "Komprimera mall",
"action.action_control": "Åtgärdskontroll",
"action.action_control.desc": "Sök och kör alla tillgängliga åtgärder",
"keybindings.recording": "Spelar in tangentbindningar",
@@ -872,7 +871,7 @@
"action.timelapse": "Timelaps...",
"action.timelapse.desc": "Spela in ett time lapse av din modellerings process",
"action.add_keyframe": "Lägg till en keyframe",
- "action.add_keyframe.desc": "Automatically add a keyframe. Press shift to force default values",
+ "action.add_keyframe.desc": "Add a keyframe to the selected animator",
"action.bring_up_all_animations.desc": "Brings all modified animators into the timeline",
"timeline.timeline": "Instruktioner",
"menu.palette.load.default": "Standard",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Keymap loaded",
"dialog.convert_project.current_format": "Current Format",
"dialog.create_texture.rearrange_uv.desc": "Create a new UV arrangement to give every face its own spot on the texture",
- "dialog.create_texture.compress.desc": "Arrange the UV maps in a dense layout to minimize the texture size",
"dialog.create_texture.power.desc": "Lock the automatic texture size to a power-of-2, such as 64 or 128. This is required by some renderers",
"dialog.create_texture.double_use.desc": "If two elements already have the same UV space assigned, keep it that way in the new map",
"dialog.create_texture.padding.desc": "Add a small padding between the individual parts of the template",
@@ -1400,8 +1398,8 @@
"settings.status_bar_modifier_keys.desc": "Display context aware suggested modifier keys in the status bar",
"settings.ground_plane": "Ground Plane",
"settings.ground_plane.desc": "Show a floor plane below the model",
- "settings.preview_paste_behavior": "Default Preview Paste Behavior",
- "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the preview in Edit mode and multiple options are available",
+ "settings.preview_paste_behavior": "Default Viewport Paste Behavior",
+ "settings.preview_paste_behavior.desc": "Select the behavior when pasting something into the viewport in Edit mode and multiple options are available",
"settings.preview_paste_behavior.always_ask": "Always Ask",
"action.new_window": "New Window",
"action.new_window.desc": "Opens a new Blockbench window",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Jumping",
"panel.skin_pose.aiming": "Aiming",
"edit.loop_cut.direction": "Direction",
- "message.meshes_and_box_uv": "Meshes are not compatible with Box UV. Go to File > Project... and switch to Per-face UV.",
"data.texture_mesh": "Texture Mesh",
"generic.left": "Left",
"generic.right": "Right",
@@ -2081,7 +2078,6 @@
"dialog.animated_texture_editor.add_frame": "Add Frame",
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
"dialog.add_primitive.edge_size": "Edge Size",
"dialog.change_animation_speed.speed": "Speed",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
@@ -2137,5 +2133,97 @@
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "reference_image.toggle_playback": "Play/Pause",
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/uk.json b/lang/uk.json
index 84b662bde..4a5f2d8d8 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Перемикнути віддзеркалення UV на осі X вибраних кубів",
"menu.texture.blank": "Застосувати до сторін без текстур",
"dialog.scale.select_overflow": "Оберіть переповнення",
- "dialog.create_texture.compress": "Стиснути шаблон",
"action.action_control": "Контроль дій",
"action.action_control.desc": "Шукати та виконати будь-яку доступну дію",
"keybindings.recording": "Сполучення клавіш для запису",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Розкладку клавіш завантажено",
"dialog.convert_project.current_format": "Поточний формат",
"dialog.create_texture.rearrange_uv.desc": "Створити нову розкладку UV, щоб надати кожній стороні власне місце на текстурі",
- "dialog.create_texture.compress.desc": "Розташувати мапи UV щільно, щоб мінімізувати розмір текстури",
"dialog.create_texture.power.desc": "Блокувати автоматичний розмір текстури зі степенем 2, наприклад, 64 або 128. Це вимагається деякими візуалізаторами",
"dialog.create_texture.double_use.desc": "Якщо двом елементам уже призначено однаковий простір UV, залишити його таким у новій мапі",
"dialog.create_texture.padding.desc": "Додати невеликий відступ між окремими частинами шаблону",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Стрибаючи",
"panel.skin_pose.aiming": "Націлюючи",
"edit.loop_cut.direction": "Напрямок",
- "message.meshes_and_box_uv": "Меші несумісні з коробкою UV. Перейдіть до «Файл» > «Проєкт...» і перейдіть до «По сторонам UV».",
"data.texture_mesh": "Текстура мешу",
"generic.left": "Ліворуч",
"generic.right": "Праворуч",
@@ -2137,5 +2134,96 @@
"edit.solidify_mesh_selection.thickness": "Товщина",
"reference_image.sync_to_timeline": "Синхронізувати з часовою шкалою",
"reference_image.toggle_playback": "Відтворити/зупинити",
- "dialog.add_primitive.shape.beveled_cuboid": "Скошений куб"
+ "dialog.add_primitive.shape.beveled_cuboid": "Скошений куб",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/vi.json b/lang/vi.json
index 11d95f261..f69d4695b 100644
--- a/lang/vi.json
+++ b/lang/vi.json
@@ -287,7 +287,7 @@
"action.export_optifine_full": "Xuất JEM của OptiFine",
"action.export_optifine_full.desc": "Xuất toàn bộ mô hình thực thể OptiFine",
"action.export_obj": "Xuất ra mô hình OBJ",
- "action.export_obj.desc": "Xuất Wavefont OBJ để rendering",
+ "action.export_obj.desc": "Xuất Wavefont OBJ để kết xuất",
"action.settings_window": "Cài đặt...",
"action.settings_window.desc": "Mở hộp thoại cài đặt của Blockbench.",
"action.plugins_window": "Plugin...",
@@ -391,7 +391,7 @@
"menu.view.zoom": "Zoom",
"menu.view.background": "Hình nền",
"menu.view.screenshot": "Chụp hình",
- "menu.cube.color": "Đánh dấu mầu",
+ "menu.cube.color": "Đánh dấu màu",
"menu.cube.texture": "Kết cấu",
"menu.cube.texture.transparent": "Trong suốt",
"menu.cube.texture.blank": "Trống không",
@@ -574,7 +574,7 @@
"menu.keyframe.quaternion": "Quaternion",
"panel.animations": "Hoạt ảnh",
"panel.keyframe": "Khung hình chính",
- "panel.keyframe.type": "khung hình chính (%0)",
+ "panel.keyframe.type": "Khung hình chính (%0)",
"generic.delete": "Xoá",
"generic.rename": "Đổi tên",
"message.no_animation_selected": "Bạn phải chọn một hình ảnh động để làm điều này",
@@ -626,7 +626,7 @@
"action.fill_tool.desc": "Thùng sơn dùng để lấp mặt bằng một màu",
"action.eraser": "Tẩy",
"action.eraser.desc": "Công cụ tẩy sẽ thay thế màu sắc trên kết cấu với độ trong suốt",
- "action.color_picker": "Thuốc nhỏ mắt",
+ "action.color_picker": "Công cụ nhỏ mắt",
"action.color_picker.desc": "Công cụ để chọn màu điểm ảnh trên kết cấu của bạn",
"switches.mirror": "Gương UV",
"language_name": "Tiếng việt",
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "Chuyển đổi phản chiếu UV trên trục X của các khối đã chọn",
"menu.texture.blank": "Áp dụng cho mặt không có kết cấu",
"dialog.scale.select_overflow": "Chọn tràn",
- "dialog.create_texture.compress": "Nén mẫu",
"action.action_control": "Kiểm soát hành động",
"action.action_control.desc": "Tìm kiếm và thực hiện bất kỳ hành động có sẵn",
"keybindings.recording": "Ghi thao tác gõ",
@@ -971,7 +970,7 @@
"menu.preview.angle": "Góc nhìn",
"menu.preview.angle.initial": "Góc ban đầu",
"menu.preview.maximize": "Tối đa hóa",
- "panel.color.both": "Cả 2",
+ "panel.color.both": "Cả hai",
"uv_editor.copy_selection": "Sao chép lựa chọn",
"uv_editor.paste_selection": "Dán lựa chọn",
"uv_editor.copy_paste_tool.place": "Kiểm tra",
@@ -1149,7 +1148,6 @@
"message.keymap_loaded": "Đã tải sơ đồ bàn phím",
"dialog.convert_project.current_format": "Định dạng hiện tại",
"dialog.create_texture.rearrange_uv.desc": "Tạo một cách sắp xếp UV mới để cho mọi mặt có vị trí riêng trên kết cấu",
- "dialog.create_texture.compress.desc": "Sắp xếp các bản đồ UV theo bố cục dày đặc để giảm thiểu kích thước kết cấu",
"dialog.create_texture.power.desc": "Khóa kích thước họa tiết tự động thành lũy thừa 2, chẳng hạn như 64 hoặc 128. Một số trình kết xuất yêu cầu điều này",
"dialog.create_texture.double_use.desc": "Nếu hai phần tử đã được gán cùng một không gian UV, hãy giữ nguyên như vậy trong bản đồ mới",
"dialog.create_texture.padding.desc": "Thêm phần đệm nhỏ giữa các phần riêng lẻ của mẫu",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "Nhảy",
"panel.skin_pose.aiming": "Nhắm mục tiêu",
"edit.loop_cut.direction": "Phương hướng",
- "message.meshes_and_box_uv": "Lưới không tương thích với UV Box. Vào File> Project ... và chuyển sang Per-face UV.",
"data.texture_mesh": "kết cấu khung lưới",
"generic.left": "Trái",
"generic.right": "Phải",
@@ -1546,7 +1543,7 @@
"action.keyframe_column_select": "Chọn cột khung hình chính",
"action.keyframe_column_select.desc": "Chọn tất cả các khung hình chính trong dòng thời gian dọc theo cột bên dưới đầu phát",
"menu.uv": "UV",
- "menu.keyframe": "khung hình chính",
+ "menu.keyframe": "Khung hình chính",
"menu.palette.load.update": "Cập nhật bảng màu",
"menu.palette.load.update.desc": "Cập nhật bảng này với các màu của bảng Blockbench hiện tại",
"menu.timeline_marker.set_time": "Cài đặt thời gian...",
@@ -2043,99 +2040,190 @@
"settings.final_newline.desc": "Chèn ký tự dòng mới vào cuối tệp đã xuất",
"action.crop_layer_to_selection": "Cắt lớp để chọn",
"action.edit_mode_uv_overlay.desc": "Hiển thị bản đồ UV dưới dạng lớp phủ trong chế độ chỉnh sửa",
- "action.animation_onion_skin_selective": "Chọn lọc Skin Onion",
- "action.animation_onion_skin_selective.desc": "Chỉ hiển thị skin onion cho phần đã chọn của mô hình",
+ "action.animation_onion_skin_selective": "Chọn lọc da Onion",
+ "action.animation_onion_skin_selective.desc": "Chỉ hiển thị da onion cho phần đã chọn của mô hình",
"menu.image": "Hình ảnh",
"menu.texture.discard_changes": "Loại bỏ những thay đổi",
"menu.texture.discard_changes.desc": "Hủy bỏ tất cả các thay đổi chưa được lưu và tải phiên bản mới nhất từ tệp",
"panel.textures.images": "Hình ảnh",
- "dialog.advanced": "Advanced",
- "dialog.recommended_option": "recommended",
- "modifier_actions.snap_to_center": "Snap to Center",
- "modifier_actions.snap_to_pixels": "Snap to Pixels",
- "message.invalid_format.install_plugin": "Install plugin '%0'",
- "message.plugin_deprecated.message": "Are you sure you want to install this deprecated plugin?",
- "message.plugin_deprecated.install_anyway": "Install Anyway",
- "message.image_editor.not_found": "Could not find the selected image editor. Please select a different option.",
- "message.knife_tool.confirm": "Press %0 or click here to apply Knife Tool",
- "message.knife_tool.skipped_face": "Cannot cut between different faces. Include the edges or vertices between them!",
- "message.optimize_animation.keyframes_removed": "Removed %0 redundant keyframes",
- "message.optimize_animation.nothing_to_optimize": "Found nothing to optimize!",
- "message.duplicate_bone_copy_animation.title": "Copy Animation",
- "message.duplicate_bone_copy_animation.message": "The duplicated bone is animated in %0 animations. Do you want to copy the keyframes over to the new bone?",
- "message.auto_fix_mesh_edit.title": "Auto Fix",
- "message.auto_fix_mesh_edit.revert": "Revert Edit",
- "message.auto_fix_mesh_edit.overlapping_vertices": "Certain vertices have been moved into the same spot. How would you like to proceed?",
- "message.auto_fix_mesh_edit.concave_quads": "One or more quad faces are now concave, which can cause issues in UV-mapping and rendering. Blockbench can automatically fix it for you:",
- "message.auto_fix_mesh_edit.merge_vertices": "Merge Vertices",
- "message.auto_fix_mesh_edit.split_quads": "Split Quads",
- "message.load_images.add_image": "Add Image",
- "dialog.project.modded_entity_entity_class": "Entity Class",
+ "dialog.advanced": "Nâng cao",
+ "dialog.recommended_option": "Gợi ý",
+ "modifier_actions.snap_to_center": "Nối vào Giữa",
+ "modifier_actions.snap_to_pixels": "Nối vào các điểm ảnh",
+ "message.invalid_format.install_plugin": "Tải plugin '%0'",
+ "message.plugin_deprecated.message": "Bạn có chắc bạn muốn tải plugin không còn được dùng nữa hay không?",
+ "message.plugin_deprecated.install_anyway": "Vẫn tải",
+ "message.image_editor.not_found": "Không thể tìm thấy phần mềm chỉnh sửa ảnh đã chọn. Vui lòng chọn một phần mềm khác.",
+ "message.knife_tool.confirm": "Nhấn phím %0 hoặc nhấn vào đây để áp dụng Công Cụ Dao",
+ "message.knife_tool.skipped_face": "Không thể cắt giữa các mặt khác nhau. Hãy thêm các cạnh hoặc đỉnh giữa chúng!",
+ "message.optimize_animation.keyframes_removed": "Đã xóa %0 khung hình chính thừa",
+ "message.optimize_animation.nothing_to_optimize": "Không tìm thấy gì để tối ưu!",
+ "message.duplicate_bone_copy_animation.title": "Sao chép hoạt ảnh",
+ "message.duplicate_bone_copy_animation.message": "Phần xương được nhân bản chuyển động trong %0 hoạt hình. Bạn có muốn sao chép các khung hình chính qua cho phần xương mới?",
+ "message.auto_fix_mesh_edit.title": "Tự sửa chữa",
+ "message.auto_fix_mesh_edit.revert": "Hoàn tác chỉnh sửa",
+ "message.auto_fix_mesh_edit.overlapping_vertices": "Một số đỉnh đã bị di chuyển đến cùng một vị trí. Bạn muốn làm gì với điều đó?",
+ "message.auto_fix_mesh_edit.concave_quads": "Một hoặc nhiều mặt bốn đã bị lõm xuống, có thể dẫn đến các vấn đề trong bản đồ UV và kết xuất. Blockbench có thể tự động sửa nó cho bạn:",
+ "message.auto_fix_mesh_edit.merge_vertices": "Gộp các đỉnh lại",
+ "message.auto_fix_mesh_edit.split_quads": "Tách các mặt bốn",
+ "message.load_images.add_image": "Thêm ảnh",
+ "dialog.project.modded_entity_entity_class": "Cấp Thực thể",
"dialog.resize_texture.offset": "Offset",
- "dialog.animated_texture_editor.code_reference": "Code Reference",
- "dialog.animated_texture_editor.code_reference.about": "This code to implement the texture animation was generated as a reference and does not necessarily work without modification. Check out the documentation to learn more.",
- "dialog.animated_texture_editor.code_reference.docs": "Documentation",
- "dialog.animated_texture_editor.reframe": "Reframe",
- "dialog.animated_texture_editor.stride": "Frame Size",
- "dialog.animated_texture_editor.frames": "Number of Frames",
- "dialog.animated_texture_editor.add_frame": "Add Frame",
- "dialog.animated_texture_editor.resize_frames": "Resize Frames...",
- "dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
- "dialog.add_primitive.edge_size": "Edge Size",
- "dialog.change_animation_speed.speed": "Speed",
- "dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
- "dialog.optimize_animation.selection": "Selection",
- "dialog.optimize_animation.selection.selected_keyframes": "Selected Keyframes",
- "dialog.optimize_animation.selection.selected_animation": "Selected Animation",
- "dialog.optimize_animation.selection.all_animations": "All Animations",
- "dialog.optimize_animation.thresholds": "Threshold values",
- "dialog.import_obj.obj": "OBJ File",
- "dialog.import_obj.mtl": "MTL File",
- "dialog.import_obj.scale": "Scale",
- "layout.thumbnail": "Custom Thumbnail CSS",
- "settings.pixel_grid": "Pixel Grid",
- "settings.pixel_grid.desc": "Show texture pixel grid on elements in edit mode",
- "settings.image_editor_grid_size": "Image Editor Grid Size",
- "settings.image_editor_grid_size.desc": "Size of the large grid in the 2D image editor",
- "settings.ground_plane_double_side": "Ground Plane Double-sided",
- "settings.ground_plane_double_side.desc": "Make the ground plane visible from below",
- "settings.optifine_save_default_texture": "OptiFine JEM: Export selected texture",
- "settings.optifine_save_default_texture.desc": "Export the selected texture as the default texture of the model",
- "action.slider_color_select_threshold": "Color Select Threshold",
+ "dialog.animated_texture_editor.code_reference": "Mã tương quan",
+ "dialog.animated_texture_editor.code_reference.about": "Cái mã để thực hiện hoạt ảnh kết cấu được tạo ra như là một tham khảo và không nhất thiết hoạt động mà không có sự thay đổi. Đọc tài liệu để biết thêm.",
+ "dialog.animated_texture_editor.code_reference.docs": "Tài liệu",
+ "dialog.animated_texture_editor.reframe": "Đóng khung lại",
+ "dialog.animated_texture_editor.stride": "Kích thước khung",
+ "dialog.animated_texture_editor.frames": "Số lượng khung",
+ "dialog.animated_texture_editor.add_frame": "Thêm khung",
+ "dialog.animated_texture_editor.resize_frames": "Chỉnh tỉ lệ khung lại...",
+ "dialog.animated_texture_editor.apply": "Áp dụng",
+ "dialog.add_primitive.edge_size": "Kích thước cạnh",
+ "dialog.change_animation_speed.speed": "Tốc độ",
+ "dialog.change_animation_speed.adjust_snapping": "Chỉnh sửa việc Nối",
+ "dialog.optimize_animation.selection": "Lựa chọn",
+ "dialog.optimize_animation.selection.selected_keyframes": "Khung hình chính được lựa chọn",
+ "dialog.optimize_animation.selection.selected_animation": "Hoạt ảnh được lựa chọn",
+ "dialog.optimize_animation.selection.all_animations": "Tất cả mọi hoạt hình",
+ "dialog.optimize_animation.thresholds": "Ngưỡng các giá trị",
+ "dialog.import_obj.obj": "Tệp OBJ",
+ "dialog.import_obj.mtl": "Tệp MTL",
+ "dialog.import_obj.scale": "Tỉ lệ",
+ "layout.thumbnail": "Tùy chỉnh hình thu nhỏ CSS",
+ "settings.pixel_grid": "Lưới đồ thị điểm ảnh",
+ "settings.pixel_grid.desc": "Hiển thị lưới đồ thị kết cấu điểm ảnh trên các phần tử trong chế độ chỉnh sửa",
+ "settings.image_editor_grid_size": "Kích thước lưới đồ thị của công cụ chỉnh sửa ảnh",
+ "settings.image_editor_grid_size.desc": "Kích thước lưới đồ thị lớn trong công cụ chỉnh sửa ảnh 2D",
+ "settings.ground_plane_double_side": "Mặt phẳng sàn hai mặt",
+ "settings.ground_plane_double_side.desc": "Làm mặt phẳng sàn nhìn thấy được từ phía dưới lên",
+ "settings.optifine_save_default_texture": "OptiFine JEM: Xuất các kết cấu được chọn",
+ "settings.optifine_save_default_texture.desc": "Xuất các kết cấu được chọn như là kết cấu mặc định của mô hình",
+ "action.slider_color_select_threshold": "Ngưỡng chọn màu",
"action.slider_color_select_threshold.desc": "How close the color of a neighboring pixel has to be to get selected by color or wand select",
- "action.stretch_tool": "Stretch",
- "action.stretch_tool.desc": "Tool to select and stretch elements",
- "action.knife_tool": "Knife Tool",
- "action.knife_tool.desc": "Tool to cut mesh faces into smaller pieces",
- "action.duplicate_project": "Duplicate Project",
- "action.duplicate_project.desc": "Creates a copy of the open project",
- "action.transform_space.parent": "Parent",
- "action.transform_pivot_space": "Pivot Transform Space",
- "action.solidify_mesh_selection": "Solidify Faces",
- "action.solidify_mesh_selection.desc": "Solidify the selected faces of the mesh",
- "action.animated_texture_editor": "Flipbook Animation...",
- "action.animated_texture_editor.desc": "Setup or edit the flipbook animation of the selected texture",
- "action.center_individual_pivots": "Center Individual Pivots",
- "action.center_individual_pivots.desc": "Set the pivot point of each selected element to its center",
- "action.uv_cycle": "Cycle UV",
- "action.uv_cycle.desc": "Cycle through the order of UV vertices without changing the UV positions",
- "action.uv_cycle_invert": "Cycle Invert UV",
- "action.uv_cycle_invert.desc": "Reverse the order of UV vertices without changing the UV positions",
+ "action.stretch_tool": "Kéo giãn",
+ "action.stretch_tool.desc": "Công cụ để chọn và kéo giãn các phần tử",
+ "action.knife_tool": "Công cụ dao",
+ "action.knife_tool.desc": "Công cụ để cắt các mặt khung lưới thành các miếng nhỏ hơn",
+ "action.duplicate_project": "Nhân bản dự án",
+ "action.duplicate_project.desc": "Tạo một bản sao của dự án",
+ "action.transform_space.parent": "Phụ huynh",
+ "action.transform_pivot_space": "Tâm quay thay đổi không gian",
+ "action.solidify_mesh_selection": "Làm đông đặc các mặt",
+ "action.solidify_mesh_selection.desc": "Làm đông đặc các mặt được chọn của khung lưới",
+ "action.animated_texture_editor": "Hoạt ảnh Sách lật...",
+ "action.animated_texture_editor.desc": "Cài đặt hoặc chỉnh sửa hoạt ảnh sách lật của kết cấu được chọn",
+ "action.center_individual_pivots": "Căn giữa tâm quay riêng lẻ",
+ "action.center_individual_pivots.desc": "Đặt tâm quay của từng phần tử được chọn vào tâm của nó",
+ "action.uv_cycle": "Tuần hoàn UV",
+ "action.uv_cycle.desc": "Tuần hoàn qua thứ tự của các đỉnh UV mà không thay đổi vị trí của UV",
+ "action.uv_cycle_invert": "Tuần hoàn UV ngược",
+ "action.uv_cycle_invert.desc": "Tuần hoàn ngược qua thứ tự của các đỉnh UV mà không thay đổi vị trí của UV",
"action.slider_animation_controller_speed": "Controller Playback Speed",
"action.slider_animation_controller_speed.desc": "The playback speed of animation controllers in percent",
- "action.optimize_animation": "Optimize Animation",
- "action.optimize_animation.desc": "Optimize the current animation and reduce the keyframe count",
+ "action.optimize_animation": "Tối ưu hóa hoạt ảnh",
+ "action.optimize_animation.desc": "Tối ưu hóa hoạt ảnh hiện tại và giảm số khung hình chính",
"action.change_animation_speed": "Change Animation Speed...",
- "action.change_animation_speed.desc": "Change the speed of the selected animation",
- "timeline.select_particle_file": "Select Particle File",
- "timeline.select_sound_file": "Select Sound File",
- "menu.cube.texture.default": "Default",
- "menu.texture.particle.clear": "Stop using for Particles",
- "menu.texture.use_as_default": "Set as Default",
- "menu.texture.use_as_default.clear": "Unassign as Default",
- "menu.toolbar.overflow": "Toolbar Overflow",
- "edit.solidify_mesh_selection.thickness": "Thickness",
- "reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause"
+ "action.change_animation_speed.desc": "Thay đổi tốc độ của hoạt ảnh được chọn",
+ "timeline.select_particle_file": "Chọn tệp hạt",
+ "timeline.select_sound_file": "Chọn tệp âm thanh",
+ "menu.cube.texture.default": "Mặc định",
+ "menu.texture.particle.clear": "Ngừng sử dụng cho các hạt",
+ "menu.texture.use_as_default": "Đặt như mặc định",
+ "menu.texture.use_as_default.clear": "Bỏ gán như mặc định",
+ "menu.toolbar.overflow": "Thanh công cụ tràn",
+ "edit.solidify_mesh_selection.thickness": "Độ dày",
+ "reference_image.sync_to_timeline": "Đồng bộ với dòng thời gian",
+ "reference_image.toggle_playback": "Bật/Tạm dừng",
+ "dialog.add_primitive.shape.beveled_cuboid": "Khối bị vát",
+ "dialog.ignore_all": "Bỏ qua hết",
+ "data.texture_group": "Nhóm kết cấu",
+ "data.animation": "Hoạt ảnh",
+ "generic.on": "Bật",
+ "generic.off": "Tắt",
+ "format.free.info.3d_printing": "In 3D",
+ "message.invalid_file.merge_conflict": "Tệp này chứa các xung đột hợp nhất Git chưa được giải quyết.",
+ "dialog.expand_texture_selection.radius": "Số lượng",
+ "dialog.expand_texture_selection.corner": "Hình dạng Góc",
+ "dialog.expand_texture_selection.corner.round": "Tròn",
+ "dialog.expand_texture_selection.corner.square": "Vuông",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Hợp nhất thành",
+ "keybindings.variation_conflict": "Sự biến đổi xung đột với các phím tổ hợp chính",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench thường xuyên lưu dự án đang mở trong nền để phục hồi trong trường hợp máy tính bị sập. Cài đặt quãng nghỉ bằng giây. Cài băng 0 để tắt việc lưu.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Bật hiển thị chế độ da onion trong công cụ chỉnh sửa 2D",
+ "action.expand_texture_selection": "Mở rộng lựa chọn kết cấu",
+ "action.expand_texture_selection.desc": "Mở rộng hoặc thu lại lựa chọn kết cấu",
+ "action.switch_tabs.reverse_order": "Đảo ngược thứ tự",
+ "action.save_project_incremental": "Lưu dự án với Sự tăng",
+ "action.save_project_incremental.desc": "Lưu mô hình hiện tại như một tệp dự án với một sự tăng (VD: project_2.bbmodel)",
+ "action.copy.multiple": "Sao chép hết",
+ "action.copy.multiple.desc": "Sao chép mọi dữ liệu đã có một cách riêng lẻ",
+ "action.paste.multiple": "Dán hết",
+ "action.randomize_marker_colors": "Ngẫu nhiên hóa màu của đánh dấu",
+ "action.cube_light_emission": "Phát xạ ánh sáng",
+ "action.cube_light_emission.desc": "Thay đổi sự phát xạ của các khối đã chọn, như một giá trị giữa 0 đến 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Chỉ xoay",
+ "action.create_texture_group": "Tạo nhóm kết cấu",
+ "action.create_texture_group.desc": "Tạo một nhóm cho những kết cấu của bạn",
+ "action.uv_maximize.all_faces": "Ảnh hưởng đến mọi mặt",
+ "action.retarget_animators": "Nhắm lại các hoạt ảnh",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Hợp nhất hoạt ảnh",
+ "action.merge_animation.desc": "Hợp hoạt ảnh với một hoạt ảnh khác",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Tải lại",
+ "switches.autouv.alt": "Liên quan",
+ "display.rotation_pivot": "Tâm quay xoay",
+ "display.scale_pivot": "Tâm quay tỉ lệ",
+ "display.reference.fox": "Cáo",
+ "display.reference.eating": "Đang ăn",
+ "preview_scene.sky": "Bầu trời",
+ "preview_scene.space": "Không gian",
+ "preview_scene.minecraft_ocean": "Biển",
+ "message.import_palette.selection_only": "Chỉ được lựa chọn",
+ "dialog.blend_transition_edit.ease_in_out": "Bắt đầu và kết thúc chậm (%0)",
+ "dialog.blend_transition_edit.generate": "Tạo...",
+ "dialog.blend_transition_edit.generate.learn_more": "Thông tin thêm và xem trước",
+ "dialog.blend_transition_edit.generate.curve": "Loại hoạt hình",
+ "dialog.blend_transition_edit.generate.steps": "Khung hình chính",
+ "settings.fps_limit": "Giới hạn FPS",
+ "settings.fps_limit.desc": "Giới hạn số khung mỗi giây mà Blockbench kết xuất. Số khung mỗi giây thực sự thì bị giới hạn bởi việc thiết bị của bạn có thể hiện thị cái gì.",
+ "settings.outliner_reveal_on_select": "Tiết lộ các phần tử khi lựa chọn",
+ "settings.outliner_reveal_on_select.desc": "Tiết lộ các phần tử trong bản sắp xếp khi được lựa chọn",
+ "settings.java_export_pivots": "Xuất tâm quay trong các mô hình Java khối/vật phẩm",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/zh.json b/lang/zh.json
index 29376516d..999c13448 100644
--- a/lang/zh.json
+++ b/lang/zh.json
@@ -10,7 +10,7 @@
"data.cube": "方块",
"data.group": "分组",
"data.texture": "纹理",
- "data.plugin": "插入",
+ "data.plugin": "插件",
"data.preview": "预览",
"data.toolbar": "工具栏",
"data.image": "图片",
@@ -52,7 +52,7 @@
"message.file_not_found.message": "Blockbench 找不到请求的文件。请确保它保存在本地而不是云中。",
"message.screenshot.title": "截屏",
"message.screenshot.clipboard": "剪贴板",
- "message.screenshot.right_click": "右键或长按截图复制",
+ "message.screenshot.right_click": "右键或长按截屏复制",
"message.invalid_file.title": "文件无效",
"message.invalid_file.message": "无法打开 Json 文件:%0",
"message.invalid_model.title": "模型文件无效",
@@ -119,7 +119,7 @@
"dialog.scale.title": "缩放模型",
"dialog.scale.axis": "轴",
"dialog.scale.clipping": "模型裁剪:您的模型超出工作区范围",
- "dialog.scale.confirm": "应用",
+ "dialog.scale.confirm": "比例",
"dialog.plugins.title": "插件",
"dialog.plugins.installed": "已安装",
"dialog.plugins.available": "可用",
@@ -183,8 +183,8 @@
"settings.backup_interval.desc": "自动备份的间隔 分钟",
"settings.origin_size": "枢轴长度",
"settings.origin_size.desc": "枢轴控制点长度",
- "settings.control_size": "枢轴大小",
- "settings.control_size.desc": "枢轴控制点大小",
+ "settings.control_size": "变换装置尺寸",
+ "settings.control_size.desc": "枢轴装置控制点尺寸",
"settings.display_skin": "显示皮肤",
"settings.display_skin.desc": "用于显示玩家参考模型的皮肤",
"settings.shading": "阴影(预览)",
@@ -205,8 +205,8 @@
"settings.undo_limit.desc": "可撤消次数",
"settings.local_move": "相对轴移动",
"settings.local_move.desc": "如果可能,将根据自身的轴进行移动已旋转元素",
- "settings.canvas_unselect": "点击画布取消选择",
- "settings.canvas_unselect.desc": "点击画布时取消所有元素选择",
+ "settings.canvas_unselect": "点击背景时取消选择",
+ "settings.canvas_unselect.desc": "点击背景时取消所有元素选择",
"settings.paint_side_restrict": "笔刷限制面",
"settings.paint_side_restrict.desc": "限制笔刷仅在当前面进行绘画",
"settings.autouv": "自动 UV",
@@ -352,10 +352,10 @@
"action.zoom_reset.desc": "将缩放重置为默认值 100%",
"action.reset_interface": "重置界面",
"action.reset_interface.desc": "重置 GUI 的大小和位置",
- "action.screenshot_model": "截图模型",
- "action.screenshot_model.desc": "从当前角度拍摄模型剪裁过的截图",
- "action.screenshot_app": "应用截图",
- "action.screenshot_app.desc": "截取整个应用程序的截图",
+ "action.screenshot_model": "截屏模型",
+ "action.screenshot_model.desc": "从当前角度拍摄模型剪裁过的截屏",
+ "action.screenshot_app": "应用截屏",
+ "action.screenshot_app.desc": "截取整个应用程序的截屏",
"action.import_texture": "导入纹理",
"action.import_texture.desc": "从本地导入一个或多个纹理",
"action.create_texture": "创建纹理",
@@ -369,9 +369,9 @@
"action.rescale_toggle": "重置缩放",
"action.rescale_toggle.desc": "根据当前旋转值重新缩放块",
"action.bone_reset_toggle": "重置骨骼",
- "action.bone_reset_toggle.desc": "阻止骨骼显示来自父模型的立方体",
+ "action.bone_reset_toggle.desc": "阻止骨骼显示来自父级型的立方体",
"action.reload": "重启 Blockbench",
- "action.reload.desc": "重启 Blockbench。如果你有未保存的项目将会丢失",
+ "action.reload.desc": "重启 Blockbench。你未保存的项目将会丢失",
"menu.file": "文件",
"menu.edit": "编辑",
"menu.transform": "变换",
@@ -390,7 +390,7 @@
"menu.display.remove_preset": "移除预设",
"menu.view.zoom": "缩放",
"menu.view.background": "背景",
- "menu.view.screenshot": "截图",
+ "menu.view.screenshot": "截屏",
"menu.cube.color": "标记颜色",
"menu.cube.texture": "纹理",
"menu.cube.texture.transparent": "透明度",
@@ -409,7 +409,7 @@
"menu.preview.background.load": "加载",
"menu.preview.background.position": "立方体位置",
"menu.preview.background.lock": "锁定视角",
- "menu.preview.screenshot": "截图",
+ "menu.preview.screenshot": "截屏",
"menu.preview.perspective": "透视投影",
"menu.preview.perspective.normal": "正常",
"menu.preview.quadview": "四视图",
@@ -465,7 +465,7 @@
"display.reference.baby_zombie": "小僵尸",
"display.reference.armor_stand_small": "小型盔甲架",
"display.reference.monitor": "普通",
- "display.reference.bow": "弓",
+ "display.reference.bow": "拉开的弓",
"display.reference.block": "方块",
"display.reference.frame": "物品展示框",
"display.reference.inventory_nine": "3x3",
@@ -509,7 +509,7 @@
"action.uv_mirror_x.desc": "在 X 轴上镜像此面的 UV",
"action.uv_mirror_y": "UV 镜像 Y 轴",
"action.uv_mirror_y.desc": "在 Y 轴上镜像此面的 UV",
- "action.uv_transparent": "透明化",
+ "action.uv_transparent": "删除面",
"action.uv_transparent.desc": "删除当前面",
"action.uv_reset": "重置面",
"action.uv_reset.desc": "重置当前面",
@@ -519,8 +519,8 @@
"action.auto_cullface.desc": "将此面的剔除面设置为自身",
"action.face_tint": "着色",
"action.face_tint.desc": "为当前面启用着色选项",
- "menu.toolbar.edit": "自定义",
- "menu.toolbar.reset": "重置",
+ "menu.toolbar.edit": "自定义工具栏",
+ "menu.toolbar.reset": "重置工具栏",
"uv_editor.rotated": "旋转",
"uv_editor.auto_cull": "剔除面",
"uv_editor.copied": "复制面",
@@ -531,7 +531,7 @@
"uv_editor.autouv": "自动尺寸",
"uv_editor.mirrored": "镜像",
"uv_editor.to_all": "应用到所有面",
- "uv_editor.transparent": "设置透明度",
+ "uv_editor.transparent": "设置为透明",
"uv_editor.cullface_on": "开启面剔除",
"uv_editor.cullface_off": "关闭面剔除",
"uv_editor.tint_on": "开启着色",
@@ -616,8 +616,8 @@
"mode.paint": "绘画模式",
"mode.display": "显示调整",
"mode.animate": "动画模式",
- "status_bar.recording_gif": "正在录制 GIF",
- "status_bar.processing_gif": "正在处理 GIF",
+ "status_bar.recording_gif": "录制中",
+ "status_bar.processing_gif": "处理中",
"settings.backup_retain": "备份保留期限",
"settings.backup_retain.desc": "设置 Blockbench 将旧备份保留多长时间",
"action.rotate_tool": "旋转",
@@ -641,7 +641,6 @@
"action.toggle_mirror_uv.desc": "切换所选块于 X 轴的 UV 镜像",
"menu.texture.blank": "应用到无纹理面",
"dialog.scale.select_overflow": "选择溢出",
- "dialog.create_texture.compress": "压缩模板",
"action.action_control": "动作控制",
"action.action_control.desc": "搜索并且执行任何可用的操作",
"keybindings.recording": "录制快捷键",
@@ -768,7 +767,7 @@
"action.remove_blank_faces.desc": "删除所有选中的无纹理面",
"web.download_app": "下载 App",
"uv_editor.turned": "已转映射",
- "display.reference.crossbow": "弩",
+ "display.reference.crossbow": "拉开的弩",
"dialog.settings.search_results": "搜索结果",
"settings.animation_snap": "动画捕捉",
"settings.animation_snap.desc": "动画时间轴中关键帧的默认捕捉间隔,单位为每秒帧数。这也可以根据动画进行更改。默认值为 24。",
@@ -1144,13 +1143,12 @@
"dialog.toolbar_edit.hidden_tools": "某些工具被自动隐藏,因为在当前项目、格式、或其他因素下不可用。",
"settings.camera_near_plane": "摄像机靠近平面",
"settings.camera_near_plane.desc": "物体渲染的相机的最小距离。较高的值会减少 Z-fighting。默认值为 1。",
- "mode.start.keymap_preference.desc": "如果您是 Blockbench 的新手且来自另一个 3D 程序,您可以选择一个键盘映射以使您的转换更容易。可稍后在设置中更改键盘映射或单个键绑定。",
+ "mode.start.keymap_preference.desc": "如果您是 Blockbench 的新手且曾使用其他 3D 程序,您可以选择一个键盘映射以使您的转换更容易。稍后可在设置中更改键盘映射或单个键绑定。",
"message.load_keymap": "你确定要加载此键盘映射吗?这会覆盖你当前的键位绑定。",
"message.keymap_loaded": "已加载键盘映射",
"dialog.convert_project.current_format": "当前格式",
"dialog.create_texture.rearrange_uv.desc": "创建一个新的 UV 排列,以在材质上显示每一个面",
- "dialog.create_texture.compress.desc": "使UV贴图密集排列以缩小贴图大小",
- "dialog.create_texture.power.desc": "将自动材质大小锁定为 2 的几次幂,例如 64 或 128。这是某些渲染器所要求的",
+ "dialog.create_texture.power.desc": "将自动材质大小锁定为 2 的几次幂,例如 64 或 128。以适应某些渲染器",
"dialog.create_texture.double_use.desc": "如果两个元素已经分配了相同的 UV 空间,请在新贴图中保持这种方式",
"dialog.create_texture.padding.desc": "在模板的各个部分之间填充一个小空格",
"dialog.create_texture.resolution.desc": "材质的宽度和高度",
@@ -1217,8 +1215,8 @@
"menu.animation.flip_keyframes": "翻转关键帧",
"menu.mobile_keyboard.disable_all": "禁用所有",
"panel.keyframe.toggle_uniform_scale": "切换统一比例",
- "camera_angle.common_isometric_right": "等距右 (2:1)",
- "camera_angle.common_isometric_left": "等轴向左 (2:1)",
+ "camera_angle.common_isometric_right": "等距右 (2:1)",
+ "camera_angle.common_isometric_left": "等距左 (2:1)",
"camera_angle.true_isometric_right": "真等距右(30°)",
"camera_angle.true_isometric_left": "真等距左(30°)",
"menu.help.wiki": "Blockbench Wiki",
@@ -1342,7 +1340,7 @@
"action.split_mesh.desc": "将网格的选定面拆分为新网格",
"action.merge_vertices": "合并顶点",
"action.merge_vertices.desc": "将所选顶点合并到第一个选定顶点的位置",
- "action.view_mode.normal": "普通面",
+ "action.view_mode.normal": "置面坐标系",
"action.snap_uv_to_pixels": "将 UV 捕捉到像素",
"action.snap_uv_to_pixels.desc": "将选定的 UV 顶点捕捉到像素网格",
"menu.file.import.import_open_project": "导入打开项目",
@@ -1408,7 +1406,7 @@
"action.export_collada": "导出Collada模型(dae)",
"action.export_collada.desc": "将模型导出为dae格式以用于其他3D软件",
"action.paint_mode_uv_overlay": "UV 覆盖",
- "action.paint_mode_uv_overlay.desc": "在编辑模式下以覆盖形式显示 UV 贴图",
+ "action.paint_mode_uv_overlay.desc": "在绘画模式下以覆盖形式显示 UV 贴图",
"action.bake_animation_into_model": "烘焙动画到模型",
"action.bake_animation_into_model.desc": "将当前显示的动画帧复制到模型中。只应用旋转和位置,忽略缩放。",
"action.keyframe_interpolation.step": "步",
@@ -1438,7 +1436,6 @@
"panel.skin_pose.jumping": "跳跃",
"panel.skin_pose.aiming": "瞄准",
"edit.loop_cut.direction": "方向",
- "message.meshes_and_box_uv": "网格与箱型UV 不兼容。 转到文件>项目...并切换到单面UV。",
"data.texture_mesh": "纹理网格",
"generic.left": "左侧",
"generic.right": "右侧",
@@ -1553,9 +1550,9 @@
"uv_editor.scale_uv": "缩放 UV",
"action.preview_scene": "预览场景",
"action.preview_scene.desc": "更改模型预览场景",
- "preview_scene.minecraft_overworld": "Minecraft 主世界",
+ "preview_scene.minecraft_overworld": "主世界",
"preview_scene.minecraft_nether": "Minecraft 下界",
- "preview_scene.minecraft_end": "Minecraft 末地",
+ "preview_scene.minecraft_end": "末地",
"dialog.project.modded_entity_flip_y": "Y轴翻转",
"preview_scene.studio": "工作室",
"format.image": "图像",
@@ -1595,7 +1592,7 @@
"action.blend_mode.hard_light": "强光",
"action.blend_mode.difference": "差异",
"action.copy_brush": "复制画笔",
- "action.copy_brush.desc": "刷来复制纹理的一部分或绘制图案",
+ "action.copy_brush.desc": "使用笔刷来复制纹理的一部分或绘制图案。按住Ctrl并点击以选择复制源。",
"action.validator_window": "查看模型问题...",
"action.validator_window.desc": "打开验证器,列出当前模型的问题。",
"action.cancel_gif": "取消 GIF",
@@ -1612,13 +1609,13 @@
"menu.mirror_painting.local.desc": "在本地空间中为每个元素启用镜像绘制",
"menu.mirror_painting.texture_frames": "动画纹理帧",
"menu.mirror_painting.texture_frames.desc": "将笔画镜像到动画纹理的每一帧",
- "format.bedrock_block.info.size_limit": "块的总大小在所有维度上限制为 30 像素。 这使你可以在所有方向上偏离块中心 7 个像素。",
+ "format.bedrock_block.info.size_limit": "块的总大小在所有维度上限制为 30 像素。 上线最多可以在所有方向上偏离块中心 7 个像素。",
"format.bedrock_block.info.textures": "在Blockbench中,你可以给一个方块运用多个纹理,但是你需要在行为包中进行额外设置才能够在游戏中正常使用",
"format.image.desc": "在2D图像编辑器中编辑图像",
"generic.delete_all": "删除所有",
- "message.child_model_only.open": "打开父项",
+ "message.child_model_only.open": "打开父级",
"message.child_model_only.open_with_textures": "打开父项并应用纹理",
- "dialog.project.credit": "归因",
+ "dialog.project.credit": "制作信息",
"dialog.convert_project.create_copy": "创建副本",
"dialog.texture.frame_time": "帧时间",
"dialog.texture.frame_time.desc": "设置每帧可见的时长,以刻度为单位。 每个刻度为 1/20 秒。",
@@ -1644,23 +1641,23 @@
"dialog.predicate_overrides.add_predicate": "添加谓词",
"dialog.predicate_overrides.generate_overrides": "生成覆写",
"dialog.predicate_overrides.confirm_delete": "您确定要删除所有覆写吗?",
- "dialog.predicate_overrides.predicate.angle": "Compass Angle",
- "dialog.predicate_overrides.predicate.blocking": "Is Blocking",
- "dialog.predicate_overrides.predicate.broken": "Is Broken",
- "dialog.predicate_overrides.predicate.cast": "Is Cast",
- "dialog.predicate_overrides.predicate.cooldown": "Cooldown",
- "dialog.predicate_overrides.predicate.damage": "Damage",
- "dialog.predicate_overrides.predicate.damaged": "Is Damaged",
- "dialog.predicate_overrides.predicate.lefthanded": "Is Left-Handed",
- "dialog.predicate_overrides.predicate.pull": "Pull Amount",
- "dialog.predicate_overrides.predicate.pulling": "Is Pulling",
- "dialog.predicate_overrides.predicate.charged": "Is Charged",
- "dialog.predicate_overrides.predicate.firework": "Has Firework",
- "dialog.predicate_overrides.predicate.throwing": "Ready to Throw",
+ "dialog.predicate_overrides.predicate.angle": "指南针角度",
+ "dialog.predicate_overrides.predicate.blocking": "已遮挡",
+ "dialog.predicate_overrides.predicate.broken": "已损坏",
+ "dialog.predicate_overrides.predicate.cast": "已施出",
+ "dialog.predicate_overrides.predicate.cooldown": "冷却中",
+ "dialog.predicate_overrides.predicate.damage": "损坏",
+ "dialog.predicate_overrides.predicate.damaged": "已损坏",
+ "dialog.predicate_overrides.predicate.lefthanded": "左手",
+ "dialog.predicate_overrides.predicate.pull": "拉伸值",
+ "dialog.predicate_overrides.predicate.pulling": "正在拉伸",
+ "dialog.predicate_overrides.predicate.charged": "已拉开",
+ "dialog.predicate_overrides.predicate.firework": "有火箭",
+ "dialog.predicate_overrides.predicate.throwing": "准备好投掷",
"dialog.predicate_overrides.predicate.time": "当日时间",
- "dialog.predicate_overrides.predicate.custom_model_data": "Custom Model Data",
+ "dialog.predicate_overrides.predicate.custom_model_data": "自定义模型信息",
"dialog.predicate_overrides.predicate.level": "光照强度",
- "dialog.predicate_overrides.predicate.filled": "Bundle Fill Level",
+ "dialog.predicate_overrides.predicate.filled": "收纳袋装满程度",
"dialog.predicate_overrides.predicate.tooting": "Tooting",
"settings.model_export_scale": "模型导出比例",
"settings.model_export_scale.desc": "导出 glTF、DAE 和 FBX 模型的缩放比例。默认为 16,即在导出时将 16 个 Blockbench 单位转换为 1 米。",
@@ -1685,7 +1682,7 @@
"uv_editor.tint.info": "启用着色可以让 Minecraft 进行相应面的着色处理。原版仅能对特定方块或物品进行着色,例如树叶块、红石粉,且值仅能为 0。",
"uv_editor.cullface.info": "启用剔除面可以让此方块的面在特定方向存在相邻方块时不进行渲染,优化游戏性能。",
"uv_editor.material_instance.info": "材质实例可以设置自定义名称。该名称可以在行为包中的JSON文件中使用,以便为特点的面指定特定的纹理和材质。",
- "display.reference.frame_invisible": "物品展示框(隐身)",
+ "display.reference.frame_invisible": "物品展示框(隐形)",
"data.settings_profile": "配置",
"message.display_skin.invalid_name": "找不到名为 \"%0\" 的 Minecraft 账号。",
"dialog.load_plugins_from_query.title": "加载插件",
@@ -1695,16 +1692,16 @@
"dialog.select_model.cubes": "多立方",
"dialog.settings.create_profile": "创建配置...",
"settings_profile.confirm_delete": "确定删除此配置?",
- "settings_profile.condition.type.selectable": "Manually Selectable",
- "settings.interface_mode": "用户界面模式",
+ "settings_profile.condition.type.selectable": "手动可选",
+ "settings.interface_mode": "UI模式",
"settings.interface_mode.desc": "用户界面模式。重新启动 Blockbench 以应用改动",
"settings.interface_mode.auto": "自动",
"settings.interface_mode.desktop": "桌面",
"settings.interface_mode.mobile": "移动设备",
- "settings.paint_through_transparency": "透明绘画穿透",
+ "settings.paint_through_transparency": "穿过透明部分绘画",
"settings.paint_through_transparency.desc": "当 Alpha 通道锁定时,笔刷将穿透透明的区域",
"action.tab_overview": "标签页总览",
- "action.tab_overview.desc": "查看网格中所有打开的标签页并跳转至其中一个",
+ "action.tab_overview.desc": "查看所有打开的标签页并跳转至其中一个",
"action.slider_color_red": "红色",
"action.slider_color_green": "绿色",
"action.slider_color_blue": "蓝色",
@@ -1715,28 +1712,28 @@
"action.animation_controller_preview_mode.manual": "手动预览",
"action.animation_controller_preview_mode.play": "自动播放",
"action.keyframe_interpolation.bezier": "贝塞尔",
- "action.keyframe_bezier_linked": "链接贝塞尔手柄",
- "action.keyframe_bezier_linked.desc": "Connect the right and left keyframe bézier handle",
- "action.reset_keyframe_handles": "Reset Keyframe Handles",
- "action.reset_keyframe_handles.desc": "重置已选中贝塞尔手柄",
+ "action.keyframe_bezier_linked": "连接贝塞尔手柄",
+ "action.keyframe_bezier_linked.desc": "连接左和右关键帧的贝塞尔手柄",
+ "action.reset_keyframe_handles": "重置关键帧手柄",
+ "action.reset_keyframe_handles.desc": "重置已选中关键帧的贝塞尔手柄",
"action.looped_animation_playback": "循环播放",
"action.looped_animation_playback.desc": "无限循环预览动画",
- "timeline.bind_to_actor": "Bind to Actor",
- "animation_controllers.select_preset": "Select a controller preset...",
- "animation_controllers.state.animations": "Animations",
+ "timeline.bind_to_actor": "绑定于演员",
+ "animation_controllers.select_preset": "选用手柄预制…",
+ "animation_controllers.state.animations": "动画",
"animation_controllers.state.particles": "粒子",
"animation_controllers.state.sounds": "音效",
- "animation_controllers.state.on_entry": "On Entry",
- "animation_controllers.state.on_exit": "On Exit",
+ "animation_controllers.state.on_entry": "进入时",
+ "animation_controllers.state.on_exit": "退出时",
"animation_controllers.state.transitions": "过渡动画",
"animation_controllers.state.condition": "条件",
"animation_controllers.state.blend_transition": "混合时间",
"animation_controllers.state.shortest_path": "按最短的路径混合",
"animation_controllers.state.edit_transition": "编辑过渡动画",
- "menu.color_picker.picker_type": "Picker Type",
- "menu.color_picker.picker_type.square": "Square",
- "menu.color_picker.picker_type.wheel": "Wheel",
- "menu.color_picker.slider_mode": "Slider Mode",
+ "menu.color_picker.picker_type": "拾色器类型",
+ "menu.color_picker.picker_type.square": "正方形",
+ "menu.color_picker.picker_type.wheel": "圆轮",
+ "menu.color_picker.slider_mode": "滑块模式",
"menu.color_picker.slider_mode.hsv": "色相、饱和度、明度",
"menu.color_picker.slider_mode.rgb": "RGB",
"menu.texture.render_mode.additive": "添加",
@@ -1744,8 +1741,8 @@
"panel.animation_controllers": "动画控制器",
"display.preset.armor_stand": "地面(盔甲架)",
"data.file_path": "文件路径",
- "dialog.extrude.orientation": "Orientation",
- "dialog.extrude.orientation.upright": "Upright",
+ "dialog.extrude.orientation": "坐标系",
+ "dialog.extrude.orientation.upright": "直立",
"dialog.extrude.orientation.flat": "平坦",
"dialog.scale.box_uv_warning": "缩放 Box UV 模型可能会破坏模型的UV,请尝试在外部缩放你的模型,或者在 文件 >项目 中切换到逐面UV模式。",
"dialog.create_gif.format": "格式",
@@ -1753,14 +1750,14 @@
"dialog.create_gif.format.png_sequence": "PNG 序列",
"dialog.create_gif.pixelate": "像素化",
"dialog.create_gif.bg_image": "背景图片",
- "dialog.create_gif.turn.desc": "Rotate the model while recording. Use negative values to turn the model clockwise. A value of 60 corresponds to one rotation every second.",
+ "dialog.create_gif.turn.desc": "在录制中旋转模型。使用负数值顺时针旋转。60相当于每秒旋转一周。",
"settings_profile.condition": "条件",
- "settings_profile.condition.type.file_path.desc": "Use Regular Expression syntax to match the file path of the current project. Use forward slashes for directories",
+ "settings_profile.condition.type.file_path.desc": "使用正则表达式语法以对应当前项目的文件路径。使用正斜杠标注目录",
"settings.only_selected_bezier_handles": "仅显示所选贝塞尔手柄",
"settings.only_selected_bezier_handles.desc": "隐藏未选中的贝塞尔手柄",
"settings.embed_textures": "嵌入纹理",
"settings.embed_textures.desc": "嵌入纹理到 .bbmodel 工程文件",
- "action.selection_mode.cluster": "Cluster",
+ "action.selection_mode.cluster": "组",
"dialog.copied_to_clipboard": "复制到剪贴板",
"data.reference_image": "参考图像",
"message.delete_reference_image": "您确定要删除该参考图吗?此操作无法撤销。",
@@ -1768,56 +1765,56 @@
"message.add_reference_image.project": "添加至当前项目",
"message.add_reference_image.app": "添加至所有项目",
"message.import_particle_texture.import": "导入粒子材质",
- "message.import_particle_texture.message": "你要导入纹理文件用在粒子吗?",
+ "message.import_particle_texture.message": "你要为粒子导入纹理文件吗?",
"message.save_codec_selector.title": "保存模型格式",
"message.save_codec_selector.message": "选择保存模型的格式。",
"message.save_codec_selector.project_file": "Blockbench 项目 (.bbmodel)",
- "message.save_codec_selector.both": "Both",
+ "message.save_codec_selector.both": "都",
"message.display_skin.username": "用户名(JAVA)",
- "message.palette_locked": "The palette is locked",
- "dialog.project.default_uv_mode": "Default UV Mode",
- "dialog.project.default_uv_mode.description": "Default UV Mode of the project. The UV mode can also be changed per cube.",
- "dialog.export_options.title": "Export Options",
+ "message.palette_locked": "调色板已锁定",
+ "dialog.project.default_uv_mode": "默认UV模式",
+ "dialog.project.default_uv_mode.description": "此项目的默认UV模式。每个块都可以更改UV模式。",
+ "dialog.export_options.title": "导出选项",
"dialog.edit_texture.preview": "预览",
- "dialog.proportional_editing.range": "Range",
- "dialog.proportional_editing.falloff": "Falloff",
- "dialog.proportional_editing.falloff.linear": "Linear",
- "dialog.proportional_editing.falloff.hermite_spline": "Smooth",
- "dialog.proportional_editing.falloff.constant": "Constant",
- "dialog.proportional_editing.selection": "Selection",
- "dialog.proportional_editing.selection.linear": "Linear Distance",
- "dialog.proportional_editing.selection.connections": "Connections",
+ "dialog.proportional_editing.range": "范围",
+ "dialog.proportional_editing.falloff": "衰减方式",
+ "dialog.proportional_editing.falloff.linear": "线性",
+ "dialog.proportional_editing.falloff.hermite_spline": "平滑",
+ "dialog.proportional_editing.falloff.constant": "固定",
+ "dialog.proportional_editing.selection": "选择",
+ "dialog.proportional_editing.selection.linear": "线性距离",
+ "dialog.proportional_editing.selection.connections": "衔接",
"dialog.mirror_painting_texture_center.middle": "中间",
- "dialog.mirror_painting_texture_center.custom": "风俗中间",
+ "dialog.mirror_painting_texture_center.custom": "自定义",
"dialog.settings.reset_to_default": "重置至原值",
- "keybindings.item.num_slider.increase": "Increase",
- "keybindings.item.num_slider.decrease": "Decrease",
- "settings.always_show_splash_art": "始终显示 Splash Art",
- "settings.always_show_splash_art.desc": "始终显示开始界面的 Splash Art",
- "action.slider_palette_color": "Switch Palette Color",
- "action.slider_palette_color.desc": "Cycle between the colors in the palette",
- "action.proportional_editing": "Proportional Editing",
- "action.proportional_editing.desc": "Proportionally affect surrounding vertices when editing parts of a mesh",
- "action.limit_to_palette": "Limit to Palette",
- "action.limit_to_palette.desc": "Limits the colors of the texture to those in the currently loaded palette",
+ "keybindings.item.num_slider.increase": "增加",
+ "keybindings.item.num_slider.decrease": "减少",
+ "settings.always_show_splash_art": "始终显示开屏画面",
+ "settings.always_show_splash_art.desc": "始终显示开始界面的开屏画面",
+ "action.slider_palette_color": "切换调色板颜色",
+ "action.slider_palette_color.desc": "循环切换调色板中颜色",
+ "action.proportional_editing": "衰减编辑",
+ "action.proportional_editing.desc": "在调整模型部分时同时按比例影响周边顶点",
+ "action.limit_to_palette": "限制为调色板内颜色",
+ "action.limit_to_palette.desc": "限制材质中的颜色为现有调色板中颜色",
"action.edit_reference_images": "编辑参考图像",
"action.edit_reference_images.desc": "打开参考图像模式以添加或编辑参考图和蓝图",
"action.add_reference_image": "添加参考图像",
"action.reference_image_from_clipboard": "从剪贴板读取参考图像",
"action.reference_image_list": "参考图像",
- "action.connect_uv_faces": "Connect UV Faces",
- "action.connect_uv_faces.desc": "Connect the selected UV faces to the last selected UV face",
- "action.merge_uv_vertices": "Merge UV Vertices",
- "action.merge_uv_vertices.desc": "Snap the first selected UV vertices to the last selected UV vertices",
- "action.bedrock_animation_mode": "Bedrock Animation Mode",
- "action.bedrock_animation_mode.desc": "Select the mode to edit animations for Minecraft: Bedrock Edition in",
+ "action.connect_uv_faces": "连接UV面",
+ "action.connect_uv_faces.desc": "将选中的UV面连接于上次选中的UV面",
+ "action.merge_uv_vertices": "合并UV顶点",
+ "action.merge_uv_vertices.desc": "将首先选中的UV顶点对其于最后选中的UV顶点",
+ "action.bedrock_animation_mode": "基岩动画模式",
+ "action.bedrock_animation_mode.desc": "选中为Minecraft基岩版本编辑动画的模式",
"action.bedrock_animation_mode.entity": "实体",
"action.bedrock_animation_mode.attachable_first": "第一人称",
"action.bedrock_animation_mode.attachable_third": "第三人称",
- "timeline.amplify": "Amplify",
+ "timeline.amplify": "放大",
"menu.options": "选项...",
- "menu.palette.lock_palette": "Lock Palette",
- "menu.uv.export": "Export UV Mapping",
+ "menu.palette.lock_palette": "锁定调色板",
+ "menu.uv.export": "导出UV纹理映射",
"menu.uv.flip_x": "反转 X 轴",
"menu.uv.flip_y": "反转 Y 轴",
"menu.mirror_painting.enabled": "启用",
@@ -1832,310 +1829,401 @@
"reference_image.layer.background": "置于模型下方",
"reference_image.layer.viewport": "置于模型上方",
"reference_image.layer.float": "置于界面上方",
- "reference_image.layer.blueprint": "Locked Blueprint",
+ "reference_image.layer.blueprint": "蓝图已锁定",
"reference_image.scope": "范围",
"reference_image.scope.project": "此项目",
"reference_image.scope.global": "全部项目",
"reference_image.enabled_modes": "在模型中启用",
"codec.common.encoding": "编码",
- "codec.common.armature": "Export Groups as Armature",
+ "codec.common.armature": "将组作为电驱导出",
"codec.common.export_animations": "导出动作",
"codec.common.embed_textures": "内嵌纹理",
- "preview.center_camera": "Center Camera",
- "display.reference.frame_top": "Item Frame Top",
- "display.reference.frame_top_invisible": "Item Frame Top (Invisible)",
- "action.proportional_editing_range": "Proportional Editing Range",
- "action.proportional_editing_range.desc": "Adjust the range for proportional editing",
- "action.toggle_all_reference_images": "Hide/Show All Reference Images",
- "action.toggle_all_reference_images.desc": "Toggle the visibility of all reference images at once",
- "action.add_animation_controller_state": "Add Animation Controller State",
- "action.add_animation_controller_state.desc": "Add a new state to the animation controller",
- "menu.slider.round_value": "Round Value",
- "texture.error.too_large": "Resolution exceeds the maximum of %0",
+ "preview.center_camera": "相机居中",
+ "display.reference.frame_top": "表面展示框",
+ "display.reference.frame_top_invisible": "表面展示框(隐形)",
+ "action.proportional_editing_range": "等比例编辑范围",
+ "action.proportional_editing_range.desc": "调整等比例编辑的范围",
+ "action.toggle_all_reference_images": "隐藏/展示全部参考图",
+ "action.toggle_all_reference_images.desc": "同时隐藏/展示全部参考图",
+ "action.add_animation_controller_state": "增加动画控制状态",
+ "action.add_animation_controller_state.desc": "为动画控制增加新状态",
+ "menu.slider.round_value": "舍入值",
+ "texture.error.too_large": "分辨率超越了最大尺寸%0",
"dialog.copy_to_clipboard": "复制到剪切板中",
"dialog.open_url": "打开URL链接",
"reference_image.image": "图像",
- "uv_editor.rotate_uv": "Rotate UV",
- "generic.error": "Error",
- "projects.start_screen": "Start Screen",
- "message.invalid_link.message": "The shared model \"%0\" that you are trying to load is either invalid or has expired.",
- "message.plugin_dependencies.title": "Plugin Dependencies",
- "message.plugin_dependencies.message1": "The plugin requires these dependencies:",
- "message.plugin_dependencies.message1_update": "The plugin %0 has been updated and now requires these dependencies:",
- "message.plugin_dependencies.message2": "Do you want to install them to continue?",
- "message.plugin_dependencies.invalid": "Unfortunately the plugin cannot be installed, it has an invalid dependency:",
- "message.preview_scene_load_failed": "Failed to load preview scene. Check your internet connection.",
- "dialog.convert_project.text1": "Convert the project into a different format.",
- "dialog.convert_project.text2": "Use conversion at your own risk. Formats have different features and restrictions, so converting will in some cases break parts of your project.",
- "dialog.convert_project.text3": "You cannot undo converting, that is why by default a copy will be created.",
- "dialog.unsaved_work.title": "Unsaved Work",
- "dialog.unsaved_work.text": "The following projects contain unsaved changes. Do you want to save your changes?",
- "dialog.unsaved_work.discard_all": "Discard All",
- "dialog.unsaved_work.save_all": "Save All",
+ "uv_editor.rotate_uv": "旋转UV",
+ "generic.error": "错误",
+ "projects.start_screen": "启动画面",
+ "message.invalid_link.message": "你企图加载的分享模型“%0”可能无效或已过期。",
+ "message.plugin_dependencies.title": "插件依赖",
+ "message.plugin_dependencies.message1": "插件需要前置:",
+ "message.plugin_dependencies.message1_update": "插件已被更新并需要前置:",
+ "message.plugin_dependencies.message2": "你是否要安装它们并继续?",
+ "message.plugin_dependencies.invalid": "插件无法被安装,无效前置:",
+ "message.preview_scene_load_failed": "无法加载预览场景。检查互联网连接。",
+ "dialog.convert_project.text1": "将项目转化为另一格式。",
+ "dialog.convert_project.text2": "请谨慎转化。不同格式有着不同功能及限制,某些转化将破坏部分项目。",
+ "dialog.convert_project.text3": "你无法撤销转化,因此默认情况下将会复制一份副本。",
+ "dialog.unsaved_work.title": "未保存的变更",
+ "dialog.unsaved_work.text": "以下项目有未保存的变更。是否保存更改?",
+ "dialog.unsaved_work.discard_all": "全都丢弃",
+ "dialog.unsaved_work.save_all": "全都保存",
"dialog.resize_texture.mode": "模式",
"dialog.resize_texture.mode.crop": "裁切/扩展",
"dialog.resize_texture.mode.scale": "缩放",
- "dialog.plugins.is_installed": "Installed",
- "dialog.plugins.is_disabled": "Disabled",
- "dialog.plugins.disable": "Disable",
- "dialog.plugins.enable": "Enable",
- "dialog.plugins.dependencies": "Depends on:",
+ "dialog.plugins.is_installed": "已安装",
+ "dialog.plugins.is_disabled": "已禁用",
+ "dialog.plugins.disable": "禁用",
+ "dialog.plugins.enable": "启用",
+ "dialog.plugins.dependencies": "依赖在:",
"dialog.view_backups.open_folder": "打开文件夹",
- "dialog.share_model.reference_images": "Include Reference Images",
+ "dialog.share_model.reference_images": "包括参考图像",
"dialog.share_model.too_large": "上传失败:模型过大",
- "dialog.share_model.too_large_references": "Failed to upload: Model is too large. Try without reference images.",
- "settings.stretch_linked": "Link Stretching",
- "settings.stretch_linked.desc": "Stretch the cube in all directions with the same value",
- "settings.grids": "Show Grids",
- "settings.grids.desc": "Show or hide all 3D grids",
- "settings.double_click_switch_tools": "Switch Tools on Double Click",
- "settings.double_click_switch_tools.desc": "Double click the viewport to switch between tools",
- "settings.outlines_in_paint_mode": "Selection Outlines in Paint Mode",
- "settings.outlines_in_paint_mode.desc": "Display element selection outlines while in paint mode",
- "settings.json_indentation": "JSON Indentation",
- "settings.json_indentation.desc": "Indentation style for exported JSON files",
- "settings.json_indentation.tabs": "Tabs",
- "settings.json_indentation.spaces_4": "Spaces: 4",
- "settings.json_indentation.spaces_2": "Spaces: 2",
- "action.slider_stretch": "Stretch",
- "action.slider_stretch.desc": "Stretches cubes multiplicatively on the %0 axis without changing the UV",
+ "dialog.share_model.too_large_references": "上传失败:模型过大。请取消参考图像并再次尝试。",
+ "settings.stretch_linked": "连锁拉伸",
+ "settings.stretch_linked.desc": "将立方体向各方向拉伸相同值",
+ "settings.grids": "显示网格",
+ "settings.grids.desc": "显示还是隐藏全部 3D 网格",
+ "settings.double_click_switch_tools": "双击时切换工具",
+ "settings.double_click_switch_tools.desc": "双击视口以切换工具",
+ "settings.outlines_in_paint_mode": "在绘制模式下选择轮廓",
+ "settings.outlines_in_paint_mode.desc": "在绘制模式下显示所选元素的轮廓",
+ "settings.json_indentation": "JSON首行缩进",
+ "settings.json_indentation.desc": "导出的JSON文件使用首行缩进格式",
+ "settings.json_indentation.tabs": "制表符",
+ "settings.json_indentation.spaces_4": "空格:4",
+ "settings.json_indentation.spaces_2": "空格:2",
+ "action.slider_stretch": "拉伸",
+ "action.slider_stretch.desc": "将立方体沿轴成倍拉伸而不改变其UV",
"action.view_backups": "查看备份",
"action.view_backups.desc": "浏览自动保存的项目备份列表",
- "action.search_outliner": "Search Outliner",
- "action.search_outliner.desc": "Search for specific element names in the outliner",
- "action.mirror_modeling": "Mirror Modeling",
- "action.mirror_modeling.desc": "Enable Mirror Modeling on the X axis. All changes you make in the viewport will be reflected to the other side, unless specifically disabled on the element.",
- "action.allow_element_mirror_modeling": "Allow Mirror Modeling",
- "action.allow_element_mirror_modeling.desc": "Choose whether the selected elements can be affected by mirror modeling",
- "action.switch_face_crease": "Switch Face Crease",
- "action.switch_face_crease.desc": "Switch in which direction the quad folds in the middle",
- "action.clear_unused_texture_space": "Clear Unused Texture Space",
- "action.clear_unused_texture_space.desc": "Clear parts of the texture that are not UV-mapped to any elements",
- "action.split_screen": "Split Screen",
- "action.split_screen.desc": "Select a viewport split screen mode",
- "action.split_screen.single": "Single",
- "action.split_screen.double_horizontal": "Double Horizontal",
- "action.split_screen.double_vertical": "Double Vertical",
- "action.split_screen.quad": "Quad",
- "action.split_screen.triple_left": "Triple Left",
- "action.split_screen.triple_right": "Triple Right",
- "action.split_screen.triple_top": "Triple Top",
- "action.split_screen.triple_bottom": "Triple Bottom",
- "action.uv_project_from_view": "UV Project from View",
- "action.uv_project_from_view.desc": "Automatically generate UVs for the selected faces from the perspective of the 3D view",
- "action.graph_editor_other_graphs": "Display Other Graphs",
- "action.graph_editor_other_graphs.desc": "Whether the graphs of the axes that are not selected are displayed",
- "action.graph_editor_include_other_graphs": "Include Other Graphs",
- "action.graph_editor_include_other_graphs.desc": "Whether the graph editor includes the graphs that are not selected in the view",
- "action.set_ik_source": "Set IK Root",
- "action.set_ik_source.desc": "Select the root bone of the chain that should be moved by this null object via Inverse Kinematics",
- "edit.loop_cut.cuts": "Cuts",
- "panel.element.stretch": "Stretch",
- "preview_scene.minecraft_plains": "Plains",
- "preview_scene.minecraft_cherry_grove": "Cherry Grove",
- "preview_scene.minecraft_snowy_tundra": "Snowy Tundra",
- "preview_scene.minecraft_sunset": "Sunset",
- "preview_scene.minecraft_night": "Night",
- "preview_scene.minecraft_desert": "Desert",
- "preview_scene.minecraft_underwater": "Underwater",
- "preview_scene.minecraft_coral_reef": "Coral Reef",
- "preview_scene.minecraft_lush_cave": "Lush Cave",
- "preview_scene.minecraft_deep_dark": "Deep Dark",
- "generic.navigate_forward": "Forward",
- "generic.navigate_back": "Back",
- "action.element_render_order": "Transparency Render Order",
- "action.element_render_order.default": "Auto",
- "action.element_render_order.behind": "Behind",
- "action.element_render_order.in_front": "In Front",
- "message.installing_update.title": "Update Available",
- "message.installing_update.message": "A new version is ready to be installed. After closing the app, please allow for around %0 seconds before opening Blockbench again or turning off the computer, for the update to be installed.",
- "settings.brush_cursor_2d": "2D Brush Cursor",
- "settings.brush_cursor_2d.desc": "Display an outline around the brush in the 2D workspace",
- "settings.brush_cursor_3d": "3D Brush Cursor",
- "settings.brush_cursor_3d.desc": "Display an outline around the brush in the 3D workspace",
+ "action.search_outliner": "搜索大纲",
+ "action.search_outliner.desc": "在大纲中以关键词检索元素名称",
+ "action.mirror_modeling": "镜像编辑模式",
+ "action.mirror_modeling.desc": "在X轴上启用镜像编辑模式。你在视口中做的一切更改都会折射到另一边,除非元素有上特殊禁用。",
+ "action.allow_element_mirror_modeling": "启用镜像编辑模式",
+ "action.allow_element_mirror_modeling.desc": "选择所选元素是否受镜像编辑模式影响",
+ "action.switch_face_crease": "切换面折叠",
+ "action.switch_face_crease.desc": "切换面的对折方向",
+ "action.clear_unused_texture_space": "清除纹理未使用的部分",
+ "action.clear_unused_texture_space.desc": "将纹理中没有对应元素UV映射的部分清除",
+ "action.split_screen": "分屏",
+ "action.split_screen.desc": "选择视口分屏模式",
+ "action.split_screen.single": "单屏",
+ "action.split_screen.double_horizontal": "水平双屏",
+ "action.split_screen.double_vertical": "垂直双屏",
+ "action.split_screen.quad": "四屏",
+ "action.split_screen.triple_left": "三连左屏",
+ "action.split_screen.triple_right": "三连右屏",
+ "action.split_screen.triple_top": "三连上屏",
+ "action.split_screen.triple_bottom": "三连下屏",
+ "action.uv_project_from_view": "自视角投射UV",
+ "action.uv_project_from_view.desc": "以3D视图的视角为所选的面自动生成UV",
+ "action.graph_editor_other_graphs": "显示其他图表",
+ "action.graph_editor_other_graphs.desc": "决定未选中的轴的图表是否被展示",
+ "action.graph_editor_include_other_graphs": "包含其他轴",
+ "action.graph_editor_include_other_graphs.desc": "决定图标编辑器是否包括视图中未选中的图表",
+ "action.set_ik_source": "设定IK根",
+ "action.set_ik_source.desc": "设定这个空对象能够以反向运动学移动的链的根",
+ "edit.loop_cut.cuts": "切",
+ "panel.element.stretch": "拉伸",
+ "preview_scene.minecraft_plains": "平原",
+ "preview_scene.minecraft_cherry_grove": "樱花林",
+ "preview_scene.minecraft_snowy_tundra": "雪原",
+ "preview_scene.minecraft_sunset": "日落",
+ "preview_scene.minecraft_night": "夜晚",
+ "preview_scene.minecraft_desert": "沙漠",
+ "preview_scene.minecraft_underwater": "水下",
+ "preview_scene.minecraft_coral_reef": "珊瑚礁",
+ "preview_scene.minecraft_lush_cave": "繁茂洞穴",
+ "preview_scene.minecraft_deep_dark": "暗黑之域",
+ "generic.navigate_forward": "前",
+ "generic.navigate_back": "后",
+ "action.element_render_order": "透明度渲染顺序",
+ "action.element_render_order.default": "自动",
+ "action.element_render_order.behind": "后面",
+ "action.element_render_order.in_front": "前面",
+ "message.installing_update.title": "无可用更新",
+ "message.installing_update.message": "有新版本可供更新。在关闭软件后,请等待约%0秒再重新启动Blockbench或关闭电脑,以安装新版本。",
+ "settings.brush_cursor_2d": "2D笔刷光标",
+ "settings.brush_cursor_2d.desc": "在2D工作台中显示笔刷轮廓",
+ "settings.brush_cursor_3d": "3D笔刷光标",
+ "settings.brush_cursor_3d.desc": "在3D工作台中显示笔刷轮廓",
"settings.cdn_mirror": "使用 CDN 镜像",
"settings.cdn_mirror.desc": "使用镜像 CDN 下载插件。镜像接收更新的速度更快,并且可以在默认设置失效的某些地区中使用。",
- "data.layer": "Layer",
- "data.panel": "Panel",
- "generic.confirm_delete": "Are you sure you want to delete this?",
- "format_category.general": "General",
- "modifier_actions.no_uniform_scaling": "Free Scaling",
- "message.texture_refresh_conflict.title": "Conflicting Texture Versions",
- "message.texture_refresh_conflict.message": "The texture file might contain changes that conflict with Blockbench's version",
- "message.texture_refresh_conflict.keep_ours": "Keep Blockbench's version",
- "message.texture_refresh_conflict.keep_theirs": "Load file and discard all changes and layers in Blockbench",
- "message.group_required_to_animate": "You cannot animate this type of element. Create a group to animate it.",
+ "data.layer": "图层",
+ "data.panel": "面板",
+ "generic.confirm_delete": "确定删除吗?",
+ "format_category.general": "总体",
+ "modifier_actions.no_uniform_scaling": "自由缩放",
+ "message.texture_refresh_conflict.title": "纹理版本冲突",
+ "message.texture_refresh_conflict.message": "纹理文件可能存在与Blockbench版本冲突的内容",
+ "message.texture_refresh_conflict.keep_ours": "保持Blockbench的版本",
+ "message.texture_refresh_conflict.keep_theirs": "加载文件并放弃Blockbench内的更改与图层",
+ "message.group_required_to_animate": "你无法对此类元素应用动画。创建一个组以对其应用动画。",
"dialog.texture.uv_size": "UV尺寸",
- "dialog.advanced_screenshot.angle_preset": "Angle Preset",
- "dialog.advanced_screenshot.resolution": "Resolution",
- "dialog.advanced_screenshot.zoom_to_fit": "Zoom To Fit",
- "dialog.advanced_screenshot.zoom": "Zoom / Focal Length",
- "dialog.advanced_screenshot.anti_aliasing": "Anti-aliasing",
- "dialog.advanced_screenshot.anti_aliasing.off": "Off",
- "dialog.advanced_screenshot.anti_aliasing.msaa": "Multisampling",
- "dialog.advanced_screenshot.anti_aliasing.ssaa": "Supersampling",
- "dialog.advanced_screenshot.show_gizmos": "Show Edit Gizmos",
- "dialog.advanced_screenshot.shading": "Shading",
- "settings.auto_keyframe": "Auto Keyframe",
- "settings.auto_keyframe.desc": "Automatically create a keyframe with default values at the timeline start when transforming the bone at a later point",
- "settings.modded_entity_integer_size": "Modded Entity Integer Size",
- "settings.modded_entity_integer_size.desc": "Limit cube sizes in the Modded Entity format to integers. While floats are technically supported in some versions, integers are much easier to UV-map.",
- "category.layers": "Layers",
- "keybind.paint_secondary_color": "Paint with Secondary Color",
- "action.selection_tool_operation_mode": "Selection Operation Mode",
- "action.selection_tool_operation_mode.create": "New Selection",
- "action.selection_tool_operation_mode.add": "Add to Selection",
- "action.selection_tool_operation_mode.subtract": "Subtract from Selection",
- "action.selection_tool_operation_mode.intersect": "Intersect",
- "action.pixel_perfect_drawing": "Pixel Perfect Drawing",
- "action.pixel_perfect_drawing.desc": "Draw smooth pixel-art lines without double pixels at curves",
- "action.selection_tool": "Selection Tool",
- "action.selection_tool.desc": "Select parts of the image",
- "action.selection_tool.rectangle": "Rectangle",
- "action.selection_tool.ellipse": "Ellipse",
- "action.selection_tool.lasso": "Lasso Select",
- "action.selection_tool.wand": "Magic Wand",
- "action.selection_tool.color": "Same Color",
- "action.move_layer_tool": "Move Layer",
- "action.move_layer_tool.desc": "Move the current layer or selection",
- "action.export_modded_animations": "Export Modded Entity Animations",
- "action.export_modded_animations.desc": "Export animations for a Minecraft Java Edition modded entity model",
- "action.swap_colors": "Swap Colors",
- "action.swap_colors.desc": "Swap the main color with the secondary color",
- "action.apply_mesh_rotation": "Apply Rotation",
- "action.apply_mesh_rotation.desc": "Reset the element rotation of the mesh, and apply it to the geometry instead",
- "action.flip_texture_x.desc": "水平翻转纹理或层",
- "action.flip_texture_y.desc": "翻转纹理或层垂直",
- "action.rotate_texture_cw.desc": "Rotate the texture or layer clockwise",
- "action.rotate_texture_ccw.desc": "Rotate the texture or layer counter-clockwise",
- "action.crop_texture_to_selection": "Crop Texture to Selection",
- "action.create_empty_layer": "Create Empty Layer",
- "action.enable_texture_layers": "Enable Layers",
- "action.disable_texture_layers": "Disable Layers",
- "action.layer_opacity": "Layer Opacity",
- "action.layer_to_texture_size": "Expand Layer to Texture Size",
- "action.layer_to_texture_size.desc": "Expand the layer to the size of the texture",
- "action.merge_layer_down": "Merge Down",
- "action.merge_layer_down.desc": "Merge into the layer below",
- "action.advanced_screenshot": "Advanced Screenshot...",
- "action.advanced_screenshot.desc": "Take a screenshot of the model with advanced options",
- "action.bake_ik_animation": "Bake Inverse Kinematics",
- "action.bake_ik_animation.desc": "Bake the rotations applied by inverse kinematics into the selected animation",
- "action.save_animation_preset": "Save Animation Preset...",
- "action.save_animation_preset.desc": "Save the selected keyframes as an animation preset",
- "action.animation_onion_skin": "Animation Onion Skin",
- "action.animation_onion_skin.desc": "Display an wireframe view of a different frame in the animation for reference",
- "action.animation_onion_skin.off": "Off",
- "action.animation_onion_skin.select": "Select",
- "action.animation_onion_skin.previous": "Previous",
- "action.animation_onion_skin.next": "Next",
- "action.animation_onion_skin.previous_next": "Previous + Next",
- "action.apply_animation_preset": "Apply Animation Preset",
- "action.apply_animation_preset.desc": "Select from a list of animation presets and apply it to the selected bone",
- "menu.brush_presets.pixel_perfect": "Pixel-perfect Brush",
- "panel.layers": "Layers",
- "uv_editor.copy_paste_tool.to_layer": "To New Layer",
- "format.image.new": "Create New Image",
- "format.image.info.summary": "The 2D Image editor lets you create and edit images and pixel art directly in Blockbench, without the need for an external image editor. Edit images, modify textures, or create your own pixel art!",
- "settings.move_with_selection_tool": "Use Selection Tool to Move Selections",
- "settings.move_with_selection_tool.desc": "Allow the Selection Tool to directly move selections, without having to switch to the Move Layer tool",
- "settings.final_newline": "Final Newline",
- "settings.final_newline.desc": "Insert a newline character at the end of exported files",
- "action.crop_layer_to_selection": "Crop Layer to Selection",
- "action.edit_mode_uv_overlay.desc": "Display the UV map as an overlay in edit mode",
- "action.animation_onion_skin_selective": "Selective Onion Skin",
- "action.animation_onion_skin_selective.desc": "Only display onion skin for the selected part of the model",
- "menu.image": "Image",
- "menu.texture.discard_changes": "Discard Changes",
- "menu.texture.discard_changes.desc": "Discard all unsaved changes and load the latest version from the file",
- "panel.textures.images": "Images",
- "dialog.advanced": "Advanced",
- "dialog.recommended_option": "recommended",
- "modifier_actions.snap_to_center": "Snap to Center",
- "modifier_actions.snap_to_pixels": "Snap to Pixels",
- "message.invalid_format.install_plugin": "Install plugin '%0'",
- "message.plugin_deprecated.message": "Are you sure you want to install this deprecated plugin?",
- "message.plugin_deprecated.install_anyway": "Install Anyway",
- "message.image_editor.not_found": "Could not find the selected image editor. Please select a different option.",
- "message.knife_tool.confirm": "Press %0 or click here to apply Knife Tool",
- "message.knife_tool.skipped_face": "Cannot cut between different faces. Include the edges or vertices between them!",
- "message.optimize_animation.keyframes_removed": "Removed %0 redundant keyframes",
- "message.optimize_animation.nothing_to_optimize": "Found nothing to optimize!",
- "message.duplicate_bone_copy_animation.title": "Copy Animation",
- "message.duplicate_bone_copy_animation.message": "The duplicated bone is animated in %0 animations. Do you want to copy the keyframes over to the new bone?",
- "message.auto_fix_mesh_edit.title": "Auto Fix",
- "message.auto_fix_mesh_edit.revert": "Revert Edit",
- "message.auto_fix_mesh_edit.overlapping_vertices": "Certain vertices have been moved into the same spot. How would you like to proceed?",
- "message.auto_fix_mesh_edit.concave_quads": "One or more quad faces are now concave, which can cause issues in UV-mapping and rendering. Blockbench can automatically fix it for you:",
- "message.auto_fix_mesh_edit.merge_vertices": "Merge Vertices",
- "message.auto_fix_mesh_edit.split_quads": "Split Quads",
- "message.load_images.add_image": "Add Image",
- "dialog.project.modded_entity_entity_class": "Entity Class",
- "dialog.resize_texture.offset": "Offset",
- "dialog.animated_texture_editor.code_reference": "Code Reference",
- "dialog.animated_texture_editor.code_reference.about": "This code to implement the texture animation was generated as a reference and does not necessarily work without modification. Check out the documentation to learn more.",
- "dialog.animated_texture_editor.code_reference.docs": "Documentation",
- "dialog.animated_texture_editor.reframe": "Reframe",
- "dialog.animated_texture_editor.stride": "Frame Size",
- "dialog.animated_texture_editor.frames": "Number of Frames",
- "dialog.animated_texture_editor.add_frame": "Add Frame",
- "dialog.animated_texture_editor.resize_frames": "Resize Frames...",
- "dialog.animated_texture_editor.apply": "Apply",
- "dialog.add_primitive.edge_size": "Edge Size",
- "dialog.change_animation_speed.speed": "Speed",
- "dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
- "dialog.optimize_animation.selection": "Selection",
- "dialog.optimize_animation.selection.selected_keyframes": "Selected Keyframes",
- "dialog.optimize_animation.selection.selected_animation": "Selected Animation",
- "dialog.optimize_animation.selection.all_animations": "All Animations",
- "dialog.optimize_animation.thresholds": "Threshold values",
- "dialog.import_obj.obj": "OBJ File",
- "dialog.import_obj.mtl": "MTL File",
- "dialog.import_obj.scale": "Scale",
- "layout.thumbnail": "Custom Thumbnail CSS",
- "settings.pixel_grid": "Pixel Grid",
- "settings.pixel_grid.desc": "Show texture pixel grid on elements in edit mode",
- "settings.image_editor_grid_size": "Image Editor Grid Size",
- "settings.image_editor_grid_size.desc": "Size of the large grid in the 2D image editor",
- "settings.ground_plane_double_side": "Ground Plane Double-sided",
- "settings.ground_plane_double_side.desc": "Make the ground plane visible from below",
- "settings.optifine_save_default_texture": "OptiFine JEM: Export selected texture",
- "settings.optifine_save_default_texture.desc": "Export the selected texture as the default texture of the model",
- "action.slider_color_select_threshold": "Color Select Threshold",
- "action.slider_color_select_threshold.desc": "How close the color of a neighboring pixel has to be to get selected by color or wand select",
- "action.stretch_tool": "Stretch",
- "action.stretch_tool.desc": "Tool to select and stretch elements",
- "action.knife_tool": "Knife Tool",
- "action.knife_tool.desc": "Tool to cut mesh faces into smaller pieces",
- "action.duplicate_project": "Duplicate Project",
- "action.duplicate_project.desc": "Creates a copy of the open project",
- "action.transform_space.parent": "Parent",
- "action.transform_pivot_space": "Pivot Transform Space",
- "action.solidify_mesh_selection": "Solidify Faces",
- "action.solidify_mesh_selection.desc": "Solidify the selected faces of the mesh",
- "action.animated_texture_editor": "Flipbook Animation...",
- "action.animated_texture_editor.desc": "Setup or edit the flipbook animation of the selected texture",
- "action.center_individual_pivots": "Center Individual Pivots",
- "action.center_individual_pivots.desc": "Set the pivot point of each selected element to its center",
- "action.uv_cycle": "Cycle UV",
- "action.uv_cycle.desc": "Cycle through the order of UV vertices without changing the UV positions",
- "action.uv_cycle_invert": "Cycle Invert UV",
- "action.uv_cycle_invert.desc": "Reverse the order of UV vertices without changing the UV positions",
- "action.slider_animation_controller_speed": "Controller Playback Speed",
- "action.slider_animation_controller_speed.desc": "The playback speed of animation controllers in percent",
- "action.optimize_animation": "Optimize Animation",
- "action.optimize_animation.desc": "Optimize the current animation and reduce the keyframe count",
- "action.change_animation_speed": "Change Animation Speed...",
- "action.change_animation_speed.desc": "Change the speed of the selected animation",
- "timeline.select_particle_file": "Select Particle File",
- "timeline.select_sound_file": "Select Sound File",
- "menu.cube.texture.default": "Default",
- "menu.texture.particle.clear": "Stop using for Particles",
- "menu.texture.use_as_default": "Set as Default",
- "menu.texture.use_as_default.clear": "Unassign as Default",
- "menu.toolbar.overflow": "Toolbar Overflow",
- "edit.solidify_mesh_selection.thickness": "Thickness",
- "reference_image.sync_to_timeline": "Sync To Timeline",
- "reference_image.toggle_playback": "Play/Pause",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid"
+ "dialog.advanced_screenshot.angle_preset": "预设角度",
+ "dialog.advanced_screenshot.resolution": "分辨率",
+ "dialog.advanced_screenshot.zoom_to_fit": "缩放以适配",
+ "dialog.advanced_screenshot.zoom": "缩放/焦距",
+ "dialog.advanced_screenshot.anti_aliasing": "抗锯齿",
+ "dialog.advanced_screenshot.anti_aliasing.off": "关闭",
+ "dialog.advanced_screenshot.anti_aliasing.msaa": "多取样",
+ "dialog.advanced_screenshot.anti_aliasing.ssaa": "超取样",
+ "dialog.advanced_screenshot.show_gizmos": "显示编辑装置",
+ "dialog.advanced_screenshot.shading": "阴影",
+ "settings.auto_keyframe": "自动关键帧",
+ "settings.auto_keyframe.desc": "当更改骨骼时,在时间线起始自动添加默认状态关键帧",
+ "settings.modded_entity_integer_size": "模组实体整数尺寸",
+ "settings.modded_entity_integer_size.desc": "将模组实体的立方体大小限制为整数。尽管某些版本技术上支持浮点数,整数尺寸更适于UV映射。",
+ "category.layers": "图层",
+ "keybind.paint_secondary_color": "用次要颜色绘制",
+ "action.selection_tool_operation_mode": "选择模式",
+ "action.selection_tool_operation_mode.create": "新的选择",
+ "action.selection_tool_operation_mode.add": "加展选中",
+ "action.selection_tool_operation_mode.subtract": "减展选中",
+ "action.selection_tool_operation_mode.intersect": "相交",
+ "action.pixel_perfect_drawing": "完美像素绘制模式",
+ "action.pixel_perfect_drawing.desc": "不在转弯处产生双像素而精准绘制出像素",
+ "action.selection_tool": "选区工具",
+ "action.selection_tool.desc": "选取部分图像",
+ "action.selection_tool.rectangle": "长方形",
+ "action.selection_tool.ellipse": "椭圆",
+ "action.selection_tool.lasso": "套索选择",
+ "action.selection_tool.wand": "魔棒工具",
+ "action.selection_tool.color": "同种颜色",
+ "action.move_layer_tool": "移动图层",
+ "action.move_layer_tool.desc": "移动当前图层或选区",
+ "action.export_modded_animations": "导出模组实体动画",
+ "action.export_modded_animations.desc": "为Minecraft Java版本模组实体模型导出动画",
+ "action.swap_colors": "切换颜色",
+ "action.swap_colors.desc": "在主要和次要颜色之间切换",
+ "action.apply_mesh_rotation": "应用旋转",
+ "action.apply_mesh_rotation.desc": "重置网格的元素旋转,并将其应用于几何",
+ "action.flip_texture_x.desc": "水平翻转纹理或图层",
+ "action.flip_texture_y.desc": "垂直翻转纹理或图层",
+ "action.rotate_texture_cw.desc": "将纹理或图层顺时针旋转",
+ "action.rotate_texture_ccw.desc": "将纹理或图层逆时针旋转",
+ "action.crop_texture_to_selection": "将纹理裁剪至选区内",
+ "action.create_empty_layer": "创造空白图层",
+ "action.enable_texture_layers": "启用图层",
+ "action.disable_texture_layers": "禁用图层",
+ "action.layer_opacity": "图层透明度",
+ "action.layer_to_texture_size": "放大图层至纹理尺寸",
+ "action.layer_to_texture_size.desc": "放大纹理至图层尺寸",
+ "action.merge_layer_down": "向下合并",
+ "action.merge_layer_down.desc": "向下合并入图层",
+ "action.advanced_screenshot": "高级截屏...",
+ "action.advanced_screenshot.desc": "使用高级选项对模型截屏",
+ "action.bake_ik_animation": "烘焙反向运动",
+ "action.bake_ik_animation.desc": "将反向运动提供的旋转烘培入所选的动画内",
+ "action.save_animation_preset": "保存动画预设…",
+ "action.save_animation_preset.desc": "将所选的关键帧保存为动画预设",
+ "action.animation_onion_skin": "动画洋葱皮",
+ "action.animation_onion_skin.desc": "展示动画其他帧的线框作为参考",
+ "action.animation_onion_skin.off": "关闭",
+ "action.animation_onion_skin.select": "选中",
+ "action.animation_onion_skin.previous": "上一个",
+ "action.animation_onion_skin.next": "下一个",
+ "action.animation_onion_skin.previous_next": "上一个+下一个",
+ "action.apply_animation_preset": "应用动画映射",
+ "action.apply_animation_preset.desc": "选择动画映射并应用于所选骨骼",
+ "menu.brush_presets.pixel_perfect": "完美像素笔刷",
+ "panel.layers": "图层",
+ "uv_editor.copy_paste_tool.to_layer": "至新图层",
+ "format.image.new": "创建新图层",
+ "format.image.info.summary": "2D图像编辑器让你在Blockbench中无需外接图像编辑器,而直接创建并编辑图像于像素艺术。编辑图像,更改纹理,或创建自己的像素作品吧!",
+ "settings.move_with_selection_tool": "使用选区工具移动选区",
+ "settings.move_with_selection_tool.desc": "使选区工具能够直接移动选区,而不用切换到移动图层工具",
+ "settings.final_newline": "结束换行符",
+ "settings.final_newline.desc": "在导出文件的末尾增加一个换行符",
+ "action.crop_layer_to_selection": "将图层裁切至选区内",
+ "action.edit_mode_uv_overlay.desc": "在编辑模式中将UV映射覆盖进行展示",
+ "action.animation_onion_skin_selective": "选择性洋葱皮",
+ "action.animation_onion_skin_selective.desc": "只为模型已选中的区域展示洋葱皮",
+ "menu.image": "图像",
+ "menu.texture.discard_changes": "撤销更改",
+ "menu.texture.discard_changes.desc": "撤销全部未保存更改并从文件中加载最新版本",
+ "panel.textures.images": "图像",
+ "dialog.advanced": "高级",
+ "dialog.recommended_option": "推荐用",
+ "modifier_actions.snap_to_center": "对其至中线",
+ "modifier_actions.snap_to_pixels": "对其至像素",
+ "message.invalid_format.install_plugin": "安装插件 ‘%0'",
+ "message.plugin_deprecated.message": "你确定要安装已弃用插件?",
+ "message.plugin_deprecated.install_anyway": "无论安装",
+ "message.image_editor.not_found": "无法找到所选的图像编辑器。请选择其他选项。",
+ "message.knife_tool.confirm": "按%0或点击此处以应用刀具工具",
+ "message.knife_tool.skipped_face": "无法在不同面之间进行切割。包括之间的边或顶点!",
+ "message.optimize_animation.keyframes_removed": "移除了%0张重复关键帧",
+ "message.optimize_animation.nothing_to_optimize": "没有可优化部分!",
+ "message.duplicate_bone_copy_animation.title": "复制动画",
+ "message.duplicate_bone_copy_animation.message": "复制的骨骼在%0动画中有动画。要将关键帧复制到新骨骼上吗?",
+ "message.auto_fix_mesh_edit.title": "自动修正",
+ "message.auto_fix_mesh_edit.revert": "撤销编辑",
+ "message.auto_fix_mesh_edit.overlapping_vertices": "某些顶点被移动至同一位置。你想要如何继续?",
+ "message.auto_fix_mesh_edit.concave_quads": "一个或多个面现已内陷,在UV映射与渲染中可能导致问题。Blockbench可以自动为你修正:",
+ "message.auto_fix_mesh_edit.merge_vertices": "合并顶点",
+ "message.auto_fix_mesh_edit.split_quads": "分隔相同",
+ "message.load_images.add_image": "增添图像",
+ "dialog.project.modded_entity_entity_class": "实体层级",
+ "dialog.resize_texture.offset": "偏离",
+ "dialog.animated_texture_editor.code_reference": "代码参考",
+ "dialog.animated_texture_editor.code_reference.about": "用于执行纹理动画的代码是作为参考被生成,而在编辑前有可能无法工作。请参考以下文档以了解更多。",
+ "dialog.animated_texture_editor.code_reference.docs": "文档",
+ "dialog.animated_texture_editor.reframe": "重帧",
+ "dialog.animated_texture_editor.stride": "帧尺寸",
+ "dialog.animated_texture_editor.frames": "帧数量",
+ "dialog.animated_texture_editor.add_frame": "增加帧",
+ "dialog.animated_texture_editor.resize_frames": "重设帧尺寸…",
+ "dialog.animated_texture_editor.apply": "应用",
+ "dialog.add_primitive.edge_size": "边缘大小",
+ "dialog.change_animation_speed.speed": "速度",
+ "dialog.change_animation_speed.adjust_snapping": "调整吸附",
+ "dialog.optimize_animation.selection": "选择",
+ "dialog.optimize_animation.selection.selected_keyframes": "所选关键帧",
+ "dialog.optimize_animation.selection.selected_animation": "所选动画",
+ "dialog.optimize_animation.selection.all_animations": "全部动画",
+ "dialog.optimize_animation.thresholds": "阈值大小",
+ "dialog.import_obj.obj": "OBJ 文件",
+ "dialog.import_obj.mtl": "MTL 文件",
+ "dialog.import_obj.scale": "缩放",
+ "layout.thumbnail": "自定义小图 CSS",
+ "settings.pixel_grid": "像素网格",
+ "settings.pixel_grid.desc": "在编辑模式下展示像素网格",
+ "settings.image_editor_grid_size": "图像编辑器网格尺寸",
+ "settings.image_editor_grid_size.desc": "在2D图像编辑器中大网格的尺寸",
+ "settings.ground_plane_double_side": "双面地平面",
+ "settings.ground_plane_double_side.desc": "使地平面从下方可见",
+ "settings.optifine_save_default_texture": "Optifime JEM:导出所选纹理",
+ "settings.optifine_save_default_texture.desc": "将所选纹理作为模型默认纹理导出",
+ "action.slider_color_select_threshold": "色彩选择阈值",
+ "action.slider_color_select_threshold.desc": "相邻像素的颜色要多相似以被颜色工具或魔棒工具选中",
+ "action.stretch_tool": "拉伸",
+ "action.stretch_tool.desc": "用于拉伸元素的工具",
+ "action.knife_tool": "刀具工具",
+ "action.knife_tool.desc": "用于将网格面切割为更小形状的工具",
+ "action.duplicate_project": "复制项目",
+ "action.duplicate_project.desc": "创建当前项目的副本",
+ "action.transform_space.parent": "父级",
+ "action.transform_pivot_space": "驱轴变换空间",
+ "action.solidify_mesh_selection": "凝固面",
+ "action.solidify_mesh_selection.desc": "使网格上所选的面凝固",
+ "action.animated_texture_editor": "手翻书动画…",
+ "action.animated_texture_editor.desc": "设定或编辑所选纹理的手翻书动画",
+ "action.center_individual_pivots": "居中独立驱轴",
+ "action.center_individual_pivots.desc": "将所选元素的驱轴分别居中",
+ "action.uv_cycle": "循环UV",
+ "action.uv_cycle.desc": "顺序循环UV顶点而不改变UV位置",
+ "action.uv_cycle_invert": "循环翻转UV",
+ "action.uv_cycle_invert.desc": "反向循环UV顶点而不改变UV位置",
+ "action.slider_animation_controller_speed": "控制回放速度",
+ "action.slider_animation_controller_speed.desc": "百分制的动画控制的回放速度",
+ "action.optimize_animation": "优化动画",
+ "action.optimize_animation.desc": "优化当前动画并减少关键帧数量",
+ "action.change_animation_speed": "改变动画速度…",
+ "action.change_animation_speed.desc": "改变所选动画的速度",
+ "timeline.select_particle_file": "选择粒子文件",
+ "timeline.select_sound_file": "选择声音文件",
+ "menu.cube.texture.default": "默认",
+ "menu.texture.particle.clear": "停止粒子应用",
+ "menu.texture.use_as_default": "设为默认",
+ "menu.texture.use_as_default.clear": "取消默认设定",
+ "menu.toolbar.overflow": "工具栏溢出",
+ "edit.solidify_mesh_selection.thickness": "粗细度",
+ "reference_image.sync_to_timeline": "对齐于时间轴",
+ "reference_image.toggle_playback": "播放/停止",
+ "dialog.add_primitive.shape.beveled_cuboid": "使立方体改为斜面",
+ "dialog.ignore_all": "忽略所有",
+ "data.texture_group": "Texture Group",
+ "data.animation": "动画",
+ "generic.on": "开启",
+ "generic.off": "关闭",
+ "format.free.info.3d_printing": "3D打印",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "圆形",
+ "dialog.expand_texture_selection.corner.square": "方形",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "全部复制",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "全部粘贴",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "上一帧",
+ "menu.image_onion_skin_view.frame.next": "下一帧",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "显示",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "关键帧",
+ "settings.fps_limit": "FPS限制",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lang/zh_tw.json b/lang/zh_tw.json
index 135e717a2..d5a7c30f6 100644
--- a/lang/zh_tw.json
+++ b/lang/zh_tw.json
@@ -20,16 +20,16 @@
"keys.meta": "Cmd",
"keys.delete": "Delete",
"keys.space": "空白鍵",
- "keys.leftclick": "左鍵",
- "keys.middleclick": "中鍵",
- "keys.rightclick": "右鍵",
+ "keys.leftclick": "滑鼠左鍵",
+ "keys.middleclick": "滑鼠中鍵",
+ "keys.rightclick": "滑鼠右鍵",
"keys.tab": "Tab",
"keys.backspace": "Backspace",
"keys.enter": "Enter",
"keys.escape": "Escape",
- "keys.function": "Fn%0",
+ "keys.function": "Fn %0",
"keys.numpad": "數字鍵 %0",
- "keys.caps": "Capslock",
+ "keys.caps": "大小寫鎖定",
"keys.menu": "Contextmenu",
"keys.left": "Left",
"keys.up": "Up",
@@ -47,50 +47,50 @@
"keys.printscreen": "Print Screen",
"keys.pause": "Pause",
"message.rotation_limit.title": "旋轉限制",
- "message.rotation_limit.message": "Minecraft只允許旋轉一個軸,最多22.5度。旋轉其他軸會清除其他軸的旋轉。如果要自由旋轉,轉換成「一般模型」。",
+ "message.rotation_limit.message": "Minecraft 只允許旋轉一個軸,最多 22.5 度。旋轉其他軸會清除其他軸的旋轉。如果要自由旋轉,轉換成「一般模型」。",
"message.file_not_found.title": "找不到檔案",
- "message.file_not_found.message": "Blockbench找不到指定的檔案,請確認是儲存在本機而非雲端。",
+ "message.file_not_found.message": "Blockbench 找不到指定的檔案,請確認是儲存在本機而非雲端。",
"message.screenshot.title": "截圖",
"message.screenshot.clipboard": "剪貼簿",
"message.screenshot.right_click": "截圖,右鍵複製",
"message.invalid_file.title": "無效的檔案",
- "message.invalid_file.message": "無法開啟json檔案:%0",
+ "message.invalid_file.message": "無法開啟 json 檔案:%0",
"message.invalid_model.title": "無效的模型檔案",
"message.invalid_model.message": "這個檔案中沒有任何有效的模型數據。",
"message.child_model_only.title": "空的子模型",
- "message.child_model_only.message": "這是%0的子模型,不包含任何模型。",
+ "message.child_model_only.message": "這是 %0 的子模型,不包含任何模型。",
"message.unsaved_textures.title": "紋理未儲存",
"message.unsaved_textures.message": "你的模型含有未儲存的紋理,請確認有將其放置到正確的資源包資料夾中。",
"message.model_clipping.title": "模型過大",
- "message.model_clipping.message": "你的模型含有%0個立方體,超過了Minecraft方塊的3x3x3限制,這個模型將無法運作。",
+ "message.model_clipping.message": "你的模型含有 %0 個立方體,超過了 Minecraft 方塊的 3×3×3 限制,這個模型將無法顯示於遊戲中。",
"message.loose_texture.title": "匯入紋理",
- "message.loose_texture.message": "匯入的紋理不在資源包中,Minecraft僅能從載入的資源包中載入紋理。",
+ "message.loose_texture.message": "匯入的紋理不在資源包中,Minecraft 僅能從載入的資源包中載入紋理。",
"message.loose_texture.change": "更改路徑",
"message.update_res.title": "紋理解析度",
- "message.update_res.message": "是否要將專案的解析度更改為紋理的解析度? 如果紋理的解析度比正常的要高,按下「取消」。",
+ "message.update_res.message": "是否要將專案的解析度更改為紋理的解析度?如果紋理的解析度比正常的要高,按下「取消」。",
"message.update_res.update": "更新",
- "message.bedrock_overwrite_error.message": "Blockbench無法將這個模型與舊的檔案合併。",
+ "message.bedrock_overwrite_error.message": "Blockbench 無法將這個模型與舊的檔案合併。",
"message.bedrock_overwrite_error.backup_overwrite": "建立備份並覆蓋",
"message.bedrock_overwrite_error.overwrite": "覆蓋",
- "message.close_warning.message": "要儲存模型嗎?",
- "message.close_warning.web": "目前的工作將會遺失,確認要退出嗎?",
+ "message.close_warning.message": "要儲存模型嗎?",
+ "message.close_warning.web": "目前的工作將會遺失,確認要退出嗎?",
"message.default_textures.title": "預設紋理",
- "message.default_textures.message": "選取預設資源包的textures資料夾",
- "message.default_textures.detail": "從Minecraf的jar檔案取出或自行Google下載。找到裡面的textures資料夾並開啟。Blockbench會記住位置,並嘗試從裡面尋找紋理。",
- "message.default_textures.select": "選取預設的textures資料夾",
+ "message.default_textures.message": "選取預設資源包的 textures 資料夾",
+ "message.default_textures.detail": "從 Minecraf 的 jar 檔案取出或自行 Google 下載。找到裡面的 textures 資料夾並開啟。Blockbench 會記住位置,並嘗試從裡面尋找紋理。",
+ "message.default_textures.select": "選取預設的 textures 資料夾",
"message.image_editor.title": "選取圖片編輯器",
- "message.image_editor.file": "選取檔案...",
- "message.image_editor.exe": "選取圖片編輯器exe",
- "message.display_skin.title": "Minecraft Skin",
+ "message.image_editor.file": "選取檔案…",
+ "message.image_editor.exe": "選取圖片編輯器程式",
+ "message.display_skin.title": "Minecraft 外觀",
"message.display_skin.message": "從電腦中選取外觀檔案,或輸入玩家名字",
"message.display_skin.upload": "上傳外觀",
"message.display_skin.reset": "重置",
- "message.invalid_plugin": "無效的插件,開啟主控台查看錯誤訊息",
- "message.load_plugin_app": "是否允許這個插件修改你的電腦? 請確保只從信任的作者載入插件。",
- "message.load_plugin_web": "是否載入這個插件? 請確保只從信任的作者載入插件。",
+ "message.invalid_plugin": "無效的插件,開啟控制台查看錯誤訊息",
+ "message.load_plugin_app": "是否允許這個插件修改你的電腦?請確保只從信任的作者載入插件。",
+ "message.load_plugin_web": "是否載入這個插件?請確保只從信任的作者載入插件。",
"message.preset_no_info": "預設集並無此欄位的訊息",
- "message.restart_to_update": "重新啟動Blockbench來應用變更。",
- "message.save_file": "儲存為%0",
+ "message.restart_to_update": "重新啟動 Blockbench 以應用變更。",
+ "message.save_file": "儲存為 %0",
"dialog.project.title": "專案",
"dialog.project.name": "檔案名稱",
"dialog.project.parent": "父模型",
@@ -130,7 +130,7 @@
"dialog.plugins.none_available": "無插件可用",
"dialog.plugins.web_only": "僅限網頁應用程式可以使用",
"dialog.plugins.app_only": "僅限桌面應用程式可以使用",
- "dialog.plugins.author": "by %0",
+ "dialog.plugins.author": "作者:%0",
"dialog.create_texture.folder": "資料夾",
"dialog.create_texture.resolution": "解析度",
"dialog.input.title": "輸入",
@@ -143,7 +143,7 @@
"layout.color.dark.desc": "畫布背景",
"layout.color.ui": "UI",
"layout.color.ui.desc": "主介面顏色",
- "layout.color.bright_ui": "亮色UI",
+ "layout.color.bright_ui": "亮色 UI",
"layout.color.bright_ui.desc": "選單與工具提示",
"layout.color.button": "按鈕",
"layout.color.button.desc": "按鈕和切換開關",
@@ -154,21 +154,21 @@
"layout.color.accent": "強調色",
"layout.color.accent.desc": "滑塊和其他",
"layout.color.grid": "網格",
- "layout.color.grid.desc": "3D預覽網格",
+ "layout.color.grid.desc": "3D 預覽網格",
"layout.color.text": "文字",
"layout.color.text.desc": "通常文字",
- "layout.color.light": "亮色",
+ "layout.color.light": "淺色",
"layout.color.light.desc": "語法凸顯",
"layout.color.accent_text": "凸顯文字",
"layout.color.accent_text.desc": "亮色文字或突顯的元素",
"layout.font.main": "主要字型",
"layout.font.headline": "標題字型",
- "about.version": "版本:",
- "about.creator": "作者:",
- "about.website": "網站:",
- "about.vertex_snap": "頂點捕捉功能基於SirBenet的插件。",
- "about.icons": "圖示包:",
- "about.libraries": "庫:",
+ "about.version": "版本:",
+ "about.creator": "作者:",
+ "about.website": "網站:",
+ "about.vertex_snap": "頂點捕捉功能基於由 SirBenet 製作的插件。",
+ "about.icons": "圖示包:",
+ "about.libraries": "庫:",
"settings.category.general": "一般",
"settings.category.preview": "預覽",
"settings.category.grid": "網格",
@@ -178,7 +178,7 @@
"settings.category.dialogs": "對話框",
"settings.category.export": "匯出",
"settings.language": "語言",
- "settings.language.desc": "介面語言。重啟Blockbench套用變更。",
+ "settings.language.desc": "介面語言。重啟 Blockbench 以套用變更。",
"settings.backup_interval": "備份間隔",
"settings.backup_interval.desc": "自動備份的分鐘間隔",
"settings.origin_size": "樞紐點標示器",
@@ -189,16 +189,16 @@
"settings.display_skin.desc": "用於展示玩家模型的外觀",
"settings.shading": "著色器",
"settings.shading.desc": "在預覽中使用著色器",
- "settings.texture_fps": "動畫材質FPS",
- "settings.texture_fps.desc": "動畫紋理的FPS",
+ "settings.texture_fps": "動畫材質 FPS",
+ "settings.texture_fps.desc": "動畫紋理的 FPS",
"settings.base_grid": "小型網格",
"settings.base_grid.desc": "顯示較小的網格與軸線",
"settings.large_grid": "方塊網格",
- "settings.large_grid.desc": "顯示16x16方塊的網格",
+ "settings.large_grid.desc": "顯示 16×16 方塊的網格",
"settings.full_grid": "精確方塊網格",
"settings.full_grid.desc": "顯示精確的像素方塊網格",
- "settings.large_box": "大型Box",
- "settings.large_box.desc": "顯示3x3x3方塊的邊界",
+ "settings.large_box": "大型 Box",
+ "settings.large_box.desc": "顯示 3×3×3 方塊的邊界",
"settings.display_grid": "展示模式",
"settings.display_grid.desc": "在展示模式中顯示網格",
"settings.undo_limit": "復原上限",
@@ -209,26 +209,26 @@
"settings.canvas_unselect.desc": "按一下畫布背景,取消選取所有元素。",
"settings.paint_side_restrict": "筆刷限制模式",
"settings.paint_side_restrict.desc": "限制筆刷只能在目前的表面塗畫。",
- "settings.autouv": "自動UV",
- "settings.autouv.desc": "預設啟用自動UV",
- "settings.create_rename": "重新命名新立方體",
- "settings.create_rename.desc": "新建立方體或群組時自動切換到命名欄位。",
+ "settings.autouv": "自動 UV",
+ "settings.autouv.desc": "預設啟用自動 UV",
+ "settings.create_rename": "重新命名新元素",
+ "settings.create_rename.desc": "新建元素或群組時自動切換到命名欄位。",
"settings.edit_size": "網格解析度",
- "settings.edit_size.desc": "立方體對齊的網格解析度",
- "settings.shift_size": "Shift解析度",
- "settings.shift_size.desc": "按著Shift時的網格解析度",
- "settings.ctrl_size": "Control解析度",
- "settings.ctrl_size.desc": "按著Control時的網格解析度",
- "settings.negative_size": "負大小",
- "settings.negative_size.desc": "允許調整大小工具使用負值",
+ "settings.edit_size.desc": "元素對齊的網格解析度",
+ "settings.shift_size": "Shift 解析度",
+ "settings.shift_size.desc": "按著 Shift 時的網格解析度",
+ "settings.ctrl_size": "Control 解析度",
+ "settings.ctrl_size.desc": "按著 Control 時的網格解析度",
+ "settings.negative_size": "負尺寸",
+ "settings.negative_size.desc": "允許調整尺寸工具使用負值",
"settings.minifiedout": "最小化匯出",
- "settings.minifiedout.desc": "將JSON輸出成一行",
+ "settings.minifiedout.desc": "將 JSON 輸出簡化成一行",
"settings.export_groups": "匯出群組",
"settings.export_groups.desc": "將群組儲存至方塊或物品檔案",
"settings.credit": "版權訊息",
"settings.credit.desc": "在輸出的檔案中加入版權訊息",
- "settings.default_path": "預設Minecraft紋理路徑",
- "settings.default_path.desc": "Blokbench載入預設紋理的路徑",
+ "settings.default_path": "預設 Minecraft 紋理路徑",
+ "settings.default_path.desc": "Blokbench 載入預設紋理的路徑",
"settings.image_editor": "圖片編輯器",
"settings.image_editor.desc": "預設的圖片編輯器",
"category.navigate": "導覽",
@@ -247,53 +247,53 @@
"keybind.confirm": "確認",
"keybind.cancel": "取消",
"action.slider_inflate": "膨脹",
- "action.slider_inflate.desc": "膨脹立方體,不影響UV。",
+ "action.slider_inflate.desc": "膨脹立方體,不影響 UV。",
"action.slider_brush_size": "尺寸",
- "action.slider_brush_size.desc": "筆刷的尺寸(像素)",
+ "action.slider_brush_size.desc": "筆刷的尺寸(像素)",
"action.slider_brush_opacity": "透明度",
- "action.slider_brush_opacity.desc": "筆刷透明度(%)",
+ "action.slider_brush_opacity.desc": "筆刷透明度(%)",
"action.slider_brush_softness": "硬度",
- "action.slider_brush_softness.desc": "筆刷硬度(%)",
+ "action.slider_brush_softness.desc": "筆刷硬度(%)",
"action.uv_slider_pos_x": "水平移動",
- "action.uv_slider_pos_x.desc": "水平移動選中立方體的UV",
+ "action.uv_slider_pos_x.desc": "水平移動選中立方體的 UV",
"action.uv_slider_pos_y": "垂直移動",
- "action.uv_slider_pos_y.desc": "垂直移動選中立方體的UV",
+ "action.uv_slider_pos_y.desc": "垂直移動選中立方體的 UV",
"action.uv_slider_size_x": "水平縮放",
- "action.uv_slider_size_x.desc": "水平縮放選中立方體的UV",
+ "action.uv_slider_size_x.desc": "水平縮放選中立方體的 UV",
"action.uv_slider_size_y": "垂直縮放",
- "action.uv_slider_size_y.desc": "垂直移動選中立方體的UV",
+ "action.uv_slider_size_y.desc": "垂直移動選中立方體的 UV",
"action.vertex_snap_mode": "捕捉模式",
"action.vertex_snap_mode.desc": "頂點捕捉模式時只移動元素或調整大小",
"action.move_tool": "移動",
"action.move_tool.desc": "選取並移動元素的工具",
- "action.resize_tool": "調整大小",
- "action.resize_tool.desc": "選取和調整大小的工具",
+ "action.resize_tool": "調整尺寸",
+ "action.resize_tool.desc": "選取和調整尺寸的工具",
"action.brush_tool": "繪畫筆刷",
"action.brush_tool.desc": "可在表面或UV編輯器作畫的工具",
"action.vertex_snap_tool": "頂點捕捉",
"action.vertex_snap_tool.desc": "將立方體間以頂點連起來",
"action.swap_tools": "交換工具",
- "action.swap_tools.desc": "在移動和調整大小工具切換",
- "action.project_window": "專案...",
+ "action.swap_tools.desc": "在移動和調整尺寸工具切換",
+ "action.project_window": "專案…",
"action.project_window.desc": "開啟專案視窗,可編輯模型的詳細資訊。",
"action.open_model": "開啟模型",
"action.open_model.desc": "從電腦上開啟模型",
"action.extrude_texture": "拉伸紋理",
"action.extrude_texture.desc": "拉伸紋理並新建模型",
- "action.export_blockmodel": "匯出方塊/物品模型",
- "action.export_blockmodel.desc": "匯出Minecraft Java版方塊/物品模型",
- "action.export_optifine_part": "匯出OptiFine Part",
- "action.export_optifine_part.desc": "匯出 OptiFine實體模型的單一個part",
+ "action.export_blockmodel": "匯出方塊/物品模型",
+ "action.export_blockmodel.desc": "匯出 Minecraft Java 版方塊/物品模型",
+ "action.export_optifine_part": "匯出 OptiFine Part",
+ "action.export_optifine_part.desc": "匯出 OptiFine 實體模型的單一個 part",
"action.export_optifine_full": "匯出 OptiFine JEM",
- "action.export_optifine_full.desc": "匯出完整OptiFine的實體模型",
- "action.export_obj": "匯出OBJ模型",
- "action.export_obj.desc": "匯出成Wavefront OBJ格式,用於渲染",
- "action.settings_window": "設定...",
- "action.settings_window.desc": "開啟Blockbennch設定對話框",
- "action.plugins_window": "插件...",
+ "action.export_optifine_full.desc": "匯出完整的 OptiFine 實體模型",
+ "action.export_obj": "匯出 OBJ 模型",
+ "action.export_obj.desc": "匯出成 Wavefront OBJ 格式,用於渲染",
+ "action.settings_window": "設定 …",
+ "action.settings_window.desc": "開啟 Blockbennch 設定對話框",
+ "action.plugins_window": "插件…",
"action.plugins_window.desc": "開啟插件商店視窗",
"action.reset_layout": "重設版面配置",
- "action.reset_layout.desc": "將版面配置回設回Blockbench預設樣式",
+ "action.reset_layout.desc": "將版面配置重設至 Blockbench 預設樣式",
"action.load_plugin": "載入插件檔案",
"action.load_plugin.desc": "匯入插件檔案",
"action.reload_plugins": "重新載入插件",
@@ -309,37 +309,37 @@
"action.cut": "剪下",
"action.cut.desc": "剪下選取區,面或顯示設定",
"action.add_cube": "新增立方體",
- "action.add_cube.desc": "新增一個新的立方體",
+ "action.add_cube.desc": "新增一個立方體",
"action.add_group": "新增群組",
"action.add_group.desc": "新增一個群組或骨骼",
"action.outliner_toggle": "切換顯示更多選項",
"action.outliner_toggle.desc": "在大綱視圖中顯示更多選項",
- "action.duplicate": "拷貝",
- "action.duplicate.desc": "拷貝選取的立方體或群組",
+ "action.duplicate": "複製",
+ "action.duplicate.desc": "複製選取的立方體或群組",
"action.delete": "刪除",
"action.delete.desc": "刪除選取的立方體或群組",
"action.sort_outliner": "大綱排序",
"action.sort_outliner.desc": "按字母排序大綱",
- "action.select_window": "選取...",
- "action.select_window.desc": "按屬性搜尋和選取立方體",
+ "action.select_window": "選取…",
+ "action.select_window.desc": "按屬性搜尋和選取元素",
"action.invert_selection": "反轉選取",
- "action.invert_selection.desc": "反轉選取選中的立方體",
+ "action.invert_selection.desc": "反轉選取選中的元素",
"action.select_all": "全部選取",
- "action.select_all.desc": "選取全部的立方體",
+ "action.select_all.desc": "選取全部的元素",
"action.collapse_groups": "解散群組",
"action.collapse_groups.desc": "在大綱視圖中解散群組",
- "action.scale": "縮放...",
+ "action.scale": "縮放…",
"action.scale.desc": "縮放選取的立方體",
"action.toggle_visibility": "切換顯示",
- "action.toggle_visibility.desc": "顯示或隱藏選取的立方體",
+ "action.toggle_visibility.desc": "顯示或隱藏選取的元素",
"action.toggle_export": "切換匯出",
- "action.toggle_export.desc": "切換選取立方體的匯出設定",
- "action.toggle_autouv": "切換自動UV",
- "action.toggle_autouv.desc": "選取的立方體是否自動UV",
+ "action.toggle_export.desc": "切換選取元素的匯出設定",
+ "action.toggle_autouv": "切換自動 UV",
+ "action.toggle_autouv.desc": "選取的立方體是否自動 UV",
"action.toggle_shade": "切換著色",
"action.toggle_shade.desc": "選取的立方體是否要使用著色器",
"action.rename": "重新命名",
- "action.rename.desc": "變更選取立方體的名稱",
+ "action.rename.desc": "重新命名選取元素或群組的名稱",
"action.add_display_preset": "新建預設集",
"action.add_display_preset.desc": "新增檢視角度預設集",
"action.fullscreen": "全螢幕",
@@ -349,9 +349,9 @@
"action.zoom_out": "縮小",
"action.zoom_out.desc": "縮小介面",
"action.zoom_reset": "重設放大",
- "action.zoom_reset.desc": "將縮放比重設為100%",
+ "action.zoom_reset.desc": "將縮放比重設為 100 %",
"action.reset_interface": "重設介面",
- "action.reset_interface.desc": "重設GUI的位置和大小",
+ "action.reset_interface.desc": "重設 GUI 的位置和大小",
"action.screenshot_model": "模型截圖",
"action.screenshot_model.desc": "從目前角度給模型截圖",
"action.screenshot_app": "應用程式截圖",
@@ -370,8 +370,8 @@
"action.rescale_toggle.desc": "按照立方體目前的旋轉角度進行縮放",
"action.bone_reset_toggle": "重設骨骼",
"action.bone_reset_toggle.desc": "停止顯示父模型骨骼的立方體",
- "action.reload": "重新載入Blockbench",
- "action.reload.desc": "重新載入Blockbench,終止所有未儲存的程序。",
+ "action.reload": "重新載入 Blockbench",
+ "action.reload.desc": "重新載入 Blockbench,終止所有未儲存的程式。",
"menu.file": "檔案",
"menu.edit": "編輯",
"menu.transform": "變形",
@@ -404,7 +404,7 @@
"menu.texture.edit": "編輯",
"menu.texture.export": "儲存為",
"menu.texture.save": "儲存",
- "menu.texture.properties": "屬性...",
+ "menu.texture.properties": "屬性…",
"menu.preview.background": "背景",
"menu.preview.background.load": "載入",
"menu.preview.background.position": "位置",
@@ -423,17 +423,17 @@
"cube.color.purple": "紫色",
"cube.color.blue": "藍色",
"cube.color.green": "綠色",
- "cube.color.lime": "檸檬綠",
+ "cube.color.lime": "淺綠色",
"switches.visibility": "切換顯示",
"switches.export": "匯出",
- "switches.autouv": "自動UV",
+ "switches.autouv": "自動 UV",
"panel.uv": "UV",
"panel.display": "顯示",
"panel.textures": "紋理",
"panel.outliner": "大綱",
- "uv_editor.title": "UV編輯器",
+ "uv_editor.title": "UV 編輯器",
"uv_editor.all_faces": "全部",
- "uv_editor.no_faces": "無無",
+ "uv_editor.no_faces": "無",
"face.north": "北",
"face.south": "南",
"face.west": "西",
@@ -450,9 +450,9 @@
"display.slot.third_left": "第三人稱左手",
"display.slot.first_right": "第一人稱右手",
"display.slot.first_left": "第一人稱左手",
- "display.slot.head": "頭",
- "display.slot.ground": "地面",
- "display.slot.frame": "影格",
+ "display.slot.head": "戴在頭上",
+ "display.slot.ground": "掉落物",
+ "display.slot.frame": "物品展示框",
"display.slot.gui": "GUI",
"display.rotation": "旋轉",
"display.translation": "偏移",
@@ -460,7 +460,7 @@
"display.slot": "欄位",
"display.reference": "參考模型",
"display.reference.player": "玩家",
- "display.reference.zombie": "殭屍殭屍",
+ "display.reference.zombie": "成年殭屍",
"display.reference.armor_stand": "盔甲架",
"display.reference.baby_zombie": "幼年殭屍",
"display.reference.armor_stand_small": "小盔甲架",
@@ -468,9 +468,9 @@
"display.reference.bow": "弓",
"display.reference.block": "方塊",
"display.reference.frame": "物品展示框",
- "display.reference.inventory_nine": "3x3",
+ "display.reference.inventory_nine": "3×3",
"display.reference.inventory_full": "背包",
- "display.reference.hud": "HUD",
+ "display.reference.hud": "抬頭顯示器(HUD)",
"display.preset.blank_name": "請輸入名稱",
"display.preset.item": "預設物品",
"display.preset.block": "預設方塊",
@@ -479,7 +479,7 @@
"dialog.continue": "繼續",
"message.square_textures": "紋理必須為正方形",
"message.unsaved_texture.title": "未儲存的紋理",
- "message.unsaved_texture.message": "紋理未儲存的變更將會遺失,是否繼續?",
+ "message.unsaved_texture.message": "紋理未儲存的變更將會遺失,是否繼續?",
"action.vertex_snap_mode.move": "移動",
"action.vertex_snap_mode.scale": "縮放",
"action.open_model_folder": "開啟模型資料夾",
@@ -488,33 +488,33 @@
"action.change_textures_folder.desc": "變更儲存材質的資料夾",
"menu.texture.particle": "使用粒子",
"message.update_notification.title": "無法安裝更新",
- "message.update_notification.message": "新Blockbench版本已經釋出,請在設定中開啟自動更新進行安裝!",
+ "message.update_notification.message": "新版本已經釋出,請在設定中開啟自動更新進行安裝!",
"message.untextured": "此平面沒有任何紋理",
"dialog.toolbar_edit.title": "自訂工具列",
"keybindings.reset": "重設",
"keybindings.clear": "空白",
"action.cube_counter": "立方體計數器",
- "action.uv_rotation": "UV旋轉",
- "action.uv_rotation.desc": "UV面的旋轉",
- "action.uv_grid": "UV方格",
- "action.uv_grid.desc": "UV選取器要捕捉的網格解析度",
+ "action.uv_rotation": "UV 旋轉",
+ "action.uv_rotation.desc": "UV 面的旋轉",
+ "action.uv_grid": "UV 方格",
+ "action.uv_grid.desc": "UV 選取器要捕捉的網格解析度",
"action.uv_grid.auto": "自動",
- "action.uv_maximize": "UV最大化",
- "action.uv_maximize.desc": "將此面的UV紋理最大化",
- "action.uv_auto": "自動UV",
- "action.uv_auto.desc": "將此面的UV尺寸調整為實際面的大小",
- "action.uv_rel_auto": "相對自動UV",
- "action.uv_rel_auto.desc": "讓此面的UV尺寸符合實際面的大小和位置",
- "action.uv_mirror_x": "UV X鏡射",
- "action.uv_mirror_x.desc": "以X軸鏡射此面UV",
- "action.uv_mirror_y": "UV X鏡射",
- "action.uv_mirror_y.desc": "以Y軸鏡射此面UV",
+ "action.uv_maximize": "UV 最大化",
+ "action.uv_maximize.desc": "將此面的 UV 紋理最大化",
+ "action.uv_auto": "自動 UV",
+ "action.uv_auto.desc": "將此面的 UV 尺寸調整為實際面的大小",
+ "action.uv_rel_auto": "相對自動 UV",
+ "action.uv_rel_auto.desc": "讓此面的 UV 尺寸符合實際面的大小和位置",
+ "action.uv_mirror_x": "UV X 鏡射",
+ "action.uv_mirror_x.desc": "以 X 軸鏡射此面 UV",
+ "action.uv_mirror_y": "UV Y 鏡射",
+ "action.uv_mirror_y.desc": "以 Y 軸鏡射此面 UV",
"action.uv_transparent": "移除面",
"action.uv_transparent.desc": "移除目前的面",
"action.uv_reset": "重設面",
"action.uv_reset.desc": "重設目前的面",
"action.cullface": "剔除面",
- "action.cullface.desc": "如果選取的模型覆蓋此面,則停用渲染",
+ "action.cullface.desc": "如果選取的模型覆蓋此面,則不渲染此面",
"action.auto_cullface": "自動剔除面",
"action.auto_cullface.desc": "將該面的剔除面設為自身",
"action.face_tint": "著色",
@@ -539,10 +539,10 @@
"action.uv_apply_all": "套用至所有的面",
"action.uv_apply_all.desc": "將目前面的設定套用至所有的面",
"message.image_editor_missing.title": "預設圖片編輯器",
- "message.image_editor_missing.message": "選取圖片編輯器的exe執行檔",
- "message.image_editor_missing.detail": "Blockbench在你的電腦上找不到任何圖片編輯器,請自行選取圖片編輯器的exe檔案。",
- "action.update_autouv": "更新自動UV",
- "action.update_autouv.desc": "自動更新選取的立方體的UV映射",
+ "message.image_editor_missing.message": "選取圖片編輯器的應用程式",
+ "message.image_editor_missing.detail": "Blockbench 在你的電腦上找不到任何圖片編輯器,請自行選取圖片編輯器應用程式。",
+ "action.update_autouv": "更新自動 UV",
+ "action.update_autouv.desc": "自動更新選取的立方體的 UV 映射",
"category.uv": "UV",
"status_bar.saved": "模型已儲存",
"status_bar.unsaved": "有變更未儲存",
@@ -574,7 +574,7 @@
"menu.keyframe.quaternion": "四元數",
"panel.animations": "動畫",
"panel.keyframe": "關鍵影格",
- "panel.keyframe.type": "關鍵影格 (%0)",
+ "panel.keyframe.type": "關鍵影格 (%0)",
"generic.delete": "刪除",
"generic.rename": "重新命名",
"message.no_animation_selected": "請先選擇一個動畫",
@@ -596,30 +596,30 @@
"action.slider_animation_length.desc": "變更選取的動畫長度",
"panel.variable_placeholders": "變數佔位符",
"panel.variable_placeholders.info": "使用 變數名=值 來預覽變數",
- "status_bar.vertex_distance": "距離: %0",
- "dialog.create_gif.title": "錄製GIF",
+ "status_bar.vertex_distance": "距離:%0",
+ "dialog.create_gif.title": "錄製 GIF",
"dialog.create_gif.length": "長度",
"dialog.create_gif.fps": "FPS",
"dialog.create_gif.play": "開始播放動畫",
"category.animation": "動畫",
- "action.record_model_gif": "錄製GIF",
+ "action.record_model_gif": "錄製 GIF",
"action.record_model_gif.desc": "從目前角度錄製模型動畫",
"display.mirror": "鏡射",
"data.separator": "分隔",
"menu.preview.background.set_position": "設定位置",
"dialog.toolbar_edit.hidden": "已隱藏",
- "action.export_class_entity": "匯出Java實體",
- "action.export_class_entity.desc": "將實體模型匯出為Java類別",
+ "action.export_class_entity": "匯出 Java 實體",
+ "action.export_class_entity.desc": "將實體模型匯出為 Java 類別",
"settings.seethrough_outline": "透視大綱",
"settings.seethrough_outline.desc": "透視物件大綱",
"mode.edit": "編輯",
"mode.paint": "繪圖",
"mode.display": "展示",
"mode.animate": "動畫",
- "status_bar.recording_gif": "錄製GIF",
- "status_bar.processing_gif": "處理GIF中",
+ "status_bar.recording_gif": "錄製 GIF",
+ "status_bar.processing_gif": "處理 GIF中",
"settings.backup_retain": "備份保留期限",
- "settings.backup_retain.desc": "設定Blockbench保留備份的天數",
+ "settings.backup_retain.desc": "設定 Blockbench 保留備份的天數",
"action.rotate_tool": "旋轉",
"action.rotate_tool.desc": "選取和旋轉元素的工具",
"action.fill_tool": "油漆桶",
@@ -628,20 +628,19 @@
"action.eraser.desc": "橡皮擦工具可將紋理上的顏色變為透明",
"action.color_picker": "取色器",
"action.color_picker.desc": "從紋理像素上選取顏色",
- "switches.mirror": "鏡射UV",
- "language_name": "中文(臺灣)",
- "message.plugin_reload": "重新載入%0個本機插件",
+ "switches.mirror": "鏡射 UV",
+ "language_name": "正體中文(臺灣)",
+ "message.plugin_reload": "重新載入 %0 個本機插件",
"settings.brightness": "亮度",
- "settings.brightness.desc": "預覽的亮度,預設為50",
+ "settings.brightness.desc": "預覽的亮度,預設為 50",
"menu.preview.perspective.reset": "重設相機",
"action.fill_mode": "填滿模式",
"action.fill_mode.face": "面",
"action.fill_mode.color": "顏色",
- "action.toggle_mirror_uv": "鏡射UV",
- "action.toggle_mirror_uv.desc": "切換選取立方體的X軸UV鏡射",
+ "action.toggle_mirror_uv": "鏡射 UV",
+ "action.toggle_mirror_uv.desc": "切換選取立方體的 X 軸 UV 鏡射",
"menu.texture.blank": "套用至無紋理的面",
"dialog.scale.select_overflow": "選取溢位",
- "dialog.create_texture.compress": "壓縮範本",
"action.action_control": "執行動作",
"action.action_control.desc": "搜尋和執行動作",
"keybindings.recording": "錄製快捷鍵",
@@ -649,43 +648,43 @@
"action.pivot_tool": "樞紐點工具",
"action.pivot_tool.desc": "變更立方體和骨骼的樞紐點",
"action.slider_animation_speed": "播放速度",
- "action.slider_animation_speed.desc": "時間軸的播放速度(%)",
+ "action.slider_animation_speed.desc": "時間軸的播放速度(%)",
"action.previous_keyframe": "上一個關鍵影格",
"action.previous_keyframe.desc": "跳至上一個關鍵影格",
"action.next_keyframe": "下一個關鍵影格",
"action.next_keyframe.desc": "跳至下一個關鍵影格",
"message.outdated_client.title": "版本太舊",
- "message.outdated_client.message": "請更新至最新版Blockbench再繼續。",
+ "message.outdated_client.message": "請更新至最新版 Blockbench 再繼續。",
"action.export_asset_archive": "下載封存檔",
"action.export_asset_archive.desc": "下載含有模型和紋理的封存檔。",
- "action.upload_sketchfab": "上傳至Sketchab",
- "message.sketchfab.name_or_token": "請輸入Sketchfab名稱和token",
- "dialog.sketchfab_uploader.title": "上傳Sketchfab",
+ "action.upload_sketchfab": "上傳至 Sketchab",
+ "message.sketchfab.name_or_token": "請輸入 Sketchfab 名稱和 token",
+ "dialog.sketchfab_uploader.title": "上傳 Sketchfab",
"dialog.sketchfab_uploader.token": "API Token",
- "dialog.sketchfab_uploader.about_token": "這個token用於將Blockbench與你的Sketchfab帳戶連接,可在%0找到",
+ "dialog.sketchfab_uploader.about_token": "這個 token 用於將 Blockbench 與你的 Sketchfab 帳戶連接,可在 %0 找到",
"dialog.sketchfab_uploader.name": "模型名稱",
"dialog.sketchfab_uploader.description": "說明",
"dialog.sketchfab_uploader.tags": "標籤",
"settings.sketchfab_token": "Sketchfab Token",
- "settings.sketchfab_token.desc": "這個token用於授權Blockbench上傳檔案到你的Sketchfab帳戶",
+ "settings.sketchfab_token.desc": "這個 token 用於授權 Blockbench 上傳檔案到你的 Sketchfab 帳戶",
"panel.color": "顏色",
"data.origin": "樞紐點",
"message.sketchfab.success": "模型上傳成功",
- "message.sketchfab.error": "上傳模型至Sketchfab失敗",
+ "message.sketchfab.error": "上傳模型至 Sketchfab 失敗",
"settings.outliner_colors": "大綱顏色",
"settings.outliner_colors.desc": "元素和群組在大綱視圖中的顏色",
- "action.upload_sketchfab.desc": "上傳模型至Sketchfab",
+ "action.upload_sketchfab.desc": "上傳模型至 Sketchfab",
"action.element_colors": "立方體顏色",
"action.element_colors.desc": "大綱視圖中立方體的顏色",
"texture.error.file": "找不到檔案",
"texture.error.parent": "父模型提供的紋理",
"message.recover_backup.title": "復原模型",
- "message.recover_backup.message": "Blockbench意外關閉,你要復原未儲存的模型嗎?",
- "message.invalid_session.title": "無效的會話token",
+ "message.recover_backup.message": "Blockbench 意外關閉,你要復原未儲存的模型嗎?",
+ "message.invalid_session.title": "無效的會話 token",
"message.invalid_session.message": "欲加入的會話已過期或無效。",
- "dialog.create_texture.power": "2次方大小",
+ "dialog.create_texture.power": "2 次方大小",
"dialog.create_gif.turn": "調整速度",
- "action.edit_session": "編輯會話...",
+ "action.edit_session": "編輯會話…",
"action.edit_session.desc": "連接至會話,與其他人一同編輯",
"action.reset_keyframe": "同設關鍵影格",
"action.reset_keyframe.desc": "重設選取的關鍵影格",
@@ -702,10 +701,10 @@
"edit_session.status": "狀態",
"edit_session.hosting": "主機",
"edit_session.connected": "連接至會話",
- "dialog.sketchfab_uploader.private": "私人 (Pro)",
- "dialog.sketchfab_uploader.password": "密碼 (Pro)",
+ "dialog.sketchfab_uploader.private": "私人(Pro)",
+ "dialog.sketchfab_uploader.password": "密碼(Pro)",
"action.uv_select_all": "全部選取",
- "action.uv_select_all.desc": "選取UV對話框中的全部面",
+ "action.uv_select_all.desc": "選取 UV 對話框中的全部面",
"panel.chat": "聊天",
"edit_session.welcome": "歡迎來到%0的會話",
"dialog.yes": "是",
@@ -716,24 +715,24 @@
"dates.today": "今天",
"dates.yesterday": "昨天",
"dates.this_week": "本週",
- "dates.weeks_ago": "%0週前",
+ "dates.weeks_ago": "%0 週前",
"mode.start.new": "新建",
"mode.start.recent": "最近",
"format.free": "一般模型",
"format.free.desc": "無任何限制的模型,適合遊戲引擎、渲染。",
- "format.java_block": "Java版方塊/物品",
- "format.java_block.desc": "Java版的方塊/物品模型。",
+ "format.java_block": "Java版方塊/物品",
+ "format.java_block.desc": "Java版的方塊/物品模型。",
"format.bedrock": "基岩版模型",
"format.bedrock.desc": "Minecraft基岩版模型",
"format.bedrock_old": "舊版基岩版模型",
- "format.bedrock_old.desc": "Minecraft基岩版1.12以前的實體模型",
+ "format.bedrock_old.desc": "Minecraft基岩版 1.12 以前的實體模型",
"format.modded_entity": "模組實體",
- "format.modded_entity.desc": "Minecraft Mod的實體模型,可匯出成.java類別檔案。",
- "format.optifine_entity": "OptiFine實體",
- "format.optifine_entity.desc": "OptiFine自訂實體模型",
- "keys.mouse": "滑鼠按鍵%0",
+ "format.modded_entity.desc": "Minecraft 模組的實體模型,可匯出成 .java 類別檔案。",
+ "format.optifine_entity": "OptiFine 實體",
+ "format.optifine_entity.desc": "OptiFine 自訂實體模型",
+ "keys.mouse": "滑鼠按鍵 %0",
"message.cleared_blank_faces.title": "空白面",
- "message.cleared_blank_faces.message": "Blockbench找到%0個沒有紋理的立方體,你是否要將這些元素移除?",
+ "message.cleared_blank_faces.message": "Blockbench 找到 %0 個沒有紋理的立方體,你是否要將這些元素移除?",
"message.wireframe.enabled": "線框視圖已開啟",
"message.wireframe.disabled": "線框視圖已關閉",
"dialog.convert_project.title": "轉換專案",
@@ -762,18 +761,18 @@
"action.export_over.desc": "儲存模型、紋理、動畫,覆蓋掉原有的檔案",
"action.add_locator": "新增定位器",
"action.add_locator.desc": "新增定位器,用於控制粒子和韁繩的位置",
- "action.uv_turn_mapping": "旋轉UV映射",
- "action.uv_turn_mapping.desc": "UV映射旋轉90度",
+ "action.uv_turn_mapping": "旋轉 UV 映射",
+ "action.uv_turn_mapping.desc": "UV 映射旋轉 90 度",
"action.remove_blank_faces": "移除空白的面",
"action.remove_blank_faces.desc": "移除沒有紋理的面",
- "web.download_app": "下載App",
+ "web.download_app": "下載 App",
"uv_editor.turned": "旋轉映射",
"display.reference.crossbow": "弩",
"dialog.settings.search_results": "搜尋結果",
"settings.animation_snap": "動畫捕捉",
"settings.animation_snap.desc": "每秒動畫時間軸預設捕捉的關鍵影格",
- "action.import_optifine_part": "匯入OptiFine Part",
- "action.import_optifine_part.desc": "匯入Optifine part模型",
+ "action.import_optifine_part": "匯入 OptiFine Part",
+ "action.import_optifine_part.desc": "匯入 Optifine Part 模型",
"data.locator": "定位器",
"mode.start.no_recents": "沒有最近開啟的模型",
"panel.element": "元素",
@@ -782,7 +781,7 @@
"panel.element.origin": "樞紐點",
"panel.element.rotation": "旋轉",
"message.canvas_limit_error.title": "畫布大小錯誤",
- "message.canvas_limit_error.message": "無法執行該操作,此格式限制畫布大小為48,調整樞紐點來避免此一情況。",
+ "message.canvas_limit_error.message": "無法執行該操作,此格式限制畫布大小為 48,調整樞紐點來避免此一情況。",
"data.effect": "效果",
"generic.name": "名稱",
"settings.recent_projects": "最近的模型數",
@@ -800,49 +799,49 @@
"timeline.effects": "效果",
"data.format": "格式",
"format.optifine_part": "OptiFine Part",
- "format.optifine_part.desc": "JPM OptiFine實體模型",
+ "format.optifine_part.desc": "JPM OptiFine 實體模型",
"action.reverse_keyframes": "倒轉關鍵影格",
"action.reverse_keyframes.desc": "倒轉關鍵影格的順序",
"generic.help": "幫助",
- "message.removed_faces": "已移除%0個面",
+ "message.removed_faces": "已移除 %0 個面",
"dialog.sketchfab_uploader.draft": "草稿",
- "action.slider_pos": "移動%0",
- "action.slider_pos.desc": "在%0軸移動立方體",
- "action.slider_size": "縮放%0",
- "action.slider_size.desc": "在%0軸縮放立方體",
- "action.slider_rotation": "旋轉%0",
- "action.slider_rotation.desc": "在%0軸旋轉立方體",
- "action.slider_origin": "樞紐點%0",
- "action.slider_origin.desc": "移動樞紐點至%0軸",
+ "action.slider_pos": "移動 %0",
+ "action.slider_pos.desc": "在 %0 軸移動立方體",
+ "action.slider_size": "縮放 %0",
+ "action.slider_size.desc": "在 %0 軸縮放立方體",
+ "action.slider_rotation": "旋轉 %0",
+ "action.slider_rotation.desc": "在 %0 軸旋轉立方體",
+ "action.slider_origin": "樞紐點 %0",
+ "action.slider_origin.desc": "移動樞紐點至 %0 軸",
"action.rotate_cw": "旋轉 %0 +90°",
- "action.rotate_cw.desc": "選取的立方體%0軸旋轉90°",
+ "action.rotate_cw.desc": "選取的立方體 %0 軸旋轉 90°",
"action.rotate_ccw": "旋轉 %0 -90°",
- "action.rotate_ccw.desc": "選取的立方體%0軸旋轉-90°",
- "action.flip": "翻轉%0",
- "action.flip.desc": "選取的立方體%0軸翻轉",
- "action.center": "對齊中心%0",
- "action.center.desc": "選取的立方體%0軸對齊中心",
+ "action.rotate_ccw.desc": "選取的立方體 %0 軸旋轉 -90°",
+ "action.flip": "翻轉 %0",
+ "action.flip.desc": "選取的立方體 %0 軸翻轉",
+ "action.center": "對齊中心 %0",
+ "action.center.desc": "選取的立方體 %0 軸對齊中心",
"action.bring_up_all_animations": "顯示所有動畫",
"panel.bone": "骨骼",
"data.color": "顏色",
"generic.export": "匯出",
- "generic.none": "無無",
+ "generic.none": "無",
"status_bar.recording": "錄製縮時影片",
"message.add_to_palette": "加入至調色盤",
- "message.size_modifiers": "按著Ctrl或Shift進行更精細的縮放",
+ "message.size_modifiers": "按著 Ctrl 或 Shift 進行更精細的縮放",
"message.timelapse_start": "縮時影片錄製開始",
"message.timelapse_stop": "縮時影片錄製停止",
"message.import_palette.replace_palette": "載入舊調色盤",
"message.import_palette.threshold": "合併臨界值",
- "dialog.timelapse.interval": "間隔(秒)",
+ "dialog.timelapse.interval": "間隔(秒)",
"dialog.timelapse.source": "來源",
"dialog.timelapse.source.interface": "介面",
"dialog.timelapse.source.locked": "鎖定角度",
"dialog.timelapse.destination": "目標資料夾",
"layout.color.checkerboard": "透明背景",
- "layout.color.checkerboard.desc": "畫布和UV編輯器的背景",
+ "layout.color.checkerboard.desc": "畫布和 UV 編輯器的背景",
"layout.font.code": "程式碼字型",
- "layout.css": "自訂CSS",
+ "layout.css": "自訂 CSS",
"settings.category.paint": "繪圖",
"settings.deactivate_size_limit": "取消大小限制",
"settings.deactivate_size_limit.desc": "取消模型格式的大小限制,這可能會倒置模型格式無效。",
@@ -864,24 +863,24 @@
"action.import_palette": "匯入調色盤",
"action.import_palette.desc": "匯入調色盤檔案",
"action.export_palette": "匯出調色盤檔案",
- "action.export_palette.desc": "匯出.gpl調色盤檔案",
+ "action.export_palette.desc": "匯出 .gpl 調色盤檔案",
"action.generate_palette": "生成調色盤",
"action.generate_palette.desc": "從紋理生成調色盤",
"action.sort_palette": "排列調色盤",
"action.sort_palette.desc": "以顏色和亮度排列調色盤的顏色",
- "action.timelapse": "縮時...",
+ "action.timelapse": "縮時…",
"action.timelapse.desc": "錄製建模縮時攝影",
"action.add_keyframe": "新增關鍵影格",
- "action.add_keyframe.desc": "自動加入關鍵影格,按shift給予預設值",
+ "action.add_keyframe.desc": "自動加入關鍵影格,按 shift 給予預設值",
"action.bring_up_all_animations.desc": "顯示時間軸所有變更過的動畫",
"timeline.timeline": "教學",
"menu.palette.load.default": "預設預設",
"panel.color.picker": "取色器",
"panel.color.palette": "調色盤",
"generic.import": "匯入",
- "settings.brush_modifier.none": "無無",
+ "settings.brush_modifier.none": "無",
"action.export_entity": "匯出為基岩版實體",
- "action.export_entity.desc": "將目前的實體加入到mobs.json檔案中",
+ "action.export_entity.desc": "將目前的實體加入到 mobs.json 檔案中",
"settings.highlight_cubes": "凸顯立方體",
"settings.highlight_cubes.desc": "選取或滑鼠移至立方體上方時凸顯立方體",
"action.add_marker": "新增時間軸標記",
@@ -889,25 +888,25 @@
"timeline.pre_effect_script": "腳本",
"format.skin": "Minecraft外觀",
"format.skin.desc": "編輯玩家和實體的外觀",
- "message.sketchfab.setup_guide": "想了解如何在Sketchfab上設置模型?請閱讀: %0",
- "dialog.skin.title": "新建Minecraft外觀",
+ "message.sketchfab.setup_guide": "想了解如何在 Sketchfab 上設置模型?請閱讀:%0",
+ "dialog.skin.title": "新建 Minecraft 外觀",
"dialog.skin.model": "模型",
- "dialog.skin.texture": "紋理 (可選)",
+ "dialog.skin.texture": "紋理(可選)",
"action.toggle_skin_layer": "切換外觀外層",
"action.toggle_skin_layer.desc": "是否顯示外觀的帽子和衣服",
- "action.gui_light": "GUI光照",
+ "action.gui_light": "GUI 光照",
"action.gui_light.desc": "選取物品在背包中的光照方式",
"action.gui_light.side": "側光照",
"action.gui_light.front": "前光照",
"action.move_keyframe_back": "關鍵畫格往後移",
"action.move_keyframe_forth": "關鍵畫格往前移",
"menu.help": "幫助",
- "menu.help.discord": "Discord伺服器",
+ "menu.help.discord": "Discord 伺服器",
"menu.help.report_issue": "回報問題",
- "menu.help.plugin_documentation": "插件API文檔",
+ "menu.help.plugin_documentation": "插件 API 文件",
"menu.help.search_action": "搜尋和執行動作",
- "menu.help.donate": "捐贈",
- "menu.help.about": "關於...",
+ "menu.help.donate": "贊助",
+ "menu.help.about": "關於…",
"menu.preview.background.clipboard": "從剪貼簿載入",
"dialog.ignore": "忽略",
"generic.unset": "未設定",
@@ -938,9 +937,9 @@
"action.fill_mode.color_connected": "相鄰的顏色",
"action.draw_shape_type": "形狀",
"action.draw_shape_type.rectangle": "長方形",
- "action.draw_shape_type.rectangle_h": "長方形(空心)",
+ "action.draw_shape_type.rectangle_h": "長方形(空心)",
"action.draw_shape_type.ellipse": "橢圓形",
- "action.draw_shape_type.ellipse_h": "橢圓形(空心)",
+ "action.draw_shape_type.ellipse_h": "橢圓形(空心)",
"action.draw_shape_type.line": "直線",
"action.mirror_painting": "鏡射繪圖",
"action.mirror_painting.description": "在模型上繪畫時繪製對稱圖樣",
@@ -948,8 +947,8 @@
"action.lock_alpha.description": "鎖定像素透明度",
"action.draw_shape_tool": "繪製形狀",
"action.draw_shape_tool.desc": "此工具用於在紋理上繪製簡單形狀",
- "action.export_gltf": "匯出為glTF模型",
- "action.export_gltf.desc": "將模型和動畫匯出為glTF模型,用於其他3D軟體",
+ "action.export_gltf": "匯出為 glTF 模型",
+ "action.export_gltf.desc": "將模型和動畫匯出為 glTF 模型,用於其他 3D 軟體",
"action.transform_space": "變形空間",
"action.transform_space.desc": "預設元素和骨骼的變形空間",
"action.transform_space.global": "全域",
@@ -957,17 +956,17 @@
"action.toggle_camera_projection": "開關攝影機投影",
"action.toggle_camera_projection.desc": "在透視投影和正投影間切換",
"action.load_camera_angle": "攝影機角度:%0",
- "action.load_camera_angle.desc": "載入攝影機'%0'度",
+ "action.load_camera_angle.desc": "載入攝影機「%0」度",
"action.slider_face_tint": "色調索引",
- "action.slider_face_tint.desc": "設定此面的色調索引,-1代表未設置。",
+ "action.slider_face_tint.desc": "設定此面的色調索引,-1 代表未設置。",
"menu.help.quickstart": "快速開始精靈",
"menu.help.developer": "開發人員",
"menu.help.developer.dev_tools": "開啟開發人員工具",
"menu.help.developer.reset_storage": "還原至出廠設定",
- "menu.help.developer.reset_storage.confirm": "是否要將Blockbench還原至出廠模式? 所有自訂設定、快捷鍵、安裝的插件都會被刪除。",
- "menu.help.developer.cache_reload": "Cache Reload",
+ "menu.help.developer.reset_storage.confirm": "是否要將 Blockbench 還原至出廠模式?所有自訂設定、快捷鍵、安裝的插件都會被刪除。",
+ "menu.help.developer.cache_reload": "重新載入快取",
"menu.preview.orthographic": "正投影",
- "menu.preview.save_angle": "儲存角度...",
+ "menu.preview.save_angle": "儲存角度…",
"menu.preview.angle": "角度",
"menu.preview.angle.initial": "初始角度",
"menu.preview.maximize": "最大畫最大畫",
@@ -975,9 +974,9 @@
"uv_editor.copy_selection": "複製選取",
"uv_editor.paste_selection": "貼上選取",
"uv_editor.copy_paste_tool.place": "放置",
- "uv_editor.copy_paste_tool.mirror_x": "鏡射X",
- "uv_editor.copy_paste_tool.mirror_y": "鏡Y",
- "uv_editor.copy_paste_tool.rotate": "旋轉90度",
+ "uv_editor.copy_paste_tool.mirror_x": "鏡射 X 軸",
+ "uv_editor.copy_paste_tool.mirror_y": "鏡射 Y 軸",
+ "uv_editor.copy_paste_tool.rotate": "旋轉 90 度",
"dialog.project.modded_entity_version": "匯出版本",
"dialog.save_angle.position": "攝影機位置",
"dialog.save_angle.target": "焦點",
@@ -986,8 +985,8 @@
"layout.color.frame.desc": "視窗的外框和標題欄",
"settings.large_grid_size": "方塊網格尺寸",
"settings.large_grid_size.desc": "方塊網格的尺寸",
- "action.load_plugin_from_url": "從URL載入插件",
- "action.load_plugin_from_url.desc": "從指定的伺服器載入插件",
+ "action.load_plugin_from_url": "從網址載入插件",
+ "action.load_plugin_from_url.desc": "從指定的網址載入插件",
"action.cube_counter.desc": "顯示目前的立方體數量和其他統計數字",
"action.unlock_everything": "全部解鎖",
"action.unlock_everything.desc": "解鎖大綱視圖中的所有群組和元素。",
@@ -1015,18 +1014,18 @@
"dialog.select_texture.import_all": "全部匯入",
"dialog.skin.layer_template": "紋理圖層",
"about.version.up_to_date": "已是最新",
- "about.version.update_available": "新版本%0可用",
+ "about.version.update_available": "新版本 %0 可用",
"settings.category.application": "應用程式",
"settings.streamer_mode": "串流模式",
- "settings.streamer_mode.desc": "隱藏機敏內容,例如最近的模型",
+ "settings.streamer_mode.desc": "隱藏隱私內容,例如最近的模型",
"settings.automatic_updates": "自動更新",
- "settings.automatic_updates.desc": "自動下載新版本,讓Blockbench保持在最新版本",
+ "settings.automatic_updates.desc": "自動下載新版本,讓 Blockbench 保持在最新版本",
"action.rotation_space": "旋轉空間",
"action.focus_on_selection": "以選取為中心",
"action.focus_on_selection.desc": "將攝影機對齊選取區的中心",
"action.jump_to_timeline_start": "跳轉至動畫開始處",
"action.jump_to_timeline_end": "跳轉至動畫結束處",
- "menu.help.updating": "更新中(%0%)",
+ "menu.help.updating": "更新中(%0 %)",
"menu.help.update_failed": "更新失敗",
"menu.animation.loop.once": "只播放一次",
"menu.animation.loop.hold": "停留在最後的關鍵影格",
@@ -1036,17 +1035,17 @@
"generic.restore": "回復",
"keys.mousewheel": "滑鼠滾輪",
"message.delete_animation.title": "刪除動畫",
- "message.delete_animation.message": "動畫已從Blockbench刪除,是否要將其從儲存的檔案中一起刪除?",
+ "message.delete_animation.message": "動畫已從 Blockbench 刪除,是否要將其從儲存的檔案中一起刪除?",
"message.no_animation_to_import": "沒有要匯入的動畫",
"dialog.material_instances.title": "材質實例",
"dialog.animation_import.title": "選取要匯入的動畫",
"dialog.create_texture.padding": "間距",
- "settings.fov": "FOV",
- "settings.fov.desc": "廣角視野,預設為45",
+ "settings.fov": "視角廣度",
+ "settings.fov.desc": "視角廣度,預設為 45",
"settings.sync_color": "同步顏色",
- "settings.sync_color.desc": "在不同的Blockbench實例之間同步顏色。",
+ "settings.sync_color.desc": "在不同的 Blockbench 實例之間同步顏色。",
"settings.minify_bbmodel": "最小化專案檔",
- "settings.minify_bbmodel.desc": "將.bbmodel檔案儲存成一行程式碼",
+ "settings.minify_bbmodel.desc": "將 .bbmodel 檔案儲存成一行程式碼",
"action.edit_material_instances": "編輯材質實例",
"action.edit_material_instances.desc": "編輯基岩版方塊幾何體的材質實例",
"action.save_all_animations": "儲存全部動畫",
@@ -1059,7 +1058,7 @@
"menu.file.preferences": "偏好設定",
"menu.animation.blend_weight": "混合權重",
"menu.animation.save": "儲存",
- "menu.animation.properties": "屬性...",
+ "menu.animation.properties": "屬性…",
"menu.animation.file": "檔案",
"menu.animation.snapping": "捕捉",
"menu.animation.open_location": "開啟檔案位置",
@@ -1069,98 +1068,97 @@
"panel.keyframe.post": "後",
"generic.all": "全部",
"message.small_face_dimensions.title": "不相容的面",
- "message.small_face_dimensions.message": "選取的部分包含小於1的面,Box UV系統會將其視作0個像素,紋理可能會無法正常顯示。",
- "message.small_face_dimensions.face_uv": "這個模型格式支援使用pre-face UV,可處理小於1的面的材質。點選檔案>專案,取消勾選Box UV。",
- "dialog.plugins.outdated_client": "需要新版本的Blockbench",
- "dialog.plugins.outdated_plugin": "該插件太舊,不適用於現在的Blockbench",
+ "message.small_face_dimensions.message": "選取的部分包含小於 1 的面,Box UV 系統會將其視作0個像素,紋理可能會無法正常顯示。",
+ "message.small_face_dimensions.face_uv": "這個模型格式支援使用 pre-face UV,可處理小於 1 的面的材質。點選檔案→專案,取消勾選 Box UV。",
+ "dialog.plugins.outdated_client": "需要新版本的 Blockbench",
+ "dialog.plugins.outdated_plugin": "該插件太舊,不適用於現在的 Blockbench",
"settings.motion_trails": "運動軌跡",
"settings.motion_trails.desc": "在動畫編輯器中顯示運動軌跡",
"settings.antialiasing": "反鋸齒",
- "settings.antialiasing.desc": "開關預覽反鋸齒,重啟Blockbench套用變更",
- "action.timeline_frame_back": "往後跳轉1個關鍵影格",
- "action.timeline_frame_forth": "往前跳轉1個關鍵影格",
- "panel.bone.ik": "反向運動 (實驗性)",
+ "settings.antialiasing.desc": "開關預覽反鋸齒,重啟 Blockbench 以套用變更",
+ "action.timeline_frame_back": "往後跳轉 1 個關鍵影格",
+ "action.timeline_frame_forth": "往前跳轉 1 個關鍵影格",
+ "panel.bone.ik": "反向運動(實驗性)",
"settings.particle_tick_rate": "粒子遊戲刻",
- "settings.particle_tick_rate.desc": "每秒的粒子效果刻,預設為30",
+ "settings.particle_tick_rate.desc": "每秒的粒子效果刻,預設為 30",
"action.lock_motion_trail": "鎖定運動軌跡",
"action.lock_motion_trail.desc": "鎖定選取群組的運動軌跡",
"menu.animation_file.unload": "取消載入動畫檔案",
"data.null_object": "空物件",
"status_bar.toggle_sidebar": "開關側邊攔",
"message.load_plugin_failed.title": "載入插件失敗",
- "message.load_plugin_failed.message": "請確認插件檔案名與Plugin.register()中所使用的ID '%0' 相同。",
- "dialog.project.uv_mode": "UV模式",
+ "message.load_plugin_failed.message": "請確認插件檔案名與 Plugin.register() 中所使用的ID「%0」相同。",
+ "dialog.project.uv_mode": "UV 模式",
"dialog.project.uv_mode.box_uv": "Box UV",
"dialog.project.uv_mode.face_uv": "Per-face UV",
"dialog.project.texture_size": "紋理尺寸",
"dialog.animation_export.title": "選取要匯出的動畫",
- "dialog.create_texture.rearrange_uv": "重新排列UV",
+ "dialog.create_texture.rearrange_uv": "重新排列 UV",
"layout.color.subtle_text": "次要文字",
"layout.color.subtle_text.desc": "對比度較低的第二文字",
- "settings.interface_scale": "介面縮放比",
- "settings.interface_scale.desc": "Blockbench介面的縮放比",
+ "settings.interface_scale": "介面縮放比例",
+ "settings.interface_scale.desc": "Blockbench 介面的縮放比例",
"settings.background_rendering": "背景渲染",
"settings.background_rendering.desc": "滑鼠不在視窗時更新預覽畫面",
"settings.ctrl_shift_size": "Control + Shift解析度",
- "settings.ctrl_shift_size.desc": "按下Control + Shift的網格解析度",
+ "settings.ctrl_shift_size.desc": "按下Control + Shift 的網格解析度",
"settings.hardware_acceleration": "硬體加速",
"settings.hardware_acceleration.desc": "將渲染任務分配給顯示卡,重啟Blockbench套用變更",
"action.explode_skin_model": "展開外觀的模型",
"action.explode_skin_model.desc": "開啟爆炸檢視模式以便編輯覆蓋的面",
- "action.export_minecraft_skin": "匯出Minecraft外觀",
- "action.export_minecraft_skin.desc": "將Minecraft外觀匯出為.png紋理",
+ "action.export_minecraft_skin": "匯出 Minecraft 外觀",
+ "action.export_minecraft_skin.desc": "將 Minecraft 外觀匯出為 .png 紋理",
"action.add_null_object": "新增空物件",
"action.add_null_object.desc": "加入一個空物件",
"action.animated_texture_frame": "動畫紋理關鍵影格",
"action.animated_texture_frame.desc": "設定目前動畫紋理的關鍵影格",
- "action.export_animation_file": "匯出動畫...",
+ "action.export_animation_file": "匯出動畫…",
"action.export_animation_file.desc": "將選取的動畫匯出成一個檔案",
"action.timeline_graph_editor": "開關圖像編輯器",
"action.timeline_graph_editor.desc": "在時間軸切換圖像編輯器和關鍵影格編輯器",
"menu.file.recent.clear": "清除最近的檔案",
"switches.shade": "著色",
"generic.share": "分享",
- "dates.minute": "%0分鐘",
- "dates.minutes": "%0分鐘",
- "dates.hour": "%0小時",
- "dates.hours": "%0小時",
- "dates.day": "%0天",
- "dates.days": "%0天",
- "dates.week": "%0週",
- "dates.weeks": "%0週",
- "dates.year": "%0年",
- "dates.years": "%0年",
- "message.installed_plugin": "已成功安裝%0插件",
- "message.installed_plugin_fail": "無法安裝%0插件",
+ "dates.minute": "%0 分鐘",
+ "dates.minutes": "%0 分鐘",
+ "dates.hour": "%0 小時",
+ "dates.hours": "%0 小時",
+ "dates.day": "%0 天",
+ "dates.days": "%0 天",
+ "dates.week": "%0 週",
+ "dates.weeks": "%0 週",
+ "dates.year": "%0 年",
+ "dates.years": "%0 年",
+ "message.installed_plugin": "已成功安裝 %0 插件",
+ "message.installed_plugin_fail": "無法安裝 %0 插件",
"dialog.share_model.title": "分享模型",
"dialog.share_model.expire_time": "過期時間",
"dialog.share_model.failed": "上傳模型失敗",
- "action.import_java_block_model": "加入Java版方塊/物品模型",
- "action.import_java_block_model.desc": "從json檔案匯入Minecraft Java版方塊/物品模型至目前的模型",
- "action.share_model": "分享...",
+ "action.import_java_block_model": "加入 Java 版方塊/物品模型",
+ "action.import_java_block_model.desc": "從 JSON 檔案匯入 Minecraft Java 版方塊/物品模型至目前的模型",
+ "action.share_model": "分享…",
"action.share_model.desc": "建立一個連結,分享你的模型",
"action.import_project": "匯入專案",
- "action.import_project.desc": "從另一個.bbmodel檔案匯入至目前的專案",
+ "action.import_project.desc": "從另一個 .bbmodel 檔案匯入至目前的專案",
"dialog.toolbar_edit.hidden_tools": "有些工具可能會因目前的編輯模式、格式或其他情形而自動隱藏。",
"settings.camera_near_plane": "攝影機接近平面",
- "settings.camera_near_plane.desc": "攝影機距離物件最小的渲染距離,值越大越能減少Z-fighting的問題,預設值為1。",
- "mode.start.keymap_preference.desc": "如果這是你第一次使用Blockbench,或者使用過其他3D軟體,你可以自訂快捷鍵來適應操作,稍後可從設定中變更。",
- "message.load_keymap": "是否要載入這個快捷鍵設定檔? 這會覆蓋目前你的快捷鍵設定。",
+ "settings.camera_near_plane.desc": "攝影機距離物件最小的渲染距離,值越大越能減少 Z-fighting 的問題,預設值為 1。",
+ "mode.start.keymap_preference.desc": "如果這是你第一次使用 Blockbench,或者使用過其他 3D 軟體,你可以自訂快捷鍵來適應操作,稍後可從設定中變更。",
+ "message.load_keymap": "是否要載入這個快捷鍵設定檔?這會覆蓋目前你的快捷鍵設定。",
"message.keymap_loaded": "已載入快捷鍵設定檔",
"dialog.convert_project.current_format": "目前的格式",
- "dialog.create_texture.rearrange_uv.desc": "新建重新排列過的UV,讓每個面都能有紋理。",
- "dialog.create_texture.compress.desc": "將UV緊密排列,盡量減少材質尺寸",
- "dialog.create_texture.power.desc": "將紋理的尺寸鎖定為2的2次方大小,例如64或128。有些渲染器必須啟用此選項。",
- "dialog.create_texture.double_use.desc": "如果二個元素UV位置相同,在新的UVmap中維持原樣。",
+ "dialog.create_texture.rearrange_uv.desc": "新建重新排列過的 UV,讓每個面都能有紋理。",
+ "dialog.create_texture.power.desc": "將紋理的尺寸鎖定為 2 的 2 次方大小,例如 64 或 128。有些渲染器必須啟用此選項。",
+ "dialog.create_texture.double_use.desc": "如果二個元素UV位置相同,在新的 UVmap 中維持原樣。",
"dialog.create_texture.padding.desc": "在範本各個元素間加入邊距。",
- "dialog.create_texture.resolution.desc": "紋理的基本解析度,以像素為單位。實際的紋理map大小可能會因元素的數量和大小而不同。",
+ "dialog.create_texture.resolution.desc": "紋理的基本解析度,以像素為單位。實際的紋理 map 大小可能會因元素的數量和大小而不同。",
"dialog.create_gif.color": "背景顏色",
"dialog.save_angle.zoom": "縮放",
"dialog.skin.variant": "變種",
- "dialog.flip_animation.info": "骨骼名稱中含有'left'和'right'會視為相反的骨骼。",
+ "dialog.flip_animation.info": "骨骼名稱中含有「left」和「right」會視為相反的骨骼。",
"dialog.flip_animation.offset": "動畫長度一半的偏移值,",
"dialog.export_private_settings.title": "隱私設定",
- "dialog.export_private_settings.message": "你的檔案含有以下的私人資訊:**%0**,在與別人分享檔案前移除這些數值。",
+ "dialog.export_private_settings.message": "你的檔案含有以下的私人資訊:**%0**,在與別人分享檔案前移除這些數值。",
"dialog.export_private_settings.keep": "維持",
"settings.timecode_frame_number": "將時間碼顯示為關鍵畫格數字",
"settings.timecode_frame_number.desc": "在時間軸顯示關鍵畫格數字,而非厘秒",
@@ -1170,28 +1168,28 @@
"action.gradient_tool": "漸層工具",
"action.gradient_tool.desc": "在紋理上建立漸層",
"action.import_settings": "匯入設定",
- "action.import_settings.desc": "匯入.bbsettings檔案",
+ "action.import_settings.desc": "匯入 .bbsettings 檔案",
"action.export_settings": "匯出設定",
- "action.export_settings.desc": "將Blockbench的設定值匯出為.bbesettings檔案",
+ "action.export_settings.desc": "將 Blockbench 的設定值匯出為 .bbesettings 檔案",
"action.load_keymap": "載入快捷鍵設定檔",
- "action.load_keymap.default": "預設 (觸控板/滑鼠)",
- "action.load_keymap.mouse": "預設 (滑鼠)",
- "action.load_keymap.default.desc": "預設的Blockbench快捷鍵設定,筆電的觸控板用於移動檢視視角。",
- "action.load_keymap.mouse.desc": "預設的Blockbench快捷鍵設定,滑鼠中鍵用於移動檢視視角。",
- "action.load_keymap.blender.desc": "適用於Blender使用者的快捷鍵設定",
- "action.load_keymap.cinema4d.desc": "適用於Cinema 4D使用者的快捷鍵設定",
- "action.load_keymap.maya.desc": "適用於Autodesk Maya使用者的快捷鍵設定",
+ "action.load_keymap.default": "預設(觸控板/滑鼠)",
+ "action.load_keymap.mouse": "預設(滑鼠)",
+ "action.load_keymap.default.desc": "預設的 Blockbench 快捷鍵設定,筆電的觸控板用於移動檢視視角。",
+ "action.load_keymap.mouse.desc": "預設的 Blockbench 快捷鍵設定,滑鼠中鍵用於移動檢視視角。",
+ "action.load_keymap.blender.desc": "適用於 Blender 使用者的快捷鍵設定",
+ "action.load_keymap.cinema4d.desc": "適用於 Cinema 4D 使用者的快捷鍵設定",
+ "action.load_keymap.maya.desc": "適用於 Autodesk Maya 使用者的快捷鍵設定",
"action.import_keymap": "匯入快捷鍵設定檔",
- "action.import_keymap.desc": "匯入.bbkeymap快捷鍵設定檔",
+ "action.import_keymap.desc": "匯入 .bbkeymap 快捷鍵設定檔",
"action.export_keymap": "匯出快捷鍵設定檔",
- "action.export_keymap.desc": "匯出快捷鍵設定檔為.bbkeymap檔案",
+ "action.export_keymap.desc": "匯出快捷鍵設定檔為 .bbkeymap 檔案",
"action.edit_history": "編輯紀錄",
"action.edit_history.desc": "檢視復原和取消復原的編輯紀錄",
"action.group_elements": "將元素集合成一個群組",
"action.group_elements.desc": "將選取的元素集合成一個群組",
"action.unfold_groups": "取消摺疊群組",
"action.unfold_groups.desc": "取消摺疊大綱視圖中的所有群組",
- "action.edit_bedrock_binding": "編輯快捷鍵...",
+ "action.edit_bedrock_binding": "編輯快捷鍵…",
"action.edit_bedrock_binding.desc": "變更此幾何體綁定的骨骼",
"action.pick_screen_color": "選取螢幕顏色",
"action.pick_screen_color.desc": "從你的螢幕上選取顏色",
@@ -1211,20 +1209,20 @@
"menu.texture.render_mode": "渲染模式",
"menu.texture.render_mode.emissive": "發光",
"menu.texture.render_mode.layered": "層疊",
- "menu.preview.angle.edit": "編輯角度...",
+ "menu.preview.angle.edit": "編輯角度…",
"menu.animation.start_delay": "起始延時",
"menu.animation.loop_delay": "重複延遲",
"menu.animation.flip_keyframes": "翻轉關鍵影格",
"menu.mobile_keyboard.disable_all": "全部停用",
"panel.keyframe.toggle_uniform_scale": "開關均勻縮放",
- "camera_angle.common_isometric_right": "等軸距右側 (2:1)",
- "camera_angle.common_isometric_left": "等軸距左側 (2:1)",
- "camera_angle.true_isometric_right": "等軸距右側 (30°)",
- "camera_angle.true_isometric_left": "等軸距左側 (30°)",
- "menu.help.wiki": "Blockbench Wiki",
+ "camera_angle.common_isometric_right": "等軸距右側(2:1)",
+ "camera_angle.common_isometric_left": "等軸距左側(2:1)",
+ "camera_angle.true_isometric_right": "等軸距右側(30°)",
+ "camera_angle.true_isometric_left": "等軸距左側(30°)",
+ "menu.help.wiki": "Blockbench 維基",
"about.repository": "儲存庫:",
- "settings.update_to_prereleases": "更新至Pre-releases",
- "settings.update_to_prereleases.desc": "自動更新Blockbench至測試版以測試新功能。Pre-release版本很不穩定,在進行重要工作時請勿開啟此選項。",
+ "settings.update_to_prereleases": "更新至預發布版",
+ "settings.update_to_prereleases.desc": "自動更新 Blockbench 至預發布版以測試新功能。預發布版很不穩定,在進行重要工作時請勿開啟此選項。",
"data.separator.spacer": "間隔",
"data.separator.linebreak": "換行",
"data.setting": "設定",
@@ -1233,11 +1231,11 @@
"projects.new_tab": "新分頁",
"projects.close_tab": "關閉分頁",
"message.invalid_format.title": "無效的格式",
- "message.invalid_format.message": "此模型為%0格式,Blockbench無法開啟。您可能需要插件才能正常開啟。",
+ "message.invalid_format.message": "此模型為 %0 格式,Blockbench 無法開啟。您可能需要插件才能正常開啟。",
"message.invalid_link": "無效或過期的連結",
"message.default_textures.current": "目前的路徑",
"message.update_after_restart": "重新啟動後將會安裝更新",
- "message.copy_paste_tool_viewport": "此工具僅能在UV面板使用",
+ "message.copy_paste_tool_viewport": "此工具僅能在 UV 面板使用",
"dialog.project.shadow_size": "影子大小",
"dialog.find_replace.target": "目標",
"dialog.find_replace.target.element_names": "元素名稱",
@@ -1262,30 +1260,30 @@
"dialog.add_primitive.minor_diameter": "厚度",
"dialog.add_primitive.minor_sides": "最小邊數",
"dialog.create_texture.combine_polys": "合併的面",
- "dialog.create_texture.combine_polys.desc": "將共面的面合併至同一個UV",
+ "dialog.create_texture.combine_polys.desc": "將共面的面合併至同一個 UV",
"dialog.model_stats.meshes": "網格",
"dialog.export_private_settings.omit": "忽略",
"layout.select": "選擇",
"layout.options": "選項",
"layout.color": "顏色樣式",
"layout.documentation": "文檔",
- "layout.color.bright_ui_text": "淺色UI",
+ "layout.color.bright_ui_text": "淺色 UI",
"layout.color.bright_ui_text.desc": "淺色背景的文字顏色",
"layout.name": "名稱",
"layout.author": "作者",
"settings.color_wheel": "色歡",
"settings.color_wheel.desc": "將色環作為主要顏色取色器",
"settings.dialog.desc": "顯示%0對話框",
- "settings.export_empty_groups": "匯出空白的裙子",
+ "settings.export_empty_groups": "匯出空白的群組",
"settings.export_empty_groups.desc": "將空白的群組一同匯出",
"category.separators": "分隔符號",
"keybind.preview_area_select": "區域選擇",
"action.color_erase_mode": "擦除模式",
"action.color_erase_mode.desc": "開啟殺除模式之後,填滿和長方形工具會減去顏色。",
- "action.open_from_link": "從連結開啟模型...",
- "action.open_from_link.desc": "從blckbn.ch網址開啟模型",
- "action.import_obj": "匯入OBJ模型",
- "action.import_obj.desc": "從OBJ模型匯入網格物件",
+ "action.open_from_link": "從連結開啟模型…",
+ "action.open_from_link.desc": "從 blckbn.ch 網址開啟模型",
+ "action.import_obj": "匯入 OBJ 模型",
+ "action.import_obj.desc": "從 OBJ 模型匯入網格物件",
"action.add_plugin": "安裝插件",
"action.add_plugin.desc": "從動作控制安裝插件",
"action.remove_plugin": "解除安裝插件",
@@ -1294,7 +1292,7 @@
"action.add_mesh.desc": "新增網格",
"action.add_texture_mesh": "新增紋理網格",
"action.add_texture_mesh.desc": "新增紋理網格",
- "action.find_replace": "尋找/取代...",
+ "action.find_replace": "尋找/取代…",
"action.find_replace.desc": "尋找和取代部分名稱",
"action.hide_everything_except_selection": "隱藏選取以外的部分",
"action.hide_everything_except_selection.desc": "開關選取以外元素的可見度",
@@ -1319,10 +1317,10 @@
"action.keyframe_uniform": "統一縮放",
"action.keyframe_uniform.desc": "在選取的關鍵影格啟用統一縮放",
"menu.locator.ignore_inherited_scale": "忽略繼承的縮放",
- "menu.texture_mesh.texture_name": "紋理名稱...",
+ "menu.texture_mesh.texture_name": "紋理名稱…",
"menu.texture.elements": "套用變更至元素",
"uv_editor.transparent_face": "透明的面",
- "display.pose_angle": "姿勢角度(僅用於預覽)",
+ "display.pose_angle": "姿勢角度(僅用於預覽)",
"data.mesh": "網格",
"dialog.create_texture.type": "類型",
"dialog.create_texture.type.blank": "空白",
@@ -1331,7 +1329,7 @@
"dialog.sketchfab_uploader.suggested_tags": "建議的標籤",
"dialog.sketchfab_uploader.category": "分類",
"dialog.sketchfab_uploader.category2": "分類2",
- "layout.restore_backup": "您的自訂%0主題遭到覆蓋。按這裡還原。",
+ "layout.restore_backup": "您的自訂 %0 主題遭到覆蓋。按這裡還原。",
"layout.borders": "邊界",
"action.fill_mode.element": "元素",
"action.inset_mesh_selection": "插入選取",
@@ -1343,40 +1341,40 @@
"action.merge_vertices": "合併頂點",
"action.merge_vertices.desc": "將頂點合併至第一個選取的頂點",
"action.view_mode.normal": "法線",
- "action.snap_uv_to_pixels": "將UV對齊像素",
- "action.snap_uv_to_pixels.desc": "將選取的UV頂點對齊像素網格",
+ "action.snap_uv_to_pixels": "將 UV 對齊像素",
+ "action.snap_uv_to_pixels.desc": "將選取的 UV 頂點對齊像素網格",
"menu.file.import.import_open_project": "匯入開啟的專案",
"menu.help.unlock_projects": "解鎖全部專案",
- "status_bar.selection.faces": "%個面",
- "status_bar.selection.vertices": "%個頂點",
- "message.merged_vertices": "在%1處找到與合併了%0個頂點",
+ "status_bar.selection.faces": "%0 個面",
+ "status_bar.selection.vertices": "%0 個頂點",
+ "message.merged_vertices": "在 %1 處找到與合併了 %0 個頂點",
"settings.vertex_merge_distance": "頂點合併距離",
"settings.vertex_merge_distance.desc": "按距離合併頂點的距離",
- "settings.show_only_selected_uv": "僅顯示選取的UV",
- "settings.show_only_selected_uv.desc": "UV編輯器預設僅顯示選取的UV",
+ "settings.show_only_selected_uv": "僅顯示選取的 UV",
+ "settings.show_only_selected_uv.desc": "UV 編輯器預設僅顯示選取的 UV",
"action.merge_vertices.merge_all": "全部合併",
"action.merge_vertices.merge_all_in_center": "全部合併至中央",
"action.merge_vertices.merge_by_distance": "按距離合併",
"action.merge_vertices.merge_by_distance_in_center": "按距離合併至中央",
- "action.uv_rotate_left": "UV向左旋轉",
- "action.uv_rotate_left.desc": "選取的UV逆時針旋轉",
- "action.uv_rotate_right": "UV向右旋轉",
- "action.uv_rotate_right.desc": "選取的UV順時針旋轉",
- "menu.uv.display_uv": "顯示UV",
+ "action.uv_rotate_left": "UV 向左旋轉",
+ "action.uv_rotate_left.desc": "選取的 UV 逆時針旋轉",
+ "action.uv_rotate_right": "UV 向右旋轉",
+ "action.uv_rotate_right.desc": "選取的 UV 順時針旋轉",
+ "menu.uv.display_uv": "顯示 UV",
"menu.uv.display_uv.selected_faces": "選取的面",
"menu.uv.display_uv.selected_elements": "全部的面",
"menu.uv.display_uv.all_elements": "全部元素上的面",
- "menu.paste.face": "UV面",
+ "menu.paste.face": "UV 面",
"menu.paste.mesh_selection": "選取網格",
"menu.paste.outliner": "元素",
"uv_editor.show_all_faces": "顯示所有面",
"uv_editor.show_selected_faces": "顯示選取的面",
- "status_bar.selection.edges": "%0個邊",
+ "status_bar.selection.edges": "%0 個邊",
"action.selection_mode.edge": "邊",
"message.cannot_re_import.title": "模型無法重新匯入",
- "message.cannot_re_import.message": "匯出後的模型無法匯入至Blockbench。請確保你是將模型儲存成專案檔。",
+ "message.cannot_re_import.message": "匯出後的模型無法匯入至 Blockbench。請確保你是將模型儲存成專案檔。",
"generic.default": "預設",
- "units.pixels_per_meter": "%0每公分像素",
+ "units.pixels_per_meter": "%0 像素每公尺",
"mode.pose": "姿勢",
"modifier_actions.resize_both_sides": "所有方向重新調整大小",
"modifier_actions.resize_one_side": "單個方向調整大小",
@@ -1389,11 +1387,11 @@
"modifier_actions.drag_to_duplicate": "拖放拷貝",
"modifier_actions.uniform_scaling": "統一縮放",
"modifier_actions.snap_direction": "對齊方向",
- "message.no_valid_elements": "沒有選取有效的元素...",
+ "message.no_valid_elements": "沒有選取有效的元素…",
"dialog.add_primitive.shape.plane": "平面",
"dialog.save_angle.rotation_mode": "旋轉模式",
"dialog.save_angle.rotation": "旋轉",
- "dialog.save_angle.fov": "FOV",
+ "dialog.save_angle.fov": "視角廣度",
"settings.hide_tab_bar": "自動隱藏頁籤列",
"settings.hide_tab_bar.desc": "僅有一個頁籤開啟時隱藏頁籤列",
"settings.status_bar_modifier_keys": "在狀態欄顯示修飾鍵",
@@ -1404,10 +1402,10 @@
"settings.preview_paste_behavior.desc": "選取在編輯模式預覽貼上時的行為,有多個選項可選",
"settings.preview_paste_behavior.always_ask": "總是詢問",
"action.new_window": "新視窗",
- "action.new_window.desc": "開啟新Blockbench視窗",
- "action.export_collada": "匯出為Collada Model (dae)",
- "action.export_collada.desc": "將模型和動畫匯出為dae檔,以在其他3D應用程式中使用",
- "action.paint_mode_uv_overlay": "UV覆蓋",
+ "action.new_window.desc": "開啟新視窗",
+ "action.export_collada": "匯出為 Collada Model (.dae)",
+ "action.export_collada.desc": "將模型和動畫匯出為 .dae 檔,以在其他 3D 應用程式中使用",
+ "action.paint_mode_uv_overlay": "UV 覆蓋",
"action.paint_mode_uv_overlay.desc": "在繪圖模式中顯示UV覆蓋",
"action.bake_animation_into_model": "將動畫烘培成模型",
"action.bake_animation_into_model.desc": "將目前的動畫關鍵影格烘焙至模型上。僅包含旋轉和位置,不包含比例。",
@@ -1416,10 +1414,10 @@
"action.set_ik_target.desc": "選取要使用逆運動學空物件移動的目標骨骼",
"menu.action_control.type.tab": "頁籤",
"menu.action_control.type.angle": "攝影機角度",
- "menu.action_control.recent_in_streamer_mode": "確定嗎? 已開啟串流模式",
- "menu.action_control.recent_in_streamer_mode.desc": "你確定要顯示最近的模型?",
+ "menu.action_control.recent_in_streamer_mode": "確定嗎?已開啟串流模式",
+ "menu.action_control.recent_in_streamer_mode.desc": "你確定要顯示最近的模型?",
"menu.tools": "工具",
- "menu.file.recent.more": "檢視更多...",
+ "menu.file.recent.more": "檢視更多…",
"menu.null_object.lock_ik_target_rotation": "鎖定逆運動學目標的旋轉",
"menu.animation_file.import_remaining": "匯入剩餘的動畫",
"edit.loop_cut.offset": "偏移",
@@ -1438,23 +1436,22 @@
"panel.skin_pose.jumping": "跳躍",
"panel.skin_pose.aiming": "瞄準",
"edit.loop_cut.direction": "方向",
- "message.meshes_and_box_uv": "Meshes are not compatible with Box UV. Go to File > Project... and switch to Per-face UV.",
"data.texture_mesh": "Texture Mesh",
"generic.left": "左",
"generic.right": "右",
- "mode.start.quick_setup": "快設置",
+ "mode.start.quick_setup": "快速設置",
"mode.start.keymap": "Keymap",
- "mode.start.quick_setup.more_themes": "等...",
+ "mode.start.quick_setup.more_themes": "等…",
"dialog.resize_texture.animation_frames": "Animation Frames",
"dialog.export_emission_map.title": "Export Emission Map",
"dialog.export_emission_map.format": "格式",
"dialog.export_emission_map.format.luminance": "Luminance",
"dialog.export_emission_map.format.luminance_inverted": "Luminance Inverted",
- "dialog.export_emission_map.format.colors": "Colors",
+ "dialog.export_emission_map.format.colors": "顏色",
"dialog.export_emission_map.threshold": "Transparency Threshold",
"dialog.export_emission_map.round_up": "Round Up to %0 x %1",
"dialog.export_emission_map.flip_y": "Flip Y Axis",
- "dialog.select.type": "Element Type",
+ "dialog.select.type": "元素種類",
"dialog.create_texture.max_edge_angle": "Edge Angle Threshold",
"dialog.create_texture.max_edge_angle.desc": "The maximum angle between two faces at which they will still be combined",
"dialog.create_texture.max_island_angle": "Island Angle Threshold",
@@ -1463,20 +1460,20 @@
"settings.mobile_panel_side.desc": "Select which side of the screen panels are displayed on when using Blockbench on in landscape orientation",
"settings.obj_face_export_mode": "OBJ Face Export Mode",
"settings.obj_face_export_mode.desc": "Choose to let the OBJ exporter convert all faces into tris or quads",
- "settings.obj_face_export_mode.both": "Default",
+ "settings.obj_face_export_mode.both": "預設",
"settings.obj_face_export_mode.tris": "Convert to Tris",
"settings.obj_face_export_mode.quads": "Convert to Quads",
"action.seam_tool": "Seam Tool",
"action.seam_tool.desc": "Tool to define UV seams on mesh edges",
"action.resolve_group": "Resolve Group",
"action.resolve_group.desc": "Resolve the group while retaining its children in the same place",
- "action.move_to_group": "Move to Group",
+ "action.move_to_group": "移動到群組",
"action.move_to_group.desc": "Move the selected elements to a different outliner group",
"action.select_seam": "Select UV Seam",
"action.select_seam.desc": "Select the UV seam mode for the selected edges",
- "action.select_seam.auto": "Auto",
- "action.select_seam.join": "Join",
- "action.select_seam.divide": "Divide",
+ "action.select_seam.auto": "自動",
+ "action.select_seam.join": "加入",
+ "action.select_seam.divide": "劃分",
"action.adjust_brightness_contrast": "Adjust Brightness & Contrast...",
"action.adjust_brightness_contrast.desc": "Adjust the brightness and contrast of the selected texture",
"action.adjust_saturation_hue": "Adjust Saturation & Hue...",
@@ -1497,19 +1494,19 @@
"action.save_timeline_setup": "Save Timeline Setup...",
"action.save_timeline_setup.desc": "Save a preset for the currently selected animators and channels",
"menu.texture": "Texture",
- "menu.texture.render_mode.default": "Default",
+ "menu.texture.render_mode.default": "預設",
"menu.texture.merge_onto_texture": "Merge Onto Texture Above",
"menu.animation.unload": "Unload",
"panel.timeline": "Timeline",
"action.pan_tool": "Pan Tool",
"action.pan_tool.desc": "Tool to navigate in the viewport and the texture editor",
"mode.start.recent.favorite": "Mark as Favorite",
- "mode.start.info": "Info",
- "mode.start.target": "Target",
- "mode.start.start": "Start",
- "mode.start.create_new": "Create New Model",
- "mode.start.format.informations": "Good to know:",
- "mode.start.format.resources": "Resources:",
+ "mode.start.info": "資訊",
+ "mode.start.target": "目標",
+ "mode.start.start": "開始",
+ "mode.start.create_new": "創建新模型",
+ "mode.start.format.informations": "好消息 :",
+ "mode.start.format.resources": "資源",
"format.free.info.meshes": "In this format, you can create low poly models using cubes and custom shaped meshes.",
"format.free.info.limitation": "Models cannot be loaded into games that need specialized formats, such as Minecraft.",
"format.skin.info.skin": "This format is designed to create Minecraft skins and entity textures.",
@@ -1518,7 +1515,7 @@
"format.java_block.info.size": "The model is limited to a size of 3 by 3 by 3 blocks. Display settings can make item models larger though",
"format.java_block.info.animation": "This format does not support animations in vanilla Minecraft. If you are creating a mod, you can use GeckoLib to animate models. If not, the only way to animate is to switch out the model using commands or animated textures.",
"format.bedrock.info.textures": "Each model can only have one texture",
- "format.bedrock_block": "Bedrock方塊",
+ "format.bedrock_block": "基岩版方塊",
"format.bedrock_block.desc": "Block model for Minecraft Bedrock Edition",
"format.modded_entity.info.integer_size": "The size of individual cubes is limited to integers.",
"format.modded_entity.info.format": "Models are written in Java code instead of dedicated data structures like all other Blockbench export formats.",
@@ -1526,9 +1523,9 @@
"format.optifine_entity.info.pivots": "Bone pivots are locked, so it is a good idea to leave them untouched.",
"format_category.low_poly": "Low-Poly",
"format_category.minecraft": "Minecraft",
- "format_category.other": "Other",
+ "format_category.other": "其他",
"format_category.loaders": "Loaders",
- "message.recover_backup.recover": "Recover",
+ "message.recover_backup.recover": "恢復",
"message.invalid_characters.title": "Invalid Path",
"message.invalid_characters.message": "The path of the imported file contains invalid characters, uppercase letters, or white spaces. The supported characters are: %0",
"dialog.share_model.thumbnail": "Thumbnail",
@@ -1537,7 +1534,7 @@
"settings.allow_display_slot_mirror.desc": "Allow Display slots for Java item models to be mirrored. WARNING: This only works in Minecraft 1.14 or earlier or in special cases.",
"action.switch_tabs": "Switch Tabs",
"action.switch_tabs.desc": "Cycle between opened tabs. Hold shift to cycle in the opposite direction.",
- "action.unselect_all": "Unselect All",
+ "action.unselect_all": "取消選取全部",
"action.unselect_all.desc": "Unselect all elements, faces, vertices, or keyframes",
"action.save_palette": "Save Palette...",
"action.save_palette.desc": "Save the current color palette inside Blockbench for later use",
@@ -1555,13 +1552,13 @@
"action.preview_scene.desc": "Change the model preview scene",
"preview_scene.minecraft_overworld": "Overworld",
"preview_scene.minecraft_nether": "Nether",
- "preview_scene.minecraft_end": "End",
+ "preview_scene.minecraft_end": "結束",
"dialog.project.modded_entity_flip_y": "Flip Y Axis",
"preview_scene.studio": "Studio",
- "format.image": "Image",
+ "format.image": "圖片",
"modifier_actions.set_copy_source": "Set Copy Source",
- "message.load_images.title": "Load Images",
- "message.load_images.edit_image": "Edit Image",
+ "message.load_images.title": "載入圖片",
+ "message.load_images.edit_image": "編輯圖片",
"dialog.add_primitive.align_edges": "Align Edges",
"dialog.flip_animation.show_in_timeline": "Show modified bones in timeline",
"settings.default_cube_size": "Cube Size",
@@ -1575,20 +1572,20 @@
"settings.paint_with_stylus_only": "Paint with Stylus Only",
"settings.paint_with_stylus_only.desc": "Only use the stylus for painting, reserve mouse or touch input for navigation.",
"action.copy_brush_mode": "Copy Brush Mode",
- "action.copy_brush_mode.copy": "Copy",
+ "action.copy_brush_mode.copy": "拷貝",
"action.copy_brush_mode.pattern": "Pattern",
"action.copy_brush_mode.sample": "Sample",
"action.brush_shape": "Brush Shape",
"action.brush_shape.square": "Square",
- "action.brush_shape.circle": "Circle",
+ "action.brush_shape.circle": "圓圈",
"action.blend_mode": "Blend Mode",
- "action.blend_mode.default": "Default",
- "action.blend_mode.set_opacity": "Set Opacity",
- "action.blend_mode.color": "Color",
+ "action.blend_mode.default": "預設",
+ "action.blend_mode.set_opacity": "設定不透明度",
+ "action.blend_mode.color": "顏色",
"action.blend_mode.behind": "Behind",
"action.blend_mode.multiply": "Multiply",
- "action.blend_mode.divide": "Divide",
- "action.blend_mode.add": "Add",
+ "action.blend_mode.divide": "劃分",
+ "action.blend_mode.add": "加入",
"action.blend_mode.subtract": "Subtract",
"action.blend_mode.screen": "Screen",
"action.blend_mode.overlay": "Overlay",
@@ -1598,7 +1595,7 @@
"action.copy_brush.desc": "Brush to clone parts of your texture or draw patterns. Hold Ctrl and click to select a copy source.",
"action.validator_window": "View Model Issues...",
"action.validator_window.desc": "Opens the validator, which lists issues with the current model.",
- "action.cancel_gif": "Cancel GIF",
+ "action.cancel_gif": "取消GIF",
"menu.text_edit.copy_vector": "Copy Vector",
"menu.brush_presets.dialog": "Brush Presets...",
"menu.brush_presets.pixel_brush": "Pixel Brush",
@@ -1615,7 +1612,7 @@
"format.bedrock_block.info.size_limit": "Size total size of a block is limited to 30 pixels in all dimensions. The limit can be off-centered in all directions by 7 pixels from the block center.",
"format.bedrock_block.info.textures": "Multiple textures can be applied to different cubes in Blockbench, but require additional setup in the behavior pack to work correctly in-game.",
"format.image.desc": "Edit images in the 2D image editor",
- "generic.delete_all": "Delete All",
+ "generic.delete_all": "刪除全部",
"message.child_model_only.open": "Open Parent",
"message.child_model_only.open_with_textures": "Open Parent & Adopt Textures",
"dialog.project.credit": "Credit",
@@ -1625,21 +1622,21 @@
"dialog.texture.frame_interpolate": "Interpolate",
"dialog.texture.frame_interpolate.desc": "Interpolate between animation frames by cross-fading to the next frame",
"dialog.texture.frame_order_type": "Loop Mode",
- "dialog.texture.frame_order_type.loop": "Loop",
+ "dialog.texture.frame_order_type.loop": "循環",
"dialog.texture.frame_order_type.backwards": "Loop Backwards",
"dialog.texture.frame_order_type.back_and_forth": "Back-and-Forth",
"dialog.texture.frame_order_type.custom": "Custom Order",
"dialog.texture.frame_order": "Frame Order",
"dialog.texture.frame_order.desc": "Set a custom frame order by listing frame indices in a new order. Frame indices start at 0 with the first frame.",
- "dialog.select.mode": "Mode",
+ "dialog.select.mode": "模式",
"dialog.select.mode.new": "New Selection",
"dialog.select.mode.add": "Add to Selected",
"dialog.select.mode.remove": "Remove from Selected",
"dialog.select.mode.in_selection": "Select only from Selected",
- "dialog.predicate_overrides.model": "Model",
+ "dialog.predicate_overrides.model": "模型",
"dialog.predicate_overrides.predicates": "Predicates",
"dialog.predicate_overrides.variants": "Variants",
- "dialog.predicate_overrides.start_value": "Start",
+ "dialog.predicate_overrides.start_value": "開始",
"dialog.predicate_overrides.add_override": "Add Override",
"dialog.predicate_overrides.add_predicate": "Add Predicate",
"dialog.predicate_overrides.generate_overrides": "Generate Overrides",
@@ -1696,11 +1693,11 @@
"dialog.settings.create_profile": "Create Profile...",
"settings_profile.confirm_delete": "Are you sure you want to delete this settings profile?",
"settings_profile.condition.type.selectable": "Manually Selectable",
- "settings.interface_mode": "UI Mode",
- "settings.interface_mode.desc": "Interface mode. Restart Blockbench to apply changes",
- "settings.interface_mode.auto": "Automatic",
- "settings.interface_mode.desktop": "Desktop",
- "settings.interface_mode.mobile": "Mobile",
+ "settings.interface_mode": "介面模式",
+ "settings.interface_mode.desc": "介面模式,重新啟動 Blockbench 以應用更改",
+ "settings.interface_mode.auto": "自動",
+ "settings.interface_mode.desktop": "桌面應用程式",
+ "settings.interface_mode.mobile": "行動裝置應用程式",
"settings.paint_through_transparency": "Paint Through Transparency",
"settings.paint_through_transparency.desc": "Paint through transparent pixels when Lock Alpha Channel is enabled",
"action.tab_overview": "Tab Overview",
@@ -1723,9 +1720,9 @@
"action.looped_animation_playback.desc": "Preview animations in an infinite loop",
"timeline.bind_to_actor": "Bind to Actor",
"animation_controllers.select_preset": "Select a controller preset...",
- "animation_controllers.state.animations": "Animations",
+ "animation_controllers.state.animations": "動畫",
"animation_controllers.state.particles": "Particles",
- "animation_controllers.state.sounds": "Sounds",
+ "animation_controllers.state.sounds": "音效",
"animation_controllers.state.on_entry": "On Entry",
"animation_controllers.state.on_exit": "On Exit",
"animation_controllers.state.transitions": "Transitions",
@@ -1738,7 +1735,7 @@
"menu.color_picker.picker_type.wheel": "Wheel",
"menu.color_picker.slider_mode": "Slider Mode",
"menu.color_picker.slider_mode.hsv": "Hue, Saturation, Value",
- "menu.color_picker.slider_mode.rgb": "Red, Green, Blue",
+ "menu.color_picker.slider_mode.rgb": "RGB",
"menu.texture.render_mode.additive": "Additive",
"panel.color.picker_options": "Color Picker Options",
"panel.animation_controllers": "Animation Controller",
@@ -1762,7 +1759,7 @@
"settings.embed_textures.desc": "Embed texture file content in .bbmodel files",
"action.selection_mode.cluster": "Cluster",
"dialog.copied_to_clipboard": "Copied to clipboard",
- "data.reference_image": "Reference Image",
+ "data.reference_image": "參考圖片",
"message.delete_reference_image": "Are you sure you want to delete this reference image? This cannot be undone.",
"message.add_reference_image.message": "Select where to load the reference image",
"message.add_reference_image.project": "Add to this project",
@@ -1772,14 +1769,14 @@
"message.save_codec_selector.title": "Save Model Format",
"message.save_codec_selector.message": "Select a format to save the model in.",
"message.save_codec_selector.project_file": "Blockbench Project (.bbmodel)",
- "message.save_codec_selector.both": "Both",
- "message.display_skin.username": "Username (Java)",
+ "message.save_codec_selector.both": "兩者",
+ "message.display_skin.username": "使用者名稱 (Java)",
"message.palette_locked": "The palette is locked",
"dialog.project.default_uv_mode": "Default UV Mode",
"dialog.project.default_uv_mode.description": "Default UV Mode of the project. The UV mode can also be changed per cube.",
"dialog.export_options.title": "Export Options",
- "dialog.edit_texture.preview": "Preview",
- "dialog.proportional_editing.range": "Range",
+ "dialog.edit_texture.preview": "預覽",
+ "dialog.proportional_editing.range": "距離",
"dialog.proportional_editing.falloff": "Falloff",
"dialog.proportional_editing.falloff.linear": "Linear",
"dialog.proportional_editing.falloff.hermite_spline": "Smooth",
@@ -1787,11 +1784,11 @@
"dialog.proportional_editing.selection": "Selection",
"dialog.proportional_editing.selection.linear": "Linear Distance",
"dialog.proportional_editing.selection.connections": "Connections",
- "dialog.mirror_painting_texture_center.middle": "Middle",
+ "dialog.mirror_painting_texture_center.middle": "中間",
"dialog.mirror_painting_texture_center.custom": "Custom",
- "dialog.settings.reset_to_default": "Reset to Default",
- "keybindings.item.num_slider.increase": "Increase",
- "keybindings.item.num_slider.decrease": "Decrease",
+ "dialog.settings.reset_to_default": "重置為預設",
+ "keybindings.item.num_slider.increase": "增加",
+ "keybindings.item.num_slider.decrease": "減少",
"settings.always_show_splash_art": "Always Show Splash Art",
"settings.always_show_splash_art.desc": "Always display the splash art on the start screen",
"action.slider_palette_color": "Switch Palette Color",
@@ -1809,24 +1806,24 @@
"action.connect_uv_faces.desc": "Connect the selected UV faces to the last selected UV face",
"action.merge_uv_vertices": "Merge UV Vertices",
"action.merge_uv_vertices.desc": "Snap the first selected UV vertices to the last selected UV vertices",
- "action.bedrock_animation_mode": "Bedrock Animation Mode",
+ "action.bedrock_animation_mode": "基岩版動畫模式",
"action.bedrock_animation_mode.desc": "Select the mode to edit animations for Minecraft: Bedrock Edition in",
- "action.bedrock_animation_mode.entity": "Entity",
- "action.bedrock_animation_mode.attachable_first": "Item 1st Person",
+ "action.bedrock_animation_mode.entity": "實體",
+ "action.bedrock_animation_mode.attachable_first": "物品第一人稱",
"action.bedrock_animation_mode.attachable_third": "Item 3rd Person",
"timeline.amplify": "Amplify",
- "menu.options": "Options...",
+ "menu.options": "選項",
"menu.palette.lock_palette": "Lock Palette",
"menu.uv.export": "Export UV Mapping",
- "menu.uv.flip_x": "Mirror X",
- "menu.uv.flip_y": "Mirror Y",
- "menu.mirror_painting.enabled": "Enabled",
+ "menu.uv.flip_x": "X軸鏡象",
+ "menu.uv.flip_y": "Y軸鏡象",
+ "menu.mirror_painting.enabled": "啟動",
"menu.mirror_painting.configure_texture_center": "Configure Texture Center...",
- "reference_image.position": "Position",
- "reference_image.size": "Size",
- "reference_image.rotation": "Rotation",
- "reference_image.opacity": "Opacity",
- "reference_image.visibility": "Visibility",
+ "reference_image.position": "位置",
+ "reference_image.size": "大小",
+ "reference_image.rotation": "選轉",
+ "reference_image.opacity": "透明度",
+ "reference_image.visibility": "可見度",
"reference_image.clear_mode": "Clear Mode",
"reference_image.layer": "Layer",
"reference_image.layer.background": "Behind Model",
@@ -1854,33 +1851,33 @@
"texture.error.too_large": "Resolution exceeds the maximum of %0",
"dialog.copy_to_clipboard": "Copy to clipboard",
"dialog.open_url": "Open URL",
- "reference_image.image": "Image",
- "uv_editor.rotate_uv": "Rotate UV",
- "generic.error": "Error",
+ "reference_image.image": "圖片",
+ "uv_editor.rotate_uv": "選轉UV",
+ "generic.error": "錯誤",
"projects.start_screen": "Start Screen",
"message.invalid_link.message": "The shared model \"%0\" that you are trying to load is either invalid or has expired.",
"message.plugin_dependencies.title": "Plugin Dependencies",
"message.plugin_dependencies.message1": "The plugin requires these dependencies:",
"message.plugin_dependencies.message1_update": "The plugin %0 has been updated and now requires these dependencies:",
- "message.plugin_dependencies.message2": "Do you want to install them to continue?",
+ "message.plugin_dependencies.message2": "您是否希望下載它們使其繼續?",
"message.plugin_dependencies.invalid": "Unfortunately the plugin cannot be installed, it has an invalid dependency:",
"message.preview_scene_load_failed": "Failed to load preview scene. Check your internet connection.",
"dialog.convert_project.text1": "Convert the project into a different format.",
"dialog.convert_project.text2": "Use conversion at your own risk. Formats have different features and restrictions, so converting will in some cases break parts of your project.",
"dialog.convert_project.text3": "You cannot undo converting, that is why by default a copy will be created.",
- "dialog.unsaved_work.title": "Unsaved Work",
+ "dialog.unsaved_work.title": "為儲存做品",
"dialog.unsaved_work.text": "The following projects contain unsaved changes. Do you want to save your changes?",
"dialog.unsaved_work.discard_all": "Discard All",
- "dialog.unsaved_work.save_all": "Save All",
- "dialog.resize_texture.mode": "Mode",
+ "dialog.unsaved_work.save_all": "儲存全部",
+ "dialog.resize_texture.mode": "模式",
"dialog.resize_texture.mode.crop": "Crop/Expand",
"dialog.resize_texture.mode.scale": "Scale",
- "dialog.plugins.is_installed": "Installed",
+ "dialog.plugins.is_installed": "已下載",
"dialog.plugins.is_disabled": "Disabled",
"dialog.plugins.disable": "Disable",
"dialog.plugins.enable": "Enable",
"dialog.plugins.dependencies": "Depends on:",
- "dialog.view_backups.open_folder": "Open Folder",
+ "dialog.view_backups.open_folder": "打開資料夾",
"dialog.share_model.reference_images": "Include Reference Images",
"dialog.share_model.too_large": "Failed to upload: Model is too large",
"dialog.share_model.too_large_references": "Failed to upload: Model is too large. Try without reference images.",
@@ -1903,9 +1900,9 @@
"action.view_backups.desc": "Browse the list of auto-saved project backups",
"action.search_outliner": "Search Outliner",
"action.search_outliner.desc": "Search for specific element names in the outliner",
- "action.mirror_modeling": "Mirror Modeling",
+ "action.mirror_modeling": "建模鏡射",
"action.mirror_modeling.desc": "Enable Mirror Modeling on the X axis. All changes you make in the viewport will be reflected to the other side, unless specifically disabled on the element.",
- "action.allow_element_mirror_modeling": "Allow Mirror Modeling",
+ "action.allow_element_mirror_modeling": "允許建模鏡射",
"action.allow_element_mirror_modeling.desc": "Choose whether the selected elements can be affected by mirror modeling",
"action.switch_face_crease": "Switch Face Crease",
"action.switch_face_crease.desc": "Switch in which direction the quad folds in the middle",
@@ -1913,7 +1910,7 @@
"action.clear_unused_texture_space.desc": "Clear parts of the texture that are not UV-mapped to any elements",
"action.split_screen": "Split Screen",
"action.split_screen.desc": "Select a viewport split screen mode",
- "action.split_screen.single": "Single",
+ "action.split_screen.single": "單一",
"action.split_screen.double_horizontal": "Double Horizontal",
"action.split_screen.double_vertical": "Double Vertical",
"action.split_screen.quad": "Quad",
@@ -1934,18 +1931,18 @@
"preview_scene.minecraft_plains": "Plains",
"preview_scene.minecraft_cherry_grove": "Cherry Grove",
"preview_scene.minecraft_snowy_tundra": "Snowy Tundra",
- "preview_scene.minecraft_sunset": "Sunset",
- "preview_scene.minecraft_night": "Night",
- "preview_scene.minecraft_desert": "Desert",
- "preview_scene.minecraft_underwater": "Underwater",
- "preview_scene.minecraft_coral_reef": "Coral Reef",
- "preview_scene.minecraft_lush_cave": "Lush Cave",
+ "preview_scene.minecraft_sunset": "日出",
+ "preview_scene.minecraft_night": "夜晚",
+ "preview_scene.minecraft_desert": "沙漠",
+ "preview_scene.minecraft_underwater": "水下",
+ "preview_scene.minecraft_coral_reef": "珊瑚礁",
+ "preview_scene.minecraft_lush_cave": "蒼鬱洞窟",
"preview_scene.minecraft_deep_dark": "Deep Dark",
"generic.navigate_forward": "Forward",
"generic.navigate_back": "Back",
"action.element_render_order": "Transparency Render Order",
- "action.element_render_order.default": "Auto",
- "action.element_render_order.behind": "Behind",
+ "action.element_render_order.default": "自動",
+ "action.element_render_order.behind": "背後",
"action.element_render_order.in_front": "In Front",
"message.installing_update.title": "Update Available",
"message.installing_update.message": "A new version is ready to be installed. After closing the app, please allow for around %0 seconds before opening Blockbench again or turning off the computer, for the update to be installed.",
@@ -1957,7 +1954,7 @@
"settings.cdn_mirror.desc": "Use the mirror CDN to download plugins. The mirror receives updates faster and works in some regions where the default does not work.",
"data.layer": "Layer",
"data.panel": "Panel",
- "generic.confirm_delete": "Are you sure you want to delete this?",
+ "generic.confirm_delete": "您確定要刪除這個嗎?",
"format_category.general": "General",
"modifier_actions.no_uniform_scaling": "Free Scaling",
"message.texture_refresh_conflict.title": "Conflicting Texture Versions",
@@ -1971,7 +1968,7 @@
"dialog.advanced_screenshot.zoom_to_fit": "Zoom To Fit",
"dialog.advanced_screenshot.zoom": "Zoom / Focal Length",
"dialog.advanced_screenshot.anti_aliasing": "Anti-aliasing",
- "dialog.advanced_screenshot.anti_aliasing.off": "Off",
+ "dialog.advanced_screenshot.anti_aliasing.off": "關閉",
"dialog.advanced_screenshot.anti_aliasing.msaa": "Multisampling",
"dialog.advanced_screenshot.anti_aliasing.ssaa": "Supersampling",
"dialog.advanced_screenshot.show_gizmos": "Show Edit Gizmos",
@@ -2025,10 +2022,10 @@
"action.save_animation_preset.desc": "Save the selected keyframes as an animation preset",
"action.animation_onion_skin": "Animation Onion Skin",
"action.animation_onion_skin.desc": "Display an wireframe view of a different frame in the animation for reference",
- "action.animation_onion_skin.off": "Off",
- "action.animation_onion_skin.select": "Select",
+ "action.animation_onion_skin.off": "關閉",
+ "action.animation_onion_skin.select": "選取",
"action.animation_onion_skin.previous": "Previous",
- "action.animation_onion_skin.next": "Next",
+ "action.animation_onion_skin.next": "下一個",
"action.animation_onion_skin.previous_next": "Previous + Next",
"action.apply_animation_preset": "Apply Animation Preset",
"action.apply_animation_preset.desc": "Select from a list of animation presets and apply it to the selected bone",
@@ -2045,10 +2042,10 @@
"action.edit_mode_uv_overlay.desc": "Display the UV map as an overlay in edit mode",
"action.animation_onion_skin_selective": "Selective Onion Skin",
"action.animation_onion_skin_selective.desc": "Only display onion skin for the selected part of the model",
- "menu.image": "Image",
+ "menu.image": "圖片",
"menu.texture.discard_changes": "Discard Changes",
"menu.texture.discard_changes.desc": "Discard all unsaved changes and load the latest version from the file",
- "panel.textures.images": "Images",
+ "panel.textures.images": "圖片",
"dialog.advanced": "Advanced",
"dialog.recommended_option": "recommended",
"modifier_actions.snap_to_center": "Snap to Center",
@@ -2061,15 +2058,15 @@
"message.knife_tool.skipped_face": "Cannot cut between different faces. Include the edges or vertices between them!",
"message.optimize_animation.keyframes_removed": "Removed %0 redundant keyframes",
"message.optimize_animation.nothing_to_optimize": "Found nothing to optimize!",
- "message.duplicate_bone_copy_animation.title": "Copy Animation",
+ "message.duplicate_bone_copy_animation.title": " 拷貝動畫",
"message.duplicate_bone_copy_animation.message": "The duplicated bone is animated in %0 animations. Do you want to copy the keyframes over to the new bone?",
- "message.auto_fix_mesh_edit.title": "Auto Fix",
+ "message.auto_fix_mesh_edit.title": "自動修復",
"message.auto_fix_mesh_edit.revert": "Revert Edit",
"message.auto_fix_mesh_edit.overlapping_vertices": "Certain vertices have been moved into the same spot. How would you like to proceed?",
"message.auto_fix_mesh_edit.concave_quads": "One or more quad faces are now concave, which can cause issues in UV-mapping and rendering. Blockbench can automatically fix it for you:",
"message.auto_fix_mesh_edit.merge_vertices": "Merge Vertices",
"message.auto_fix_mesh_edit.split_quads": "Split Quads",
- "message.load_images.add_image": "Add Image",
+ "message.load_images.add_image": "增加圖片",
"dialog.project.modded_entity_entity_class": "Entity Class",
"dialog.resize_texture.offset": "Offset",
"dialog.animated_texture_editor.code_reference": "Code Reference",
@@ -2082,15 +2079,15 @@
"dialog.animated_texture_editor.resize_frames": "Resize Frames...",
"dialog.animated_texture_editor.apply": "Apply",
"dialog.add_primitive.edge_size": "Edge Size",
- "dialog.change_animation_speed.speed": "Speed",
+ "dialog.change_animation_speed.speed": "速度",
"dialog.change_animation_speed.adjust_snapping": "Adjust Snapping",
"dialog.optimize_animation.selection": "Selection",
"dialog.optimize_animation.selection.selected_keyframes": "Selected Keyframes",
"dialog.optimize_animation.selection.selected_animation": "Selected Animation",
"dialog.optimize_animation.selection.all_animations": "All Animations",
"dialog.optimize_animation.thresholds": "Threshold values",
- "dialog.import_obj.obj": "OBJ File",
- "dialog.import_obj.mtl": "MTL File",
+ "dialog.import_obj.obj": "OBJ檔案",
+ "dialog.import_obj.mtl": "MTL檔案",
"dialog.import_obj.scale": "Scale",
"layout.thumbnail": "Custom Thumbnail CSS",
"settings.pixel_grid": "Pixel Grid",
@@ -2129,13 +2126,104 @@
"action.change_animation_speed.desc": "Change the speed of the selected animation",
"timeline.select_particle_file": "Select Particle File",
"timeline.select_sound_file": "Select Sound File",
- "menu.cube.texture.default": "Default",
+ "menu.cube.texture.default": "預設",
"menu.texture.particle.clear": "Stop using for Particles",
- "menu.texture.use_as_default": "Set as Default",
+ "menu.texture.use_as_default": "設定成預設",
"menu.texture.use_as_default.clear": "Unassign as Default",
"menu.toolbar.overflow": "Toolbar Overflow",
"edit.solidify_mesh_selection.thickness": "Thickness",
"reference_image.sync_to_timeline": "Sync To Timeline",
"reference_image.toggle_playback": "Play/Pause",
- "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid"
+ "dialog.add_primitive.shape.beveled_cuboid": "Beveled Cuboid",
+ "dialog.ignore_all": "Ignore All",
+ "data.texture_group": "Texture Group",
+ "data.animation": "Animation",
+ "generic.on": "On",
+ "generic.off": "Off",
+ "format.free.info.3d_printing": "3D Printing",
+ "message.invalid_file.merge_conflict": "The file contains unresolved Git merge conflicts.",
+ "dialog.expand_texture_selection.radius": "Amount",
+ "dialog.expand_texture_selection.corner": "Corner Shape",
+ "dialog.expand_texture_selection.corner.round": "Round",
+ "dialog.expand_texture_selection.corner.square": "Square",
+ "dialog.expand_texture_selection.corner.manhattan": "Manhattan",
+ "dialog.merge_animation.merge_target": "Merge into",
+ "keybindings.variation_conflict": "Variation conflicts with the main keybinding",
+ "settings.recovery_save_interval": "Recovery Point Save Interval",
+ "settings.recovery_save_interval.desc": "Blockbench regularly saves the open project in the background to recover in case of a computer crash. Set the interval in seconds. Set to 0 to disable saving.",
+ "settings.save_view_per_tab": "Save View per Tab",
+ "settings.save_view_per_tab.desc": "Save the current view angle for each tab separately",
+ "settings.inherit_parent_color": "Inherit Parent Color",
+ "settings.inherit_parent_color.desc": "Set the marker color of a newly created element to the color of the parent instead of a random color",
+ "keybind.preview_select.multi_select": "Multi-select",
+ "keybind.preview_select.group_select": "Group-select",
+ "keybind.preview_select.loop_select": "Loop-select",
+ "action.fill_mode.selection": "Selection",
+ "action.fill_mode.selected_elements": "Selected Elements",
+ "action.image_tiled_view": "Tiled View",
+ "action.image_tiled_view.description": "Enable the tiled view in the 2D editor",
+ "action.image_onion_skin_view": "Image Editor Onion Skin",
+ "action.image_onion_skin_view.description": "Enable the onion skin view in the 2D editor",
+ "action.expand_texture_selection": "Expand Texture Selection",
+ "action.expand_texture_selection.desc": "Expand or shrink the texture selection",
+ "action.switch_tabs.reverse_order": "Reverse order",
+ "action.save_project_incremental": "Save Project With Increment",
+ "action.save_project_incremental.desc": "Saves the current model as a project file with an increment (ex: project_2.bbmodel)",
+ "action.copy.multiple": "Copy All",
+ "action.copy.multiple.desc": "Copy all available data individually",
+ "action.paste.multiple": "Paste All",
+ "action.randomize_marker_colors": "Randomize Marker Colors",
+ "action.cube_light_emission": "Light Emission",
+ "action.cube_light_emission.desc": "Change the emissiveness of the selected cubes, as a value between 0 and 15",
+ "action.view_mode.colored_solid": "Solid with Marker Colors",
+ "action.focus_on_selection.rotate_only": "Rotate only",
+ "action.create_texture_group": "Create Texture Group",
+ "action.create_texture_group.desc": "Create a group for your textures",
+ "action.uv_maximize.all_faces": "Affect all faces",
+ "action.retarget_animators": "Retarget Animations",
+ "action.retarget_animators.desc": "Select which animator targets which bone or element",
+ "action.merge_animation": "Merge Animation",
+ "action.merge_animation.desc": "Merge the animation into another animation",
+ "action.add_keyframe.reset_values": "With default values",
+ "action.set_timeline_range_start": "Set Timeline Range Start",
+ "action.set_timeline_range_start.desc": "Set the start point for a custom playback range in the animation timeline",
+ "action.set_timeline_range_end": "Set Timeline Range End",
+ "action.set_timeline_range_end.desc": "Set the end point for a custom playback range in the animation timeline",
+ "action.disable_timeline_range": "Disable Timeline Range",
+ "action.disable_timeline_range.desc": "Disable the custom playback range in the animation timeline",
+ "menu.texture_group.resolve": "Resolve",
+ "menu.image_tiled_view.mirrored": "Mirrored Edges",
+ "menu.image_onion_skin_view.frame": "Frames",
+ "menu.image_onion_skin_view.frame.last_viewed": "Last Viewed Frame",
+ "menu.image_onion_skin_view.frame.previous": "Previous Frame",
+ "menu.image_onion_skin_view.frame.next": "Next Frame",
+ "menu.image_onion_skin_view.frame.both": "Previous + Next",
+ "menu.image_onion_skin_view.display": "Display",
+ "menu.image_onion_skin_view.display.pixels": "Smaller Pixels",
+ "menu.image_onion_skin_view.display.transparent": "Transparent",
+ "menu.image_onion_skin_view.above": "Display Above",
+ "menu.animation.reload": "Reload",
+ "switches.autouv.alt": "Relative",
+ "display.rotation_pivot": "Rotation Pivot",
+ "display.scale_pivot": "Scale Pivot",
+ "display.reference.fox": "Fox",
+ "display.reference.eating": "Eating",
+ "preview_scene.sky": "Sky",
+ "preview_scene.space": "Space",
+ "preview_scene.minecraft_ocean": "Ocean",
+ "message.import_palette.selection_only": "Selection only",
+ "dialog.blend_transition_edit.ease_in_out": "Ease-in-out (%0)",
+ "dialog.blend_transition_edit.generate": "Generate...",
+ "dialog.blend_transition_edit.generate.learn_more": "More info and preview",
+ "dialog.blend_transition_edit.generate.curve": "Easing Type",
+ "dialog.blend_transition_edit.generate.steps": "Keyframes",
+ "settings.fps_limit": "FPS Limit",
+ "settings.fps_limit.desc": "Limit how many frames per second Blockbench renders. The actual frame rate is limited to what your device can display.",
+ "settings.outliner_reveal_on_select": "Reveal Elements on Select",
+ "settings.outliner_reveal_on_select.desc": "Reveal elements in the ouliner when selected",
+ "settings.java_export_pivots": "Export Pivots in Java block/item models",
+ "settings.java_export_pivots.desc": "Save pivot points in Java block/item models on cubes without rotation",
+ "animation_controllers.state.blend_transition_curve": "Blend Transition Curve",
+ "menu.slider.reset_vector": "Reset Vector",
+ "dialog.blend_transition_edit.extended": "Extended Graph"
}
\ No newline at end of file
diff --git a/lib/easing.js b/lib/easing.js
new file mode 100644
index 000000000..de44377c0
--- /dev/null
+++ b/lib/easing.js
@@ -0,0 +1,307 @@
+// Based on https://gist.github.com/gre/1650294
+class Easings {
+// No easing, no acceleration
+static linear( t ) {
+ return t;
+}
+
+// Slight acceleration from zero to full speed
+static easeInSine( t ) {
+ return -1 * Math.cos( t * ( Math.PI / 2 ) ) + 1;
+}
+
+// Slight deceleration at the end
+static easeOutSine( t ) {
+ return Math.sin( t * ( Math.PI / 2 ) );
+}
+
+// Slight acceleration at beginning and slight deceleration at end
+static easeInOutSine( t ) {
+ return -0.5 * ( Math.cos( Math.PI * t ) - 1 );
+}
+
+// Accelerating from zero velocity
+static easeInQuad( t ) {
+ return t * t;
+}
+
+// Decelerating to zero velocity
+static easeOutQuad( t ) {
+ return t * ( 2 - t );
+}
+
+// Acceleration until halfway, then deceleration
+static easeInOutQuad( t ) {
+ return t < 0.5 ? 2 * t * t : - 1 + ( 4 - 2 * t ) * t;
+}
+
+// Accelerating from zero velocity
+static easeInCubic( t ) {
+ return t * t * t;
+}
+
+// Decelerating to zero velocity
+static easeOutCubic( t ) {
+ const t1 = t - 1;
+ return t1 * t1 * t1 + 1;
+}
+
+// Acceleration until halfway, then deceleration
+static easeInOutCubic( t ) {
+ return t < 0.5 ? 4 * t * t * t : ( t - 1 ) * ( 2 * t - 2 ) * ( 2 * t - 2 ) + 1;
+}
+
+// Accelerating from zero velocity
+static easeInQuart( t ) {
+ return t * t * t * t;
+}
+
+// Decelerating to zero velocity
+static easeOutQuart( t ) {
+ const t1 = t - 1;
+ return 1 - t1 * t1 * t1 * t1;
+}
+
+// Acceleration until halfway, then deceleration
+static easeInOutQuart( t ) {
+ const t1 = t - 1;
+ return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * t1 * t1 * t1 * t1;
+}
+
+// Accelerating from zero velocity
+static easeInQuint( t ) {
+ return t * t * t * t * t;
+}
+
+// Decelerating to zero velocity
+static easeOutQuint( t ) {
+ const t1 = t - 1;
+ return 1 + t1 * t1 * t1 * t1 * t1;
+}
+
+// Acceleration until halfway, then deceleration
+static easeInOutQuint( t ) {
+ const t1 = t - 1;
+ return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * t1 * t1 * t1 * t1 * t1;
+}
+
+// Accelerate exponentially until finish
+static easeInExpo( t ) {
+
+ if( t === 0 ) {
+ return 0;
+ }
+
+ return Math.pow( 2, 10 * ( t - 1 ) );
+
+}
+
+// Initial exponential acceleration slowing to stop
+static easeOutExpo( t ) {
+
+ if( t === 1 ) {
+ return 1;
+ }
+
+ return ( -Math.pow( 2, -10 * t ) + 1 );
+
+}
+
+// Exponential acceleration and deceleration
+static easeInOutExpo( t ) {
+
+ if( t === 0 || t === 1 ) {
+ return t;
+ }
+
+ const scaledTime = t * 2;
+ const scaledTime1 = scaledTime - 1;
+
+ if( scaledTime < 1 ) {
+ return 0.5 * Math.pow( 2, 10 * ( scaledTime1 ) );
+ }
+
+ return 0.5 * ( -Math.pow( 2, -10 * scaledTime1 ) + 2 );
+
+}
+
+// Increasing velocity until stop
+static easeInCirc( t ) {
+
+ const scaledTime = t / 1;
+ return -1 * ( Math.sqrt( 1 - scaledTime * t ) - 1 );
+
+}
+
+// Start fast, decreasing velocity until stop
+static easeOutCirc( t ) {
+
+ const t1 = t - 1;
+ return Math.sqrt( 1 - t1 * t1 );
+
+}
+
+// Fast increase in velocity, fast decrease in velocity
+static easeInOutCirc( t ) {
+
+ const scaledTime = t * 2;
+ const scaledTime1 = scaledTime - 2;
+
+ if( scaledTime < 1 ) {
+ return -0.5 * ( Math.sqrt( 1 - scaledTime * scaledTime ) - 1 );
+ }
+
+ return 0.5 * ( Math.sqrt( 1 - scaledTime1 * scaledTime1 ) + 1 );
+
+}
+
+// Slow movement backwards then fast snap to finish
+static easeInBack( t, magnitude = 1.70158 ) {
+
+ return t * t * ( ( magnitude + 1 ) * t - magnitude );
+
+}
+
+// Fast snap to backwards point then slow resolve to finish
+static easeOutBack( t, magnitude = 1.70158 ) {
+
+ const scaledTime = ( t / 1 ) - 1;
+
+ return (
+ scaledTime * scaledTime * ( ( magnitude + 1 ) * scaledTime + magnitude )
+ ) + 1;
+
+}
+
+// Slow movement backwards, fast snap to past finish, slow resolve to finish
+static easeInOutBack( t, magnitude = 1.70158 ) {
+
+ const scaledTime = t * 2;
+ const scaledTime2 = scaledTime - 2;
+
+ const s = magnitude * 1.525;
+
+ if( scaledTime < 1) {
+
+ return 0.5 * scaledTime * scaledTime * (
+ ( ( s + 1 ) * scaledTime ) - s
+ );
+
+ }
+
+ return 0.5 * (
+ scaledTime2 * scaledTime2 * ( ( s + 1 ) * scaledTime2 + s ) + 2
+ );
+
+}
+// Bounces slowly then quickly to finish
+static easeInElastic( t, magnitude = 0.7 ) {
+
+ if( t === 0 || t === 1 ) {
+ return t;
+ }
+
+ const scaledTime = t / 1;
+ const scaledTime1 = scaledTime - 1;
+
+ const p = 1 - magnitude;
+ const s = p / ( 2 * Math.PI ) * Math.asin( 1 );
+
+ return -(
+ Math.pow( 2, 10 * scaledTime1 ) *
+ Math.sin( ( scaledTime1 - s ) * ( 2 * Math.PI ) / p )
+ );
+
+}
+
+// Fast acceleration, bounces to zero
+static easeOutElastic( t, magnitude = 0.7 ) {
+
+ if( t === 0 || t === 1 ) {
+ return t;
+ }
+
+ const p = 1 - magnitude;
+ const scaledTime = t * 2;
+
+ const s = p / ( 2 * Math.PI ) * Math.asin( 1 );
+ return (
+ Math.pow( 2, -10 * scaledTime ) *
+ Math.sin( ( scaledTime - s ) * ( 2 * Math.PI ) / p )
+ ) + 1;
+
+}
+
+// Slow start and end, two bounces sandwich a fast motion
+static easeInOutElastic( t, magnitude = 0.65 ) {
+
+ if( t === 0 || t === 1 ) {
+ return t;
+ }
+
+ const p = 1 - magnitude;
+ const scaledTime = t * 2;
+ const scaledTime1 = scaledTime - 1;
+
+ const s = p / ( 2 * Math.PI ) * Math.asin( 1 );
+
+ if( scaledTime < 1 ) {
+ return -0.5 * (
+ Math.pow( 2, 10 * scaledTime1 ) *
+ Math.sin( ( scaledTime1 - s ) * ( 2 * Math.PI ) / p )
+ );
+ }
+
+ return (
+ Math.pow( 2, -10 * scaledTime1 ) *
+ Math.sin( ( scaledTime1 - s ) * ( 2 * Math.PI ) / p ) * 0.5
+ ) + 1;
+
+}
+
+// Bounce to completion
+static easeOutBounce( t ) {
+
+ const scaledTime = t / 1;
+
+ if( scaledTime < ( 1 / 2.75 ) ) {
+
+ return 7.5625 * scaledTime * scaledTime;
+
+ } else if( scaledTime < ( 2 / 2.75 ) ) {
+
+ const scaledTime2 = scaledTime - ( 1.5 / 2.75 );
+ return ( 7.5625 * scaledTime2 * scaledTime2 ) + 0.75;
+
+ } else if( scaledTime < ( 2.5 / 2.75 ) ) {
+
+ const scaledTime2 = scaledTime - ( 2.25 / 2.75 );
+ return ( 7.5625 * scaledTime2 * scaledTime2 ) + 0.9375;
+
+ } else {
+
+ const scaledTime2 = scaledTime - ( 2.625 / 2.75 );
+ return ( 7.5625 * scaledTime2 * scaledTime2 ) + 0.984375;
+
+ }
+
+}
+
+// Bounce increasing in velocity until completion
+static easeInBounce( t ) {
+ return 1 - Easings.easeOutBounce( 1 - t );
+}
+
+// Bounce in and bounce out
+static easeInOutBounce( t ) {
+
+ if( t < 0.5 ) {
+
+ return Easings.easeInBounce( t * 2 ) * 0.5;
+
+ }
+
+ return ( Easings.easeOutBounce( ( t * 2 ) - 1 ) * 0.5 ) + 0.5;
+
+}
+}
diff --git a/lib/jquery.js b/lib/jquery.js
index 200b54e47..798cc8bf7 100644
--- a/lib/jquery.js
+++ b/lib/jquery.js
@@ -1,2 +1,2 @@
-/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0
+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0=12"
}
},
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/@jridgewell/gen-mapping": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
@@ -2373,6 +2453,16 @@
"@types/node": "*"
}
},
+ "node_modules/@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/http-cache-semantics": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
@@ -2401,6 +2491,12 @@
"@types/node": "*"
}
},
+ "node_modules/@types/minimatch": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+ "dev": true
+ },
"node_modules/@types/ms": {
"version": "0.7.34",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
@@ -2459,9 +2555,9 @@
"dev": true
},
"node_modules/@types/verror": {
- "version": "1.10.9",
- "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.9.tgz",
- "integrity": "sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ==",
+ "version": "1.10.10",
+ "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.10.tgz",
+ "integrity": "sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==",
"dev": true,
"optional": true
},
@@ -2753,15 +2849,12 @@
}
},
"node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "node": ">=8"
}
},
"node_modules/ansi-styles": {
@@ -2865,6 +2958,19 @@
"balanced-match": "^1.0.0"
}
},
+ "node_modules/app-builder-lib/node_modules/builder-util-runtime": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz",
+ "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/app-builder-lib/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -2904,13 +3010,10 @@
}
},
"node_modules/app-builder-lib/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -3287,6 +3390,18 @@
}
},
"node_modules/builder-util-runtime": {
+ "version": "9.2.5",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.5.tgz",
+ "integrity": "sha512-HjIDfhvqx/8B3TDN4GbABQcgpewTU4LMRTQPkVpKYV3lsuxEJoIfvg09GyWTNmfVNSUAYf+fbTN//JX4TH20pg==",
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/builder-util/node_modules/builder-util-runtime": {
"version": "9.2.4",
"resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz",
"integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==",
@@ -3476,51 +3591,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cli-truncate/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cli-truncate/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "optional": true
- },
- "node_modules/cli-truncate/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cli-truncate/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@@ -3535,64 +3605,6 @@
"node": ">=12"
}
},
- "node_modules/cliui/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
@@ -3720,31 +3732,29 @@
}
},
"node_modules/config-file-ts/node_modules/glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/config-file-ts/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -3756,10 +3766,19 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/config-file-ts/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/config-file-ts/node_modules/typescript": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
- "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
+ "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -3975,6 +3994,19 @@
"dmg-license": "^1.0.11"
}
},
+ "node_modules/dmg-builder/node_modules/builder-util-runtime": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz",
+ "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/dmg-builder/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -4097,9 +4129,9 @@
}
},
"node_modules/electron": {
- "version": "30.0.3",
- "resolved": "https://registry.npmjs.org/electron/-/electron-30.0.3.tgz",
- "integrity": "sha512-h+suwx6e0fnv/9wi0/cmCMtG+4LrPzJZa+3DEEpxcPcP+pcWnBI70t8QspxgMNIh2wzXLMD9XVqrLkEbiBAInw==",
+ "version": "31.4.0",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-31.4.0.tgz",
+ "integrity": "sha512-YTwKoAA+nrJMlI1TTHnIXLYWoQLKnhbkz0qxZcI7Hadcy0UaFMFs9xzwvH2MnrRpVJy7RKo49kVGuvSdRl8zMA==",
"hasInstallScript": true,
"dependencies": {
"@electron/get": "^2.0.0",
@@ -4190,6 +4222,19 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/electron-builder/node_modules/builder-util-runtime": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz",
+ "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/electron-builder/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -4251,6 +4296,19 @@
"mime": "^2.5.2"
}
},
+ "node_modules/electron-publish/node_modules/builder-util-runtime": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz",
+ "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "sax": "^1.2.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/electron-publish/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -4293,32 +4351,20 @@
"dev": true
},
"node_modules/electron-updater": {
- "version": "6.1.8",
- "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.8.tgz",
- "integrity": "sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==",
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.3.4.tgz",
+ "integrity": "sha512-uZUo7p1Y53G4tl6Cgw07X1yF8Jlz6zhaL7CQJDZ1fVVkOaBfE2cWtx80avwDVi8jHp+I/FWawrMgTAeCCNIfAg==",
"dependencies": {
- "builder-util-runtime": "9.2.3",
+ "builder-util-runtime": "9.2.5",
"fs-extra": "^10.1.0",
"js-yaml": "^4.1.0",
"lazy-val": "^1.0.5",
"lodash.escaperegexp": "^4.1.2",
"lodash.isequal": "^4.5.0",
- "semver": "^7.3.8",
+ "semver": "^7.6.3",
"tiny-typed-emitter": "^2.1.0"
}
},
- "node_modules/electron-updater/node_modules/builder-util-runtime": {
- "version": "9.2.3",
- "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz",
- "integrity": "sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==",
- "dependencies": {
- "debug": "^4.3.4",
- "sax": "^1.2.4"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
"node_modules/electron-updater/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -4344,12 +4390,9 @@
}
},
"node_modules/electron-updater/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"bin": {
"semver": "bin/semver.js"
},
@@ -4374,9 +4417,9 @@
}
},
"node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"node_modules/end-of-stream": {
@@ -4726,9 +4769,9 @@
}
},
"node_modules/foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
@@ -5548,16 +5591,13 @@
}
},
"node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
- "engines": {
- "node": ">=14"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
@@ -5850,6 +5890,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "devOptional": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -5947,18 +5988,21 @@
}
},
"node_modules/minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
- "dev": true
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
"dev": true,
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=8"
}
},
"node_modules/minizlib": {
@@ -6182,6 +6226,12 @@
"node": ">=6"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+ "dev": true
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -6216,29 +6266,26 @@
"dev": true
},
"node_modules/path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"dependencies": {
- "lru-cache": "^9.1.1 || ^10.0.0",
+ "lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
- "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/pend": {
"version": "1.2.0",
@@ -6860,9 +6907,9 @@
}
},
"node_modules/signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"node_modules/simple-update-notifier": {
@@ -7000,20 +7047,17 @@
"peer": true
},
"node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/string-width-cjs": {
@@ -7026,30 +7070,6 @@
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
- }
- },
- "node_modules/string-width-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/string-width-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
@@ -7158,18 +7178,15 @@
}
},
"node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"dependencies": {
- "ansi-regex": "^6.0.1"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ "node": ">=8"
}
},
"node_modules/strip-ansi-cjs": {
@@ -7180,13 +7197,7 @@
"dev": true,
"dependencies": {
"ansi-regex": "^5.0.1"
- }
- },
- "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
+ },
"engines": {
"node": ">=8"
}
@@ -7287,15 +7298,6 @@
"node": ">=6"
}
},
- "node_modules/tar/node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/temp-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
@@ -7678,9 +7680,9 @@
}
},
"node_modules/utf8-byte-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
- "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz",
+ "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==",
"dev": true
},
"node_modules/util-deprecate": {
@@ -8173,17 +8175,17 @@
}
},
"node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
@@ -8199,59 +8201,12 @@
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/wrappy": {
@@ -8280,7 +8235,8 @@
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "devOptional": true
},
"node_modules/yargs": {
"version": "17.7.2",
@@ -8309,47 +8265,6 @@
"node": ">=12"
}
},
- "node_modules/yargs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
diff --git a/package.json b/package.json
index 437ce0aa0..75c7a36b3 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "Blockbench",
"description": "Low-poly modeling and animation software",
- "version": "4.10.4",
+ "version": "4.11.0",
"license": "GPL-3.0-or-later",
"author": {
"name": "JannisX11",
@@ -76,7 +76,17 @@
},
"win": {
"certificateSubjectName": "Jannis Tobias Petersen",
- "target": "nsis"
+ "artifactName": "${productName}_${arch}_${version}.${ext}",
+ "target": {
+ "target": "nsis",
+ "arch": [
+ "arm64",
+ "x64"
+ ]
+ }
+ },
+ "nsis": {
+ "license": "LICENSE.MD"
},
"linux": {
"artifactName": "${productName}_${version}.${ext}",
@@ -85,13 +95,20 @@
"rpm",
"appImage"
],
- "category": "3DGraphics",
+ "category": "Graphics;3DGraphics",
"icon": "build/icon.icns"
},
"fileAssociations": [
{
"ext": "bbmodel",
"name": "Blockbench Project",
+ "mimeType": "model/vnd.blockbench.bbmodel",
+ "role": "Editor"
+ },
+ {
+ "ext": "json",
+ "name": "JSON Model",
+ "mimeType": "application/json",
"role": "Editor"
}
]
@@ -105,12 +122,13 @@
"publish-windows": "npm run bundle && electron-builder -w --publish=onTagOrDraft && node ./scripts/rename_portable.js && electron-builder --windows portable --publish=onTagOrDraft",
"pwa": "node ./scripts/generate_pwa.js",
"prepublish": "npm run bundle && npm run pwa",
+ "prepublish-beta": "node ./scripts/enable_beta.js && npm run bundle && npm run pwa",
"webapp": "git checkout gh-pages && git pull && git merge master && git push && git checkout master"
},
"devDependencies": {
"@electron/notarize": "^2.3.0",
"blockbench-types": "^4.6.1",
- "electron": "^30.0.3",
+ "electron": "^31.4.0",
"electron-builder": "^24.13.3",
"webpack": "^5.74.0",
"webpack-cli": "^4.5.0",
@@ -119,7 +137,7 @@
"dependencies": {
"@electron/remote": "^2.1.2",
"electron-color-picker": "^0.2.0",
- "electron-updater": "^6.1.8",
+ "electron-updater": "^6.3.4",
"gifenc": "^1.0.3"
}
}
diff --git a/scripts/enable_beta.js b/scripts/enable_beta.js
new file mode 100644
index 000000000..20b9bf310
--- /dev/null
+++ b/scripts/enable_beta.js
@@ -0,0 +1,11 @@
+const fs = require('fs');
+const index_path = './index.html';
+
+let package_file = fs.readFileSync(index_path, {encoding: 'utf-8'});
+
+package_file = package_file.replace('manifest.webmanifest', 'manifest-beta.webmanifest');
+package_file = package_file.replace('favicon.png', 'icons/favicon_beta.png');
+
+fs.writeFileSync(index_path, package_file, {encoding: 'utf-8'});
+
+console.log('Changed index.html and manifest file to beta');
diff --git a/scripts/rename_ia32.js b/scripts/rename_ia32.js
deleted file mode 100644
index be5ed9664..000000000
--- a/scripts/rename_ia32.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const fs = require('fs');
-const package_path = './package.json';
-
-let package_file = fs.readFileSync(package_path, {encoding: 'utf-8'});
-let package = JSON.parse(package_file);
-
-package.build.artifactName = "${productName}_32bit_${version}.${ext}";
-
-package_file = JSON.stringify(package, null, '\t');
-fs.writeFileSync(package_path, package_file, {encoding: 'utf-8'});
-
-console.log('Changed artifactName for 32bit build');
diff --git a/scripts/rename_portable.js b/scripts/rename_portable.js
index d3b381a29..d99ba751f 100644
--- a/scripts/rename_portable.js
+++ b/scripts/rename_portable.js
@@ -4,7 +4,7 @@ const package_path = './package.json';
let package_file = fs.readFileSync(package_path, {encoding: 'utf-8'});
let package = JSON.parse(package_file);
-package.build.artifactName = "${productName}_${version}_portable.${ext}";
+package.build.win.artifactName = "${productName}_${version}_portable.${ext}";
package_file = JSON.stringify(package, null, '\t');
fs.writeFileSync(package_path, package_file, {encoding: 'utf-8'});
diff --git a/src/index.js b/src/index.js
index 25399f01d..3a641710f 100644
--- a/src/index.js
+++ b/src/index.js
@@ -19,6 +19,9 @@ window.CustomThemeOptions = [
LightTheme,
ContrastTheme
]
+for (let theme of window.CustomThemeOptions) {
+ theme.source = 'built_in';
+}
import { GIFEncoder, quantize, applyPalette } from 'gifenc'
window.GIFEnc = { GIFEncoder, quantize, applyPalette };
diff --git a/src/languages.js b/src/languages.js
index c687d259d..2d37b5a51 100644
--- a/src/languages.js
+++ b/src/languages.js
@@ -37,7 +37,7 @@ const data = {
zh_tw: zh_tw,
};
-window.tl = function(string, variables) {
+window.tl = function(string, variables, default_value) {
if (string && string.length > 100) return string;
var result = Language.data[string]
if (result && result.length > 0) {
@@ -52,6 +52,8 @@ window.tl = function(string, variables) {
}
}
return result;
+ } else if (default_value != undefined) {
+ return default_value;
} else {
return string;
}