diff options
Diffstat (limited to 'editor')
257 files changed, 15595 insertions, 8091 deletions
diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index 17b03fd479..25ff7f884a 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -32,6 +32,7 @@ #include "editor/editor_node.h" #include "editor_scale.h" +#include "scene/resources/text_line.h" float AnimationBezierTrackEdit::_bezier_h_to_pixel(float p_h) { float h = p_h; @@ -247,6 +248,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { } Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Color color = get_theme_color("font_color", "Label"); int hsep = get_theme_constant("hseparation", "ItemList"); int vsep = get_theme_constant("vseparation", "ItemList"); @@ -286,26 +288,27 @@ void AnimationBezierTrackEdit::_notification(int p_what) { String text; - int h = font->get_height(); - if (node) { int ofs = 0; Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(node, "Node"); - h = MAX(h, icon->get_height()); + text = node->get_name(); + ofs += hsep; + ofs += icon->get_width(); + + TextLine text_buf = TextLine(text, font, font_size); + text_buf.set_width(limit - ofs - hsep); + + int h = MAX(text_buf.get_size().y, icon->get_height()); draw_texture(icon, Point2(ofs, vofs + int(h - icon->get_height()) / 2)); margin = icon->get_width(); - text = node->get_name(); - ofs += hsep; - ofs += icon->get_width(); - - Vector2 string_pos = Point2(ofs, vofs + (h - font->get_height()) / 2 + font->get_ascent()); + Vector2 string_pos = Point2(ofs, vofs + (h - text_buf.get_size().y) / 2 + text_buf.get_line_ascent()); string_pos = string_pos.floor(); - draw_string(font, string_pos, text, color, limit - ofs - hsep); + text_buf.draw(get_canvas_item(), string_pos, color); vofs += h + vsep; } @@ -327,7 +330,10 @@ void AnimationBezierTrackEdit::_notification(int p_what) { path = path.replace_first(base_path, ""); Color cc = color; - Rect2 rect = Rect2(margin, vofs, limit - margin - hsep, font->get_height() + vsep); + TextLine text_buf = TextLine(path, font, font_size); + text_buf.set_width(limit - margin - hsep); + + Rect2 rect = Rect2(margin, vofs, limit - margin - hsep, text_buf.get_size().y + vsep); if (i != track) { cc.a *= 0.7; uint32_t hash = path.hash(); @@ -338,7 +344,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { Color subcolor; subcolor.set_hsv(h, 0.2, 0.8); subcolor.a = 0.5; - draw_rect(Rect2(0, vofs + font->get_height() * 0.1, margin - hsep, font->get_height() * 0.8), subcolor); + draw_rect(Rect2(0, vofs + text_buf.get_size().y * 0.1, margin - hsep, text_buf.get_size().y * 0.8), subcolor); subtrack_colors[i] = subcolor; subtracks[i] = rect; @@ -347,15 +353,17 @@ void AnimationBezierTrackEdit::_notification(int p_what) { ac.a = 0.5; draw_rect(rect, ac); } - draw_string(font, Point2(margin, vofs + font->get_ascent()), path, cc, limit - margin - hsep); - vofs += font->get_height() + vsep; + Vector2 string_pos = Point2(margin, vofs + text_buf.get_line_ascent()); + text_buf.draw(get_canvas_item(), string_pos, cc); + + vofs += text_buf.get_size().y + vsep; } Color accent = get_theme_color("accent_color", "Editor"); { //guides - float min_left_scale = font->get_height() + vsep; + float min_left_scale = font->get_height(font_size) + vsep; float scale = (min_left_scale * 2) * v_zoom; float step = Math::pow(10.0, Math::round(Math::log(scale / 5.0) / Math::log(10.0))) * 5.0; @@ -367,7 +375,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { bool first = true; int prev_iv = 0; - for (int i = font->get_height(); i < get_size().height; i++) { + for (int i = font->get_height(font_size); i < get_size().height; i++) { float ofs = get_size().height / 2 - i; ofs *= v_zoom; ofs += v_scroll; @@ -382,7 +390,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { draw_line(Point2(limit, i), Point2(right_limit, i), lc); Color c = color; c.a *= 0.5; - draw_string(font, Point2(limit + 8, i - 2), rtos(Math::stepify((iv + 1) * scale, step)), c); + draw_string(font, Point2(limit + 8, i - 2), TS->format_number(rtos(Math::stepify((iv + 1) * scale, step))), HALIGN_LEFT, -1, font_size, c); } first = false; @@ -453,8 +461,8 @@ void AnimationBezierTrackEdit::_notification(int p_what) { ep.point_rect.size = bezier_icon->get_size(); if (selection.has(i)) { draw_texture(selected_icon, ep.point_rect.position); - draw_string(font, ep.point_rect.position + Vector2(8, -font->get_height() - 4), TTR("Time:") + " " + rtos(Math::stepify(offset, 0.001)), accent); - draw_string(font, ep.point_rect.position + Vector2(8, -8), TTR("Value:") + " " + rtos(Math::stepify(value, 0.001)), accent); + draw_string(font, ep.point_rect.position + Vector2(8, -font->get_height(font_size) - 4), TTR("Time:") + " " + TS->format_number(rtos(Math::stepify(offset, 0.001))), HALIGN_LEFT, -1, font_size, accent); + draw_string(font, ep.point_rect.position + Vector2(8, -8), TTR("Value:") + " " + TS->format_number(rtos(Math::stepify(value, 0.001))), HALIGN_LEFT, -1, font_size, accent); } else { draw_texture(bezier_icon, ep.point_rect.position); } @@ -499,14 +507,14 @@ Ref<Animation> AnimationBezierTrackEdit::get_animation() const { void AnimationBezierTrackEdit::set_animation_and_track(const Ref<Animation> &p_animation, int p_track) { animation = p_animation; track = p_track; - if (is_connected_compat("select_key", editor, "_key_selected")) { - disconnect_compat("select_key", editor, "_key_selected"); + if (is_connected("select_key", Callable(editor, "_key_selected"))) { + disconnect("select_key", Callable(editor, "_key_selected")); } - if (is_connected_compat("deselect_key", editor, "_key_deselected")) { - disconnect_compat("deselect_key", editor, "_key_deselected"); + if (is_connected("deselect_key", Callable(editor, "_key_deselected"))) { + disconnect("deselect_key", Callable(editor, "_key_deselected")); } - connect_compat("select_key", editor, "_key_selected", varray(p_track), CONNECT_DEFERRED); - connect_compat("deselect_key", editor, "_key_deselected", varray(p_track), CONNECT_DEFERRED); + connect("select_key", Callable(editor, "_key_selected"), varray(p_track), CONNECT_DEFERRED); + connect("deselect_key", Callable(editor, "_key_deselected"), varray(p_track), CONNECT_DEFERRED); update(); } @@ -525,7 +533,7 @@ void AnimationBezierTrackEdit::set_timeline(AnimationTimelineEdit *p_timeline) { void AnimationBezierTrackEdit::set_editor(AnimationTrackEditor *p_editor) { editor = p_editor; - connect_compat("clear_selection", editor, "_clear_selection", varray(false)); + connect("clear_selection", Callable(editor, "_clear_selection"), varray(false)); } void AnimationBezierTrackEdit::_play_position_draw() { diff --git a/editor/animation_bezier_editor.h b/editor/animation_bezier_editor.h index 217393a3b3..1b7ed8f06c 100644 --- a/editor/animation_bezier_editor.h +++ b/editor/animation_bezier_editor.h @@ -111,10 +111,10 @@ class AnimationBezierTrackEdit : public Control { Vector2 menu_insert_key; struct AnimMoveRestore { - int track; - float time; + int track = 0; + float time = 0; Variant key; - float transition; + float transition = 0; }; AnimationTrackEditor *editor; diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index 5471a9907b..ec411c6415 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -37,6 +37,7 @@ #include "editor/plugins/animation_player_editor_plugin.h" #include "editor_node.h" #include "editor_scale.h" +#include "scene/animation/animation_player.h" #include "scene/main/window.h" #include "servers/audio/audio_stream.h" @@ -44,7 +45,7 @@ class AnimationTrackKeyEdit : public Object { GDCLASS(AnimationTrackKeyEdit, Object); public: - bool setting; + bool setting = false; bool _hide_script_from_inspector() { return true; @@ -228,9 +229,9 @@ public: if (Variant::can_convert(args[idx].get_type(), t)) { Variant old = args[idx]; Variant *ptrs[1] = { &old }; - args.write[idx] = Variant::construct(t, (const Variant **)ptrs, 1, err); + Variant::construct(t, args.write[idx], (const Variant **)ptrs, 1, err); } else { - args.write[idx] = Variant::construct(t, nullptr, 0, err); + Variant::construct(t, args.write[idx], nullptr, 0, err); } change_notify_deserved = true; d_new["args"] = args; @@ -622,15 +623,15 @@ public: } } - UndoRedo *undo_redo; + UndoRedo *undo_redo = nullptr; Ref<Animation> animation; - int track; - float key_ofs; - Node *root_path; + int track = -1; + float key_ofs = 0; + Node *root_path = nullptr; PropertyInfo hint; NodePath base; - bool use_fps; + bool use_fps = false; void notify_change() { _change_notify(); @@ -644,21 +645,13 @@ public: use_fps = p_enable; _change_notify(); } - - AnimationTrackKeyEdit() { - use_fps = false; - key_ofs = 0; - track = -1; - setting = false; - root_path = nullptr; - } }; class AnimationMultiTrackKeyEdit : public Object { GDCLASS(AnimationMultiTrackKeyEdit, Object); public: - bool setting; + bool setting = false; bool _hide_script_from_inspector() { return true; @@ -846,9 +839,9 @@ public: if (Variant::can_convert(args[idx].get_type(), t)) { Variant old = args[idx]; Variant *ptrs[1] = { &old }; - args.write[idx] = Variant::construct(t, (const Variant **)ptrs, 1, err); + Variant::construct(t, args.write[idx], (const Variant **)ptrs, 1, err); } else { - args.write[idx] = Variant::construct(t, nullptr, 0, err); + Variant::construct(t, args.write[idx], nullptr, 0, err); } change_notify_deserved = true; d_new["args"] = args; @@ -1276,11 +1269,11 @@ public: Map<int, NodePath> base_map; PropertyInfo hint; - Node *root_path; + Node *root_path = nullptr; - bool use_fps; + bool use_fps = false; - UndoRedo *undo_redo; + UndoRedo *undo_redo = nullptr; void notify_change() { _change_notify(); @@ -1294,12 +1287,6 @@ public: use_fps = p_enable; _change_notify(); } - - AnimationMultiTrackKeyEdit() { - use_fps = false; - setting = false; - root_path = nullptr; - } }; void AnimationTimelineEdit::_zoom_changed(double) { @@ -1397,6 +1384,7 @@ void AnimationTimelineEdit::_notification(int p_what) { } Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Color color = get_theme_color("font_color", "Label"); int zoomw = key_range; @@ -1488,10 +1476,10 @@ void AnimationTimelineEdit::_notification(int p_what) { int decimals = 2; bool step_found = false; - const int period_width = font->get_char_size('.').width; - int max_digit_width = font->get_char_size('0').width; + const int period_width = font->get_char_size('.', 0, font_size).width; + int max_digit_width = font->get_char_size('0', 0, font_size).width; for (int i = 1; i <= 9; i++) { - const int digit_width = font->get_char_size('0' + i).width; + const int digit_width = font->get_char_size('0' + i, 0, font_size).width; max_digit_width = MAX(digit_width, max_digit_width); } const int max_sc = int(Math::ceil(zoomw / scale)); @@ -1538,8 +1526,8 @@ void AnimationTimelineEdit::_notification(int p_what) { if (frame != prev_frame && i >= prev_frame_ofs) { draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE)); - draw_string(font, Point2(get_name_limit() + i + 3 * EDSCALE, (h - font->get_height()) / 2 + font->get_ascent()).floor(), itos(frame), sub ? color_time_dec : color_time_sec, zoomw - i); - prev_frame_ofs = i + font->get_string_size(itos(frame)).x + 5 * EDSCALE; + draw_string(font, Point2(get_name_limit() + i + 3 * EDSCALE, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), itos(frame), HALIGN_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec); + prev_frame_ofs = i + font->get_string_size(itos(frame), font_size).x + 5 * EDSCALE; } } } @@ -1556,7 +1544,7 @@ void AnimationTimelineEdit::_notification(int p_what) { if ((sc / step) != (prev_sc / step) || (prev_sc < 0 && sc >= 0)) { int scd = sc < 0 ? prev_sc : sc; draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE)); - draw_string(font, Point2(get_name_limit() + i + 3, (h - font->get_height()) / 2 + font->get_ascent()).floor(), String::num((scd - (scd % step)) / double(SC_ADJ), decimals), sub ? color_time_dec : color_time_sec, zoomw - i); + draw_string(font, Point2(get_name_limit() + i + 3, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), String::num((scd - (scd % step)) / double(SC_ADJ), decimals), HALIGN_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec); } } } @@ -1583,7 +1571,8 @@ void AnimationTimelineEdit::set_animation(const Ref<Animation> &p_animation) { Size2 AnimationTimelineEdit::get_minimum_size() const { Size2 ms = add_track->get_minimum_size(); Ref<Font> font = get_theme_font("font", "Label"); - ms.height = MAX(ms.height, font->get_height()); + int font_size = get_theme_font_size("font_size", "Label"); + ms.height = MAX(ms.height, font->get_height(font_size)); ms.width = get_buttons_width() + add_track->get_minimum_size().width + get_theme_icon("Hsize", "EditorIcons")->get_width() + 2; return ms; } @@ -1798,6 +1787,8 @@ AnimationTimelineEdit::AnimationTimelineEdit() { panning_timeline = false; dragging_timeline = false; dragging_hsize = false; + + set_layout_direction(Control::LAYOUT_DIRECTION_LTR); } //////////////////////////////////// @@ -1819,6 +1810,7 @@ void AnimationTrackEdit::_notification(int p_what) { } Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Color color = get_theme_color("font_color", "Label"); Ref<Texture2D> type_icons[6] = { get_theme_icon("KeyValue", "EditorIcons"), @@ -1890,9 +1882,9 @@ void AnimationTrackEdit::_notification(int p_what) { path_rect = Rect2(ofs, 0, limit - ofs - hsep, get_size().height); - Vector2 string_pos = Point2(ofs, (get_size().height - font->get_height()) / 2 + font->get_ascent()); + Vector2 string_pos = Point2(ofs, (get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)); string_pos = string_pos.floor(); - draw_string(font, string_pos, text, text_color, limit - ofs - hsep); + draw_string(font, string_pos, text, HALIGN_LEFT, limit - ofs - hsep, font_size, text_color); draw_line(Point2(limit, 0), Point2(limit, get_size().height), linecolor, Math::round(EDSCALE)); } @@ -2173,6 +2165,7 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool if (animation->track_get_type(track) == Animation::TYPE_METHOD) { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Color color = get_theme_color("font_color", "Label"); color.a = 0.5; @@ -2197,7 +2190,7 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool int limit = MAX(0, p_clip_right - p_x - icon_to_draw->get_width()); if (limit > 0) { - draw_string(font, Vector2(p_x + icon_to_draw->get_width(), int(get_size().height - font->get_height()) / 2 + font->get_ascent()), text, color, limit); + draw_string(font, Vector2(p_x + icon_to_draw->get_width(), int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), text, HALIGN_LEFT, limit, font_size, color); } } @@ -2216,7 +2209,7 @@ void AnimationTrackEdit::draw_rect_clipped(const Rect2 &p_rect, const Color &p_c return; } Rect2 clip = Rect2(clip_left, 0, clip_right - clip_left, get_size().height); - draw_rect(clip.clip(p_rect), p_color, p_filled); + draw_rect(clip.intersection(p_rect), p_color, p_filled); } void AnimationTrackEdit::draw_bg(int p_clip_left, int p_clip_right) { @@ -2225,10 +2218,6 @@ void AnimationTrackEdit::draw_bg(int p_clip_left, int p_clip_right) { void AnimationTrackEdit::draw_fg(int p_clip_left, int p_clip_right) { } -void AnimationTrackEdit::draw_texture_clipped(const Ref<Texture2D> &p_texture, const Vector2 &p_pos) { - draw_texture_region_clipped(p_texture, Rect2(p_pos, p_texture->get_size()), Rect2(Point2(), p_texture->get_size())); -} - void AnimationTrackEdit::draw_texture_region_clipped(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, const Rect2 &p_region) { int clip_left = timeline->get_name_limit(); int clip_right = get_size().width - timeline->get_buttons_width(); @@ -2302,9 +2291,10 @@ NodePath AnimationTrackEdit::get_path() const { Size2 AnimationTrackEdit::get_minimum_size() const { Ref<Texture2D> texture = get_theme_icon("Object", "EditorIcons"); Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); int separation = get_theme_constant("vseparation", "ItemList"); - int max_h = MAX(texture->get_height(), font->get_height()); + int max_h = MAX(texture->get_height(), font->get_height(font_size)); max_h = MAX(max_h, get_key_height()); return Vector2(1, max_h + separation); @@ -2923,7 +2913,7 @@ void AnimationTrackEdit::append_to_selection(const Rect2 &p_box, bool p_deselect // Left Border including space occupied by keyframes on t=0. int limit_start_hitbox = timeline->get_name_limit() - type_icon->get_width(); Rect2 select_rect(limit_start_hitbox, 0, get_size().width - timeline->get_name_limit() - timeline->get_buttons_width(), get_size().height); - select_rect = select_rect.clip(p_box); + select_rect = select_rect.intersection(p_box); // Select should happen in the opposite order of drawing for more accurate overlap select. for (int i = animation->track_get_key_count(track) - 1; i >= 0; i--) { @@ -3036,6 +3026,7 @@ AnimationTrackEdit *AnimationTrackEditPlugin::create_animation_track_edit(Object void AnimationTrackEditGroup::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); int separation = get_theme_constant("hseparation", "ItemList"); Color color = get_theme_color("font_color", "Label"); @@ -3059,7 +3050,7 @@ void AnimationTrackEditGroup::_notification(int p_what) { int ofs = 0; draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2)); ofs += separation + icon->get_width(); - draw_string(font, Point2(ofs, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), node_name, color, timeline->get_name_limit() - ofs); + draw_string(font, Point2(ofs, int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), node_name, HALIGN_LEFT, timeline->get_name_limit() - ofs, font_size, color); int px = (-timeline->get_value() + timeline->get_play_position()) * timeline->get_zoom_scale() + timeline->get_name_limit(); @@ -3080,9 +3071,10 @@ void AnimationTrackEditGroup::set_type_and_name(const Ref<Texture2D> &p_type, co Size2 AnimationTrackEditGroup::get_minimum_size() const { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); int separation = get_theme_constant("vseparation", "ItemList"); - return Vector2(0, MAX(font->get_height(), icon->get_height()) + separation); + return Vector2(0, MAX(font->get_height(font_size), icon->get_height()) + separation); } void AnimationTrackEditGroup::set_timeline(AnimationTimelineEdit *p_timeline) { @@ -3308,6 +3300,19 @@ void AnimationTrackEditor::set_anim_pos(float p_pos) { bezier_edit->set_play_position(p_pos); } +static bool track_type_is_resettable(Animation::TrackType p_type) { + switch (p_type) { + case Animation::TYPE_VALUE: + [[fallthrough]]; + case Animation::TYPE_BEZIER: + [[fallthrough]]; + case Animation::TYPE_TRANSFORM: + return true; + default: + return false; + } +} + void AnimationTrackEditor::_query_insert(const InsertData &p_id) { if (insert_frame != Engine::get_singleton()->get_frames_drawn()) { //clear insert list for the frame if frame changed @@ -3328,40 +3333,58 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) { insert_data.push_back(p_id); + bool reset_allowed = true; + AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player(); + if (player->has_animation("RESET") && player->get_animation("RESET") == animation) { + // Avoid messing with the reset animation itself + reset_allowed = false; + } else { + bool some_resettable = false; + for (int i = 0; i < insert_data.size(); i++) { + if (track_type_is_resettable(insert_data[i].type)) { + some_resettable = true; + break; + } + } + if (!some_resettable) { + reset_allowed = false; + } + } + if (p_id.track_idx == -1) { - if (bool(EDITOR_DEF("editors/animation/confirm_insert_track", true))) { - //potential new key, does not exist - int num_tracks = 0; - bool all_bezier = true; - for (int i = 0; i < insert_data.size(); i++) { - if (insert_data[i].type != Animation::TYPE_VALUE && insert_data[i].type != Animation::TYPE_BEZIER) { - all_bezier = false; - } + int num_tracks = 0; + bool all_bezier = true; + for (int i = 0; i < insert_data.size(); i++) { + if (insert_data[i].type != Animation::TYPE_VALUE && insert_data[i].type != Animation::TYPE_BEZIER) { + all_bezier = false; + } - if (insert_data[i].track_idx == -1) { - ++num_tracks; - } + if (insert_data[i].track_idx == -1) { + ++num_tracks; + } - if (insert_data[i].type != Animation::TYPE_VALUE) { - continue; - } + if (insert_data[i].type != Animation::TYPE_VALUE) { + continue; + } - switch (insert_data[i].value.get_type()) { - case Variant::INT: - case Variant::FLOAT: - case Variant::VECTOR2: - case Variant::VECTOR3: - case Variant::QUAT: - case Variant::PLANE: - case Variant::COLOR: { - // Valid. - } break; - default: { - all_bezier = false; - } + switch (insert_data[i].value.get_type()) { + case Variant::INT: + case Variant::FLOAT: + case Variant::VECTOR2: + case Variant::VECTOR3: + case Variant::QUAT: + case Variant::PLANE: + case Variant::COLOR: { + // Valid. + } break; + default: { + all_bezier = false; } } + } + if (bool(EDITOR_DEF("editors/animation/confirm_insert_track", true))) { + //potential new key, does not exist if (num_tracks == 1) { insert_confirm_text->set_text(vformat(TTR("Create new track for %s and insert key?"), p_id.query)); } else { @@ -3369,23 +3392,26 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) { } insert_confirm_bezier->set_visible(all_bezier); - insert_confirm->get_ok()->set_text(TTR("Create")); + insert_confirm_reset->set_visible(reset_allowed); + + insert_confirm->get_ok_button()->set_text(TTR("Create")); insert_confirm->popup_centered(); insert_query = true; } else { - call_deferred("_insert_delay"); + call_deferred("_insert_delay", reset_allowed && EDITOR_GET("editors/animation/default_create_reset_tracks"), all_bezier && EDITOR_GET("editors/animation/default_create_bezier_tracks")); insert_queue = true; } } else { if (!insert_query && !insert_queue) { - call_deferred("_insert_delay"); + // Create Beziers wouldn't make sense in this case, where no tracks are being created + call_deferred("_insert_delay", reset_allowed && EDITOR_GET("editors/animation/default_create_reset_tracks"), false); insert_queue = true; } } } -void AnimationTrackEditor::_insert_delay() { +void AnimationTrackEditor::_insert_delay(bool p_create_reset, bool p_create_beziers) { if (insert_query) { //discard since it's entered into query mode insert_queue = false; @@ -3394,13 +3420,18 @@ void AnimationTrackEditor::_insert_delay() { undo_redo->create_action(TTR("Anim Insert")); - int last_track = animation->get_track_count(); + Ref<Animation> reset_anim; + if (p_create_reset) { + reset_anim = _create_and_get_reset_animation(); + } + + TrackIndices next_tracks(animation.ptr(), reset_anim.ptr()); bool advance = false; while (insert_data.size()) { if (insert_data.front()->get().advance) { advance = true; } - last_track = _confirm_insert(insert_data.front()->get(), last_track); + next_tracks = _confirm_insert(insert_data.front()->get(), next_tracks, p_create_reset, p_create_beziers); insert_data.pop_front(); } @@ -3691,12 +3722,34 @@ void AnimationTrackEditor::insert_value_key(const String &p_property, const Vari } } +Ref<Animation> AnimationTrackEditor::_create_and_get_reset_animation() { + AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player(); + if (player->has_animation("RESET")) { + return player->get_animation("RESET"); + } else { + Ref<Animation> reset_anim; + reset_anim.instance(); + reset_anim->set_length(ANIM_MIN_LENGTH); + undo_redo->add_do_method(player, "add_animation", "RESET", reset_anim); + undo_redo->add_do_method(AnimationPlayerEditor::singleton, "_animation_player_changed", player); + undo_redo->add_undo_method(player, "remove_animation", "RESET"); + undo_redo->add_undo_method(AnimationPlayerEditor::singleton, "_animation_player_changed", player); + return reset_anim; + } +} + void AnimationTrackEditor::_confirm_insert_list() { undo_redo->create_action(TTR("Anim Create & Insert")); - int last_track = animation->get_track_count(); + bool create_reset = insert_confirm_reset->is_visible() && insert_confirm_reset->is_pressed(); + Ref<Animation> reset_anim; + if (create_reset) { + reset_anim = _create_and_get_reset_animation(); + } + + TrackIndices next_tracks(animation.ptr(), reset_anim.ptr()); while (insert_data.size()) { - last_track = _confirm_insert(insert_data.front()->get(), last_track, insert_confirm_bezier->is_pressed()); + next_tracks = _confirm_insert(insert_data.front()->get(), next_tracks, create_reset, insert_confirm_bezier->is_pressed()); insert_data.pop_front(); } @@ -3816,11 +3869,7 @@ static Vector<String> _get_bezier_subindices_for_type(Variant::Type p_type, bool return subindices; } -int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, bool p_create_beziers) { - if (p_last_track == -1) { - p_last_track = animation->get_track_count(); - } - +AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertData p_id, TrackIndices p_next_tracks, bool p_create_reset, bool p_create_beziers) { bool created = false; if (p_id.track_idx < 0) { if (p_create_beziers) { @@ -3832,10 +3881,10 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo id.type = Animation::TYPE_BEZIER; id.value = p_id.value.get(subindices[i].substr(1, subindices[i].length())); id.path = String(p_id.path) + subindices[i]; - _confirm_insert(id, p_last_track + i); + p_next_tracks = _confirm_insert(id, p_next_tracks, p_create_reset, false); } - return p_last_track + subindices.size(); + return p_next_tracks; } } created = true; @@ -3872,7 +3921,7 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo } } - p_id.track_idx = p_last_track; + p_id.track_idx = p_next_tracks.normal; undo_redo->add_do_method(animation.ptr(), "add_track", p_id.type); undo_redo->add_do_method(animation.ptr(), "track_set_path", p_id.track_idx, p_id.path); @@ -3924,7 +3973,7 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo // Just remove the track. undo_redo->add_undo_method(this, "_clear_selection", false); undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); - p_last_track++; + p_next_tracks.normal++; } else { undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_id.track_idx, time); int existing = animation->track_find_key(p_id.track_idx, time, true); @@ -3935,9 +3984,27 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo } } + if (p_create_reset && track_type_is_resettable(p_id.type)) { + bool create_reset_track = true; + Animation *reset_anim = AnimationPlayerEditor::singleton->get_player()->get_animation("RESET").ptr(); + for (int i = 0; i < reset_anim->get_track_count(); i++) { + if (reset_anim->track_get_path(i) == p_id.path) { + create_reset_track = false; + break; + } + } + if (create_reset_track) { + undo_redo->add_do_method(reset_anim, "add_track", p_id.type); + undo_redo->add_do_method(reset_anim, "track_set_path", p_next_tracks.reset, p_id.path); + undo_redo->add_do_method(reset_anim, "track_insert_key", p_next_tracks.reset, 0.0f, value); + undo_redo->add_undo_method(reset_anim, "remove_track", reset_anim->get_track_count()); + p_next_tracks.reset++; + } + } + undo_redo->commit_action(); - return p_last_track; + return p_next_tracks; } void AnimationTrackEditor::show_select_node_warning(bool p_show) { @@ -4233,6 +4300,7 @@ void AnimationTrackEditor::_notification(int p_what) { selected_filter->set_icon(get_theme_icon("AnimationFilter", "EditorIcons")); imported_anim_warning->set_icon(get_theme_icon("NodeWarning", "EditorIcons")); main_panel->add_theme_style_override("panel", get_theme_stylebox("bg", "Tree")); + edit->get_popup()->set_item_icon(edit->get_popup()->get_item_index(EDIT_APPLY_RESET), get_theme_icon("Reload", "EditorIcons")); } if (p_what == NOTIFICATION_READY) { @@ -4587,7 +4655,8 @@ void AnimationTrackEditor::_add_method_key(const String &p_method) { params.push_back(arg); } else { Callable::CallError ce; - Variant arg = Variant::construct(E->get().arguments[i].type, nullptr, 0, ce); + Variant arg; + Variant::construct(E->get().arguments[i].type, arg, nullptr, 0, ce); params.push_back(arg); } } @@ -4659,10 +4728,10 @@ void AnimationTrackEditor::_move_selection(float p_offset) { } struct _AnimMoveRestore { - int track; - float time; + int track = 0; + float time = 0; Variant key; - float transition; + float transition = 0; }; //used for undo/redo @@ -4955,7 +5024,7 @@ void AnimationTrackEditor::_scroll_input(const Ref<InputEvent> &p_event) { Rect2 rect(from, to - from); Rect2 scroll_rect = Rect2(scroll->get_global_position(), scroll->get_size()); - rect = scroll_rect.clip(rect); + rect = scroll_rect.intersection(rect); box_selection->set_position(rect.position); box_selection->set_size(rect.size); @@ -5064,6 +5133,11 @@ void AnimationTrackEditor::_anim_duplicate_keys(bool transpose) { } } +void AnimationTrackEditor::_edit_menu_about_to_popup() { + AnimationPlayer *player = AnimationPlayerEditor::singleton->get_player(); + edit->get_popup()->set_item_disabled(edit->get_popup()->get_item_index(EDIT_APPLY_RESET), !player->can_apply_reset()); +} + void AnimationTrackEditor::_edit_menu_pressed(int p_option) { last_menu_track_opt = p_option; switch (p_option) { @@ -5386,6 +5460,10 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { emit_signal("timeline_changed", pos, true); } break; + case EDIT_APPLY_RESET: { + AnimationPlayerEditor::singleton->get_player()->apply_reset(true); + + } break; case EDIT_OPTIMIZE_ANIMATION: { optimize_dialog->popup_centered(Size2(250, 180) * EDSCALE); @@ -5564,6 +5642,7 @@ AnimationTrackEditor::AnimationTrackEditor() { undo_redo = EditorNode::get_singleton()->get_undo_redo(); main_panel = memnew(PanelContainer); + main_panel->set_focus_mode(FOCUS_ALL); // allow panel to have focus so that shortcuts work as expected. add_child(main_panel); main_panel->set_v_size_flags(SIZE_EXPAND_FILL); HBoxContainer *timeline_scroll = memnew(HBoxContainer); @@ -5697,6 +5776,7 @@ AnimationTrackEditor::AnimationTrackEditor() { timeline->set_zoom(zoom); edit = memnew(MenuButton); + edit->set_shortcut_context(this); edit->set_text(TTR("Edit")); edit->set_flat(false); edit->set_disabled(true); @@ -5709,21 +5789,20 @@ AnimationTrackEditor::AnimationTrackEditor() { edit->get_popup()->add_separator(); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_CMD | KEY_D), EDIT_DUPLICATE_SELECTION); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/duplicate_selection_transposed", TTR("Duplicate Transposed"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_D), EDIT_DUPLICATE_TRANSPOSED); - edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DUPLICATE_SELECTION), true); - edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DUPLICATE_TRANSPOSED), true); edit->get_popup()->add_separator(); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/delete_selection", TTR("Delete Selection"), KEY_DELETE), EDIT_DELETE_SELECTION); - edit->get_popup()->set_item_shortcut_disabled(edit->get_popup()->get_item_index(EDIT_DELETE_SELECTION), true); - //this shortcut will be checked from the track itself. so no need to enable it here (will conflict with scenetree dock) edit->get_popup()->add_separator(); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_next_step", TTR("Go to Next Step"), KEY_MASK_CMD | KEY_RIGHT), EDIT_GOTO_NEXT_STEP); edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/goto_prev_step", TTR("Go to Previous Step"), KEY_MASK_CMD | KEY_LEFT), EDIT_GOTO_PREV_STEP); edit->get_popup()->add_separator(); + edit->get_popup()->add_shortcut(ED_SHORTCUT("animation_editor/apply_reset", TTR("Apply Reset")), EDIT_APPLY_RESET); + edit->get_popup()->add_separator(); edit->get_popup()->add_item(TTR("Optimize Animation"), EDIT_OPTIMIZE_ANIMATION); edit->get_popup()->add_item(TTR("Clean-Up Animation"), EDIT_CLEAN_UP_ANIMATION); edit->get_popup()->connect("id_pressed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed)); + edit->get_popup()->connect("about_to_popup", callable_mp(this, &AnimationTrackEditor::_edit_menu_about_to_popup)); pick_track = memnew(SceneTreeDialog); add_child(pick_track); @@ -5749,9 +5828,16 @@ AnimationTrackEditor::AnimationTrackEditor() { insert_confirm->add_child(icvb); insert_confirm_text = memnew(Label); icvb->add_child(insert_confirm_text); + HBoxContainer *ichb = memnew(HBoxContainer); + icvb->add_child(ichb); insert_confirm_bezier = memnew(CheckBox); insert_confirm_bezier->set_text(TTR("Use Bezier Curves")); - icvb->add_child(insert_confirm_bezier); + insert_confirm_bezier->set_pressed(EDITOR_GET("editors/animation/default_create_bezier_tracks")); + ichb->add_child(insert_confirm_bezier); + insert_confirm_reset = memnew(CheckBox); + insert_confirm_reset->set_text(TTR("Create RESET Track(s)", "")); + insert_confirm_reset->set_pressed(EDITOR_GET("editors/animation/default_create_reset_tracks")); + ichb->add_child(insert_confirm_reset); keying = false; moving_selection = false; key_edit = nullptr; @@ -5799,7 +5885,7 @@ AnimationTrackEditor::AnimationTrackEditor() { optimize_max_angle->set_step(0.1); optimize_max_angle->set_value(22); - optimize_dialog->get_ok()->set_text(TTR("Optimize")); + optimize_dialog->get_ok_button()->set_text(TTR("Optimize")); optimize_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed), varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); // @@ -5824,7 +5910,7 @@ AnimationTrackEditor::AnimationTrackEditor() { cleanup_vb->add_child(cleanup_all); cleanup_dialog->set_title(TTR("Clean-Up Animation(s) (NO UNDO!)")); - cleanup_dialog->get_ok()->set_text(TTR("Clean-Up")); + cleanup_dialog->get_ok_button()->set_text(TTR("Clean-Up")); cleanup_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed), varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); @@ -5844,7 +5930,7 @@ AnimationTrackEditor::AnimationTrackEditor() { track_copy_dialog = memnew(ConfirmationDialog); add_child(track_copy_dialog); track_copy_dialog->set_title(TTR("Select Tracks to Copy")); - track_copy_dialog->get_ok()->set_text(TTR("Copy")); + track_copy_dialog->get_ok_button()->set_text(TTR("Copy")); VBoxContainer *track_vbox = memnew(VBoxContainer); track_copy_dialog->add_child(track_vbox); diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index a31ca892ef..7006959187 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -47,6 +47,8 @@ #include "scene/resources/animation.h" #include "scene_tree_editor.h" +class AnimationPlayer; + class AnimationTimelineEdit : public Range { GDCLASS(AnimationTimelineEdit, Range); @@ -207,7 +209,6 @@ public: virtual void draw_fg(int p_clip_left, int p_clip_right); //helper - void draw_texture_clipped(const Ref<Texture2D> &p_texture, const Vector2 &p_pos); void draw_texture_region_clipped(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, const Rect2 &p_region); void draw_rect_clipped(const Rect2 &p_rect, const Color &p_color, bool p_filled = true); @@ -253,8 +254,8 @@ class AnimationTrackEditGroup : public Control { Ref<Texture2D> icon; String node_name; NodePath node; - Node *root; - AnimationTimelineEdit *timeline; + Node *root = nullptr; + AnimationTimelineEdit *timeline = nullptr; void _zoom_changed(); @@ -286,6 +287,7 @@ class AnimationTrackEditor : public VBoxContainer { EDIT_DELETE_SELECTION, EDIT_GOTO_NEXT_STEP, EDIT_GOTO_PREV_STEP, + EDIT_APPLY_RESET, EDIT_OPTIMIZE_ANIMATION, EDIT_OPTIMIZE_ANIMATION_CONFIRM, EDIT_CLEAN_UP_ANIMATION, @@ -354,14 +356,15 @@ class AnimationTrackEditor : public VBoxContainer { struct InsertData { Animation::TrackType type; NodePath path; - int track_idx; + int track_idx = 0; Variant value; String query; - bool advance; + bool advance = false; }; /* insert_data;*/ Label *insert_confirm_text; CheckBox *insert_confirm_bezier; + CheckBox *insert_confirm_reset; ConfirmationDialog *insert_confirm; bool insert_queue; bool inserting; @@ -370,9 +373,19 @@ class AnimationTrackEditor : public VBoxContainer { uint64_t insert_frame; void _query_insert(const InsertData &p_id); + Ref<Animation> _create_and_get_reset_animation(); void _confirm_insert_list(); - int _confirm_insert(InsertData p_id, int p_last_track, bool p_create_beziers = false); - void _insert_delay(); + struct TrackIndices { + int normal; + int reset; + + TrackIndices(const Animation *p_anim = nullptr, const Animation *p_reset_anim = nullptr) { + normal = p_anim ? p_anim->get_track_count() : 0; + reset = p_reset_anim ? p_reset_anim->get_track_count() : 0; + } + }; + TrackIndices _confirm_insert(InsertData p_id, TrackIndices p_next_tracks, bool p_create_reset, bool p_create_beziers); + void _insert_delay(bool p_create_reset, bool p_create_beziers); void _root_removed(Node *p_root); @@ -392,13 +405,13 @@ class AnimationTrackEditor : public VBoxContainer { //selection struct SelectedKey { - int track; - int key; + int track = 0; + int key = 0; bool operator<(const SelectedKey &p_key) const { return track == p_key.track ? key < p_key.key : track < p_key.track; }; }; struct KeyInfo { - float pos; + float pos = 0; }; Map<SelectedKey, KeyInfo> selection; @@ -448,6 +461,7 @@ class AnimationTrackEditor : public VBoxContainer { void _select_all_tracks_for_copy(); + void _edit_menu_about_to_popup(); void _edit_menu_pressed(int p_option); int last_menu_track_opt; @@ -467,15 +481,15 @@ class AnimationTrackEditor : public VBoxContainer { struct TrackClipboard { NodePath full_path; NodePath base_path; - Animation::TrackType track_type; - Animation::InterpolationType interp_type; - Animation::UpdateMode update_mode; - bool loop_wrap; - bool enabled; + Animation::TrackType track_type = Animation::TrackType::TYPE_ANIMATION; + Animation::InterpolationType interp_type = Animation::InterpolationType::INTERPOLATION_CUBIC; + Animation::UpdateMode update_mode = Animation::UpdateMode::UPDATE_CAPTURE; + bool loop_wrap = false; + bool enabled = false; struct Key { - float time; - float transition; + float time = 0; + float transition = 0; Variant value; }; Vector<Key> keys; diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp index 9fc67000f9..4d96289343 100644 --- a/editor/animation_track_editor_plugins.cpp +++ b/editor/animation_track_editor_plugins.cpp @@ -37,6 +37,7 @@ #include "scene/2d/sprite_2d.h" #include "scene/3d/sprite_3d.h" #include "scene/animation/animation_player.h" +#include "scene/resources/text_line.h" #include "servers/audio/audio_stream.h" /// BOOL /// @@ -80,12 +81,14 @@ void AnimationTrackEditBool::draw_key(int p_index, float p_pixels_sec, int p_x, int AnimationTrackEditColor::get_key_height() const { Ref<Font> font = get_theme_font("font", "Label"); - return font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + return font->get_height(font_size) * 0.8; } Rect2 AnimationTrackEditColor::get_key_rect(int p_index, float p_pixels_sec) { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; return Rect2(-fh / 2, 0, fh, get_size().height); } @@ -95,7 +98,8 @@ bool AnimationTrackEditColor::is_key_selectable_by_distance() const { void AnimationTrackEditColor::draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right) { Ref<Font> font = get_theme_font("font", "Label"); - int fh = (font->get_height() * 0.8); + int font_size = get_theme_font_size("font_size", "Label"); + int fh = (font->get_height(font_size) * 0.8); int x_from = p_x + fh / 2 - 1; int x_to = p_next_x - fh / 2 + 1; @@ -144,7 +148,8 @@ void AnimationTrackEditColor::draw_key(int p_index, float p_pixels_sec, int p_x, Color color = get_animation()->track_get_key_value(get_track(), p_index); Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x - fh / 2, int(get_size().height - fh) / 2), Size2(fh, fh)); @@ -182,7 +187,8 @@ int AnimationTrackEditAudio::get_key_height() const { } Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 1.5); } Rect2 AnimationTrackEditAudio::get_key_rect(int p_index, float p_pixels_sec) { @@ -214,7 +220,8 @@ Rect2 AnimationTrackEditAudio::get_key_rect(int p_index, float p_pixels_sec) { return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } } @@ -277,7 +284,8 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x, } Ref<Font> font = get_theme_font("font", "Label"); - float fh = int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + float fh = int(font->get_height(font_size) * 1.5); Rect2 rect = Rect2(from_x, (get_size().height - fh) / 2, to_x - from_x, fh); draw_rect(rect, Color(0.25, 0.25, 0.25)); @@ -307,7 +315,8 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x, } } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); Color color = get_theme_color("font_color", "Label"); @@ -339,7 +348,8 @@ int AnimationTrackEditSpriteFrame::get_key_height() const { } Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 2); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 2); } Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_sec) { @@ -406,7 +416,8 @@ Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_se size = size.floor(); Ref<Font> font = get_theme_font("font", "Label"); - int height = int(font->get_height() * 2); + int font_size = get_theme_font_size("font_size", "Label"); + int height = int(font->get_height(font_size) * 2); int width = height * size.width / size.height; return Rect2(0, 0, width, get_size().height); @@ -496,7 +507,8 @@ void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, in } Ref<Font> font = get_theme_font("font", "Label"); - int height = int(font->get_height() * 2); + int font_size = get_theme_font_size("font_size", "Label"); + int height = int(font->get_height(font_size) * 2); int width = height * region.size.width / region.size.height; @@ -539,7 +551,8 @@ int AnimationTrackEditSubAnim::get_key_height() const { } Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 1.5); } Rect2 AnimationTrackEditSubAnim::get_key_rect(int p_index, float p_pixels_sec) { @@ -567,7 +580,8 @@ Rect2 AnimationTrackEditSubAnim::get_key_rect(int p_index, float p_pixels_sec) { return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } } @@ -621,7 +635,8 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_ } Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 1.5; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 1.5; Rect2 rect(from_x, int(get_size().height - fh) / 2, to_x - from_x, fh); @@ -664,7 +679,7 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_ int limit = to_x - from_x - 4; if (limit > 0) { - draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), anim, color); + draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), anim, HALIGN_LEFT, -1, font_size, color); } if (p_selected) { @@ -673,7 +688,8 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_ } } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); Color color = get_theme_color("font_color", "Label"); @@ -771,7 +787,8 @@ void AnimationTrackEditTypeAudio::_preview_changed(ObjectID p_which) { int AnimationTrackEditTypeAudio::get_key_height() const { Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 1.5); } Rect2 AnimationTrackEditTypeAudio::get_key_rect(int p_index, float p_pixels_sec) { @@ -835,7 +852,8 @@ void AnimationTrackEditTypeAudio::draw_key(int p_index, float p_pixels_sec, int } Ref<Font> font = get_theme_font("font", "Label"); - float fh = int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + float fh = int(font->get_height(font_size) * 1.5); float len = stream->get_length(); @@ -1104,7 +1122,8 @@ int AnimationTrackEditTypeAnimation::get_key_height() const { } Ref<Font> font = get_theme_font("font", "Label"); - return int(font->get_height() * 1.5); + int font_size = get_theme_font_size("font_size", "Label"); + return int(font->get_height(font_size) * 1.5); } Rect2 AnimationTrackEditTypeAnimation::get_key_rect(int p_index, float p_pixels_sec) { @@ -1132,7 +1151,8 @@ Rect2 AnimationTrackEditTypeAnimation::get_key_rect(int p_index, float p_pixels_ return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } } @@ -1186,7 +1206,8 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, } Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 1.5; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 1.5; Rect2 rect(from_x, int(get_size().height - fh) / 2, to_x - from_x, fh); @@ -1229,7 +1250,7 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, int limit = to_x - from_x - 4; if (limit > 0) { - draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height()) / 2 + font->get_ascent()), anim, color); + draw_string(font, Point2(from_x + 2, int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), anim, HALIGN_LEFT, -1, font_size, color); } if (p_selected) { @@ -1238,7 +1259,8 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, } } else { Ref<Font> font = get_theme_font("font", "Label"); - int fh = font->get_height() * 0.8; + int font_size = get_theme_font_size("font_size", "Label"); + int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); Color color = get_theme_color("font_color", "Label"); diff --git a/editor/array_property_edit.cpp b/editor/array_property_edit.cpp index 20f947e707..0b6b1ef6a7 100644 --- a/editor/array_property_edit.cpp +++ b/editor/array_property_edit.cpp @@ -43,7 +43,7 @@ Variant ArrayPropertyEdit::get_array() const { Variant arr = o->get(property); if (!arr.is_array()) { Callable::CallError ce; - arr = Variant::construct(default_type, nullptr, 0, ce); + Variant::construct(default_type, arr, nullptr, 0, ce); } return arr; } @@ -107,7 +107,7 @@ bool ArrayPropertyEdit::_set(const StringName &p_name, const Variant &p_value) { new_type = arr.get(size - 1).get_type(); } if (new_type != Variant::NIL) { - init = Variant::construct(new_type, nullptr, 0, ce); + Variant::construct(new_type, init, nullptr, 0, ce); for (int i = size; i < newsize; i++) { ur->add_do_method(this, "_set_value", i, init); } @@ -136,7 +136,8 @@ bool ArrayPropertyEdit::_set(const StringName &p_name, const Variant &p_value) { Variant value = arr.get(idx); if (value.get_type() != type && type >= 0 && type < Variant::VARIANT_MAX) { Callable::CallError ce; - Variant new_value = Variant::construct(Variant::Type(type), nullptr, 0, ce); + Variant new_value; + Variant::construct(Variant::Type(type), new_value, nullptr, 0, ce); UndoRedo *ur = EditorNode::get_undo_redo(); ur->create_action(TTR("Change Array Value Type")); diff --git a/editor/audio_stream_preview.h b/editor/audio_stream_preview.h index 97a582836c..300f1dc5ca 100644 --- a/editor/audio_stream_preview.h +++ b/editor/audio_stream_preview.h @@ -60,9 +60,9 @@ class AudioStreamPreviewGenerator : public Node { Ref<AudioStreamPreview> preview; Ref<AudioStream> base_stream; Ref<AudioStreamPlayback> playback; - volatile bool generating; + volatile bool generating = false; ObjectID id; - Thread *thread; + Thread *thread = nullptr; }; Map<ObjectID, Preview> previews; diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 236d1e884e..3dd0977478 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -38,7 +38,7 @@ #include "editor_settings.h" #include "scene/gui/margin_container.h" #include "scene/gui/separator.h" -#include "scene/resources/dynamic_font.h" +#include "scene/resources/font.h" void GotoLineDialog::popup_find_line(CodeEdit *p_edit) { text_editor = p_edit; @@ -81,6 +81,8 @@ GotoLineDialog::GotoLineDialog() { register_text_enter(line); text_editor = nullptr; + line_label = nullptr; + set_hide_on_ok(false); } @@ -731,17 +733,10 @@ void CodeTextEditor::_text_editor_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMagnifyGesture> magnify_gesture = p_event; if (magnify_gesture.is_valid()) { - Ref<DynamicFont> font = text_editor->get_theme_font("font"); - - if (font.is_valid()) { - if (font->get_size() != (int)font_size) { - font_size = font->get_size(); - } - - font_size *= powf(magnify_gesture->get_factor(), 0.25); + font_size = text_editor->get_theme_font_size("font_size"); + font_size *= powf(magnify_gesture->get_factor(), 0.25); - _add_font_size((int)font_size - font->get_size()); - } + _add_font_size((int)font_size - text_editor->get_theme_font_size("font_size")); return; } @@ -779,12 +774,8 @@ void CodeTextEditor::_zoom_changed() { } void CodeTextEditor::_reset_zoom() { - Ref<DynamicFont> font = text_editor->get_theme_font("font"); // Reset source font size to default. - - if (font.is_valid()) { - EditorSettings::get_singleton()->set("interface/editor/code_font_size", 14); - font->set_size(14); - } + EditorSettings::get_singleton()->set("interface/editor/code_font_size", 14); + text_editor->add_theme_font_size_override("font_size", 14 * EDSCALE); } void CodeTextEditor::_line_col_changed() { @@ -884,7 +875,7 @@ Ref<Texture2D> CodeTextEditor::_get_completion_icon(const ScriptCodeCompletionOp tex = get_theme_icon("MemberMethod", "EditorIcons"); break; case ScriptCodeCompletionOption::KIND_PLAIN_TEXT: - tex = get_theme_icon("CubeMesh", "EditorIcons"); + tex = get_theme_icon("BoxMesh", "EditorIcons"); break; default: tex = get_theme_icon("String", "EditorIcons"); @@ -900,20 +891,15 @@ void CodeTextEditor::_font_resize_timeout() { } bool CodeTextEditor::_add_font_size(int p_delta) { - Ref<DynamicFont> font = text_editor->get_theme_font("font"); - - if (font.is_valid()) { - int new_size = CLAMP(font->get_size() + p_delta, 8 * EDSCALE, 96 * EDSCALE); + int old_size = text_editor->get_theme_font_size("font_size"); + int new_size = CLAMP(old_size + p_delta, 8 * EDSCALE, 96 * EDSCALE); - if (new_size != font->get_size()) { - EditorSettings::get_singleton()->set("interface/editor/code_font_size", new_size / EDSCALE); - font->set_size(new_size); - } - - return true; - } else { - return false; + if (new_size != old_size) { + EditorSettings::get_singleton()->set("interface/editor/code_font_size", new_size / EDSCALE); + text_editor->add_theme_font_size_override("font_size", new_size); } + + return true; } void CodeTextEditor::update_editor_settings() { @@ -1138,6 +1124,7 @@ void CodeTextEditor::move_lines_up() { int from_col = text_editor->get_selection_from_column(); int to_line = text_editor->get_selection_to_line(); int to_column = text_editor->get_selection_to_column(); + int cursor_line = text_editor->cursor_get_line(); for (int i = from_line; i <= to_line; i++) { int line_id = i; @@ -1155,7 +1142,9 @@ void CodeTextEditor::move_lines_up() { } int from_line_up = from_line > 0 ? from_line - 1 : from_line; int to_line_up = to_line > 0 ? to_line - 1 : to_line; + int cursor_line_up = cursor_line > 0 ? cursor_line - 1 : cursor_line; text_editor->select(from_line_up, from_col, to_line_up, to_column); + text_editor->cursor_set_line(cursor_line_up); } else { int line_id = text_editor->cursor_get_line(); int next_id = line_id - 1; @@ -1181,6 +1170,7 @@ void CodeTextEditor::move_lines_down() { int from_col = text_editor->get_selection_from_column(); int to_line = text_editor->get_selection_to_line(); int to_column = text_editor->get_selection_to_column(); + int cursor_line = text_editor->cursor_get_line(); for (int i = to_line; i >= from_line; i--) { int line_id = i; @@ -1198,7 +1188,9 @@ void CodeTextEditor::move_lines_down() { } int from_line_down = from_line < text_editor->get_line_count() ? from_line + 1 : from_line; int to_line_down = to_line < text_editor->get_line_count() ? to_line + 1 : to_line; + int cursor_line_down = cursor_line < text_editor->get_line_count() ? cursor_line + 1 : cursor_line; text_editor->select(from_line_down, from_col, to_line_down, to_column); + text_editor->cursor_set_line(cursor_line_down); } else { int line_id = text_editor->cursor_get_line(); int next_id = line_id + 1; @@ -1480,17 +1472,22 @@ void CodeTextEditor::goto_error() { void CodeTextEditor::_update_font() { text_editor->add_theme_font_override("font", get_theme_font("source", "EditorFonts")); + text_editor->add_theme_font_size_override("font_size", get_theme_font_size("source_size", "EditorFonts")); error->add_theme_font_override("font", get_theme_font("status_source", "EditorFonts")); + error->add_theme_font_size_override("font_size", get_theme_font_size("status_source_size", "EditorFonts")); error->add_theme_color_override("font_color", get_theme_color("error_color", "Editor")); Ref<Font> status_bar_font = get_theme_font("status_source", "EditorFonts"); + int status_bar_font_size = get_theme_font_size("status_source_size", "EditorFonts"); error->add_theme_font_override("font", status_bar_font); + error->add_theme_font_size_override("font_size", status_bar_font_size); int count = status_bar->get_child_count(); for (int i = 0; i < count; i++) { Control *n = Object::cast_to<Control>(status_bar->get_child(i)); if (n) { n->add_theme_font_override("font", status_bar_font); + n->add_theme_font_size_override("font_size", status_bar_font_size); } } } @@ -1500,6 +1497,31 @@ void CodeTextEditor::_on_settings_change() { font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size"); + int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures"); + switch (ot_mode) { + case 1: { // Disable ligatures. + text_editor->clear_opentype_features(); + text_editor->set_opentype_feature("calt", 0); + } break; + case 2: { // Custom. + text_editor->clear_opentype_features(); + Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(","); + Dictionary ftrs; + for (int i = 0; i < subtag.size(); i++) { + Vector<String> subtag_a = subtag[i].split("="); + if (subtag_a.size() == 2) { + text_editor->set_opentype_feature(subtag_a[0], subtag_a[1].to_int()); + } else if (subtag_a.size() == 1) { + text_editor->set_opentype_feature(subtag_a[0], 1); + } + } + } break; + default: { // Default. + text_editor->clear_opentype_features(); + text_editor->set_opentype_feature("calt", 1); + } break; + } + // Auto brace completion. text_editor->set_auto_brace_completion( EDITOR_GET("text_editor/completion/auto_brace_complete")); @@ -1541,7 +1563,11 @@ void CodeTextEditor::_set_show_warnings_panel(bool p_show) { } void CodeTextEditor::_toggle_scripts_pressed() { - toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->toggle_scripts_panel() ? get_theme_icon("Back", "EditorIcons") : get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->toggle_scripts_panel() ? get_theme_icon("Forward", "EditorIcons") : get_theme_icon("Back", "EditorIcons")); + } else { + toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->toggle_scripts_panel() ? get_theme_icon("Back", "EditorIcons") : get_theme_icon("Forward", "EditorIcons")); + } } void CodeTextEditor::_error_pressed(const Ref<InputEvent> &p_event) { @@ -1662,7 +1688,11 @@ void CodeTextEditor::show_toggle_scripts_button() { } void CodeTextEditor::update_toggle_scripts_button() { - toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->is_scripts_panel_toggled() ? get_theme_icon("Back", "EditorIcons") : get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->is_scripts_panel_toggled() ? get_theme_icon("Forward", "EditorIcons") : get_theme_icon("Back", "EditorIcons")); + } else { + toggle_scripts_button->set_icon(ScriptEditor::get_singleton()->is_scripts_panel_toggled() ? get_theme_icon("Back", "EditorIcons") : get_theme_icon("Forward", "EditorIcons")); + } toggle_scripts_button->set_tooltip(TTR("Toggle Scripts Panel") + " (" + ED_GET_SHORTCUT("script_editor/toggle_scripts_panel")->get_as_text() + ")"); } @@ -1676,6 +1706,31 @@ CodeTextEditor::CodeTextEditor() { add_child(text_editor); text_editor->set_v_size_flags(SIZE_EXPAND_FILL); + int ot_mode = EditorSettings::get_singleton()->get("interface/editor/code_font_contextual_ligatures"); + switch (ot_mode) { + case 1: { // Disable ligatures. + text_editor->clear_opentype_features(); + text_editor->set_opentype_feature("calt", 0); + } break; + case 2: { // Custom. + text_editor->clear_opentype_features(); + Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_opentype_features")).split(","); + Dictionary ftrs; + for (int i = 0; i < subtag.size(); i++) { + Vector<String> subtag_a = subtag[i].split("="); + if (subtag_a.size() == 2) { + text_editor->set_opentype_feature(subtag_a[0], subtag_a[1].to_int()); + } else if (subtag_a.size() == 1) { + text_editor->set_opentype_feature(subtag_a[0], 1); + } + } + } break; + default: { // Default. + text_editor->clear_opentype_features(); + text_editor->set_opentype_feature("calt", 1); + } break; + } + // Added second so it opens at the bottom, so it won't shift the entire text editor when opening. find_replace_bar = memnew(FindReplaceBar); add_child(find_replace_bar); @@ -1744,6 +1799,7 @@ CodeTextEditor::CodeTextEditor() { warning_count_label->set_tooltip(TTR("Warnings")); warning_count_label->add_theme_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_theme_color("warning_color", "Editor")); warning_count_label->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("status_source", "EditorFonts")); + warning_count_label->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("status_source_size", "EditorFonts")); warning_count_label->connect("gui_input", callable_mp(this, &CodeTextEditor::_warning_label_gui_input)); is_warnings_panel_opened = false; @@ -1754,6 +1810,7 @@ CodeTextEditor::CodeTextEditor() { status_bar->add_child(line_and_col_txt); line_and_col_txt->set_v_size_flags(SIZE_EXPAND | SIZE_SHRINK_CENTER); line_and_col_txt->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("status_source", "EditorFonts")); + line_and_col_txt->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("status_source_size", "EditorFonts")); line_and_col_txt->set_tooltip(TTR("Line and column numbers.")); line_and_col_txt->set_mouse_filter(MOUSE_FILTER_STOP); diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index 320e5d8510..473597b9b3 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -31,6 +31,7 @@ #include "connections_dialog.h" #include "core/string/print_string.h" +#include "editor/doc_tools.h" #include "editor_node.h" #include "editor_scale.h" #include "editor_settings.h" @@ -251,16 +252,16 @@ void ConnectDialog::_update_ok_enabled() { Node *target = tree->get_selected(); if (target == nullptr) { - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return; } if (!advanced->is_pressed() && target->get_script().is_null()) { - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return; } - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } void ConnectDialog::_notification(int p_what) { @@ -410,6 +411,7 @@ ConnectDialog::ConnectDialog() { tree = memnew(SceneTreeEditor(false)); tree->set_connecting_signal(true); + tree->set_show_enabled_subscene(true); tree->get_scene_tree()->connect("item_activated", callable_mp(this, &ConnectDialog::_item_activated)); tree->connect("node_selected", callable_mp(this, &ConnectDialog::_tree_node_selected)); tree->set_connect_to_script_mode(true); @@ -494,8 +496,8 @@ ConnectDialog::ConnectDialog() { error = memnew(AcceptDialog); add_child(error); error->set_title(TTR("Cannot connect signal")); - error->get_ok()->set_text(TTR("Close")); - get_ok()->set_text(TTR("Connect")); + error->get_ok_button()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Connect")); } ConnectDialog::~ConnectDialog() { @@ -997,7 +999,7 @@ void ConnectionsDock::update_tree() { } if (!found) { - DocData *dd = EditorHelp::get_doc_data(); + DocTools *dd = EditorHelp::get_doc_data(); Map<String, DocData::ClassDoc>::Element *F = dd->class_list.find(base); while (F && descr == String()) { for (int i = 0; i < F->get().signals.size(); i++) { diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 0f9c9bde7b..75d57b040f 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -57,10 +57,10 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode, const St if (p_replace_mode) { set_title(vformat(TTR("Change %s Type"), base_type)); - get_ok()->set_text(TTR("Change")); + get_ok_button()->set_text(TTR("Change")); } else { set_title(vformat(TTR("Create New %s"), base_type)); - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); } _load_favorites_and_history(); @@ -195,7 +195,7 @@ void CreateDialog::_update_search() { } else { favorite->set_disabled(true); help_bit->set_text(""); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); search_options->deselect_all(); } } @@ -396,7 +396,7 @@ void CreateDialog::select_type(const String &p_type) { favorite->set_disabled(false); favorite->set_pressed(favorite_list.find(p_type) != -1); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } String CreateDialog::get_selected_type() { diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp index b461ac4f35..276df45972 100644 --- a/editor/debugger/editor_debugger_node.cpp +++ b/editor/debugger/editor_debugger_node.cpp @@ -232,6 +232,9 @@ void EditorDebuggerNode::_notification(int p_what) { tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("DebuggerPanel", "EditorStyles")); } } break; + case NOTIFICATION_READY: { + _update_debug_options(); + } break; default: break; } @@ -385,7 +388,7 @@ void EditorDebuggerNode::set_script_debug_button(MenuButton *p_button) { p->add_shortcut(ED_GET_SHORTCUT("debugger/break"), DEBUG_BREAK); p->add_shortcut(ED_GET_SHORTCUT("debugger/continue"), DEBUG_CONTINUE); p->add_separator(); - p->add_check_shortcut(ED_GET_SHORTCUT("debugger/keep_debugger_open"), DEBUG_SHOW_KEEP_OPEN); + p->add_check_shortcut(ED_GET_SHORTCUT("debugger/keep_debugger_open"), DEBUG_KEEP_DEBUGGER_OPEN); p->add_check_shortcut(ED_GET_SHORTCUT("debugger/debug_with_external_editor"), DEBUG_WITH_EXTERNAL_EDITOR); p->connect("id_pressed", callable_mp(this, &EditorDebuggerNode::_menu_option)); @@ -425,20 +428,33 @@ void EditorDebuggerNode::_menu_option(int p_id) { case DEBUG_CONTINUE: { debug_continue(); } break; - - case DEBUG_SHOW_KEEP_OPEN: { - bool visible = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_SHOW_KEEP_OPEN)); - hide_on_stop = visible; - script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_SHOW_KEEP_OPEN), !visible); + case DEBUG_KEEP_DEBUGGER_OPEN: { + bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_KEEP_DEBUGGER_OPEN)); + hide_on_stop = ischecked; + script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_KEEP_DEBUGGER_OPEN), !ischecked); + EditorSettings::get_singleton()->set_project_metadata("debug_options", "keep_debugger_open", !ischecked); } break; case DEBUG_WITH_EXTERNAL_EDITOR: { - bool checked = !script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR)); - debug_with_external_editor = checked; - script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR), checked); + bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR)); + debug_with_external_editor = !ischecked; + script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR), !ischecked); + EditorSettings::get_singleton()->set_project_metadata("debug_options", "debug_with_external_editor", !ischecked); } break; } } +void EditorDebuggerNode::_update_debug_options() { + bool keep_debugger_open = EditorSettings::get_singleton()->get_project_metadata("debug_options", "keep_debugger_open", false); + bool debug_with_external_editor = EditorSettings::get_singleton()->get_project_metadata("debug_options", "debug_with_external_editor", false); + + if (keep_debugger_open) { + _menu_option(DEBUG_KEEP_DEBUGGER_OPEN); + } + if (debug_with_external_editor) { + _menu_option(DEBUG_WITH_EXTERNAL_EDITOR); + } +} + void EditorDebuggerNode::_paused() { const bool paused = EditorNode::get_singleton()->get_pause_button()->is_pressed(); _for_all(tabs, [&](ScriptEditorDebugger *dbg) { diff --git a/editor/debugger/editor_debugger_node.h b/editor/debugger/editor_debugger_node.h index 8d70a7f961..0f3be4d2dd 100644 --- a/editor/debugger/editor_debugger_node.h +++ b/editor/debugger/editor_debugger_node.h @@ -60,7 +60,7 @@ private: DEBUG_STEP, DEBUG_BREAK, DEBUG_CONTINUE, - DEBUG_SHOW_KEEP_OPEN, + DEBUG_KEEP_DEBUGGER_OPEN, DEBUG_WITH_EXTERNAL_EDITOR, }; @@ -133,6 +133,7 @@ protected: void _paused(); void _break_state_changed(); void _menu_option(int p_id); + void _update_debug_options(); protected: void _notification(int p_what); diff --git a/editor/debugger/editor_performance_profiler.cpp b/editor/debugger/editor_performance_profiler.cpp index 47fe282758..44c5f83e9a 100644 --- a/editor/debugger/editor_performance_profiler.cpp +++ b/editor/debugger/editor_performance_profiler.cpp @@ -82,10 +82,10 @@ String EditorPerformanceProfiler::_create_label(float p_value, Performance::Moni return String::humanize_size(p_value); } case Performance::MONITOR_TYPE_TIME: { - return rtos(p_value * 1000).pad_decimals(2) + " ms"; + return TS->format_number(rtos(p_value * 1000).pad_decimals(2)) + " " + RTR("ms"); } default: { - return rtos(p_value); + return TS->format_number(rtos(p_value)); } } } @@ -111,6 +111,7 @@ void EditorPerformanceProfiler::_monitor_draw() { Ref<StyleBox> graph_style_box = get_theme_stylebox("normal", "TextEdit"); Ref<Font> graph_font = get_theme_font("font", "TextEdit"); + int font_size = get_theme_font_size("font_size", "TextEdit"); int columns = int(Math::ceil(Math::sqrt(float(active.size())))); int rows = int(Math::ceil(float(active.size()) / float(columns))); @@ -131,19 +132,19 @@ void EditorPerformanceProfiler::_monitor_draw() { rect.size -= graph_style_box->get_minimum_size(); Color draw_color = get_theme_color("accent_color", "Editor"); draw_color.set_hsv(Math::fmod(hue_shift * float(current.frame_index), 0.9f), draw_color.get_s() * 0.9f, draw_color.get_v() * value_multiplier, 0.6f); - monitor_draw->draw_string(graph_font, rect.position + Point2(0, graph_font->get_ascent()), current.item->get_text(0), draw_color, rect.size.x); + monitor_draw->draw_string(graph_font, rect.position + Point2(0, graph_font->get_ascent(font_size)), current.item->get_text(0), HALIGN_LEFT, rect.size.x, font_size, draw_color); draw_color.a = 0.9f; - float value_position = rect.size.width - graph_font->get_string_size(current.item->get_text(1)).width; + float value_position = rect.size.width - graph_font->get_string_size(current.item->get_text(1), font_size).width; if (value_position < 0) { value_position = 0; } - monitor_draw->draw_string(graph_font, rect.position + Point2(value_position, graph_font->get_ascent()), current.item->get_text(1), draw_color, rect.size.x); + monitor_draw->draw_string(graph_font, rect.position + Point2(value_position, graph_font->get_ascent(font_size)), current.item->get_text(1), HALIGN_LEFT, rect.size.x, font_size, draw_color); - rect.position.y += graph_font->get_height(); - rect.size.height -= graph_font->get_height(); + rect.position.y += graph_font->get_height(font_size); + rect.size.height -= graph_font->get_height(font_size); - int line_count = rect.size.height / (graph_font->get_height() * 2); + int line_count = rect.size.height / (graph_font->get_height(font_size) * 2); if (line_count > 5) { line_count = 5; } @@ -151,12 +152,12 @@ void EditorPerformanceProfiler::_monitor_draw() { Color horizontal_line_color; horizontal_line_color.set_hsv(draw_color.get_h(), draw_color.get_s() * 0.5f, draw_color.get_v() * 0.5f, 0.3f); monitor_draw->draw_line(rect.position, rect.position + Vector2(rect.size.width, 0), horizontal_line_color, Math::round(EDSCALE)); - monitor_draw->draw_string(graph_font, rect.position + Vector2(0, graph_font->get_ascent()), _create_label(current.max, current.type), horizontal_line_color, rect.size.width); + monitor_draw->draw_string(graph_font, rect.position + Vector2(0, graph_font->get_ascent(font_size)), _create_label(current.max, current.type), HALIGN_LEFT, rect.size.width, font_size, horizontal_line_color); for (int j = 0; j < line_count; j++) { Vector2 y_offset = Vector2(0, rect.size.height * (1.0f - float(j) / float(line_count))); monitor_draw->draw_line(rect.position + y_offset, rect.position + Vector2(rect.size.width, 0) + y_offset, horizontal_line_color, Math::round(EDSCALE)); - monitor_draw->draw_string(graph_font, rect.position - Vector2(0, graph_font->get_descent()) + y_offset, _create_label(current.max * float(j) / float(line_count), current.type), horizontal_line_color, rect.size.width); + monitor_draw->draw_string(graph_font, rect.position - Vector2(0, graph_font->get_descent(font_size)) + y_offset, _create_label(current.max * float(j) / float(line_count), current.type), HALIGN_LEFT, rect.size.width, font_size, horizontal_line_color); } } @@ -182,7 +183,7 @@ void EditorPerformanceProfiler::_monitor_draw() { monitor_draw->draw_line(rect.position + Point2(from, 0), rect.position + Point2(from, rect.size.y), line_color, Math::round(EDSCALE)); String label = _create_label(e->get(), current.type); - Size2 size = graph_font->get_string_size(label); + Size2 size = graph_font->get_string_size(label, font_size); Vector2 text_top_left_position = Vector2(from, h2) - (size + Vector2(MARKER_MARGIN, MARKER_MARGIN)); if (text_top_left_position.x < 0) { text_top_left_position.x = from + MARKER_MARGIN; @@ -190,7 +191,7 @@ void EditorPerformanceProfiler::_monitor_draw() { if (text_top_left_position.y < 0) { text_top_left_position.y = h2 + MARKER_MARGIN; } - monitor_draw->draw_string(graph_font, rect.position + text_top_left_position + Point2(0, graph_font->get_ascent()), label, line_color, rect.size.x); + monitor_draw->draw_string(graph_font, rect.position + text_top_left_position + Point2(0, graph_font->get_ascent(font_size)), label, HALIGN_LEFT, rect.size.x, font_size, line_color); } prev = h2; e = e->next(); diff --git a/editor/debugger/editor_profiler.cpp b/editor/debugger/editor_profiler.cpp index 8bd21fff5c..930aca6e5a 100644 --- a/editor/debugger/editor_profiler.cpp +++ b/editor/debugger/editor_profiler.cpp @@ -103,19 +103,19 @@ static String _get_percent_txt(float p_value, float p_total) { p_total = 0.00001; } - return String::num((p_value / p_total) * 100, 1) + "%"; + return TS->format_number(String::num((p_value / p_total) * 100, 1)) + TS->percent_sign(); } String EditorProfiler::_get_time_as_text(const Metric &m, float p_time, int p_calls) { const int dmode = display_mode->get_selected(); if (dmode == DISPLAY_FRAME_TIME) { - return rtos(p_time * 1000).pad_decimals(2) + " ms"; + return TS->format_number(rtos(p_time * 1000).pad_decimals(2)) + " " + RTR("ms"); } else if (dmode == DISPLAY_AVERAGE_TIME) { if (p_calls == 0) { - return "0.00 ms"; + return TS->format_number("0.00") + " " + RTR("ms"); } else { - return rtos((p_time / p_calls) * 1000).pad_decimals(2) + " ms"; + return TS->format_number(rtos((p_time / p_calls) * 1000).pad_decimals(2)) + " " + RTR("ms"); } } else if (dmode == DISPLAY_FRAME_PERCENT) { return _get_percent_txt(p_time, m.frame_time); @@ -423,7 +423,7 @@ void EditorProfiler::_clear_pressed() { } void EditorProfiler::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) { activate->set_icon(get_theme_icon("Play", "EditorIcons")); clear_button->set_icon(get_theme_icon("Clear", "EditorIcons")); } diff --git a/editor/debugger/editor_profiler.h b/editor/debugger/editor_profiler.h index aa2ef58db4..637f732b0b 100644 --- a/editor/debugger/editor_profiler.h +++ b/editor/debugger/editor_profiler.h @@ -45,27 +45,27 @@ class EditorProfiler : public VBoxContainer { public: struct Metric { - bool valid; + bool valid = false; - int frame_number; - float frame_time; - float idle_time; - float physics_time; - float physics_frame_time; + int frame_number = 0; + float frame_time = 0; + float idle_time = 0; + float physics_time = 0; + float physics_frame_time = 0; struct Category { StringName signature; String name; - float total_time; //total for category + float total_time = 0; //total for category struct Item { StringName signature; String name; String script; - int line; - float self; - float total; - int calls; + int line = 0; + float self = 0; + float total = 0; + int calls = 0; }; Vector<Item> items; @@ -75,11 +75,6 @@ public: Map<StringName, Category *> category_ptrs; Map<StringName, Category::Item *> item_ptrs; - - Metric() { - valid = false; - frame_number = 0; - } }; enum DisplayMode { diff --git a/editor/debugger/editor_visual_profiler.cpp b/editor/debugger/editor_visual_profiler.cpp index 81b42da08e..d7a09d6b0c 100644 --- a/editor/debugger/editor_visual_profiler.cpp +++ b/editor/debugger/editor_visual_profiler.cpp @@ -114,9 +114,9 @@ String EditorVisualProfiler::_get_time_as_text(float p_time) { int dmode = display_mode->get_selected(); if (dmode == DISPLAY_FRAME_TIME) { - return rtos(p_time) + "ms"; + return TS->format_number(rtos(p_time)) + " " + RTR("ms"); } else if (dmode == DISPLAY_FRAME_PERCENT) { - return String::num(p_time * 100 / graph_limit, 2) + "%"; + return TS->format_number(String::num(p_time * 100 / graph_limit, 2)) + " " + TS->percent_sign(); } return "err"; @@ -423,8 +423,12 @@ void EditorVisualProfiler::_clear_pressed() { } void EditorVisualProfiler::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { - activate->set_icon(get_theme_icon("Play", "EditorIcons")); + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) { + if (is_layout_rtl()) { + activate->set_icon(get_theme_icon("PlayBackwards", "EditorIcons")); + } else { + activate->set_icon(get_theme_icon("Play", "EditorIcons")); + } clear_button->set_icon(get_theme_icon("Clear", "EditorIcons")); } } @@ -434,6 +438,7 @@ void EditorVisualProfiler::_graph_tex_draw() { return; } Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); if (seeking) { int max_frames = frame_metrics.size(); int frame = cursor_metric_edit->get_value() - (frame_metrics[last_metric].frame_number - max_frames + 1); @@ -457,7 +462,7 @@ void EditorVisualProfiler::_graph_tex_draw() { graph->draw_line(Vector2(0, frame_y), Vector2(half_width, frame_y), Color(1, 1, 1, 0.3)); String limit_str = String::num(graph_limit, 2); - graph->draw_string(font, Vector2(half_width - font->get_string_size(limit_str).x - 2, frame_y - 2), limit_str, Color(1, 1, 1, 0.6)); + graph->draw_string(font, Vector2(half_width - font->get_string_size(limit_str, font_size).x - 2, frame_y - 2), limit_str, HALIGN_LEFT, -1, font_size, Color(1, 1, 1, 0.6)); } if (graph_height_gpu > 0) { @@ -468,15 +473,14 @@ void EditorVisualProfiler::_graph_tex_draw() { graph->draw_line(Vector2(half_width, frame_y), Vector2(graph->get_size().x, frame_y), Color(1, 1, 1, 0.3)); String limit_str = String::num(graph_limit, 2); - graph->draw_string(font, Vector2(half_width * 2 - font->get_string_size(limit_str).x - 2, frame_y - 2), limit_str, Color(1, 1, 1, 0.6)); + graph->draw_string(font, Vector2(half_width * 2 - font->get_string_size(limit_str, font_size).x - 2, frame_y - 2), limit_str, HALIGN_LEFT, -1, font_size, Color(1, 1, 1, 0.6)); } - graph->draw_string(font, Vector2(font->get_string_size("X").x, font->get_ascent() + 2), "CPU:", Color(1, 1, 1, 0.8)); - graph->draw_string(font, Vector2(font->get_string_size("X").x + graph->get_size().width / 2, font->get_ascent() + 2), "GPU:", Color(1, 1, 1, 0.8)); + graph->draw_string(font, Vector2(font->get_string_size("X", font_size).x, font->get_ascent(font_size) + 2), "CPU:", HALIGN_LEFT, -1, font_size, Color(1, 1, 1, 0.8)); + graph->draw_string(font, Vector2(font->get_string_size("X", font_size).x + graph->get_size().width / 2, font->get_ascent(font_size) + 2), "GPU:", HALIGN_LEFT, -1, font_size, Color(1, 1, 1, 0.8)); /* if (hover_metric != -1 && frame_metrics[hover_metric].valid) { - int max_frames = frame_metrics.size(); int frame = frame_metrics[hover_metric].frame_number - (frame_metrics[last_metric].frame_number - max_frames + 1); if (frame < 0) @@ -671,7 +675,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const { const Vector<EditorFrameProfiler::Metric::Category> &categories = frame_metrics[0].categories; for (int j = 0; j < categories.size(); j++) { - const EditorFrameProfiler::Metric::Category &c = categories[j]; signatures.push_back(c.signature); @@ -688,7 +691,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const { int index = last_metric; for (int i = 0; i < frame_metrics.size(); i++) { - ++index; if (index >= frame_metrics.size()) { @@ -702,7 +704,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const { const Vector<EditorFrameProfiler::Metric::Category> &frame_cat = frame_metrics[index].categories; for (int j = 0; j < frame_cat.size(); j++) { - const EditorFrameProfiler::Metric::Category &c = frame_cat[j]; values.write[it++] = String::num_real(c.total_time); diff --git a/editor/debugger/editor_visual_profiler.h b/editor/debugger/editor_visual_profiler.h index 3c1a55dc38..49a2d5c53a 100644 --- a/editor/debugger/editor_visual_profiler.h +++ b/editor/debugger/editor_visual_profiler.h @@ -46,9 +46,9 @@ class EditorVisualProfiler : public VBoxContainer { public: struct Metric { - bool valid; + bool valid = false; - uint64_t frame_number; + uint64_t frame_number = 0; struct Area { String name; @@ -59,10 +59,6 @@ public: }; Vector<Area> areas; - - Metric() { - valid = false; - } }; enum DisplayTimeMode { diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index 2d8a174773..fd33115cda 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -487,8 +487,11 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da error->set_text_align(0, TreeItem::ALIGN_LEFT); String error_title; - // Include method name, when given, in error title. - if (!oe.source_func.empty()) { + if (oe.callstack.size() > 0) { + // If available, use the script's stack in the error title. + error_title = oe.callstack[oe.callstack.size() - 1].func + ": "; + } else if (!oe.source_func.empty()) { + // Otherwise try to use the C++ source function. error_title += oe.source_func + ": "; } // If we have a (custom) error message, use it as title, and add a C++ Error @@ -529,9 +532,6 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da cpp_source->set_metadata(0, source_meta); } - error->set_tooltip(0, tooltip); - error->set_tooltip(1, tooltip); - // Format stack trace. // stack_items_count is the number of elements to parse, with 3 items per frame // of the stack trace (script, method, line). @@ -548,10 +548,17 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da stack_trace->set_text(0, "<" + TTR("Stack Trace") + ">"); stack_trace->set_text_align(0, TreeItem::ALIGN_LEFT); error->set_metadata(0, meta); + tooltip += TTR("Stack Trace:") + "\n"; } - stack_trace->set_text(1, infos[i].file.get_file() + ":" + itos(infos[i].line) + " @ " + infos[i].func + "()"); + + String frame_txt = infos[i].file.get_file() + ":" + itos(infos[i].line) + " @ " + infos[i].func + "()"; + tooltip += frame_txt + "\n"; + stack_trace->set_text(1, frame_txt); } + error->set_tooltip(0, tooltip); + error->set_tooltip(1, tooltip); + if (oe.warning) { warning_count++; } else { @@ -1023,7 +1030,7 @@ void ScriptEditorDebugger::_method_changed(Object *p_base, const StringName &p_n for (int i = 0; i < VARIANT_ARG_MAX; i++) { //no pointers, sorry - if (argptr[i] && (argptr[i]->get_type() == Variant::OBJECT || argptr[i]->get_type() == Variant::_RID)) { + if (argptr[i] && (argptr[i]->get_type() == Variant::OBJECT || argptr[i]->get_type() == Variant::RID)) { return; } } diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index 5e87f866d8..a27f196d49 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -450,13 +450,13 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector< removed_deps.sort(); if (removed_deps.empty()) { owners->hide(); - text->set_text(TTR("Remove selected files from the project? (Can't be restored)")); + text->set_text(TTR("Remove selected files from the project? (no undo)\nYou can find the removed files in the system trash to restore them.")); set_size(Size2()); popup_centered(); } else { _build_removed_dependency_tree(removed_deps); owners->show(); - text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)")); + text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)\nYou can find the removed files in the system trash to restore them.")); popup_centered(Size2(500, 350)); } EditorFileSystem::get_singleton()->scan_changes(); @@ -553,7 +553,7 @@ void DependencyRemoveDialog::_bind_methods() { } DependencyRemoveDialog::DependencyRemoveDialog() { - get_ok()->set_text(TTR("Remove")); + get_ok_button()->set_text(TTR("Remove")); VBoxContainer *vb = memnew(VBoxContainer); add_child(vb); @@ -619,13 +619,15 @@ DependencyErrorDialog::DependencyErrorDialog() { files->set_v_size_flags(Control::SIZE_EXPAND_FILL); set_min_size(Size2(500, 220) * EDSCALE); - get_ok()->set_text(TTR("Open Anyway")); - get_cancel()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Open Anyway")); + get_cancel_button()->set_text(TTR("Close")); text = memnew(Label); vb->add_child(text); text->set_text(TTR("Which action should be taken?")); + mode = Mode::MODE_RESOURCE; + fdep = add_button(TTR("Fix Dependencies"), true, "fixdeps"); set_title(TTR("Errors loading!")); @@ -754,7 +756,7 @@ void OrphanResourcesDialog::_bind_methods() { OrphanResourcesDialog::OrphanResourcesDialog() { set_title(TTR("Orphan Resource Explorer")); delete_confirm = memnew(ConfirmationDialog); - get_ok()->set_text(TTR("Delete")); + get_ok_button()->set_text(TTR("Delete")); add_child(delete_confirm); dep_edit = memnew(DependencyEditor); add_child(dep_edit); diff --git a/editor/doc_data.h b/editor/doc_data.h deleted file mode 100644 index 5fa20c6f0c..0000000000 --- a/editor/doc_data.h +++ /dev/null @@ -1,124 +0,0 @@ -/*************************************************************************/ -/* doc_data.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#ifndef DOC_DATA_H -#define DOC_DATA_H - -#include "core/io/xml_parser.h" -#include "core/templates/map.h" -#include "core/variant/variant.h" - -class DocData { -public: - struct ArgumentDoc { - String name; - String type; - String enumeration; - String default_value; - bool operator<(const ArgumentDoc &p_arg) const { - return name < p_arg.name; - } - }; - - struct MethodDoc { - String name; - String return_type; - String return_enum; - String qualifiers; - String description; - Vector<ArgumentDoc> arguments; - bool operator<(const MethodDoc &p_method) const { - return name < p_method.name; - } - }; - - struct ConstantDoc { - String name; - String value; - bool is_value_valid; - String enumeration; - String description; - bool operator<(const ConstantDoc &p_const) const { - return name < p_const.name; - } - }; - - struct PropertyDoc { - String name; - String type; - String enumeration; - String description; - String setter, getter; - String default_value; - bool overridden = false; - bool operator<(const PropertyDoc &p_prop) const { - return name < p_prop.name; - } - }; - - struct TutorialDoc { - String link; - String title; - }; - - struct ClassDoc { - String name; - String inherits; - String category; - String brief_description; - String description; - Vector<TutorialDoc> tutorials; - Vector<MethodDoc> methods; - Vector<MethodDoc> signals; - Vector<ConstantDoc> constants; - Vector<PropertyDoc> properties; - Vector<PropertyDoc> theme_properties; - bool operator<(const ClassDoc &p_class) const { - return name < p_class.name; - } - }; - - String version; - - Map<String, ClassDoc> class_list; - Error _load(Ref<XMLParser> parser); - -public: - void merge_from(const DocData &p_data); - void remove_from(const DocData &p_data); - void generate(bool p_basic_types = false); - Error load_classes(const String &p_dir); - static Error erase_classes(const String &p_dir); - Error save_classes(const String &p_default_path, const Map<String, String> &p_class_path); - - Error load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size); -}; - -#endif // DOC_DATA_H diff --git a/editor/doc_data.cpp b/editor/doc_tools.cpp index 1888cc1e41..5ee9abb183 100644 --- a/editor/doc_data.cpp +++ b/editor/doc_tools.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* doc_data.cpp */ +/* doc_tools.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,7 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "doc_data.h" +#include "doc_tools.h" #include "core/config/engine.h" #include "core/config/project_settings.h" @@ -43,22 +43,22 @@ // Used for a hack preserving Mono properties on non-Mono builds. #include "modules/modules_enabled.gen.h" -void DocData::merge_from(const DocData &p_data) { - for (Map<String, ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { - ClassDoc &c = E->get(); +void DocTools::merge_from(const DocTools &p_data) { + for (Map<String, DocData::ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { + DocData::ClassDoc &c = E->get(); if (!p_data.class_list.has(c.name)) { continue; } - const ClassDoc &cf = p_data.class_list[c.name]; + const DocData::ClassDoc &cf = p_data.class_list[c.name]; c.description = cf.description; c.brief_description = cf.brief_description; c.tutorials = cf.tutorials; for (int i = 0; i < c.methods.size(); i++) { - MethodDoc &m = c.methods.write[i]; + DocData::MethodDoc &m = c.methods.write[i]; for (int j = 0; j < cf.methods.size(); j++) { if (cf.methods[j].name != m.name) { @@ -95,7 +95,7 @@ void DocData::merge_from(const DocData &p_data) { continue; } - const MethodDoc &mf = cf.methods[j]; + const DocData::MethodDoc &mf = cf.methods[j]; m.description = mf.description; break; @@ -103,13 +103,13 @@ void DocData::merge_from(const DocData &p_data) { } for (int i = 0; i < c.signals.size(); i++) { - MethodDoc &m = c.signals.write[i]; + DocData::MethodDoc &m = c.signals.write[i]; for (int j = 0; j < cf.signals.size(); j++) { if (cf.signals[j].name != m.name) { continue; } - const MethodDoc &mf = cf.signals[j]; + const DocData::MethodDoc &mf = cf.signals[j]; m.description = mf.description; break; @@ -117,13 +117,13 @@ void DocData::merge_from(const DocData &p_data) { } for (int i = 0; i < c.constants.size(); i++) { - ConstantDoc &m = c.constants.write[i]; + DocData::ConstantDoc &m = c.constants.write[i]; for (int j = 0; j < cf.constants.size(); j++) { if (cf.constants[j].name != m.name) { continue; } - const ConstantDoc &mf = cf.constants[j]; + const DocData::ConstantDoc &mf = cf.constants[j]; m.description = mf.description; break; @@ -131,13 +131,13 @@ void DocData::merge_from(const DocData &p_data) { } for (int i = 0; i < c.properties.size(); i++) { - PropertyDoc &p = c.properties.write[i]; + DocData::PropertyDoc &p = c.properties.write[i]; for (int j = 0; j < cf.properties.size(); j++) { if (cf.properties[j].name != p.name) { continue; } - const PropertyDoc &pf = cf.properties[j]; + const DocData::PropertyDoc &pf = cf.properties[j]; p.description = pf.description; break; @@ -145,13 +145,13 @@ void DocData::merge_from(const DocData &p_data) { } for (int i = 0; i < c.theme_properties.size(); i++) { - PropertyDoc &p = c.theme_properties.write[i]; + DocData::PropertyDoc &p = c.theme_properties.write[i]; for (int j = 0; j < cf.theme_properties.size(); j++) { if (cf.theme_properties[j].name != p.name) { continue; } - const PropertyDoc &pf = cf.theme_properties[j]; + const DocData::PropertyDoc &pf = cf.theme_properties[j]; p.description = pf.description; break; @@ -177,57 +177,29 @@ void DocData::merge_from(const DocData &p_data) { } } -void DocData::remove_from(const DocData &p_data) { - for (Map<String, ClassDoc>::Element *E = p_data.class_list.front(); E; E = E->next()) { +void DocTools::remove_from(const DocTools &p_data) { + for (Map<String, DocData::ClassDoc>::Element *E = p_data.class_list.front(); E; E = E->next()) { if (class_list.has(E->key())) { class_list.erase(E->key()); } } } -static void return_doc_from_retinfo(DocData::MethodDoc &p_method, const PropertyInfo &p_retinfo) { - if (p_retinfo.type == Variant::INT && p_retinfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { - p_method.return_enum = p_retinfo.class_name; - if (p_method.return_enum.begins_with("_")) { //proxy class - p_method.return_enum = p_method.return_enum.substr(1, p_method.return_enum.length()); - } - p_method.return_type = "int"; - } else if (p_retinfo.class_name != StringName()) { - p_method.return_type = p_retinfo.class_name; - } else if (p_retinfo.type == Variant::ARRAY && p_retinfo.hint == PROPERTY_HINT_ARRAY_TYPE) { - p_method.return_type = p_retinfo.hint_string + "[]"; - } else if (p_retinfo.hint == PROPERTY_HINT_RESOURCE_TYPE) { - p_method.return_type = p_retinfo.hint_string; - } else if (p_retinfo.type == Variant::NIL && p_retinfo.usage & PROPERTY_USAGE_NIL_IS_VARIANT) { - p_method.return_type = "Variant"; - } else if (p_retinfo.type == Variant::NIL) { - p_method.return_type = "void"; - } else { - p_method.return_type = Variant::get_type_name(p_retinfo.type); - } +void DocTools::add_doc(const DocData::ClassDoc &p_class_doc) { + ERR_FAIL_COND(p_class_doc.name == ""); + class_list[p_class_doc.name] = p_class_doc; } -static void argument_doc_from_arginfo(DocData::ArgumentDoc &p_argument, const PropertyInfo &p_arginfo) { - p_argument.name = p_arginfo.name; +void DocTools::remove_doc(const String &p_class_name) { + ERR_FAIL_COND(p_class_name == "" || !class_list.has(p_class_name)); + class_list.erase(p_class_name); +} - if (p_arginfo.type == Variant::INT && p_arginfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { - p_argument.enumeration = p_arginfo.class_name; - if (p_argument.enumeration.begins_with("_")) { //proxy class - p_argument.enumeration = p_argument.enumeration.substr(1, p_argument.enumeration.length()); - } - p_argument.type = "int"; - } else if (p_arginfo.class_name != StringName()) { - p_argument.type = p_arginfo.class_name; - } else if (p_arginfo.type == Variant::ARRAY && p_arginfo.hint == PROPERTY_HINT_ARRAY_TYPE) { - p_argument.type = p_arginfo.hint_string + "[]"; - } else if (p_arginfo.hint == PROPERTY_HINT_RESOURCE_TYPE) { - p_argument.type = p_arginfo.hint_string; - } else if (p_arginfo.type == Variant::NIL) { - // Parameters cannot be void, so PROPERTY_USAGE_NIL_IS_VARIANT is not necessary - p_argument.type = "Variant"; - } else { - p_argument.type = Variant::get_type_name(p_arginfo.type); +bool DocTools::has_doc(const String &p_class_name) { + if (p_class_name == "") { + return false; } + return class_list.has(p_class_name); } static Variant get_documentation_default_value(const StringName &p_class_name, const StringName &p_property_name, bool &r_default_value_valid) { @@ -253,7 +225,7 @@ static Variant get_documentation_default_value(const StringName &p_class_name, c return default_value; } -void DocData::generate(bool p_basic_types) { +void DocTools::generate(bool p_basic_types) { List<StringName> classes; ClassDB::get_class_list(&classes); classes.sort_custom<StringName::AlphCompare>(); @@ -277,8 +249,8 @@ void DocData::generate(bool p_basic_types) { cname = cname.substr(1, name.length()); } - class_list[cname] = ClassDoc(); - ClassDoc &c = class_list[cname]; + class_list[cname] = DocData::ClassDoc(); + DocData::ClassDoc &c = class_list[cname]; c.name = cname; c.inherits = ClassDB::get_parent_class(name); @@ -305,7 +277,7 @@ void DocData::generate(bool p_basic_types) { continue; } - PropertyDoc prop; + DocData::PropertyDoc prop; prop.name = E->get().name; @@ -409,7 +381,7 @@ void DocData::generate(bool p_basic_types) { } } - MethodDoc method; + DocData::MethodDoc method; method.name = E->get().name; @@ -432,12 +404,12 @@ void DocData::generate(bool p_basic_types) { for (int i = -1; i < E->get().arguments.size(); i++) { if (i == -1) { #ifdef DEBUG_METHODS_ENABLED - return_doc_from_retinfo(method, E->get().return_val); + DocData::return_doc_from_retinfo(method, E->get().return_val); #endif } else { const PropertyInfo &arginfo = E->get().arguments[i]; - ArgumentDoc argument; - argument_doc_from_arginfo(argument, arginfo); + DocData::ArgumentDoc argument; + DocData::argument_doc_from_arginfo(argument, arginfo); int darg_idx = i - (E->get().arguments.size() - E->get().default_arguments.size()); if (darg_idx >= 0) { @@ -457,12 +429,12 @@ void DocData::generate(bool p_basic_types) { if (signal_list.size()) { for (List<MethodInfo>::Element *EV = signal_list.front(); EV; EV = EV->next()) { - MethodDoc signal; + DocData::MethodDoc signal; signal.name = EV->get().name; for (int i = 0; i < EV->get().arguments.size(); i++) { const PropertyInfo &arginfo = EV->get().arguments[i]; - ArgumentDoc argument; - argument_doc_from_arginfo(argument, arginfo); + DocData::ArgumentDoc argument; + DocData::argument_doc_from_arginfo(argument, arginfo); signal.arguments.push_back(argument); } @@ -475,7 +447,7 @@ void DocData::generate(bool p_basic_types) { ClassDB::get_integer_constant_list(name, &constant_list, true); for (List<String>::Element *E = constant_list.front(); E; E = E->next()) { - ConstantDoc constant; + DocData::ConstantDoc constant; constant.name = E->get(); constant.value = itos(ClassDB::get_integer_constant(name, E->get())); constant.is_value_valid = true; @@ -489,7 +461,7 @@ void DocData::generate(bool p_basic_types) { List<StringName> l; Theme::get_default()->get_constant_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "int"; pd.default_value = itos(Theme::get_default()->get_constant(E->get(), cname)); @@ -499,7 +471,7 @@ void DocData::generate(bool p_basic_types) { l.clear(); Theme::get_default()->get_color_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "Color"; pd.default_value = Variant(Theme::get_default()->get_color(E->get(), cname)).get_construct_string(); @@ -509,7 +481,7 @@ void DocData::generate(bool p_basic_types) { l.clear(); Theme::get_default()->get_icon_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "Texture2D"; c.theme_properties.push_back(pd); @@ -517,15 +489,23 @@ void DocData::generate(bool p_basic_types) { l.clear(); Theme::get_default()->get_font_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "Font"; c.theme_properties.push_back(pd); } l.clear(); + Theme::get_default()->get_font_size_list(cname, &l); + for (List<StringName>::Element *E = l.front(); E; E = E->next()) { + DocData::PropertyDoc pd; + pd.name = E->get(); + pd.type = "int"; + c.theme_properties.push_back(pd); + } + l.clear(); Theme::get_default()->get_stylebox_list(cname, &l); for (List<StringName>::Element *E = l.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; pd.name = E->get(); pd.type = "StyleBox"; c.theme_properties.push_back(pd); @@ -537,7 +517,7 @@ void DocData::generate(bool p_basic_types) { { // So we can document the concept of Variant even if it's not a usable class per se. - class_list["Variant"] = ClassDoc(); + class_list["Variant"] = DocData::ClassDoc(); class_list["Variant"].name = "Variant"; } @@ -556,28 +536,97 @@ void DocData::generate(bool p_basic_types) { String cname = Variant::get_type_name(Variant::Type(i)); - class_list[cname] = ClassDoc(); - ClassDoc &c = class_list[cname]; + class_list[cname] = DocData::ClassDoc(); + DocData::ClassDoc &c = class_list[cname]; c.name = cname; Callable::CallError cerror; - Variant v = Variant::construct(Variant::Type(i), nullptr, 0, cerror); + Variant v; + Variant::construct(Variant::Type(i), v, nullptr, 0, cerror); List<MethodInfo> method_list; v.get_method_list(&method_list); method_list.sort(); Variant::get_constructor_list(Variant::Type(i), &method_list); + for (int j = 0; j < Variant::OP_AND; j++) { // Showing above 'and' is pretty confusing and there are a lot of variations. + for (int k = 0; k < Variant::VARIANT_MAX; k++) { + Variant::Type rt = Variant::get_operator_return_type(Variant::Operator(j), Variant::Type(i), Variant::Type(k)); + if (rt != Variant::NIL) { // Has operator. + // Skip String % operator as it's registered separately for each Variant arg type, + // we'll add it manually below. + if (i == Variant::STRING && Variant::Operator(j) == Variant::OP_MODULE) { + continue; + } + MethodInfo mi; + mi.name = "operator " + Variant::get_operator_name(Variant::Operator(j)); + mi.return_val.type = rt; + if (k != Variant::NIL) { + PropertyInfo arg; + arg.name = "right"; + arg.type = Variant::Type(k); + mi.arguments.push_back(arg); + } + method_list.push_back(mi); + } + } + } + + if (i == Variant::STRING) { + // We skipped % operator above, and we register it manually once for Variant arg type here. + MethodInfo mi; + mi.name = "operator %"; + mi.return_val.type = Variant::STRING; + + PropertyInfo arg; + arg.name = "right"; + arg.type = Variant::NIL; + arg.usage = PROPERTY_USAGE_NIL_IS_VARIANT; + mi.arguments.push_back(arg); + + method_list.push_back(mi); + } + + if (Variant::is_keyed(Variant::Type(i))) { + MethodInfo mi; + mi.name = "operator []"; + mi.return_val.type = Variant::NIL; + mi.return_val.usage = PROPERTY_USAGE_NIL_IS_VARIANT; + + PropertyInfo arg; + arg.name = "key"; + arg.type = Variant::NIL; + arg.usage = PROPERTY_USAGE_NIL_IS_VARIANT; + mi.arguments.push_back(arg); + + method_list.push_back(mi); + } else if (Variant::has_indexing(Variant::Type(i))) { + MethodInfo mi; + mi.name = "operator []"; + mi.return_val.type = Variant::get_indexed_element_type(Variant::Type(i)); + PropertyInfo arg; + arg.name = "index"; + arg.type = Variant::INT; + mi.arguments.push_back(arg); + + method_list.push_back(mi); + } + for (List<MethodInfo>::Element *E = method_list.front(); E; E = E->next()) { MethodInfo &mi = E->get(); - MethodDoc method; + DocData::MethodDoc method; method.name = mi.name; + if (method.name == cname) { + method.qualifiers = "constructor"; + } else if (method.name.begins_with("operator")) { + method.qualifiers = "operator"; + } for (int j = 0; j < mi.arguments.size(); j++) { PropertyInfo arginfo = mi.arguments[j]; - ArgumentDoc ad; - argument_doc_from_arginfo(ad, mi.arguments[j]); + DocData::ArgumentDoc ad; + DocData::argument_doc_from_arginfo(ad, mi.arguments[j]); ad.name = arginfo.name; int darg_idx = mi.default_arguments.size() - mi.arguments.size() + j; @@ -589,7 +638,7 @@ void DocData::generate(bool p_basic_types) { method.arguments.push_back(ad); } - return_doc_from_retinfo(method, mi.return_val); + DocData::return_doc_from_retinfo(method, mi.return_val); if (mi.flags & METHOD_FLAG_VARARG) { if (method.qualifiers != "") { @@ -605,7 +654,7 @@ void DocData::generate(bool p_basic_types) { v.get_property_list(&properties); for (List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) { PropertyInfo pi = E->get(); - PropertyDoc property; + DocData::PropertyDoc property; property.name = pi.name; property.type = Variant::get_type_name(pi.type); property.default_value = v.get(pi.name).get_construct_string(); @@ -617,7 +666,7 @@ void DocData::generate(bool p_basic_types) { Variant::get_constants_for_type(Variant::Type(i), &constants); for (List<StringName>::Element *E = constants.front(); E; E = E->next()) { - ConstantDoc constant; + DocData::ConstantDoc constant; constant.name = E->get(); Variant value = Variant::get_constant_value(Variant::Type(i), E->get()); constant.value = value.get_type() == Variant::INT ? itos(value) : value.get_construct_string(); @@ -630,12 +679,12 @@ void DocData::generate(bool p_basic_types) { { String cname = "@GlobalScope"; - class_list[cname] = ClassDoc(); - ClassDoc &c = class_list[cname]; + class_list[cname] = DocData::ClassDoc(); + DocData::ClassDoc &c = class_list[cname]; c.name = cname; for (int i = 0; i < CoreConstants::get_global_constant_count(); i++) { - ConstantDoc cd; + DocData::ConstantDoc cd; cd.name = CoreConstants::get_global_constant_name(i); if (!CoreConstants::get_ignore_value_in_docs(i)) { cd.value = itos(CoreConstants::get_global_constant_value(i)); @@ -652,7 +701,7 @@ void DocData::generate(bool p_basic_types) { //servers (this is kind of hackish) for (List<Engine::Singleton>::Element *E = singletons.front(); E; E = E->next()) { - PropertyDoc pd; + DocData::PropertyDoc pd; Engine::Singleton &s = E->get(); if (!s.ptr) { continue; @@ -667,6 +716,43 @@ void DocData::generate(bool p_basic_types) { } c.properties.push_back(pd); } + + List<StringName> utility_functions; + Variant::get_utility_function_list(&utility_functions); + utility_functions.sort_custom<StringName::AlphCompare>(); + for (List<StringName>::Element *E = utility_functions.front(); E; E = E->next()) { + DocData::MethodDoc md; + md.name = E->get(); + //return + if (Variant::has_utility_function_return_value(E->get())) { + PropertyInfo pi; + pi.type = Variant::get_utility_function_return_type(E->get()); + if (pi.type == Variant::NIL) { + pi.usage = PROPERTY_USAGE_NIL_IS_VARIANT; + } + DocData::ArgumentDoc ad; + DocData::argument_doc_from_arginfo(ad, pi); + md.return_type = ad.type; + } + + if (Variant::is_utility_function_vararg(E->get())) { + md.qualifiers = "vararg"; + } else { + for (int i = 0; i < Variant::get_utility_function_argument_count(E->get()); i++) { + PropertyInfo pi; + pi.type = Variant::get_utility_function_argument_type(E->get(), i); + pi.name = Variant::get_utility_function_argument_name(E->get(), i); + if (pi.type == Variant::NIL) { + pi.usage = PROPERTY_USAGE_NIL_IS_VARIANT; + } + DocData::ArgumentDoc ad; + DocData::argument_doc_from_arginfo(ad, pi); + md.arguments.push_back(ad); + } + } + + c.methods.push_back(md); + } } // Built-in script reference. @@ -677,7 +763,7 @@ void DocData::generate(bool p_basic_types) { for (int i = 0; i < ScriptServer::get_language_count(); i++) { ScriptLanguage *lang = ScriptServer::get_language(i); String cname = "@" + lang->get_name(); - ClassDoc c; + DocData::ClassDoc c; c.name = cname; // Get functions. @@ -686,7 +772,7 @@ void DocData::generate(bool p_basic_types) { for (List<MethodInfo>::Element *E = minfo.front(); E; E = E->next()) { MethodInfo &mi = E->get(); - MethodDoc md; + DocData::MethodDoc md; md.name = mi.name; if (mi.flags & METHOD_FLAG_VARARG) { @@ -696,11 +782,11 @@ void DocData::generate(bool p_basic_types) { md.qualifiers += "vararg"; } - return_doc_from_retinfo(md, mi.return_val); + DocData::return_doc_from_retinfo(md, mi.return_val); for (int j = 0; j < mi.arguments.size(); j++) { - ArgumentDoc ad; - argument_doc_from_arginfo(ad, mi.arguments[j]); + DocData::ArgumentDoc ad; + DocData::argument_doc_from_arginfo(ad, mi.arguments[j]); int darg_idx = j - (mi.arguments.size() - mi.default_arguments.size()); if (darg_idx >= 0) { @@ -719,7 +805,7 @@ void DocData::generate(bool p_basic_types) { lang->get_public_constants(&cinfo); for (List<Pair<String, Variant>>::Element *E = cinfo.front(); E; E = E->next()) { - ConstantDoc cd; + DocData::ConstantDoc cd; cd.name = E->get().first; cd.value = E->get().second; cd.is_value_valid = true; @@ -797,7 +883,7 @@ static Error _parse_methods(Ref<XMLParser> &parser, Vector<DocData::MethodDoc> & return OK; } -Error DocData::load_classes(const String &p_dir) { +Error DocTools::load_classes(const String &p_dir) { Error err; DirAccessRef da = DirAccess::open(p_dir, &err); if (!da) { @@ -825,7 +911,7 @@ Error DocData::load_classes(const String &p_dir) { return OK; } -Error DocData::erase_classes(const String &p_dir) { +Error DocTools::erase_classes(const String &p_dir) { Error err; DirAccessRef da = DirAccess::open(p_dir, &err); if (!da) { @@ -853,7 +939,7 @@ Error DocData::erase_classes(const String &p_dir) { return OK; } -Error DocData::_load(Ref<XMLParser> parser) { +Error DocTools::_load(Ref<XMLParser> parser) { Error err = OK; while ((err = parser->read()) == OK) { @@ -869,8 +955,8 @@ Error DocData::_load(Ref<XMLParser> parser) { ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); String name = parser->get_attribute_value("name"); - class_list[name] = ClassDoc(); - ClassDoc &c = class_list[name]; + class_list[name] = DocData::ClassDoc(); + DocData::ClassDoc &c = class_list[name]; c.name = name; if (parser->has_attribute("inherits")) { @@ -898,7 +984,7 @@ Error DocData::_load(Ref<XMLParser> parser) { String name3 = parser->get_node_name(); if (name3 == "link") { - TutorialDoc tutorial; + DocData::TutorialDoc tutorial; if (parser->has_attribute("title")) { tutorial.title = parser->get_attribute_value("title"); } @@ -927,7 +1013,7 @@ Error DocData::_load(Ref<XMLParser> parser) { String name3 = parser->get_node_name(); if (name3 == "member") { - PropertyDoc prop2; + DocData::PropertyDoc prop2; ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); prop2.name = parser->get_attribute_value("name"); @@ -964,7 +1050,7 @@ Error DocData::_load(Ref<XMLParser> parser) { String name3 = parser->get_node_name(); if (name3 == "theme_item") { - PropertyDoc prop2; + DocData::PropertyDoc prop2; ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); prop2.name = parser->get_attribute_value("name"); @@ -992,7 +1078,7 @@ Error DocData::_load(Ref<XMLParser> parser) { String name3 = parser->get_node_name(); if (name3 == "constant") { - ConstantDoc constant2; + DocData::ConstantDoc constant2; ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); constant2.name = parser->get_attribute_value("name"); ERR_FAIL_COND_V(!parser->has_attribute("value"), ERR_FILE_CORRUPT); @@ -1041,9 +1127,9 @@ static void _write_string(FileAccess *f, int p_tablevel, const String &p_string) f->store_string(tab + p_string + "\n"); } -Error DocData::save_classes(const String &p_default_path, const Map<String, String> &p_class_path) { - for (Map<String, ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { - ClassDoc &c = E->get(); +Error DocTools::save_classes(const String &p_default_path, const Map<String, String> &p_class_path) { + for (Map<String, DocData::ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { + DocData::ClassDoc &c = E->get(); String save_path; if (p_class_path.has(c.name)) { @@ -1078,7 +1164,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<tutorials>"); for (int i = 0; i < c.tutorials.size(); i++) { - TutorialDoc tutorial = c.tutorials.get(i); + DocData::TutorialDoc tutorial = c.tutorials.get(i); String title_attribute = (!tutorial.title.empty()) ? " title=\"" + tutorial.title.xml_escape() + "\"" : ""; _write_string(f, 2, "<link" + title_attribute + ">" + tutorial.link.xml_escape() + "</link>"); } @@ -1089,14 +1175,14 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri c.methods.sort(); for (int i = 0; i < c.methods.size(); i++) { - const MethodDoc &m = c.methods[i]; + const DocData::MethodDoc &m = c.methods[i]; String qualifiers; if (m.qualifiers != "") { qualifiers += " qualifiers=\"" + m.qualifiers.xml_escape() + "\""; } - _write_string(f, 2, "<method name=\"" + m.name + "\"" + qualifiers + ">"); + _write_string(f, 2, "<method name=\"" + m.name.xml_escape() + "\"" + qualifiers + ">"); if (m.return_type != "") { String enum_text; @@ -1108,7 +1194,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri } for (int j = 0; j < m.arguments.size(); j++) { - const ArgumentDoc &a = m.arguments[j]; + const DocData::ArgumentDoc &a = m.arguments[j]; String enum_text; if (a.enumeration != String()) { @@ -1147,7 +1233,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri additional_attributes += " default=\"" + c.properties[i].default_value.xml_escape(true) + "\""; } - const PropertyDoc &p = c.properties[i]; + const DocData::PropertyDoc &p = c.properties[i]; if (c.properties[i].overridden) { _write_string(f, 2, "<member name=\"" + p.name + "\" type=\"" + p.type + "\" setter=\"" + p.setter + "\" getter=\"" + p.getter + "\" override=\"true\"" + additional_attributes + " />"); @@ -1165,10 +1251,10 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<signals>"); for (int i = 0; i < c.signals.size(); i++) { - const MethodDoc &m = c.signals[i]; + const DocData::MethodDoc &m = c.signals[i]; _write_string(f, 2, "<signal name=\"" + m.name + "\">"); for (int j = 0; j < m.arguments.size(); j++) { - const ArgumentDoc &a = m.arguments[j]; + const DocData::ArgumentDoc &a = m.arguments[j]; _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\">"); _write_string(f, 3, "</argument>"); } @@ -1186,7 +1272,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<constants>"); for (int i = 0; i < c.constants.size(); i++) { - const ConstantDoc &k = c.constants[i]; + const DocData::ConstantDoc &k = c.constants[i]; if (k.is_value_valid) { if (k.enumeration != String()) { _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">"); @@ -1211,7 +1297,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<theme_items>"); for (int i = 0; i < c.theme_properties.size(); i++) { - const PropertyDoc &p = c.theme_properties[i]; + const DocData::PropertyDoc &p = c.theme_properties[i]; if (p.default_value != "") { _write_string(f, 2, "<theme_item name=\"" + p.name + "\" type=\"" + p.type + "\" default=\"" + p.default_value.xml_escape(true) + "\">"); @@ -1232,7 +1318,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri return OK; } -Error DocData::load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size) { +Error DocTools::load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size) { Vector<uint8_t> data; data.resize(p_uncompressed_size); Compression::decompress(data.ptrw(), p_uncompressed_size, p_data, p_compressed_size, Compression::MODE_DEFLATE); diff --git a/editor/run_settings_dialog.h b/editor/doc_tools.h index 4d6d842de0..db27e38c8b 100644 --- a/editor/run_settings_dialog.h +++ b/editor/doc_tools.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* run_settings_dialog.h */ +/* doc_tools.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,42 +28,29 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef RUN_SETTINGS_DIALOG_H -#define RUN_SETTINGS_DIALOG_H +#ifndef DOC_TOOLS_H +#define DOC_TOOLS_H -#include "scene/gui/check_button.h" -#include "scene/gui/dialogs.h" -#include "scene/gui/file_dialog.h" -#include "scene/gui/line_edit.h" - -class RunSettingsDialog : public AcceptDialog { - GDCLASS(RunSettingsDialog, AcceptDialog); +#include "core/doc_data.h" +class DocTools { public: - enum RunMode { - RUN_LOCAL_SCENE, - RUN_MAIN_SCENE, - }; - -private: - OptionButton *run_mode; - LineEdit *arguments; - - void _run_mode_changed(int idx); - -protected: - static void _bind_methods(); - -public: - int get_run_mode() const; - void set_run_mode(int p_run_mode); - - void set_custom_arguments(const String &p_arguments); - String get_custom_arguments() const; - - void popup_run_settings(); - - RunSettingsDialog(); + String version; + Map<String, DocData::ClassDoc> class_list; + + static Error erase_classes(const String &p_dir); + + void merge_from(const DocTools &p_data); + void remove_from(const DocTools &p_data); + void add_doc(const DocData::ClassDoc &p_class_doc); + void remove_doc(const String &p_class_name); + bool has_doc(const String &p_class_name); + void generate(bool p_basic_types = false); + Error load_classes(const String &p_dir); + Error save_classes(const String &p_default_path, const Map<String, String> &p_class_path); + + Error _load(Ref<XMLParser> parser); + Error load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size); }; -#endif // RUN_SETTINGS_DIALOG_H +#endif // DOC_DATA_H diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index cbde7d593a..95802a0b9c 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -40,9 +40,12 @@ void EditorAbout::_theme_changed() { Control *base = EditorNode::get_singleton()->get_gui_base(); Ref<Font> font = base->get_theme_font("source", "EditorFonts"); + int font_size = base->get_theme_font_size("source_size", "EditorFonts"); _tpl_text->add_theme_font_override("normal_font", font); + _tpl_text->add_theme_font_size_override("normal_font_size", font_size); _tpl_text->add_theme_constant_override("line_separation", 6 * EDSCALE); _license_text->add_theme_font_override("normal_font", font); + _license_text->add_theme_font_size_override("normal_font_size", font_size); _license_text->add_theme_constant_override("line_separation", 6 * EDSCALE); _logo->set_texture(base->get_theme_icon("Logo", "EditorIcons")); } @@ -213,7 +216,7 @@ EditorAbout::EditorAbout() { for (int component_index = 0; component_index < COPYRIGHT_INFO_COUNT; component_index++) { const ComponentCopyright &component = COPYRIGHT_INFO[component_index]; TreeItem *ti = _tpl_tree->create_item(tpl_ti_tp); - String component_name = component.name; + String component_name = String::utf8(component.name); ti->set_text(0, component_name); String text = component_name + "\n"; long_text += "- " + component_name + "\n"; @@ -221,7 +224,7 @@ EditorAbout::EditorAbout() { const ComponentCopyrightPart &part = component.parts[part_index]; text += "\n Files:"; for (int file_num = 0; file_num < part.file_count; file_num++) { - text += "\n " + String(part.files[file_num]); + text += "\n " + String::utf8(part.files[file_num]); } String copyright; for (int copyright_index = 0; copyright_index < part.copyright_count; copyright_index++) { @@ -229,7 +232,7 @@ EditorAbout::EditorAbout() { } text += copyright; long_text += copyright; - String license = "\n License: " + String(part.license) + "\n"; + String license = "\n License: " + String::utf8(part.license) + "\n"; text += license; long_text += license + "\n"; } @@ -237,10 +240,10 @@ EditorAbout::EditorAbout() { } for (int i = 0; i < LICENSE_COUNT; i++) { TreeItem *ti = _tpl_tree->create_item(tpl_ti_lc); - String licensename = String(LICENSE_NAMES[i]); + String licensename = String::utf8(LICENSE_NAMES[i]); ti->set_text(0, licensename); long_text += "- " + licensename + "\n\n"; - String licensebody = String(LICENSE_BODIES[i]); + String licensebody = String::utf8(LICENSE_BODIES[i]); ti->set_metadata(0, licensebody); long_text += " " + licensebody.replace("\n", "\n ") + "\n\n"; } diff --git a/editor/editor_asset_installer.cpp b/editor/editor_asset_installer.cpp index 8aeeba52ed..aa6f7c8766 100644 --- a/editor/editor_asset_installer.cpp +++ b/editor/editor_asset_installer.cpp @@ -335,7 +335,7 @@ EditorAssetInstaller::EditorAssetInstaller() { error = memnew(AcceptDialog); add_child(error); - get_ok()->set_text(TTR("Install")); + get_ok_button()->set_text(TTR("Install")); set_title(TTR("Package Installer")); updating = false; diff --git a/editor/editor_atlas_packer.h b/editor/editor_atlas_packer.h index 52ac9524ae..4a9c3a776b 100644 --- a/editor/editor_atlas_packer.h +++ b/editor/editor_atlas_packer.h @@ -41,23 +41,23 @@ public: struct Chart { Vector<Vector2> vertices; struct Face { - int vertex[3]; + int vertex[3] = { 0 }; }; Vector<Face> faces; - bool can_transpose; + bool can_transpose = false; Vector2 final_offset; - bool transposed; + bool transposed = false; }; private: struct PlottedBitmap { - int chart_index; + int chart_index = 0; Vector2i offset; - int area; + int area = 0; Vector<int> top_heights; Vector<int> bottom_heights; - bool transposed; + bool transposed = false; Vector2 final_pos; diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp index a3deb95130..d81dc05a75 100644 --- a/editor/editor_audio_buses.cpp +++ b/editor/editor_audio_buses.cpp @@ -531,21 +531,15 @@ void EditorAudioBus::_effect_add(int p_which) { } void EditorAudioBus::_gui_input(const Ref<InputEvent> &p_event) { - Ref<InputEventKey> k = p_event; - if (k.is_valid() && k->is_pressed() && k->get_keycode() == KEY_DELETE && !k->is_echo()) { - accept_event(); - emit_signal("delete_request"); - } - Ref<InputEventMouseButton> mb = p_event; - if (mb.is_valid() && mb->get_button_index() == 2 && mb->is_pressed()) { + if (mb.is_valid() && mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { Vector2 pos = Vector2(mb->get_position().x, mb->get_position().y); bus_popup->set_position(get_global_position() + pos); bus_popup->popup(); } } -void EditorAudioBus::_unhandled_key_input(Ref<InputEvent> p_event) { +void EditorAudioBus::_effects_gui_input(Ref<InputEvent> p_event) { Ref<InputEventKey> k = p_event; if (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == KEY_DELETE) { TreeItem *current_effect = effects->get_selected(); @@ -749,7 +743,6 @@ void EditorAudioBus::_bind_methods() { ClassDB::bind_method("update_bus", &EditorAudioBus::update_bus); ClassDB::bind_method("update_send", &EditorAudioBus::update_send); ClassDB::bind_method("_gui_input", &EditorAudioBus::_gui_input); - ClassDB::bind_method("_unhandled_key_input", &EditorAudioBus::_unhandled_key_input); ClassDB::bind_method("get_drag_data_fw", &EditorAudioBus::get_drag_data_fw); ClassDB::bind_method("can_drop_data_fw", &EditorAudioBus::can_drop_data_fw); ClassDB::bind_method("drop_data_fw", &EditorAudioBus::drop_data_fw); @@ -773,7 +766,6 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { add_child(vb); set_v_size_flags(SIZE_EXPAND_FILL); - set_process_unhandled_key_input(true); track_name = memnew(LineEdit); track_name->connect("text_entered", callable_mp(this, &EditorAudioBus::_name_changed)); @@ -805,12 +797,6 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { hbc->add_child(bypass); hbc->add_spacer(); - bus_options = memnew(MenuButton); - bus_options->set_h_size_flags(SIZE_SHRINK_END); - bus_options->set_anchor(MARGIN_RIGHT, 0.0); - bus_options->set_tooltip(TTR("Bus options")); - hbc->add_child(bus_options); - Ref<StyleBoxEmpty> sbempty = memnew(StyleBoxEmpty); for (int i = 0; i < hbc->get_child_count(); i++) { Control *child = Object::cast_to<Control>(hbc->get_child(i)); @@ -865,15 +851,15 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { cc = 0; for (int i = 0; i < CHANNELS_MAX; i++) { - channel[i].vu_l = memnew(TextureProgress); - channel[i].vu_l->set_fill_mode(TextureProgress::FILL_BOTTOM_TO_TOP); + channel[i].vu_l = memnew(TextureProgressBar); + channel[i].vu_l->set_fill_mode(TextureProgressBar::FILL_BOTTOM_TO_TOP); hb->add_child(channel[i].vu_l); channel[i].vu_l->set_min(-80); channel[i].vu_l->set_max(24); channel[i].vu_l->set_step(0.1); - channel[i].vu_r = memnew(TextureProgress); - channel[i].vu_r->set_fill_mode(TextureProgress::FILL_BOTTOM_TO_TOP); + channel[i].vu_r = memnew(TextureProgressBar); + channel[i].vu_r->set_fill_mode(TextureProgressBar::FILL_BOTTOM_TO_TOP); hb->add_child(channel[i].vu_r); channel[i].vu_r->set_min(-80); channel[i].vu_r->set_max(24); @@ -906,6 +892,7 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { effects->set_allow_rmb_select(true); effects->set_focus_mode(FOCUS_CLICK); effects->set_allow_reselect(true); + effects->connect("gui_input", callable_mp(this, &EditorAudioBus::_effects_gui_input)); send = memnew(OptionButton); send->set_clip_text(true); @@ -932,9 +919,16 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { effect_options->set_item_icon(effect_options->get_item_count() - 1, icon); } + bus_options = memnew(MenuButton); + bus_options->set_shortcut_context(this); + bus_options->set_h_size_flags(SIZE_SHRINK_END); + bus_options->set_anchor(MARGIN_RIGHT, 0.0); + bus_options->set_tooltip(TTR("Bus options")); + hbc->add_child(bus_options); + bus_popup = bus_options->get_popup(); - bus_popup->add_item(TTR("Duplicate")); - bus_popup->add_item(TTR("Delete")); + bus_popup->add_shortcut(ED_SHORTCUT("audio_bus_editor/duplicate_selected_bus", TTR("Duplicate Bus"), KEY_MASK_CMD | KEY_D)); + bus_popup->add_shortcut(ED_SHORTCUT("audio_bus_editor/delete_selected_bus", TTR("Delete Bus"), KEY_DELETE)); bus_popup->set_item_disabled(1, is_master); bus_popup->add_item(TTR("Reset Volume")); bus_popup->connect("index_pressed", callable_mp(this, &EditorAudioBus::_bus_popup_pressed)); @@ -1379,14 +1373,15 @@ void EditorAudioMeterNotches::add_notch(float p_normalized_offset, float p_db_va Size2 EditorAudioMeterNotches::get_minimum_size() const { Ref<Font> font = get_theme_font("font", "Label"); - float font_height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Label"); + float font_height = font->get_height(font_size); float width = 0; float height = top_padding + btm_padding; for (int i = 0; i < notches.size(); i++) { if (notches[i].render_db_value) { - width = MAX(width, font->get_string_size(String::num(Math::abs(notches[i].db_value)) + "dB").x); + width = MAX(width, font->get_string_size(String::num(Math::abs(notches[i].db_value)) + "dB", font_size).x); height += font_height; } } @@ -1413,7 +1408,8 @@ void EditorAudioMeterNotches::_notification(int p_what) { void EditorAudioMeterNotches::_draw_audio_notches() { Ref<Font> font = get_theme_font("font", "Label"); - float font_height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Label"); + float font_height = font->get_height(font_size); for (int i = 0; i < notches.size(); i++) { AudioNotch n = notches[i]; @@ -1427,6 +1423,7 @@ void EditorAudioMeterNotches::_draw_audio_notches() { Vector2(line_length + label_space, (1.0f - n.relative_position) * (get_size().y - btm_padding - top_padding) + (font_height / 4) + top_padding), String::num(Math::abs(n.db_value)) + "dB", + HALIGN_LEFT, -1, font_size, notch_color); } } diff --git a/editor/editor_audio_buses.h b/editor/editor_audio_buses.h index b6cf1183b5..b5f2f5af81 100644 --- a/editor/editor_audio_buses.h +++ b/editor/editor_audio_buses.h @@ -43,7 +43,7 @@ #include "scene/gui/panel_container.h" #include "scene/gui/scroll_container.h" #include "scene/gui/slider.h" -#include "scene/gui/texture_progress.h" +#include "scene/gui/texture_progress_bar.h" #include "scene/gui/texture_rect.h" #include "scene/gui/tree.h" @@ -61,13 +61,13 @@ class EditorAudioBus : public PanelContainer { static const int CHANNELS_MAX = 4; struct { - bool prev_active; + bool prev_active = false; - float peak_l; - float peak_r; + float peak_l = 0; + float peak_r = 0; - TextureProgress *vu_l; - TextureProgress *vu_r; + TextureProgressBar *vu_l = nullptr; + TextureProgressBar *vu_r = nullptr; } channel[CHANNELS_MAX]; OptionButton *send; @@ -91,7 +91,7 @@ class EditorAudioBus : public PanelContainer { mutable bool hovering_drop; void _gui_input(const Ref<InputEvent> &p_event); - void _unhandled_key_input(Ref<InputEvent> p_event); + void _effects_gui_input(Ref<InputEvent> p_event); void _bus_popup_pressed(int p_option); void _name_changed(const String &p_new_name); @@ -214,9 +214,9 @@ class EditorAudioMeterNotches : public Control { private: struct AudioNotch { - float relative_position; - float db_value; - bool render_db_value; + float relative_position = 0; + float db_value = 0; + bool render_db_value = false; _FORCE_INLINE_ AudioNotch(float r_pos, float db_v, bool rndr_val) { relative_position = r_pos; diff --git a/editor/editor_autoload_settings.h b/editor/editor_autoload_settings.h index 646fe3992c..845f86fbb9 100644 --- a/editor/editor_autoload_settings.h +++ b/editor/editor_autoload_settings.h @@ -50,20 +50,14 @@ class EditorAutoloadSettings : public VBoxContainer { struct AutoLoadInfo { String name; String path; - bool is_singleton; - bool in_editor; - int order; - Node *node; + bool is_singleton = false; + bool in_editor = false; + int order = 0; + Node *node = nullptr; bool operator==(const AutoLoadInfo &p_info) const { return order == p_info.order; } - - AutoLoadInfo() { - is_singleton = false; - in_editor = false; - node = nullptr; - } }; List<AutoLoadInfo> autoload_cache; diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 975405aec4..eab1ecf373 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -691,11 +691,6 @@ void EditorData::set_edited_scene_version(uint64_t version, int p_scene_idx) { } } -uint64_t EditorData::get_edited_scene_version() const { - ERR_FAIL_INDEX_V(current_edited_scene, edited_scene.size(), 0); - return edited_scene[current_edited_scene].version; -} - uint64_t EditorData::get_scene_version(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), 0); return edited_scene[p_idx].version; diff --git a/editor/editor_data.h b/editor/editor_data.h index 5037a6acb4..0d27e06987 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -40,7 +40,6 @@ class EditorHistory { enum { - HISTORY_MAX = 64 }; @@ -48,12 +47,12 @@ class EditorHistory { REF ref; ObjectID object; String property; - bool inspector_only; + bool inspector_only = false; }; struct History { Vector<Obj> path; - int level; + int level = 0; }; friend class EditorData; @@ -110,14 +109,14 @@ public: }; struct EditedScene { - Node *root; + Node *root = nullptr; String path; Dictionary editor_states; List<Node *> selection; Vector<EditorHistory::History> history_stored; - int history_current; + int history_current = 0; Dictionary custom_state; - uint64_t version; + uint64_t version = 0; NodePath live_edit_root; }; @@ -191,7 +190,6 @@ public: void set_scene_path(int p_idx, const String &p_path); Ref<Script> get_scene_root_script(int p_idx) const; void set_edited_scene_version(uint64_t version, int p_scene_idx = -1); - uint64_t get_edited_scene_version() const; uint64_t get_scene_version(int p_idx) const; void clear_edited_scenes(); void set_edited_scene_live_edit_root(const NodePath &p_root); diff --git a/editor/editor_dir_dialog.cpp b/editor/editor_dir_dialog.cpp index 206fdef7c9..17e0fd0fae 100644 --- a/editor/editor_dir_dialog.cpp +++ b/editor/editor_dir_dialog.cpp @@ -202,7 +202,7 @@ EditorDirDialog::EditorDirDialog() { mkdirerr->set_text(TTR("Could not create folder.")); add_child(mkdirerr); - get_ok()->set_text(TTR("Choose")); + get_ok_button()->set_text(TTR("Choose")); must_reload = false; } diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 97800fe961..07318c14bc 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -398,7 +398,11 @@ Error EditorExportPlatform::_save_zip_file(void *p_userdata, const String &p_pat Ref<ImageTexture> EditorExportPlatform::get_option_icon(int p_index) const { Ref<Theme> theme = EditorNode::get_singleton()->get_editor_theme(); ERR_FAIL_COND_V(theme.is_null(), Ref<ImageTexture>()); - return theme->get_icon("Play", "EditorIcons"); + if (EditorNode::get_singleton()->get_viewport()->is_layout_rtl()) { + return theme->get_icon("PlayBackwards", "EditorIcons"); + } else { + return theme->get_icon("Play", "EditorIcons"); + } } String EditorExportPlatform::find_export_template(String template_file_name, String *err) const { @@ -737,6 +741,9 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & _edit_filter_list(paths, p_preset->get_include_filter(), false); _edit_filter_list(paths, p_preset->get_exclude_filter(), true); + // Ignore import files, since these are automatically added to the jar later with the resources + _edit_filter_list(paths, String("*.import"), true); + // Get encryption filters. bool enc_pck = p_preset->get_enc_pck(); Vector<String> enc_in_filters; @@ -969,6 +976,15 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & p_func(p_udata, splash, array, idx, total, enc_in_filters, enc_ex_filters, key); } + // Store text server data if exists. + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + String ts_data = "res://" + TS->get_support_data_filename(); + if (FileAccess::exists(ts_data)) { + Vector<uint8_t> array = FileAccess::get_file_as_array(ts_data); + p_func(p_udata, ts_data, array, idx, total, enc_in_filters, enc_ex_filters, key); + } + } + String config_file = "project.binary"; String engine_cfb = EditorSettings::get_singleton()->get_cache_dir().plus_file("tmp" + config_file); ProjectSettings::get_singleton()->save_custom(engine_cfb, custom_map, custom_list); @@ -1629,15 +1645,17 @@ void EditorExportPlatformPC::get_preset_features(const Ref<EditorExportPreset> & } void EditorExportPlatformPC::get_export_options(List<ExportOption> *r_options) { + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/debug", PROPERTY_HINT_GLOBAL_FILE), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/release", PROPERTY_HINT_GLOBAL_FILE), "")); + + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/64_bits"), true)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/embed_pck"), false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/bptc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), true)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/etc2"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/no_bptc_fallbacks"), true)); - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/64_bits"), true)); - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "binary_format/embed_pck"), false)); - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/release", PROPERTY_HINT_GLOBAL_FILE), "")); - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/debug", PROPERTY_HINT_GLOBAL_FILE), "")); } String EditorExportPlatformPC::get_name() const { @@ -1817,17 +1835,10 @@ void EditorExportPlatformPC::set_debug_32(const String &p_file) { debug_file_32 = p_file; } -void EditorExportPlatformPC::add_platform_feature(const String &p_feature) { - extra_features.insert(p_feature); -} - void EditorExportPlatformPC::get_platform_features(List<String> *r_features) { r_features->push_back("pc"); //all pcs support "pc" r_features->push_back("s3tc"); //all pcs support "s3tc" compression r_features->push_back(get_os_name()); //OS name is a feature - for (Set<String>::Element *E = extra_features.front(); E; E = E->next()) { - r_features->push_back(E->get()); - } } void EditorExportPlatformPC::resolve_platform_feature_priorities(const Ref<EditorExportPreset> &p_preset, Set<String> &p_features) { diff --git a/editor/editor_export.h b/editor/editor_export.h index 09feaad255..584ef17035 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -169,9 +169,9 @@ public: private: struct SavedData { - uint64_t ofs; - uint64_t size; - bool encrypted; + uint64_t ofs = 0; + uint64_t size = 0; + bool encrypted = false; Vector<uint8_t> md5; CharString path_utf8; @@ -181,15 +181,15 @@ private: }; struct PackData { - FileAccess *f; + FileAccess *f = nullptr; Vector<SavedData> file_ofs; - EditorProgress *ep; - Vector<SharedObject> *so_files; + EditorProgress *ep = nullptr; + Vector<SharedObject> *so_files = nullptr; }; struct ZipData { - void *zip; - EditorProgress *ep; + void *zip = nullptr; + EditorProgress *ep = nullptr; }; struct FeatureContainers { @@ -294,7 +294,7 @@ class EditorExportPlugin : public Reference { struct ExtraFile { String path; Vector<uint8_t> data; - bool remap; + bool remap = false; }; Vector<ExtraFile> extra_files; bool skipped; @@ -424,8 +424,6 @@ private: String debug_file_32; String debug_file_64; - Set<String> extra_features; - int chmod_flags; FixUpEmbeddedPckFunc fixup_embedded_pck_func; diff --git a/editor/editor_feature_profile.cpp b/editor/editor_feature_profile.cpp index 7335563dd9..05bc2edefb 100644 --- a/editor/editor_feature_profile.cpp +++ b/editor/editor_feature_profile.cpp @@ -890,7 +890,7 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { add_child(new_profile_dialog); new_profile_dialog->connect("confirmed", callable_mp(this, &EditorFeatureProfileManager::_create_new_profile)); new_profile_dialog->register_text_enter(new_profile_name); - new_profile_dialog->get_ok()->set_text(TTR("Create")); + new_profile_dialog->get_ok_button()->set_text(TTR("Create")); erase_profile_dialog = memnew(ConfirmationDialog); add_child(erase_profile_dialog); diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index e3923a48c5..8ded47605c 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -59,12 +59,17 @@ VBoxContainer *EditorFileDialog::get_vbox() { } void EditorFileDialog::_notification(int p_what) { - if (p_what == NOTIFICATION_READY || p_what == NOTIFICATION_THEME_CHANGED) { + if (p_what == NOTIFICATION_READY || p_what == NOTIFICATION_THEME_CHANGED || p_what == Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) { // Update icons. mode_thumbnails->set_icon(item_list->get_theme_icon("FileThumbnail", "EditorIcons")); mode_list->set_icon(item_list->get_theme_icon("FileList", "EditorIcons")); - dir_prev->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); - dir_next->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + dir_prev->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + dir_next->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); + } else { + dir_prev->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); + dir_next->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + } dir_up->set_icon(item_list->get_theme_icon("ArrowUp", "EditorIcons")); refresh->set_icon(item_list->get_theme_icon("Reload", "EditorIcons")); favorite->set_icon(item_list->get_theme_icon("Favorites", "EditorIcons")); @@ -97,8 +102,13 @@ void EditorFileDialog::_notification(int p_what) { // Update icons. mode_thumbnails->set_icon(item_list->get_theme_icon("FileThumbnail", "EditorIcons")); mode_list->set_icon(item_list->get_theme_icon("FileList", "EditorIcons")); - dir_prev->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); - dir_next->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + dir_prev->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + dir_next->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); + } else { + dir_prev->set_icon(item_list->get_theme_icon("Back", "EditorIcons")); + dir_next->set_icon(item_list->get_theme_icon("Forward", "EditorIcons")); + } dir_up->set_icon(item_list->get_theme_icon("ArrowUp", "EditorIcons")); refresh->set_icon(item_list->get_theme_icon("Reload", "EditorIcons")); favorite->set_icon(item_list->get_theme_icon("Favorites", "EditorIcons")); @@ -202,14 +212,14 @@ void EditorFileDialog::update_dir() { dir->set_text(dir_access->get_current_dir(false)); // Disable "Open" button only when selecting file(s) mode. - get_ok()->set_disabled(_is_open_should_be_disabled()); + get_ok_button()->set_disabled(_is_open_should_be_disabled()); switch (mode) { case FILE_MODE_OPEN_FILE: case FILE_MODE_OPEN_FILES: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); break; case FILE_MODE_OPEN_DIR: - get_ok()->set_text(TTR("Select Current Folder")); + get_ok_button()->set_text(TTR("Select Current Folder")); break; case FILE_MODE_OPEN_ANY: case FILE_MODE_SAVE_FILE: @@ -466,10 +476,10 @@ void EditorFileDialog::_item_selected(int p_item) { file->set_text(d["name"]); _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); } else if (mode == FILE_MODE_OPEN_DIR) { - get_ok()->set_text(TTR("Select This Folder")); + get_ok_button()->set_text(TTR("Select This Folder")); } - get_ok()->set_disabled(_is_open_should_be_disabled()); + get_ok_button()->set_disabled(_is_open_should_be_disabled()); } void EditorFileDialog::_multi_selected(int p_item, bool p_selected) { @@ -485,7 +495,7 @@ void EditorFileDialog::_multi_selected(int p_item, bool p_selected) { _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); } - get_ok()->set_disabled(_is_open_should_be_disabled()); + get_ok_button()->set_disabled(_is_open_should_be_disabled()); } void EditorFileDialog::_items_clear_selection() { @@ -495,13 +505,13 @@ void EditorFileDialog::_items_clear_selection() { switch (mode) { case FILE_MODE_OPEN_FILE: case FILE_MODE_OPEN_FILES: - get_ok()->set_text(TTR("Open")); - get_ok()->set_disabled(!item_list->is_anything_selected()); + get_ok_button()->set_text(TTR("Open")); + get_ok_button()->set_disabled(!item_list->is_anything_selected()); break; case FILE_MODE_OPEN_DIR: - get_ok()->set_disabled(false); - get_ok()->set_text(TTR("Select Current Folder")); + get_ok_button()->set_disabled(false); + get_ok_button()->set_text(TTR("Select Current Folder")); break; case FILE_MODE_OPEN_ANY: @@ -845,7 +855,7 @@ void EditorFileDialog::update_file_list() { favorite->set_pressed(false); fav_up->set_disabled(true); fav_down->set_disabled(true); - get_ok()->set_disabled(_is_open_should_be_disabled()); + get_ok_button()->set_disabled(_is_open_should_be_disabled()); for (int i = 0; i < favorites->get_item_count(); i++) { if (favorites->get_item_metadata(i) == cdir || favorites->get_item_metadata(i) == cdir + "/") { favorites->select(i); @@ -968,27 +978,27 @@ void EditorFileDialog::set_file_mode(FileMode p_mode) { mode = p_mode; switch (mode) { case FILE_MODE_OPEN_FILE: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_title(TTR("Open a File")); can_create_dir = false; break; case FILE_MODE_OPEN_FILES: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_title(TTR("Open File(s)")); can_create_dir = false; break; case FILE_MODE_OPEN_DIR: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_title(TTR("Open a Directory")); can_create_dir = true; break; case FILE_MODE_OPEN_ANY: - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_title(TTR("Open a File or Directory")); can_create_dir = true; break; case FILE_MODE_SAVE_FILE: - get_ok()->set_text(TTR("Save")); + get_ok_button()->set_text(TTR("Save")); set_title(TTR("Save a File")); can_create_dir = true; break; @@ -1486,6 +1496,7 @@ EditorFileDialog::EditorFileDialog() { pathhb->add_child(drives_container); dir = memnew(LineEdit); + dir->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); pathhb->add_child(dir); dir->set_h_size_flags(Control::SIZE_EXPAND_FILL); @@ -1624,6 +1635,7 @@ EditorFileDialog::EditorFileDialog() { file_box = memnew(HBoxContainer); file_box->add_child(memnew(Label(TTR("File:")))); file = memnew(LineEdit); + file->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); file->set_stretch_ratio(4); file->set_h_size_flags(Control::SIZE_EXPAND_FILL); file_box->add_child(file); @@ -1662,6 +1674,7 @@ EditorFileDialog::EditorFileDialog() { makedialog->add_child(makevb); makedirname = memnew(LineEdit); + makedirname->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); makevb->add_margin_child(TTR("Name:"), makedirname); add_child(makedialog); makedialog->register_text_enter(makedirname); diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index c66bc9b3fa..a8a7262cf0 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -357,10 +357,12 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo List<String> to_check; + String importer_name; String source_file = ""; String source_md5 = ""; Vector<String> dest_files; String dest_md5 = ""; + int version = 0; while (true) { assign = Variant(); @@ -384,6 +386,10 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo for (int i = 0; i < fa.size(); i++) { to_check.push_back(fa[i]); } + } else if (assign == "importer_version") { + version = value; + } else if (assign == "importer") { + importer_name = value; } else if (!p_only_imported_files) { if (assign == "source_file") { source_file = value; @@ -399,6 +405,12 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo memdelete(f); + Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(importer_name); + + if (importer->get_format_version() > version) { + return true; // version changed, reimport + } + // Read the md5's from a separate file (so the import parameters aren't dependent on the file version String base_path = ResourceFormatImporter::get_singleton()->get_import_base_path(p_path); FileAccess *md5s = FileAccess::open(base_path + ".md5", FileAccess::READ, &err); @@ -799,6 +811,20 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess } } + for (int i = 0; i < ScriptServer::get_language_count(); i++) { + ScriptLanguage *lang = ScriptServer::get_language(i); + if (lang->supports_documentation() && fi->type == lang->get_type()) { + Ref<Script> script = ResourceLoader::load(path); + if (script == nullptr) { + continue; + } + const Vector<DocData::ClassDoc> &docs = script->get_documentation(); + for (int j = 0; j < docs.size(); j++) { + EditorHelp::get_doc_data()->add_doc(docs[j]); + } + } + } + p_dir->files.push_back(fi); p_progress.update(idx, total); } @@ -1018,10 +1044,6 @@ void EditorFileSystem::_thread_func_sources(void *_userdata) { efs->scanning_changes_done = true; } -void EditorFileSystem::get_changed_sources(List<String> *r_changed) { - *r_changed = sources_changed; -} - void EditorFileSystem::scan_changes() { if (first_scan || // Prevent a premature changes scan from inhibiting the first full scan scanning || scanning_changes || thread) { @@ -1562,6 +1584,10 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector f->store_line("[remap]"); f->store_line(""); f->store_line("importer=\"" + importer->get_importer_name() + "\""); + int version = importer->get_format_version(); + if (version > 0) { + f->store_line("importer_version=" + itos(version)); + } if (importer->get_resource_type() != "") { f->store_line("type=\"" + importer->get_resource_type() + "\""); } @@ -1699,7 +1725,7 @@ void EditorFileSystem::_reimport_file(const String &p_file) { importer = ResourceFormatImporter::get_singleton()->get_importer_by_extension(p_file.get_extension()); load_default = true; if (importer.is_null()) { - ERR_PRINT("BUG: File queued for import, but can't be imported!"); + ERR_PRINT("BUG: File queued for import, but can't be imported, importer for type '" + importer_name + "' not found."); ERR_FAIL(); } } @@ -1746,6 +1772,10 @@ void EditorFileSystem::_reimport_file(const String &p_file) { f->store_line("[remap]"); f->store_line(""); f->store_line("importer=\"" + importer->get_importer_name() + "\""); + int version = importer->get_format_version(); + if (version > 0) { + f->store_line("importer_version=" + itos(version)); + } if (importer->get_resource_type() != "") { f->store_line("type=\"" + importer->get_resource_type() + "\""); } diff --git a/editor/editor_file_system.h b/editor/editor_file_system.h index d5ae046c36..a7ab4d6a9a 100644 --- a/editor/editor_file_system.h +++ b/editor/editor_file_system.h @@ -52,12 +52,12 @@ class EditorFileSystemDirectory : public Object { struct FileInfo { String file; StringName type; - uint64_t modified_time; - uint64_t import_modified_time; - bool import_valid; + uint64_t modified_time = 0; + uint64_t import_modified_time = 0; + bool import_valid = false; String import_group_file; Vector<String> deps; - bool verified; //used for checking changes + bool verified = false; //used for checking changes String script_class_name; String script_class_extends; String script_class_icon_path; @@ -119,18 +119,11 @@ class EditorFileSystem : public Node { ACTION_FILE_RELOAD }; - Action action; - EditorFileSystemDirectory *dir; + Action action = ACTION_NONE; + EditorFileSystemDirectory *dir = nullptr; String file; - EditorFileSystemDirectory *new_dir; - EditorFileSystemDirectory::FileInfo *new_file; - - ItemAction() { - action = ACTION_NONE; - dir = nullptr; - new_dir = nullptr; - new_file = nullptr; - } + EditorFileSystemDirectory *new_dir = nullptr; + EditorFileSystemDirectory::FileInfo *new_file = nullptr; }; bool use_threads; @@ -162,10 +155,10 @@ class EditorFileSystem : public Node { /* Used for reading the filesystem cache file */ struct FileCache { String type; - uint64_t modification_time; - uint64_t import_modification_time; + uint64_t modification_time = 0; + uint64_t import_modification_time = 0; Vector<String> deps; - bool import_valid; + bool import_valid = false; String import_group_file; String script_class_name; String script_class_extends; @@ -175,9 +168,9 @@ class EditorFileSystem : public Node { HashMap<String, FileCache> file_cache; struct ScanProgress { - float low; - float hi; - mutable EditorProgressBG *progress; + float low = 0; + float hi = 0; + mutable EditorProgressBG *progress = nullptr; void update(int p_current, int p_total) const; ScanProgress get_sub(int p_current, int p_total) const; }; @@ -220,7 +213,7 @@ class EditorFileSystem : public Node { struct ImportFile { String path; - int order; + int order = 0; bool operator<(const ImportFile &p_if) const { return order < p_if.order; } @@ -255,7 +248,6 @@ public: float get_scanning_progress() const; void scan(); void scan_changes(); - void get_changed_sources(List<String> *r_changed); void update_file(const String &p_file); EditorFileSystemDirectory *get_filesystem_path(const String &p_path); diff --git a/editor/editor_fonts.cpp b/editor/editor_fonts.cpp index 100c76c32b..23dc69af12 100644 --- a/editor/editor_fonts.cpp +++ b/editor/editor_fonts.cpp @@ -35,57 +35,61 @@ #include "editor_scale.h" #include "editor_settings.h" #include "scene/resources/default_theme/default_theme.h" -#include "scene/resources/dynamic_font.h" - -#define MAKE_FALLBACKS(m_name) \ - m_name->add_fallback(FontArabic); \ - m_name->add_fallback(FontHebrew); \ - m_name->add_fallback(FontThai); \ - m_name->add_fallback(FontHindi); \ - m_name->add_fallback(FontJapanese); \ - m_name->add_fallback(FontFallback); +#include "scene/resources/font.h" + +#define MAKE_FALLBACKS(m_name) \ + m_name->add_data(FontArabic); \ + m_name->add_data(FontBengali); \ + m_name->add_data(FontGeorgian); \ + m_name->add_data(FontMalayalam); \ + m_name->add_data(FontOriya); \ + m_name->add_data(FontSinhala); \ + m_name->add_data(FontTamil); \ + m_name->add_data(FontTelugu); \ + m_name->add_data(FontHebrew); \ + m_name->add_data(FontThai); \ + m_name->add_data(FontHindi); \ + m_name->add_data(FontJapanese); \ + m_name->add_data(FontFallback); // the custom spacings might only work with Noto Sans -#define MAKE_DEFAULT_FONT(m_name, m_size) \ - Ref<DynamicFont> m_name; \ - m_name.instance(); \ - m_name->set_size(m_size); \ - if (CustomFont.is_valid()) { \ - m_name->set_font_data(CustomFont); \ - m_name->add_fallback(DefaultFont); \ - } else { \ - m_name->set_font_data(DefaultFont); \ - } \ - m_name->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE); \ - m_name->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE); \ +#define MAKE_DEFAULT_FONT(m_name) \ + Ref<Font> m_name; \ + m_name.instance(); \ + if (CustomFont.is_valid()) { \ + m_name->add_data(CustomFont); \ + m_name->add_data(DefaultFont); \ + } else { \ + m_name->add_data(DefaultFont); \ + } \ + m_name->set_spacing(Font::SPACING_TOP, -EDSCALE); \ + m_name->set_spacing(Font::SPACING_BOTTOM, -EDSCALE); \ MAKE_FALLBACKS(m_name); -#define MAKE_BOLD_FONT(m_name, m_size) \ - Ref<DynamicFont> m_name; \ - m_name.instance(); \ - m_name->set_size(m_size); \ - if (CustomFontBold.is_valid()) { \ - m_name->set_font_data(CustomFontBold); \ - m_name->add_fallback(DefaultFontBold); \ - } else { \ - m_name->set_font_data(DefaultFontBold); \ - } \ - m_name->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE); \ - m_name->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE); \ +#define MAKE_BOLD_FONT(m_name) \ + Ref<Font> m_name; \ + m_name.instance(); \ + if (CustomFontBold.is_valid()) { \ + m_name->add_data(CustomFontBold); \ + m_name->add_data(DefaultFontBold); \ + } else { \ + m_name->add_data(DefaultFontBold); \ + } \ + m_name->set_spacing(Font::SPACING_TOP, -EDSCALE); \ + m_name->set_spacing(Font::SPACING_BOTTOM, -EDSCALE); \ MAKE_FALLBACKS(m_name); -#define MAKE_SOURCE_FONT(m_name, m_size) \ - Ref<DynamicFont> m_name; \ - m_name.instance(); \ - m_name->set_size(m_size); \ - if (CustomFontSource.is_valid()) { \ - m_name->set_font_data(CustomFontSource); \ - m_name->add_fallback(dfmono); \ - } else { \ - m_name->set_font_data(dfmono); \ - } \ - m_name->set_spacing(DynamicFont::SPACING_TOP, -EDSCALE); \ - m_name->set_spacing(DynamicFont::SPACING_BOTTOM, -EDSCALE); \ +#define MAKE_SOURCE_FONT(m_name) \ + Ref<Font> m_name; \ + m_name.instance(); \ + if (CustomFontSource.is_valid()) { \ + m_name->add_data(CustomFontSource); \ + m_name->add_data(dfmono); \ + } else { \ + m_name->add_data(dfmono); \ + } \ + m_name->set_spacing(Font::SPACING_TOP, -EDSCALE); \ + m_name->set_spacing(Font::SPACING_BOTTOM, -EDSCALE); \ MAKE_FALLBACKS(m_name); void editor_register_fonts(Ref<Theme> p_theme) { @@ -96,7 +100,7 @@ void editor_register_fonts(Ref<Theme> p_theme) { bool font_antialiased = (bool)EditorSettings::get_singleton()->get("interface/editor/font_antialiased"); int font_hinting_setting = (int)EditorSettings::get_singleton()->get("interface/editor/font_hinting"); - DynamicFontData::Hinting font_hinting; + TextServer::Hinting font_hinting; switch (font_hinting_setting) { case 0: // The "Auto" setting uses the setting that best matches the OS' font rendering: @@ -104,29 +108,31 @@ void editor_register_fonts(Ref<Theme> p_theme) { // - Windows uses ClearType, which is in between "Light" and "Normal" hinting. // - Linux has configurable font hinting, but most distributions including Ubuntu default to "Light". #ifdef OSX_ENABLED - font_hinting = DynamicFontData::HINTING_NONE; + font_hinting = TextServer::HINTING_NONE; #else - font_hinting = DynamicFontData::HINTING_LIGHT; + font_hinting = TextServer::HINTING_LIGHT; #endif break; case 1: - font_hinting = DynamicFontData::HINTING_NONE; + font_hinting = TextServer::HINTING_NONE; break; case 2: - font_hinting = DynamicFontData::HINTING_LIGHT; + font_hinting = TextServer::HINTING_LIGHT; break; default: - font_hinting = DynamicFontData::HINTING_NORMAL; + font_hinting = TextServer::HINTING_NORMAL; break; } + int default_font_size = int(EDITOR_GET("interface/editor/main_font_size")) * EDSCALE; + String custom_font_path = EditorSettings::get_singleton()->get("interface/editor/main_font"); - Ref<DynamicFontData> CustomFont; + Ref<FontData> CustomFont; if (custom_font_path.length() > 0 && dir->file_exists(custom_font_path)) { CustomFont.instance(); + CustomFont->load_resource(custom_font_path, default_font_size); CustomFont->set_antialiased(font_antialiased); CustomFont->set_hinting(font_hinting); - CustomFont->set_font_path(custom_font_path); CustomFont->set_force_autohinter(true); //just looks better..i think? } else { EditorSettings::get_singleton()->set_manually("interface/editor/main_font", ""); @@ -135,12 +141,12 @@ void editor_register_fonts(Ref<Theme> p_theme) { /* Custom Bold font */ String custom_font_path_bold = EditorSettings::get_singleton()->get("interface/editor/main_font_bold"); - Ref<DynamicFontData> CustomFontBold; + Ref<FontData> CustomFontBold; if (custom_font_path_bold.length() > 0 && dir->file_exists(custom_font_path_bold)) { CustomFontBold.instance(); + CustomFontBold->load_resource(custom_font_path_bold, default_font_size); CustomFontBold->set_antialiased(font_antialiased); CustomFontBold->set_hinting(font_hinting); - CustomFontBold->set_font_path(custom_font_path_bold); CustomFontBold->set_force_autohinter(true); //just looks better..i think? } else { EditorSettings::get_singleton()->set_manually("interface/editor/main_font_bold", ""); @@ -149,12 +155,20 @@ void editor_register_fonts(Ref<Theme> p_theme) { /* Custom source code font */ String custom_font_path_source = EditorSettings::get_singleton()->get("interface/editor/code_font"); - Ref<DynamicFontData> CustomFontSource; + Ref<FontData> CustomFontSource; if (custom_font_path_source.length() > 0 && dir->file_exists(custom_font_path_source)) { CustomFontSource.instance(); + CustomFontSource->load_resource(custom_font_path_source, default_font_size); CustomFontSource->set_antialiased(font_antialiased); CustomFontSource->set_hinting(font_hinting); - CustomFontSource->set_font_path(custom_font_path_source); + + Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_variations")).split(","); + for (int i = 0; i < subtag.size(); i++) { + Vector<String> subtag_a = subtag[i].split("="); + if (subtag_a.size() == 2) { + CustomFontSource->set_variation(subtag_a[0], subtag_a[1].to_float()); + } + } } else { EditorSettings::get_singleton()->set_manually("interface/editor/code_font", ""); } @@ -163,115 +177,176 @@ void editor_register_fonts(Ref<Theme> p_theme) { /* Droid Sans */ - Ref<DynamicFontData> DefaultFont; + Ref<FontData> DefaultFont; DefaultFont.instance(); + DefaultFont->load_memory(_font_NotoSansUI_Regular, _font_NotoSansUI_Regular_size, "ttf", default_font_size); DefaultFont->set_antialiased(font_antialiased); DefaultFont->set_hinting(font_hinting); - DefaultFont->set_font_ptr(_font_NotoSansUI_Regular, _font_NotoSansUI_Regular_size); DefaultFont->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> DefaultFontBold; + Ref<FontData> DefaultFontBold; DefaultFontBold.instance(); + DefaultFontBold->load_memory(_font_NotoSansUI_Bold, _font_NotoSansUI_Bold_size, "ttf", default_font_size); DefaultFontBold->set_antialiased(font_antialiased); DefaultFontBold->set_hinting(font_hinting); - DefaultFontBold->set_font_ptr(_font_NotoSansUI_Bold, _font_NotoSansUI_Bold_size); DefaultFontBold->set_force_autohinter(true); // just looks better..i think? - Ref<DynamicFontData> FontFallback; + Ref<FontData> FontFallback; FontFallback.instance(); + FontFallback->load_memory(_font_DroidSansFallback, _font_DroidSansFallback_size, "ttf", default_font_size); FontFallback->set_antialiased(font_antialiased); FontFallback->set_hinting(font_hinting); - FontFallback->set_font_ptr(_font_DroidSansFallback, _font_DroidSansFallback_size); FontFallback->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontJapanese; + Ref<FontData> FontJapanese; FontJapanese.instance(); + FontJapanese->load_memory(_font_DroidSansJapanese, _font_DroidSansJapanese_size, "ttf", default_font_size); FontJapanese->set_antialiased(font_antialiased); FontJapanese->set_hinting(font_hinting); - FontJapanese->set_font_ptr(_font_DroidSansJapanese, _font_DroidSansJapanese_size); FontJapanese->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontArabic; + Ref<FontData> FontArabic; FontArabic.instance(); + FontArabic->load_memory(_font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size, "ttf", default_font_size); FontArabic->set_antialiased(font_antialiased); FontArabic->set_hinting(font_hinting); - FontArabic->set_font_ptr(_font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size); FontArabic->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontHebrew; + Ref<FontData> FontBengali; + FontBengali.instance(); + FontBengali->load_memory(_font_NotoSansBengali_Regular, _font_NotoSansBengali_Regular_size, "ttf", default_font_size); + FontBengali->set_antialiased(font_antialiased); + FontBengali->set_hinting(font_hinting); + FontBengali->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontGeorgian; + FontGeorgian.instance(); + FontGeorgian->load_memory(_font_NotoSansGeorgian_Regular, _font_NotoSansGeorgian_Regular_size, "ttf", default_font_size); + FontGeorgian->set_antialiased(font_antialiased); + FontGeorgian->set_hinting(font_hinting); + FontGeorgian->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontHebrew; FontHebrew.instance(); + FontHebrew->load_memory(_font_NotoSansHebrew_Regular, _font_NotoSansHebrew_Regular_size, "ttf", default_font_size); FontHebrew->set_antialiased(font_antialiased); FontHebrew->set_hinting(font_hinting); - FontHebrew->set_font_ptr(_font_NotoSansHebrew_Regular, _font_NotoSansHebrew_Regular_size); FontHebrew->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontThai; + Ref<FontData> FontMalayalam; + FontMalayalam.instance(); + FontMalayalam->load_memory(_font_NotoSansMalayalamUI_Regular, _font_NotoSansMalayalamUI_Regular_size, "ttf", default_font_size); + FontMalayalam->set_antialiased(font_antialiased); + FontMalayalam->set_hinting(font_hinting); + FontMalayalam->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontOriya; + FontOriya.instance(); + FontOriya->load_memory(_font_NotoSansOriyaUI_Regular, _font_NotoSansOriyaUI_Regular_size, "ttf", default_font_size); + FontOriya->set_antialiased(font_antialiased); + FontOriya->set_hinting(font_hinting); + FontOriya->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontSinhala; + FontSinhala.instance(); + FontSinhala->load_memory(_font_NotoSansSinhalaUI_Regular, _font_NotoSansSinhalaUI_Regular_size, "ttf", default_font_size); + FontSinhala->set_antialiased(font_antialiased); + FontSinhala->set_hinting(font_hinting); + FontSinhala->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontTamil; + FontTamil.instance(); + FontTamil->load_memory(_font_NotoSansTamilUI_Regular, _font_NotoSansTamilUI_Regular_size, "ttf", default_font_size); + FontTamil->set_antialiased(font_antialiased); + FontTamil->set_hinting(font_hinting); + FontTamil->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontTelugu; + FontTelugu.instance(); + FontTelugu->load_memory(_font_NotoSansTeluguUI_Regular, _font_NotoSansTeluguUI_Regular_size, "ttf", default_font_size); + FontTelugu->set_antialiased(font_antialiased); + FontTelugu->set_hinting(font_hinting); + FontTelugu->set_force_autohinter(true); //just looks better..i think? + + Ref<FontData> FontThai; FontThai.instance(); + FontThai->load_memory(_font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size, "ttf", default_font_size); FontThai->set_antialiased(font_antialiased); FontThai->set_hinting(font_hinting); - FontThai->set_font_ptr(_font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size); FontThai->set_force_autohinter(true); //just looks better..i think? - Ref<DynamicFontData> FontHindi; + Ref<FontData> FontHindi; FontHindi.instance(); + FontHindi->load_memory(_font_NotoSansDevanagariUI_Regular, _font_NotoSansDevanagariUI_Regular_size, "ttf", default_font_size); FontHindi->set_antialiased(font_antialiased); FontHindi->set_hinting(font_hinting); - FontHindi->set_font_ptr(_font_NotoSansDevanagariUI_Regular, _font_NotoSansDevanagariUI_Regular_size); FontHindi->set_force_autohinter(true); //just looks better..i think? /* Hack */ - Ref<DynamicFontData> dfmono; + Ref<FontData> dfmono; dfmono.instance(); + dfmono->load_memory(_font_Hack_Regular, _font_Hack_Regular_size, "ttf", default_font_size); dfmono->set_antialiased(font_antialiased); dfmono->set_hinting(font_hinting); - dfmono->set_font_ptr(_font_Hack_Regular, _font_Hack_Regular_size); - int default_font_size = int(EDITOR_GET("interface/editor/main_font_size")) * EDSCALE; + Vector<String> subtag = String(EditorSettings::get_singleton()->get("interface/editor/code_font_custom_variations")).split(","); + Dictionary ftrs; + for (int i = 0; i < subtag.size(); i++) { + Vector<String> subtag_a = subtag[i].split("="); + if (subtag_a.size() == 2) { + dfmono->set_variation(subtag_a[0], subtag_a[1].to_float()); + } + } // Default font - MAKE_DEFAULT_FONT(df, default_font_size); - p_theme->set_default_font(df); // Default theme font + MAKE_DEFAULT_FONT(df); + p_theme->set_default_theme_font(df); // Default theme font + p_theme->set_default_theme_font_size(default_font_size); + + p_theme->set_font_size("main_size", "EditorFonts", default_font_size); p_theme->set_font("main", "EditorFonts", df); // Bold font - MAKE_BOLD_FONT(df_bold, default_font_size); + MAKE_BOLD_FONT(df_bold); + p_theme->set_font_size("bold_size", "EditorFonts", default_font_size); p_theme->set_font("bold", "EditorFonts", df_bold); // Title font - MAKE_BOLD_FONT(df_title, default_font_size + 2 * EDSCALE); - p_theme->set_font("title", "EditorFonts", df_title); + p_theme->set_font_size("title_size", "EditorFonts", default_font_size + 2 * EDSCALE); + p_theme->set_font("title", "EditorFonts", df_bold); // Documentation fonts - MAKE_DEFAULT_FONT(df_doc, int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE); - MAKE_BOLD_FONT(df_doc_bold, int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE); - MAKE_BOLD_FONT(df_doc_title, int(EDITOR_GET("text_editor/help/help_title_font_size")) * EDSCALE); - MAKE_SOURCE_FONT(df_doc_code, int(EDITOR_GET("text_editor/help/help_source_font_size")) * EDSCALE); - MAKE_SOURCE_FONT(df_doc_kbd, (int(EDITOR_GET("text_editor/help/help_source_font_size")) - 1) * EDSCALE); - p_theme->set_font("doc", "EditorFonts", df_doc); - p_theme->set_font("doc_bold", "EditorFonts", df_doc_bold); - p_theme->set_font("doc_title", "EditorFonts", df_doc_title); - p_theme->set_font("doc_source", "EditorFonts", df_doc_code); - p_theme->set_font("doc_keyboard", "EditorFonts", df_doc_kbd); + MAKE_SOURCE_FONT(df_code); + p_theme->set_font_size("doc_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE); + p_theme->set_font("doc", "EditorFonts", df); + p_theme->set_font_size("doc_bold_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_font_size")) * EDSCALE); + p_theme->set_font("doc_bold", "EditorFonts", df_bold); + p_theme->set_font_size("doc_title_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_title_font_size")) * EDSCALE); + p_theme->set_font("doc_title", "EditorFonts", df_bold); + p_theme->set_font_size("doc_source_size", "EditorFonts", int(EDITOR_GET("text_editor/help/help_source_font_size")) * EDSCALE); + p_theme->set_font("doc_source", "EditorFonts", df_code); + p_theme->set_font_size("doc_keyboard_size", "EditorFonts", (int(EDITOR_GET("text_editor/help/help_source_font_size")) - 1) * EDSCALE); + p_theme->set_font("doc_keyboard", "EditorFonts", df_code); // Ruler font - MAKE_DEFAULT_FONT(df_rulers, 8 * EDSCALE); - p_theme->set_font("rulers", "EditorFonts", df_rulers); + p_theme->set_font_size("rulers_size", "EditorFonts", 8 * EDSCALE); + p_theme->set_font("rulers", "EditorFonts", df); // Rotation widget font - MAKE_DEFAULT_FONT(df_rotation_control, 14 * EDSCALE); - p_theme->set_font("rotation_control", "EditorFonts", df_rotation_control); + p_theme->set_font_size("rotation_control_size", "EditorFonts", 14 * EDSCALE); + p_theme->set_font("rotation_control", "EditorFonts", df); // Code font - MAKE_SOURCE_FONT(df_code, int(EDITOR_GET("interface/editor/code_font_size")) * EDSCALE); + p_theme->set_font_size("source_size", "EditorFonts", int(EDITOR_GET("interface/editor/code_font_size")) * EDSCALE); p_theme->set_font("source", "EditorFonts", df_code); - MAKE_SOURCE_FONT(df_expression, (int(EDITOR_GET("interface/editor/code_font_size")) - 1) * EDSCALE); - p_theme->set_font("expression", "EditorFonts", df_expression); + p_theme->set_font_size("expression_size", "EditorFonts", (int(EDITOR_GET("interface/editor/code_font_size")) - 1) * EDSCALE); + p_theme->set_font("expression", "EditorFonts", df_code); - MAKE_SOURCE_FONT(df_output_code, int(EDITOR_GET("run/output/font_size")) * EDSCALE); - p_theme->set_font("output_source", "EditorFonts", df_output_code); + p_theme->set_font_size("output_source_size", "EditorFonts", int(EDITOR_GET("run/output/font_size")) * EDSCALE); + p_theme->set_font("output_source", "EditorFonts", df_code); - MAKE_SOURCE_FONT(df_text_editor_status_code, default_font_size); - p_theme->set_font("status_source", "EditorFonts", df_text_editor_status_code); + p_theme->set_font_size("status_source_size", "EditorFonts", default_font_size); + p_theme->set_font("status_source", "EditorFonts", df_code); } diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 30aebd2b1f..41010b6a86 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -40,7 +40,7 @@ #define CONTRIBUTE_URL "https://docs.godotengine.org/en/latest/community/contributing/updating_the_class_reference.html" -DocData *EditorHelp::doc = nullptr; +DocTools *EditorHelp::doc = nullptr; void EditorHelp::_init_colors() { title_color = get_theme_color("accent_color", "Editor"); @@ -56,19 +56,6 @@ void EditorHelp::_init_colors() { class_desc->add_theme_constant_override("line_separation", Math::round(5 * EDSCALE)); } -void EditorHelp::_unhandled_key_input(const Ref<InputEvent> &p_ev) { - if (!is_visible_in_tree()) { - return; - } - - Ref<InputEventKey> k = p_ev; - - if (k.is_valid() && k->get_control() && k->get_keycode() == KEY_F) { - search->grab_focus(); - search->select_all(); - } -} - void EditorHelp::_search(bool p_search_previous) { if (p_search_previous) { find_bar->search_prev(); @@ -168,7 +155,8 @@ void EditorHelp::_class_desc_resized() { // Add extra horizontal margins for better readability. // The margins increase as the width of the editor help container increases. Ref<Font> doc_code_font = get_theme_font("doc_source", "EditorFonts"); - real_t char_width = doc_code_font->get_char_size('x').width; + int font_size = get_theme_font_size("doc_source_size", "EditorFonts"); + real_t char_width = doc_code_font->get_char_size('x', 0, font_size).width; const int display_margin = MAX(30 * EDSCALE, get_parent_anchorable_rect().size.width - char_width * 120 * EDSCALE) * 0.5; Ref<StyleBox> class_desc_stylebox = EditorNode::get_singleton()->get_theme_base()->get_theme_stylebox("normal", "RichTextLabel")->duplicate(); @@ -242,7 +230,7 @@ void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview if (p_overview) { class_desc->push_cell(); - class_desc->push_align(RichTextLabel::ALIGN_RIGHT); + class_desc->push_paragraph(RichTextLabel::ALIGN_RIGHT, Control::TEXT_DIRECTION_AUTO, ""); } else { static const char32_t prefix[3] = { 0x25CF /* filled circle */, ' ', 0 }; class_desc->add_text(String(prefix)); @@ -400,7 +388,7 @@ void EditorHelp::_update_doc() { } // Descendents - if (ClassDB::class_exists(cd.name)) { + if (cd.is_script_doc || ClassDB::class_exists(cd.name)) { bool found = false; bool prev = false; @@ -506,7 +494,19 @@ void EditorHelp::_update_doc() { Set<String> skip_methods; bool property_descr = false; - if (cd.properties.size()) { + bool has_properties = cd.properties.size() != 0; + if (cd.is_script_doc) { + has_properties = false; + for (int i = 0; i < cd.properties.size(); i++) { + if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.empty()) { + continue; + } + has_properties = true; + break; + } + } + + if (has_properties) { section_line.push_back(Pair<String, int>(TTR("Properties"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); @@ -521,10 +521,14 @@ void EditorHelp::_update_doc() { class_desc->set_table_column_expand(1, true); for (int i = 0; i < cd.properties.size(); i++) { + // Ignore undocumented private. + if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.empty()) { + continue; + } property_line[cd.properties[i].name] = class_desc->get_line_count() - 2; //gets overridden if description class_desc->push_cell(); - class_desc->push_align(RichTextLabel::ALIGN_RIGHT); + class_desc->push_paragraph(RichTextLabel::ALIGN_RIGHT, Control::TEXT_DIRECTION_AUTO, ""); class_desc->push_font(doc_code_font); _add_type(cd.properties[i].type, cd.properties[i].enumeration); class_desc->pop(); @@ -577,6 +581,32 @@ void EditorHelp::_update_doc() { class_desc->pop(); } + if (cd.is_script_doc && (cd.properties[i].setter != "" || cd.properties[i].getter != "")) { + class_desc->push_color(symbol_color); + class_desc->add_text(" [" + TTR("property:") + " "); + class_desc->pop(); // color + + if (cd.properties[i].setter != "") { + class_desc->push_color(value_color); + class_desc->add_text("setter"); + class_desc->pop(); // color + } + if (cd.properties[i].getter != "") { + if (cd.properties[i].setter != "") { + class_desc->push_color(symbol_color); + class_desc->add_text(", "); + class_desc->pop(); // color + } + class_desc->push_color(value_color); + class_desc->add_text("getter"); + class_desc->pop(); // color + } + + class_desc->push_color(symbol_color); + class_desc->add_text("]"); + class_desc->pop(); // color + } + class_desc->pop(); class_desc->pop(); @@ -602,6 +632,10 @@ void EditorHelp::_update_doc() { continue; } } + // Ignore undocumented private. + if (cd.methods[i].name.begins_with("_") && cd.methods[i].description.empty()) { + continue; + } methods.push_back(cd.methods[i]); } @@ -695,7 +729,7 @@ void EditorHelp::_update_doc() { theme_property_line[cd.theme_properties[i].name] = class_desc->get_line_count() - 2; //gets overridden if description class_desc->push_cell(); - class_desc->push_align(RichTextLabel::ALIGN_RIGHT); + class_desc->push_paragraph(RichTextLabel::ALIGN_RIGHT, Control::TEXT_DIRECTION_AUTO, ""); class_desc->push_font(doc_code_font); _add_type(cd.theme_properties[i].type); class_desc->pop(); @@ -814,13 +848,17 @@ void EditorHelp::_update_doc() { Vector<DocData::ConstantDoc> constants; for (int i = 0; i < cd.constants.size(); i++) { - if (cd.constants[i].enumeration != String()) { + if (!cd.constants[i].enumeration.empty()) { if (!enums.has(cd.constants[i].enumeration)) { enums[cd.constants[i].enumeration] = Vector<DocData::ConstantDoc>(); } enums[cd.constants[i].enumeration].push_back(cd.constants[i]); } else { + // Ignore undocumented private. + if (cd.constants[i].name.begins_with("_") && cd.constants[i].description.empty()) { + continue; + } constants.push_back(cd.constants[i]); } } @@ -860,6 +898,19 @@ void EditorHelp::_update_doc() { class_desc->add_newline(); class_desc->add_newline(); + // Enum description. + if (e != "@unnamed_enums" && cd.enums.has(e)) { + class_desc->push_color(text_color); + class_desc->push_font(doc_font); + class_desc->push_indent(1); + _add_text(cd.enums[e]); + class_desc->pop(); + class_desc->pop(); + class_desc->pop(); + class_desc->add_newline(); + class_desc->add_newline(); + } + class_desc->push_indent(1); Vector<DocData::ConstantDoc> enum_list = E->get(); @@ -1030,60 +1081,89 @@ void EditorHelp::_update_doc() { class_desc->pop(); // color } + if (cd.is_script_doc && (cd.properties[i].setter != "" || cd.properties[i].getter != "")) { + class_desc->push_color(symbol_color); + class_desc->add_text(" [" + TTR("property:") + " "); + class_desc->pop(); // color + + if (cd.properties[i].setter != "") { + class_desc->push_color(value_color); + class_desc->add_text("setter"); + class_desc->pop(); // color + } + if (cd.properties[i].getter != "") { + if (cd.properties[i].setter != "") { + class_desc->push_color(symbol_color); + class_desc->add_text(", "); + class_desc->pop(); // color + } + class_desc->push_color(value_color); + class_desc->add_text("getter"); + class_desc->pop(); // color + } + + class_desc->push_color(symbol_color); + class_desc->add_text("]"); + class_desc->pop(); // color + } + class_desc->pop(); // font class_desc->pop(); // cell - Map<String, DocData::MethodDoc> method_map; - for (int j = 0; j < methods.size(); j++) { - method_map[methods[j].name] = methods[j]; - } + // Script doc doesn't have setter, getter. + if (!cd.is_script_doc) { + Map<String, DocData::MethodDoc> method_map; + for (int j = 0; j < methods.size(); j++) { + method_map[methods[j].name] = methods[j]; + } - if (cd.properties[i].setter != "") { - class_desc->push_cell(); - class_desc->pop(); // cell + if (cd.properties[i].setter != "") { + class_desc->push_cell(); + class_desc->pop(); // cell - class_desc->push_cell(); - class_desc->push_font(doc_code_font); - class_desc->push_color(text_color); - if (method_map[cd.properties[i].setter].arguments.size() > 1) { - // Setters with additional arguments are exposed in the method list, so we link them here for quick access. - class_desc->push_meta("@method " + cd.properties[i].setter); - class_desc->add_text(cd.properties[i].setter + TTR("(value)")); - class_desc->pop(); - } else { - class_desc->add_text(cd.properties[i].setter + TTR("(value)")); + class_desc->push_cell(); + class_desc->push_font(doc_code_font); + class_desc->push_color(text_color); + if (method_map[cd.properties[i].setter].arguments.size() > 1) { + // Setters with additional arguments are exposed in the method list, so we link them here for quick access. + class_desc->push_meta("@method " + cd.properties[i].setter); + class_desc->add_text(cd.properties[i].setter + TTR("(value)")); + class_desc->pop(); + } else { + class_desc->add_text(cd.properties[i].setter + TTR("(value)")); + } + class_desc->pop(); // color + class_desc->push_color(comment_color); + class_desc->add_text(" setter"); + class_desc->pop(); // color + class_desc->pop(); // font + class_desc->pop(); // cell + method_line[cd.properties[i].setter] = property_line[cd.properties[i].name]; } - class_desc->pop(); // color - class_desc->push_color(comment_color); - class_desc->add_text(" setter"); - class_desc->pop(); // color - class_desc->pop(); // font - class_desc->pop(); // cell - method_line[cd.properties[i].setter] = property_line[cd.properties[i].name]; - } - if (cd.properties[i].getter != "") { - class_desc->push_cell(); - class_desc->pop(); // cell + if (cd.properties[i].getter != "") { + class_desc->push_cell(); + class_desc->pop(); // cell - class_desc->push_cell(); - class_desc->push_font(doc_code_font); - class_desc->push_color(text_color); - if (method_map[cd.properties[i].getter].arguments.size() > 0) { - // Getters with additional arguments are exposed in the method list, so we link them here for quick access. - class_desc->push_meta("@method " + cd.properties[i].getter); - class_desc->add_text(cd.properties[i].getter + "()"); - class_desc->pop(); - } else { - class_desc->add_text(cd.properties[i].getter + "()"); + class_desc->push_cell(); + class_desc->push_font(doc_code_font); + class_desc->push_color(text_color); + if (method_map[cd.properties[i].getter].arguments.size() > 0) { + // Getters with additional arguments are exposed in the method list, so we link them here for quick access. + class_desc->push_meta("@method " + cd.properties[i].getter); + class_desc->add_text(cd.properties[i].getter + "()"); + class_desc->pop(); + } else { + class_desc->add_text(cd.properties[i].getter + "()"); + } + class_desc->pop(); //color + class_desc->push_color(comment_color); + class_desc->add_text(" getter"); + class_desc->pop(); //color + class_desc->pop(); //font + class_desc->pop(); //cell + method_line[cd.properties[i].getter] = property_line[cd.properties[i].name]; } - class_desc->pop(); //color - class_desc->push_color(comment_color); - class_desc->add_text(" getter"); - class_desc->pop(); //color - class_desc->pop(); //font - class_desc->pop(); //cell - method_line[cd.properties[i].getter] = property_line[cd.properties[i].name]; } class_desc->pop(); // table @@ -1094,13 +1174,17 @@ void EditorHelp::_update_doc() { class_desc->push_color(text_color); class_desc->push_font(doc_font); class_desc->push_indent(1); - if (cd.properties[i].description.strip_edges() != String()) { + if (!cd.properties[i].description.strip_edges().empty()) { _add_text(DTR(cd.properties[i].description)); } else { class_desc->add_image(get_theme_icon("Error", "EditorIcons")); class_desc->add_text(" "); class_desc->push_color(comment_color); - class_desc->append_bbcode(TTR("There is currently no description for this property. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + if (cd.is_script_doc) { + class_desc->append_bbcode(TTR("There is currently no description for this property.")); + } else { + class_desc->append_bbcode(TTR("There is currently no description for this property. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + } class_desc->pop(); } class_desc->pop(); @@ -1145,13 +1229,17 @@ void EditorHelp::_update_doc() { class_desc->push_color(text_color); class_desc->push_font(doc_font); class_desc->push_indent(1); - if (methods_filtered[i].description.strip_edges() != String()) { + if (!methods_filtered[i].description.strip_edges().empty()) { _add_text(DTR(methods_filtered[i].description)); } else { class_desc->add_image(get_theme_icon("Error", "EditorIcons")); class_desc->add_text(" "); class_desc->push_color(comment_color); - class_desc->append_bbcode(TTR("There is currently no description for this method. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + if (cd.is_script_doc) { + class_desc->append_bbcode(TTR("There is currently no description for this method.")); + } else { + class_desc->append_bbcode(TTR("There is currently no description for this method. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + } class_desc->pop(); } @@ -1235,7 +1323,7 @@ void EditorHelp::_help_callback(const String &p_topic) { } static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { - DocData *doc = EditorHelp::get_doc_data(); + DocTools *doc = EditorHelp::get_doc_data(); String base_path; Ref<Font> doc_font = p_rt->get_theme_font("doc", "EditorFonts"); @@ -1412,7 +1500,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { tag_stack.push_front(tag); } else if (tag == "center") { //align to center - p_rt->push_align(RichTextLabel::ALIGN_CENTER); + p_rt->push_paragraph(RichTextLabel::ALIGN_CENTER, Control::TEXT_DIRECTION_AUTO, ""); pos = brk_end + 1; tag_stack.push_front(tag); } else if (tag == "br") { @@ -1530,9 +1618,9 @@ void EditorHelp::_add_text(const String &p_bbcode) { } void EditorHelp::generate_doc() { - doc = memnew(DocData); + doc = memnew(DocTools); doc->generate(true); - DocData compdoc; + DocTools compdoc; compdoc.load_compressed(_doc_data_compressed, _doc_data_compressed_size, _doc_data_uncompressed_size); doc->merge_from(compdoc); //ensure all is up to date } @@ -1561,6 +1649,12 @@ void EditorHelp::go_to_class(const String &p_class, int p_scroll) { _goto_desc(p_class, p_scroll); } +void EditorHelp::update_doc() { + ERR_FAIL_COND(!doc->class_list.has(edited_class)); + ERR_FAIL_COND(!doc->class_list[edited_class].is_script_doc); + _update_doc(); +} + Vector<Pair<String, int>> EditorHelp::get_sections() { Vector<Pair<String, int>> sections; @@ -1598,7 +1692,6 @@ void EditorHelp::set_scroll(int p_scroll) { void EditorHelp::_bind_methods() { ClassDB::bind_method("_class_list_select", &EditorHelp::_class_list_select); ClassDB::bind_method("_request_help", &EditorHelp::_request_help); - ClassDB::bind_method("_unhandled_key_input", &EditorHelp::_unhandled_key_input); ClassDB::bind_method("_search", &EditorHelp::_search); ClassDB::bind_method("_help_callback", &EditorHelp::_help_callback); diff --git a/editor/editor_help.h b/editor/editor_help.h index 7c3edeb299..737f841d30 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -32,7 +32,7 @@ #define EDITOR_HELP_H #include "editor/code_editor.h" -#include "editor/doc_data.h" +#include "editor/doc_tools.h" #include "editor/editor_plugin.h" #include "scene/gui/margin_container.h" #include "scene/gui/menu_button.h" @@ -91,7 +91,6 @@ class EditorHelp : public VBoxContainer { GDCLASS(EditorHelp, VBoxContainer); enum Page { - PAGE_CLASS_LIST, PAGE_CLASS_DESC, PAGE_CLASS_PREV, @@ -119,7 +118,7 @@ class EditorHelp : public VBoxContainer { RichTextLabel *class_desc; HSplitContainer *h_split; - static DocData *doc; + static DocTools *doc; ConfirmationDialog *search_dialog; LineEdit *search; @@ -159,8 +158,6 @@ class EditorHelp : public VBoxContainer { void _request_help(const String &p_string); void _search(bool p_search_previous = false); - void _unhandled_key_input(const Ref<InputEvent> &p_ev); - String _fix_constant(const String &p_constant) const; protected: @@ -169,10 +166,11 @@ protected: public: static void generate_doc(); - static DocData *get_doc_data() { return doc; } + static DocTools *get_doc_data() { return doc; } void go_to_help(const String &p_help); void go_to_class(const String &p_class, int p_scroll = 0); + void update_doc(); Vector<Pair<String, int>> get_sections(); void scroll_to_section(int p_section_index); diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp index 4392538737..5e784ba051 100644 --- a/editor/editor_help_search.cpp +++ b/editor/editor_help_search.cpp @@ -105,7 +105,7 @@ void EditorHelpSearch::_notification(int p_what) { case NOTIFICATION_VISIBILITY_CHANGED: { if (!is_visible()) { results_tree->call_deferred("clear"); // Wait for the Tree's mouse event propagation. - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "search_help", Rect2(get_position(), get_size())); } } break; @@ -130,7 +130,7 @@ void EditorHelpSearch::_notification(int p_what) { old_search = false; } - get_ok()->set_disabled(!results_tree->get_selected()); + get_ok_button()->set_disabled(!results_tree->get_selected()); search = Ref<Runner>(); set_process(false); @@ -182,8 +182,8 @@ EditorHelpSearch::EditorHelpSearch() { set_title(TTR("Search Help")); - get_ok()->set_disabled(true); - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_disabled(true); + get_ok_button()->set_text(TTR("Open")); // Split search and results area. VBoxContainer *vbox = memnew(VBoxContainer); @@ -244,7 +244,7 @@ EditorHelpSearch::EditorHelpSearch() { results_tree->set_hide_root(true); results_tree->set_select_mode(Tree::SELECT_ROW); results_tree->connect("item_activated", callable_mp(this, &EditorHelpSearch::_confirmed)); - results_tree->connect("item_selected", callable_mp((BaseButton *)get_ok(), &BaseButton::set_disabled), varray(false)); + results_tree->connect("item_selected", callable_mp((BaseButton *)get_ok_button(), &BaseButton::set_disabled), varray(false)); vbox->add_child(results_tree, true); } @@ -412,8 +412,20 @@ bool EditorHelpSearch::Runner::_phase_member_items() { ClassMatch &match = iterator_match->value(); TreeItem *parent = (search_flags & SEARCH_SHOW_HIERARCHY) ? class_items[match.doc->name] : root_item; + bool constructor_created = false; for (int i = 0; i < match.methods.size(); i++) { - _create_method_item(parent, match.doc, match.methods[i]); + String text = match.methods[i]->name; + if (!constructor_created) { + if (match.doc->name == match.methods[i]->name) { + text += " " + TTR("(constructors)"); + constructor_created = true; + } + } else { + if (match.doc->name == match.methods[i]->name) { + continue; + } + } + _create_method_item(parent, match.doc, text, match.methods[i]); } for (int i = 0; i < match.signals.size(); i++) { _create_signal_item(parent, match.doc, match.signals[i]); @@ -508,7 +520,7 @@ TreeItem *EditorHelpSearch::Runner::_create_class_item(TreeItem *p_parent, const return item; } -TreeItem *EditorHelpSearch::Runner::_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc) { +TreeItem *EditorHelpSearch::Runner::_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const String &p_text, const DocData::MethodDoc *p_doc) { String tooltip = p_doc->return_type + " " + p_class_doc->name + "." + p_doc->name + "("; for (int i = 0; i < p_doc->arguments.size(); i++) { const DocData::ArgumentDoc &arg = p_doc->arguments[i]; @@ -521,7 +533,7 @@ TreeItem *EditorHelpSearch::Runner::_create_method_item(TreeItem *p_parent, cons } } tooltip += ")"; - return _create_member_item(p_parent, p_class_doc->name, "MemberMethod", p_doc->name, TTRC("Method"), "method", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberMethod", p_doc->name, p_text, TTRC("Method"), "method", tooltip); } TreeItem *EditorHelpSearch::Runner::_create_signal_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc) { @@ -537,32 +549,32 @@ TreeItem *EditorHelpSearch::Runner::_create_signal_item(TreeItem *p_parent, cons } } tooltip += ")"; - return _create_member_item(p_parent, p_class_doc->name, "MemberSignal", p_doc->name, TTRC("Signal"), "signal", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberSignal", p_doc->name, p_doc->name, TTRC("Signal"), "signal", tooltip); } TreeItem *EditorHelpSearch::Runner::_create_constant_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::ConstantDoc *p_doc) { String tooltip = p_class_doc->name + "." + p_doc->name; - return _create_member_item(p_parent, p_class_doc->name, "MemberConstant", p_doc->name, TTRC("Constant"), "constant", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberConstant", p_doc->name, p_doc->name, TTRC("Constant"), "constant", tooltip); } TreeItem *EditorHelpSearch::Runner::_create_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc) { String tooltip = p_doc->type + " " + p_class_doc->name + "." + p_doc->name; tooltip += "\n " + p_class_doc->name + "." + p_doc->setter + "(value) setter"; tooltip += "\n " + p_class_doc->name + "." + p_doc->getter + "() getter"; - return _create_member_item(p_parent, p_class_doc->name, "MemberProperty", p_doc->name, TTRC("Property"), "property", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberProperty", p_doc->name, p_doc->name, TTRC("Property"), "property", tooltip); } TreeItem *EditorHelpSearch::Runner::_create_theme_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc) { String tooltip = p_doc->type + " " + p_class_doc->name + "." + p_doc->name; - return _create_member_item(p_parent, p_class_doc->name, "MemberTheme", p_doc->name, TTRC("Theme Property"), "theme_item", tooltip); + return _create_member_item(p_parent, p_class_doc->name, "MemberTheme", p_doc->name, p_doc->name, TTRC("Theme Property"), "theme_item", tooltip); } -TreeItem *EditorHelpSearch::Runner::_create_member_item(TreeItem *p_parent, const String &p_class_name, const String &p_icon, const String &p_name, const String &p_type, const String &p_metatype, const String &p_tooltip) { +TreeItem *EditorHelpSearch::Runner::_create_member_item(TreeItem *p_parent, const String &p_class_name, const String &p_icon, const String &p_name, const String &p_text, const String &p_type, const String &p_metatype, const String &p_tooltip) { Ref<Texture2D> icon; String text; if (search_flags & SEARCH_SHOW_HIERARCHY) { icon = ui_service->get_theme_icon(p_icon, "EditorIcons"); - text = p_name; + text = p_text; } else { icon = ui_service->get_theme_icon(p_icon, "EditorIcons"); /*// In flat mode, show the class icon. @@ -570,7 +582,7 @@ if (ui_service->has_icon(p_class_name, "EditorIcons")) icon = ui_service->get_icon(p_class_name, "EditorIcons"); else if (ClassDB::is_parent_class(p_class_name, "Object")) icon = ui_service->get_icon("Object", "EditorIcons");*/ - text = p_class_name + "." + p_name; + text = p_class_name + "." + p_text; } TreeItem *item = results_tree->create_item(p_parent); diff --git a/editor/editor_help_search.h b/editor/editor_help_search.h index f1aab6cc81..d94066308a 100644 --- a/editor/editor_help_search.h +++ b/editor/editor_help_search.h @@ -98,7 +98,7 @@ class EditorHelpSearch::Runner : public Reference { struct ClassMatch { DocData::ClassDoc *doc; - bool name; + bool name = false; Vector<DocData::MethodDoc *> methods; Vector<DocData::MethodDoc *> signals; Vector<DocData::ConstantDoc *> constants; @@ -118,12 +118,12 @@ class EditorHelpSearch::Runner : public Reference { Ref<Texture2D> empty_icon; Color disabled_color; - Map<String, DocData::ClassDoc>::Element *iterator_doc; + Map<String, DocData::ClassDoc>::Element *iterator_doc = nullptr; Map<String, ClassMatch> matches; - Map<String, ClassMatch>::Element *iterator_match; - TreeItem *root_item; + Map<String, ClassMatch>::Element *iterator_match = nullptr; + TreeItem *root_item = nullptr; Map<String, TreeItem *> class_items; - TreeItem *matched_item; + TreeItem *matched_item = nullptr; bool _is_class_disabled_by_feature_profile(const StringName &p_class); @@ -140,12 +140,12 @@ class EditorHelpSearch::Runner : public Reference { void _match_item(TreeItem *p_item, const String &p_text); TreeItem *_create_class_hierarchy(const ClassMatch &p_match); TreeItem *_create_class_item(TreeItem *p_parent, const DocData::ClassDoc *p_doc, bool p_gray); - TreeItem *_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc); + TreeItem *_create_method_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const String &p_text, const DocData::MethodDoc *p_doc); TreeItem *_create_signal_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::MethodDoc *p_doc); TreeItem *_create_constant_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::ConstantDoc *p_doc); TreeItem *_create_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc); TreeItem *_create_theme_property_item(TreeItem *p_parent, const DocData::ClassDoc *p_class_doc, const DocData::PropertyDoc *p_doc); - TreeItem *_create_member_item(TreeItem *p_parent, const String &p_class_name, const String &p_icon, const String &p_name, const String &p_type, const String &p_metatype, const String &p_tooltip); + TreeItem *_create_member_item(TreeItem *p_parent, const String &p_class_name, const String &p_icon, const String &p_name, const String &p_text, const String &p_type, const String &p_metatype, const String &p_tooltip); public: bool work(uint64_t slot = 100000); diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 1837b23a0b..dd136c046f 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -32,6 +32,7 @@ #include "array_property_edit.h" #include "dictionary_property_edit.h" +#include "editor/doc_tools.h" #include "editor_feature_profile.h" #include "editor_node.h" #include "editor_scale.h" @@ -41,7 +42,8 @@ Size2 EditorProperty::get_minimum_size() const { Size2 ms; Ref<Font> font = get_theme_font("font", "Tree"); - ms.height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Tree"); + ms.height = font->get_height(font_size); for (int i = 0; i < get_child_count(); i++) { Control *c = Object::cast_to<Control>(get_child(i)); @@ -108,7 +110,8 @@ void EditorProperty::_notification(int p_what) { { int child_room = size.width * (1.0 - split_ratio); Ref<Font> font = get_theme_font("font", "Tree"); - int height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Tree"); + int height = font->get_height(font_size); bool no_children = true; //compute room needed @@ -135,7 +138,11 @@ void EditorProperty::_notification(int p_what) { rect = Rect2(size.width - 1, 0, 1, height); } else { text_size = MAX(0, size.width - (child_room + 4 * EDSCALE)); - rect = Rect2(size.width - child_room, 0, child_room, height); + if (is_layout_rtl()) { + rect = Rect2(1, 0, child_room, height); + } else { + rect = Rect2(size.width - child_room, 0, child_room, height); + } } if (bottom_editor) { @@ -154,6 +161,9 @@ void EditorProperty::_notification(int p_what) { } rect.size.x -= key->get_width() + get_theme_constant("hseparator", "Tree"); + if (is_layout_rtl()) { + rect.position.x += key->get_width() + get_theme_constant("hseparator", "Tree"); + } if (no_children) { text_size -= key->get_width() + 4 * EDSCALE; @@ -167,6 +177,10 @@ void EditorProperty::_notification(int p_what) { rect.size.x -= close->get_width() + get_theme_constant("hseparator", "Tree"); + if (is_layout_rtl()) { + rect.position.x += close->get_width() + get_theme_constant("hseparator", "Tree"); + } + if (no_children) { text_size -= close->get_width() + 4 * EDSCALE; } @@ -200,7 +214,9 @@ void EditorProperty::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); Color dark_color = get_theme_color("dark_color_2", "Editor"); + bool rtl = is_layout_rtl(); Size2 size = get_size(); if (bottom_editor) { @@ -249,7 +265,11 @@ void EditorProperty::_notification(int p_what) { color2.b *= 1.2; } check_rect = Rect2(ofs, ((size.height - checkbox->get_height()) / 2), checkbox->get_width(), checkbox->get_height()); - draw_texture(checkbox, check_rect.position, color2); + if (rtl) { + draw_texture(checkbox, Vector2(size.width - check_rect.position.x - checkbox->get_width(), check_rect.position.y), color2); + } else { + draw_texture(checkbox, check_rect.position, color2); + } ofs += get_theme_constant("hseparator", "Tree") + checkbox->get_width() + get_theme_constant("hseparation", "CheckBox"); text_limit -= ofs; } else { @@ -267,14 +287,21 @@ void EditorProperty::_notification(int p_what) { color2.g *= 1.2; color2.b *= 1.2; } - - draw_texture(reload_icon, revert_rect.position, color2); + if (rtl) { + draw_texture(reload_icon, Vector2(size.width - revert_rect.position.x - reload_icon->get_width(), revert_rect.position.y), color2); + } else { + draw_texture(reload_icon, revert_rect.position, color2); + } } else { revert_rect = Rect2(); } - int v_ofs = (size.height - font->get_height()) / 2; - draw_string(font, Point2(ofs, v_ofs + font->get_ascent()), label, color, text_limit); + int v_ofs = (size.height - font->get_height(font_size)) / 2; + if (rtl) { + draw_string(font, Point2(size.width - ofs - text_limit, v_ofs + font->get_ascent(font_size)), label, HALIGN_RIGHT, text_limit, font_size, color); + } else { + draw_string(font, Point2(ofs, v_ofs + font->get_ascent(font_size)), label, HALIGN_LEFT, text_limit, font_size, color); + } if (keying) { Ref<Texture2D> key; @@ -294,7 +321,12 @@ void EditorProperty::_notification(int p_what) { color2.b *= 1.2; } keying_rect = Rect2(ofs, ((size.height - key->get_height()) / 2), key->get_width(), key->get_height()); - draw_texture(key, keying_rect.position, color2); + if (rtl) { + draw_texture(key, Vector2(size.width - keying_rect.position.x - key->get_width(), keying_rect.position.y), color2); + } else { + draw_texture(key, keying_rect.position, color2); + } + } else { keying_rect = Rect2(); } @@ -313,7 +345,11 @@ void EditorProperty::_notification(int p_what) { color2.b *= 1.2; } delete_rect = Rect2(ofs, ((size.height - close->get_height()) / 2), close->get_width(), close->get_height()); - draw_texture(close, delete_rect.position, color2); + if (rtl) { + draw_texture(close, Vector2(size.width - delete_rect.position.x - close->get_width(), delete_rect.position.y), color2); + } else { + draw_texture(close, delete_rect.position, color2); + } } else { delete_rect = Rect2(); } @@ -648,27 +684,31 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouse> me = p_event; if (me.is_valid()) { + Vector2 mpos = me->get_position(); + if (is_layout_rtl()) { + mpos.x = get_size().x - mpos.x; + } bool button_left = me->get_button_mask() & BUTTON_MASK_LEFT; - bool new_keying_hover = keying_rect.has_point(me->get_position()) && !button_left; + bool new_keying_hover = keying_rect.has_point(mpos) && !button_left; if (new_keying_hover != keying_hover) { keying_hover = new_keying_hover; update(); } - bool new_delete_hover = delete_rect.has_point(me->get_position()) && !button_left; + bool new_delete_hover = delete_rect.has_point(mpos) && !button_left; if (new_delete_hover != delete_hover) { delete_hover = new_delete_hover; update(); } - bool new_revert_hover = revert_rect.has_point(me->get_position()) && !button_left; + bool new_revert_hover = revert_rect.has_point(mpos) && !button_left; if (new_revert_hover != revert_hover) { revert_hover = new_revert_hover; update(); } - bool new_check_hover = check_rect.has_point(me->get_position()) && !button_left; + bool new_check_hover = check_rect.has_point(mpos) && !button_left; if (new_check_hover != check_hover) { check_hover = new_check_hover; update(); @@ -678,13 +718,18 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { + Vector2 mpos = mb->get_position(); + if (is_layout_rtl()) { + mpos.x = get_size().x - mpos.x; + } + if (!selected && selectable) { selected = true; emit_signal("selected", property, -1); update(); } - if (keying_rect.has_point(mb->get_position())) { + if (keying_rect.has_point(mpos)) { emit_signal("property_keyed", property, use_keying_next()); if (use_keying_next()) { @@ -704,11 +749,11 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { call_deferred("update_property"); } } - if (delete_rect.has_point(mb->get_position())) { + if (delete_rect.has_point(mpos)) { emit_signal("property_deleted", property); } - if (revert_rect.has_point(mb->get_position())) { + if (revert_rect.has_point(mpos)) { Variant vorig; Node *node = Object::cast_to<Node>(object); @@ -744,7 +789,7 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { return; } } - if (check_rect.has_point(mb->get_position())) { + if (check_rect.has_point(mpos)) { checked = !checked; update(); emit_signal("property_checked", property, checked); @@ -918,6 +963,7 @@ EditorProperty::EditorProperty() { selected_focusable = -1; label_reference = nullptr; bottom_editor = nullptr; + delete_hover = false; } //////////////////////////////////////////////// @@ -1024,10 +1070,11 @@ void EditorInspectorCategory::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { draw_rect(Rect2(Vector2(), get_size()), bg_color); Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); int hs = get_theme_constant("hseparation", "Tree"); - int w = font->get_string_size(label).width; + int w = font->get_string_size(label, font_size).width; if (icon.is_valid()) { w += hs + icon->get_width(); } @@ -1040,7 +1087,7 @@ void EditorInspectorCategory::_notification(int p_what) { } Color color = get_theme_color("font_color", "Tree"); - draw_string(font, Point2(ofs, font->get_ascent() + (get_size().height - font->get_height()) / 2).floor(), label, color, get_size().width); + draw_string(font, Point2(ofs, font->get_ascent(font_size) + (get_size().height - font->get_height(font_size)) / 2).floor(), label, HALIGN_LEFT, get_size().width, font_size, color); } } @@ -1069,10 +1116,11 @@ Control *EditorInspectorCategory::make_custom_tooltip(const String &p_text) cons Size2 EditorInspectorCategory::get_minimum_size() const { Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); Size2 ms; ms.width = 1; - ms.height = font->get_height(); + ms.height = font->get_height(font_size); if (icon.is_valid()) { ms.height = MAX(icon->get_height(), ms.height); } @@ -1105,19 +1153,24 @@ void EditorInspectorSection::_test_unfold() { void EditorInspectorSection::_notification(int p_what) { if (p_what == NOTIFICATION_SORT_CHILDREN) { Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); Ref<Texture2D> arrow; if (foldable) { if (object->editor_is_section_unfolded(section)) { arrow = get_theme_icon("arrow", "Tree"); } else { - arrow = get_theme_icon("arrow_collapsed", "Tree"); + if (is_layout_rtl()) { + arrow = get_theme_icon("arrow_collapsed_mirrored", "Tree"); + } else { + arrow = get_theme_icon("arrow_collapsed", "Tree"); + } } } Size2 size = get_size(); Point2 offset; - offset.y = font->get_height(); + offset.y = font->get_height(font_size); if (arrow.is_valid()) { offset.y = MAX(offset.y, arrow->get_height()); } @@ -1148,18 +1201,20 @@ void EditorInspectorSection::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { Ref<Texture2D> arrow; + bool rtl = is_layout_rtl(); if (foldable) { - if (object->editor_is_section_unfolded(section)) { - arrow = get_theme_icon("arrow", "Tree"); + if (rtl) { + arrow = get_theme_icon("arrow_collapsed_mirrored", "Tree"); } else { arrow = get_theme_icon("arrow_collapsed", "Tree"); } } Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); - int h = font->get_height(); + int h = font->get_height(font_size); if (arrow.is_valid()) { h = MAX(h, arrow->get_height()); } @@ -1169,10 +1224,15 @@ void EditorInspectorSection::_notification(int p_what) { const int arrow_margin = 3; Color color = get_theme_color("font_color", "Tree"); - draw_string(font, Point2(Math::round((16 + arrow_margin) * EDSCALE), font->get_ascent() + (h - font->get_height()) / 2).floor(), label, color, get_size().width); + float text_width = get_size().width - Math::round((16 + arrow_margin) * EDSCALE); + draw_string(font, Point2(rtl ? 0 : Math::round((16 + arrow_margin) * EDSCALE), font->get_ascent(font_size) + (h - font->get_height(font_size)) / 2).floor(), label, rtl ? HALIGN_RIGHT : HALIGN_LEFT, text_width, font_size, color); if (arrow.is_valid()) { - draw_texture(arrow, Point2(Math::round(arrow_margin * EDSCALE), (h - arrow->get_height()) / 2).floor()); + if (rtl) { + draw_texture(arrow, Point2(get_size().width - arrow->get_width() - Math::round(arrow_margin * EDSCALE), (h - arrow->get_height()) / 2).floor()); + } else { + draw_texture(arrow, Point2(Math::round(arrow_margin * EDSCALE), (h - arrow->get_height()) / 2).floor()); + } } if (dropping && !vbox->is_visible_in_tree()) { @@ -1237,7 +1297,8 @@ Size2 EditorInspectorSection::get_minimum_size() const { } Ref<Font> font = get_theme_font("font", "Tree"); - ms.height += font->get_height() + get_theme_constant("vseparation", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); + ms.height += font->get_height(font_size) + get_theme_constant("vseparation", "Tree"); ms.width += get_theme_constant("inspector_margin", "Editor"); return ms; @@ -1273,7 +1334,8 @@ void EditorInspectorSection::_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { Ref<Font> font = get_theme_font("font", "Tree"); - if (mb->get_position().y > font->get_height()) { //clicked outside + int font_size = get_theme_font_size("font_size", "Tree"); + if (mb->get_position().y > font->get_height(font_size)) { //clicked outside return; } @@ -1648,7 +1710,7 @@ void EditorInspector::update_tree() { StringName type2 = p.name; if (!class_descr_cache.has(type2)) { String descr; - DocData *dd = EditorHelp::get_doc_data(); + DocTools *dd = EditorHelp::get_doc_data(); Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(type2); if (E) { descr = DTR(E->get().brief_description); @@ -1818,7 +1880,7 @@ void EditorInspector::update_tree() { } if (!found) { - DocData *dd = EditorHelp::get_doc_data(); + DocTools *dd = EditorHelp::get_doc_data(); Map<String, DocData::ClassDoc>::Element *F = dd->class_list.find(classname); while (F && descr == String()) { for (int i = 0; i < F->get().properties.size(); i++) { @@ -2278,7 +2340,7 @@ void EditorInspector::_property_checked(const String &p_path, bool p_checked) { for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) { if (E->get().name == p_path) { Callable::CallError ce; - to_create = Variant::construct(E->get().type, nullptr, 0, ce); + Variant::construct(E->get().type, to_create, nullptr, 0, ce); break; } } diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h index 36b80a7dd4..d901bb4ecf 100644 --- a/editor/editor_inspector.h +++ b/editor/editor_inspector.h @@ -69,13 +69,13 @@ private: Rect2 bottom_child_rect; Rect2 keying_rect; - bool keying_hover; + bool keying_hover = false; Rect2 revert_rect; - bool revert_hover; + bool revert_hover = false; Rect2 check_rect; - bool check_hover; + bool check_hover = false; Rect2 delete_rect; - bool delete_hover; + bool delete_hover = false; bool can_revert; @@ -176,7 +176,7 @@ class EditorInspectorPlugin : public Reference { friend class EditorInspector; struct AddedEditor { - Control *property_editor; + Control *property_editor = nullptr; Vector<String> properties; String label; }; diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index 6fbafc7ff3..371cabfe3d 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -35,7 +35,7 @@ #include "editor_node.h" #include "editor_scale.h" #include "scene/gui/center_container.h" -#include "scene/resources/dynamic_font.h" +#include "scene/resources/font.h" void EditorLog::_error_handler(void *p_self, const char *p_func, const char *p_file, int p_line, const char *p_error, const char *p_errorexp, ErrorHandlerType p_type) { EditorLog *self = (EditorLog *)p_self; @@ -61,12 +61,14 @@ void EditorLog::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { //button->set_icon(get_icon("Console","EditorIcons")); log->add_theme_font_override("normal_font", get_theme_font("output_source", "EditorFonts")); + log->add_theme_font_size_override("normal_font_size", get_theme_font_size("output_source_size", "EditorFonts")); log->add_theme_color_override("selection_color", get_theme_color("accent_color", "Editor") * Color(1, 1, 1, 0.4)); } else if (p_what == NOTIFICATION_THEME_CHANGED) { - Ref<DynamicFont> df_output_code = get_theme_font("output_source", "EditorFonts"); + Ref<Font> df_output_code = get_theme_font("output_source", "EditorFonts"); if (df_output_code.is_valid()) { if (log != nullptr) { log->add_theme_font_override("normal_font", get_theme_font("output_source", "EditorFonts")); + log->add_theme_font_size_override("normal_font_size", get_theme_font_size("output_source_size", "EditorFonts")); log->add_theme_color_override("selection_color", get_theme_color("accent_color", "Editor") * Color(1, 1, 1, 0.4)); } } @@ -160,12 +162,14 @@ EditorLog::EditorLog() { hb->add_child(copybutton); copybutton->set_text(TTR("Copy")); copybutton->set_shortcut(ED_SHORTCUT("editor/copy_output", TTR("Copy Selection"), KEY_MASK_CMD | KEY_C)); + copybutton->set_shortcut_context(this); copybutton->connect("pressed", callable_mp(this, &EditorLog::_copy_request)); clearbutton = memnew(Button); hb->add_child(clearbutton); clearbutton->set_text(TTR("Clear")); clearbutton->set_shortcut(ED_SHORTCUT("editor/clear_output", TTR("Clear Output"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_K)); + clearbutton->set_shortcut_context(this); clearbutton->connect("pressed", callable_mp(this, &EditorLog::_clear_request)); log = memnew(RichTextLabel); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index d0d99e071a..a8dc14427d 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -57,8 +57,10 @@ #include "scene/gui/split_container.h" #include "scene/gui/tab_container.h" #include "scene/gui/tabs.h" -#include "scene/gui/texture_progress.h" +#include "scene/gui/texture_progress_bar.h" +#include "scene/main/window.h" #include "scene/resources/packed_scene.h" +#include "servers/display_server.h" #include "servers/navigation_server_2d.h" #include "servers/navigation_server_3d.h" #include "servers/physics_server_2d.h" @@ -125,6 +127,7 @@ #include "editor/plugins/debugger_editor_plugin.h" #include "editor/plugins/editor_debugger_plugin.h" #include "editor/plugins/editor_preview_plugins.h" +#include "editor/plugins/font_editor_plugin.h" #include "editor/plugins/gi_probe_editor_plugin.h" #include "editor/plugins/gpu_particles_2d_editor_plugin.h" #include "editor/plugins/gpu_particles_3d_editor_plugin.h" @@ -140,6 +143,7 @@ #include "editor/plugins/multimesh_editor_plugin.h" #include "editor/plugins/navigation_polygon_editor_plugin.h" #include "editor/plugins/node_3d_editor_plugin.h" +#include "editor/plugins/ot_features_plugin.h" #include "editor/plugins/packed_scene_translation_parser_plugin.h" #include "editor/plugins/path_2d_editor_plugin.h" #include "editor/plugins/path_3d_editor_plugin.h" @@ -170,13 +174,10 @@ #include "editor/progress_dialog.h" #include "editor/project_export.h" #include "editor/project_settings_editor.h" -#include "editor/pvrtc_compress.h" #include "editor/quick_open.h" #include "editor/register_exporters.h" -#include "editor/run_settings_dialog.h" #include "editor/settings_config_dialog.h" -#include "scene/main/window.h" -#include "servers/display_server.h" + #include <stdio.h> #include <stdlib.h> @@ -336,7 +337,11 @@ void EditorNode::_update_scene_tabs() { if (scene_tabs->get_offset_buttons_visible()) { // move add button to fixed position on the tabbar if (scene_tab_add->get_parent() == scene_tabs) { - scene_tab_add->set_position(Point2(0, 0)); + if (scene_tabs->is_layout_rtl()) { + scene_tab_add->set_position(Point2(tabbar_container->get_size().x - scene_tab_add->get_size().x, 0)); + } else { + scene_tab_add->set_position(Point2(0, 0)); + } scene_tabs->remove_child(scene_tab_add); tabbar_container->add_child(scene_tab_add); tabbar_container->move_child(scene_tab_add, 1); @@ -351,7 +356,11 @@ void EditorNode::_update_scene_tabs() { if (scene_tabs->get_tab_count() != 0) { last_tab = scene_tabs->get_tab_rect(scene_tabs->get_tab_count() - 1); } - scene_tab_add->set_position(Point2(last_tab.get_position().x + last_tab.get_size().x + 3, last_tab.get_position().y)); + if (scene_tabs->is_layout_rtl()) { + scene_tab_add->set_position(Point2(last_tab.get_position().x - scene_tab_add->get_size().x - 3, last_tab.get_position().y)); + } else { + scene_tab_add->set_position(Point2(last_tab.get_position().x + last_tab.get_size().x + 3, last_tab.get_position().y)); + } } } @@ -511,6 +520,14 @@ void EditorNode::_notification(int p_what) { scene_root->set_snap_2d_transforms_to_pixel(snap_2d_transforms); bool snap_2d_vertices = GLOBAL_GET("rendering/quality/2d/snap_2d_vertices_to_pixel"); scene_root->set_snap_2d_vertices_to_pixel(snap_2d_vertices); + + Viewport::SDFOversize sdf_oversize = Viewport::SDFOversize(int(GLOBAL_GET("rendering/quality/2d_sdf/oversize"))); + scene_root->set_sdf_oversize(sdf_oversize); + Viewport::SDFScale sdf_scale = Viewport::SDFScale(int(GLOBAL_GET("rendering/quality/2d_sdf/scale"))); + scene_root->set_sdf_scale(sdf_scale); + + float lod_threshold = GLOBAL_GET("rendering/quality/mesh_lod/threshold_pixels"); + scene_root->set_lod_threshold(lod_threshold); } ResourceImporterTexture::get_singleton()->update_imports(); @@ -647,8 +664,13 @@ void EditorNode::_notification(int p_what) { bottom_panel_raise->set_icon(gui_base->get_theme_icon("ExpandBottomDock", "EditorIcons")); // clear_button->set_icon(gui_base->get_icon("Close", "EditorIcons")); don't have access to that node. needs to become a class property - dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); - dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); + if (gui_base->is_layout_rtl()) { + dock_tab_move_left->set_icon(theme->get_icon("Forward", "EditorIcons")); + dock_tab_move_right->set_icon(theme->get_icon("Back", "EditorIcons")); + } else { + dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); + dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); + } PopupMenu *p = help_menu->get_popup(); p->set_item_icon(p->get_item_index(HELP_SEARCH), gui_base->get_theme_icon("HelpSearch", "EditorIcons")); @@ -760,15 +782,18 @@ void EditorNode::_fs_changed() { preset_name); } else { Ref<EditorExportPlatform> platform = preset->get_platform(); - if (platform.is_null()) { + const String export_path = export_defer.path.empty() ? preset->get_export_path() : export_defer.path; + if (export_path.empty()) { + export_error = vformat("Export preset '%s' doesn't have a default export path, and none was specified.", preset_name); + } else if (platform.is_null()) { export_error = vformat("Export preset '%s' doesn't have a matching platform.", preset_name); } else { Error err = OK; if (export_defer.pack_only) { // Only export .pck or .zip data pack. - if (export_defer.path.ends_with(".zip")) { - err = platform->export_zip(preset, export_defer.debug, export_defer.path); - } else if (export_defer.path.ends_with(".pck")) { - err = platform->export_pack(preset, export_defer.debug, export_defer.path); + if (export_path.ends_with(".zip")) { + err = platform->export_zip(preset, export_defer.debug, export_path); + } else if (export_path.ends_with(".pck")) { + err = platform->export_pack(preset, export_defer.debug, export_path); } } else { // Normal project export. String config_error; @@ -777,7 +802,7 @@ void EditorNode::_fs_changed() { ERR_PRINT(vformat("Cannot export project with preset '%s' due to configuration errors:\n%s", preset_name, config_error)); err = missing_templates ? ERR_FILE_NOT_FOUND : ERR_UNCONFIGURED; } else { - err = platform->export_project(preset, export_defer.debug, export_defer.path); + err = platform->export_project(preset, export_defer.debug, export_path); } } switch (err) { @@ -787,7 +812,7 @@ void EditorNode::_fs_changed() { export_error = vformat("Project export failed for preset '%s', the export template appears to be missing.", preset_name); break; case ERR_FILE_BAD_PATH: - export_error = vformat("Project export failed for preset '%s', the target path '%s' appears to be invalid.", preset_name, export_defer.path); + export_error = vformat("Project export failed for preset '%s', the target path '%s' appears to be invalid.", preset_name, export_path); break; default: export_error = vformat("Project export failed with error code %d for preset '%s'.", (int)err, preset_name); @@ -1394,6 +1419,17 @@ int EditorNode::_save_external_resources() { return saved; } +static void _reset_animation_players(Node *p_node, List<Ref<AnimatedValuesBackup>> *r_anim_backups) { + for (int i = 0; i < p_node->get_child_count(); i++) { + AnimationPlayer *player = Object::cast_to<AnimationPlayer>(p_node->get_child(i)); + if (player && player->is_reset_on_save_enabled() && player->can_apply_reset()) { + Ref<AnimatedValuesBackup> old_values = player->apply_reset(); + r_anim_backups->push_back(old_values); + } + _reset_animation_players(p_node->get_child(i), r_anim_backups); + } +} + void EditorNode::_save_scene(String p_file, int idx) { Node *scene = editor_data.get_edited_scene_root(idx); @@ -1408,6 +1444,8 @@ void EditorNode::_save_scene(String p_file, int idx) { } editor_data.apply_changes_in_editors(); + List<Ref<AnimatedValuesBackup>> anim_backups; + _reset_animation_players(scene, &anim_backups); _save_default_environment(); _set_scene_metadata(p_file, idx); @@ -1455,6 +1493,11 @@ void EditorNode::_save_scene(String p_file, int idx) { _save_external_resources(); editor_data.save_editor_external_data(); + + for (List<Ref<AnimatedValuesBackup>>::Element *E = anim_backups.front(); E; E = E->next()) { + E->get()->restore(); + } + if (err == OK) { scene->set_filename(ProjectSettings::get_singleton()->localize_path(p_file)); if (idx < 0 || idx == editor_data.get_edited_scene()) { @@ -1679,7 +1722,7 @@ void EditorNode::_dialog_action(String p_file) { if (err == ERR_FILE_CANT_OPEN || err == ERR_FILE_NOT_FOUND) { config.instance(); // new config } else if (err != OK) { - show_warning(TTR("Error trying to save layout!")); + show_warning(TTR("An error occurred while trying to save the editor layout.\nMake sure the editor's user data path is writable.")); return; } @@ -1691,7 +1734,7 @@ void EditorNode::_dialog_action(String p_file) { _update_layouts_menu(); if (p_file == "Default") { - show_warning(TTR("Default editor layout overridden.")); + show_warning(TTR("Default editor layout overridden.\nTo restore the Default layout to its base settings, use the Delete Layout option and delete the Default layout.")); } } break; @@ -1722,7 +1765,7 @@ void EditorNode::_dialog_action(String p_file) { _update_layouts_menu(); if (p_file == "Default") { - show_warning(TTR("Restored default layout to base settings.")); + show_warning(TTR("Restored the Default layout to its base settings.")); } } break; @@ -2249,7 +2292,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (unsaved_cache || p_option == FILE_CLOSE_ALL_AND_QUIT || p_option == FILE_CLOSE_ALL_AND_RUN_PROJECT_MANAGER) { String scene_filename = editor_data.get_edited_scene_root(tab_closing)->get_filename(); - save_confirmation->get_ok()->set_text(TTR("Save & Close")); + save_confirmation->get_ok_button()->set_text(TTR("Save & Close")); save_confirmation->set_text(vformat(TTR("Save changes to '%s' before closing?"), scene_filename != "" ? scene_filename : "unsaved scene")); save_confirmation->popup_centered(); break; @@ -2340,8 +2383,8 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } break; case FILE_SAVE_BEFORE_RUN: { if (!p_confirmed) { - confirmation->get_cancel()->set_text(TTR("No")); - confirmation->get_ok()->set_text(TTR("Yes")); + confirmation->get_cancel_button()->set_text(TTR("No")); + confirmation->get_ok_button()->set_text(TTR("Yes")); confirmation->set_text(TTR("This scene has never been saved. Save before running?")); confirmation->popup_centered(); break; @@ -2405,7 +2448,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case FILE_EXTERNAL_OPEN_SCENE: { if (unsaved_cache && !p_confirmed) { - confirmation->get_ok()->set_text(TTR("Open")); + confirmation->get_ok_button()->set_text(TTR("Open")); confirmation->set_text(TTR("Current scene not saved. Open anyway?")); confirmation->popup_centered(); break; @@ -2461,7 +2504,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } if (unsaved_cache && !p_confirmed) { - confirmation->get_ok()->set_text(TTR("Reload Saved Scene")); + confirmation->get_ok_button()->set_text(TTR("Reload Saved Scene")); confirmation->set_text( TTR("The current scene has unsaved changes.\nReload the saved scene anyway? This action cannot be undone.")); confirmation->popup_centered(); @@ -2534,9 +2577,6 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { run_play_current(); } break; - case RUN_SCENE_SETTINGS: { - run_settings_dialog->popup_run_settings(); - } break; case RUN_SETTINGS: { project_settings->popup_project_settings(); } break; @@ -2568,7 +2608,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { if (_next_unsaved_scene(!save_each) == -1) { bool confirm = EDITOR_GET("interface/editor/quit_confirmation"); if (confirm) { - confirmation->get_ok()->set_text(p_option == FILE_QUIT ? TTR("Quit") : TTR("Yes")); + confirmation->get_ok_button()->set_text(p_option == FILE_QUIT ? TTR("Quit") : TTR("Yes")); confirmation->set_text(p_option == FILE_QUIT ? TTR("Exit the editor?") : TTR("Open Project Manager?")); confirmation->popup_centered(); } else { @@ -2586,7 +2626,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { i = _next_unsaved_scene(true, ++i); } - save_confirmation->get_ok()->set_text(TTR("Save & Quit")); + save_confirmation->get_ok_button()->set_text(TTR("Save & Quit")); save_confirmation->set_text((p_option == FILE_QUIT ? TTR("Save changes to the following scene(s) before quitting?") : TTR("Save changes the following scene(s) before opening Project Manager?")) + unsaved_scenes); save_confirmation->popup_centered(); } @@ -2705,10 +2745,14 @@ void EditorNode::_screenshot(bool p_use_utc) { } void EditorNode::_save_screenshot(NodePath p_path) { - SubViewport *viewport = Object::cast_to<SubViewport>(EditorInterface::get_singleton()->get_editor_viewport()->get_viewport()); - viewport->set_clear_mode(SubViewport::CLEAR_MODE_ONLY_NEXT_FRAME); - Ref<Image> img = viewport->get_texture()->get_data(); - viewport->set_clear_mode(SubViewport::CLEAR_MODE_ALWAYS); + Control *editor_viewport = EditorInterface::get_singleton()->get_editor_viewport(); + ERR_FAIL_COND_MSG(!editor_viewport, "Cannot get editor viewport."); + Viewport *viewport = editor_viewport->get_viewport(); + ERR_FAIL_COND_MSG(!viewport, "Cannot get editor viewport."); + Ref<ViewportTexture> texture = viewport->get_texture(); + ERR_FAIL_COND_MSG(texture.is_null(), "Cannot get editor viewport texture."); + Ref<Image> img = texture->get_data(); + ERR_FAIL_COND_MSG(img.is_null(), "Cannot get editor viewport texture image."); Error error = img->save_png(p_path); ERR_FAIL_COND_MSG(error != OK, "Cannot save screenshot to file '" + p_path + "'."); } @@ -2720,16 +2764,13 @@ void EditorNode::_tool_menu_option(int p_idx) { } break; case TOOLS_CUSTOM: { if (tool_menu->get_item_submenu(p_idx) == "") { - Array params = tool_menu->get_item_metadata(p_idx); - - Object *handler = ObjectDB::get_instance(params[0]); - String callback = params[1]; - Variant *ud = ¶ms[2]; + Callable callback = tool_menu->get_item_metadata(p_idx); Callable::CallError ce; + Variant result; + callback.call(nullptr, 0, result, ce); - handler->call(callback, (const Variant **)&ud, 1, ce); if (ce.error != Callable::CallError::CALL_OK) { - String err = Variant::get_call_error_text(handler, callback, (const Variant **)&ud, 1, ce); + String err = Variant::get_callable_error_text(callback, nullptr, 0, ce); ERR_PRINT("Error calling function from tool menu: " + err); } } // else it's a submenu so don't do anything. @@ -3631,6 +3672,9 @@ void EditorNode::register_editor_types() { ClassDB::register_class<ScriptCreateDialog>(); ClassDB::register_class<EditorFeatureProfile>(); ClassDB::register_class<EditorSpinSlider>(); + ClassDB::register_class<EditorSceneImporterMesh>(); + ClassDB::register_class<EditorSceneImporterMeshNode>(); + ClassDB::register_virtual_class<FileSystemDock>(); // FIXME: Is this stuff obsolete, or should it be ported to new APIs? @@ -3922,7 +3966,7 @@ Error EditorNode::export_preset(const String &p_preset, const String &p_path, bo void EditorNode::show_accept(const String &p_text, const String &p_title) { current_option = -1; - accept->get_ok()->set_text(p_title); + accept->get_ok_button()->set_text(p_title); accept->set_text(p_text); accept->popup_centered(); } @@ -4621,14 +4665,14 @@ void EditorNode::_layout_menu_option(int p_id) { case SETTINGS_LAYOUT_SAVE: { current_option = p_id; layout_dialog->set_title(TTR("Save Layout")); - layout_dialog->get_ok()->set_text(TTR("Save")); + layout_dialog->get_ok_button()->set_text(TTR("Save")); layout_dialog->popup_centered(); layout_dialog->set_name_line_enabled(true); } break; case SETTINGS_LAYOUT_DELETE: { current_option = p_id; layout_dialog->set_title(TTR("Delete Layout")); - layout_dialog->get_ok()->set_text(TTR("Delete")); + layout_dialog->get_ok_button()->set_text(TTR("Delete")); layout_dialog->popup_centered(); layout_dialog->set_name_line_enabled(false); } break; @@ -4670,7 +4714,7 @@ void EditorNode::_scene_tab_closed(int p_tab, int option) { saved_version != editor_data.get_undo_redo().get_version() : editor_data.get_scene_version(p_tab) != 0; if (unsaved) { - save_confirmation->get_ok()->set_text(TTR("Save & Close")); + save_confirmation->get_ok_button()->set_text(TTR("Save & Close")); save_confirmation->set_text(vformat(TTR("Save changes to '%s' before closing?"), scene->get_filename() != "" ? scene->get_filename() : "unsaved scene")); save_confirmation->popup_centered(); } else { @@ -4681,7 +4725,7 @@ void EditorNode::_scene_tab_closed(int p_tab, int option) { _update_scene_tabs(); } -void EditorNode::_scene_tab_hover(int p_tab) { +void EditorNode::_scene_tab_hovered(int p_tab) { if (!bool(EDITOR_GET("interface/scene_tabs/show_thumbnail_on_hover"))) { return; } @@ -4809,16 +4853,6 @@ Button *EditorNode::add_bottom_panel_item(String p_text, Control *p_item) { return tb; } -bool EditorNode::are_bottom_panels_hidden() const { - for (int i = 0; i < bottom_panel_items.size(); i++) { - if (bottom_panel_items[i].button->is_pressed()) { - return false; - } - } - - return true; -} - void EditorNode::hide_bottom_panel() { for (int i = 0; i < bottom_panel_items.size(); i++) { if (bottom_panel_items[i].control->is_visible()) { @@ -5070,17 +5104,10 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String> &p_paths, Control * return drag_data; } -void EditorNode::add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud) { - ERR_FAIL_NULL(p_handler); +void EditorNode::add_tool_menu_item(const String &p_name, const Callable &p_callback) { int idx = tool_menu->get_item_count(); tool_menu->add_item(p_name, TOOLS_CUSTOM); - - Array parameters; - parameters.push_back(p_handler->get_instance_id()); - parameters.push_back(p_callback); - parameters.push_back(p_ud); - - tool_menu->set_item_metadata(idx, parameters); + tool_menu->set_item_metadata(idx, p_callback); } void EditorNode::add_tool_submenu_item(const String &p_name, PopupMenu *p_submenu) { @@ -5459,7 +5486,7 @@ static void _execute_thread(void *p_ud) { int EditorNode::execute_and_show_output(const String &p_title, const String &p_path, const List<String> &p_arguments, bool p_close_on_ok, bool p_close_on_errors) { execute_output_dialog->set_title(p_title); - execute_output_dialog->get_ok()->set_disabled(true); + execute_output_dialog->get_ok_button()->set_disabled(true); execute_outputs->clear(); execute_outputs->set_scroll_follow(true); execute_output_dialog->popup_centered_ratio(); @@ -5500,7 +5527,7 @@ int EditorNode::execute_and_show_output(const String &p_title, const String &p_p execute_output_dialog->hide(); } - execute_output_dialog->get_ok()->set_disabled(false); + execute_output_dialog->get_ok_button()->set_disabled(false); return eta.exitcode; } @@ -5561,46 +5588,51 @@ EditorNode::EditorNode() { { int display_scale = EditorSettings::get_singleton()->get("interface/editor/display_scale"); - float custom_display_scale = EditorSettings::get_singleton()->get("interface/editor/custom_display_scale"); switch (display_scale) { case 0: { - // Try applying a suitable display scale automatically + // Try applying a suitable display scale automatically. #ifdef OSX_ENABLED editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale()); #else const int screen = DisplayServer::get_singleton()->window_get_current_screen(); - editor_set_scale(DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).x > 2000 ? 2.0 : 1.0); + float scale; + if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) { + // hiDPI display. + scale = 2.0; + } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) { + // Small loDPI display. Use a smaller display scale so that editor elements fit more easily. + // Icons won't look great, but this is better than having editor elements overflow from its window. + scale = 0.75; + } else { + scale = 1.0; + } + + editor_set_scale(scale); #endif } break; - case 1: { + case 1: editor_set_scale(0.75); - } break; - - case 2: { + break; + case 2: editor_set_scale(1.0); - } break; - - case 3: { + break; + case 3: editor_set_scale(1.25); - } break; - - case 4: { + break; + case 4: editor_set_scale(1.5); - } break; - - case 5: { + break; + case 5: editor_set_scale(1.75); - } break; - - case 6: { + break; + case 6: editor_set_scale(2.0); - } break; - - default: { - editor_set_scale(custom_display_scale); - } break; + break; + default: + editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale")); + break; } } @@ -5708,8 +5740,6 @@ EditorNode::EditorNode() { EditorInspector::add_inspector_plugin(smp); } - _pvrtc_register_compressors(); - editor_selection = memnew(EditorSelection); EditorFileSystem *efs = memnew(EditorFileSystem); @@ -5866,7 +5896,11 @@ EditorNode::EditorNode() { HBoxContainer *dock_hb = memnew(HBoxContainer); dock_tab_move_left = memnew(Button); dock_tab_move_left->set_flat(true); - dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); + if (gui_base->is_layout_rtl()) { + dock_tab_move_left->set_icon(theme->get_icon("Forward", "EditorIcons")); + } else { + dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); + } dock_tab_move_left->set_focus_mode(Control::FOCUS_NONE); dock_tab_move_left->connect("pressed", callable_mp(this, &EditorNode::_dock_move_left)); dock_hb->add_child(dock_tab_move_left); @@ -5879,7 +5913,11 @@ EditorNode::EditorNode() { dock_tab_move_right = memnew(Button); dock_tab_move_right->set_flat(true); - dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); + if (gui_base->is_layout_rtl()) { + dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); + } else { + dock_tab_move_right->set_icon(theme->get_icon("Back", "EditorIcons")); + } dock_tab_move_right->set_focus_mode(Control::FOCUS_NONE); dock_tab_move_right->connect("pressed", callable_mp(this, &EditorNode::_dock_move_right)); @@ -5956,8 +5994,8 @@ EditorNode::EditorNode() { scene_tabs->set_drag_to_rearrange_enabled(true); scene_tabs->connect("tab_changed", callable_mp(this, &EditorNode::_scene_tab_changed)); scene_tabs->connect("right_button_pressed", callable_mp(this, &EditorNode::_scene_tab_script_edited)); - scene_tabs->connect("tab_close", callable_mp(this, &EditorNode::_scene_tab_closed), varray(SCENE_TAB_CLOSE)); - scene_tabs->connect("tab_hover", callable_mp(this, &EditorNode::_scene_tab_hover)); + scene_tabs->connect("tab_closed", callable_mp(this, &EditorNode::_scene_tab_closed), varray(SCENE_TAB_CLOSE)); + scene_tabs->connect("tab_hovered", callable_mp(this, &EditorNode::_scene_tab_hovered)); scene_tabs->connect("mouse_exited", callable_mp(this, &EditorNode::_scene_tab_exit)); scene_tabs->connect("gui_input", callable_mp(this, &EditorNode::_scene_tab_input)); scene_tabs->connect("reposition_active_tab_request", callable_mp(this, &EditorNode::_reposition_active_tab)); @@ -6051,9 +6089,6 @@ EditorNode::EditorNode() { project_settings = memnew(ProjectSettingsEditor(&editor_data)); gui_base->add_child(project_settings); - run_settings_dialog = memnew(RunSettingsDialog); - gui_base->add_child(run_settings_dialog); - export_template_manager = memnew(ExportTemplateManager); gui_base->add_child(export_template_manager); @@ -6337,6 +6372,7 @@ EditorNode::EditorNode() { video_driver->set_focus_mode(Control::FOCUS_NONE); video_driver->connect("item_selected", callable_mp(this, &EditorNode::_video_driver_selected)); video_driver->add_theme_font_override("font", gui_base->get_theme_font("bold", "EditorFonts")); + video_driver->add_theme_font_size_override("font_size", gui_base->get_theme_font_size("bold_size", "EditorFonts")); // TODO re-enable when GLES2 is ported video_driver->set_disabled(true); right_menu_hb->add_child(video_driver); @@ -6363,7 +6399,7 @@ EditorNode::EditorNode() { #endif video_restart_dialog = memnew(ConfirmationDialog); video_restart_dialog->set_text(TTR("Changing the video driver requires restarting the editor.")); - video_restart_dialog->get_ok()->set_text(TTR("Save & Restart")); + video_restart_dialog->get_ok_button()->set_text(TTR("Save & Restart")); video_restart_dialog->connect("confirmed", callable_mp(this, &EditorNode::_menu_option), varray(SET_VIDEO_DRIVER_SAVE_AND_RESTART)); gui_base->add_child(video_restart_dialog); @@ -6510,19 +6546,19 @@ EditorNode::EditorNode() { custom_build_manage_templates = memnew(ConfirmationDialog); custom_build_manage_templates->set_text(TTR("Android build template is missing, please install relevant templates.")); - custom_build_manage_templates->get_ok()->set_text(TTR("Manage Templates")); + custom_build_manage_templates->get_ok_button()->set_text(TTR("Manage Templates")); custom_build_manage_templates->connect("confirmed", callable_mp(this, &EditorNode::_menu_option), varray(SETTINGS_MANAGE_EXPORT_TEMPLATES)); gui_base->add_child(custom_build_manage_templates); install_android_build_template = memnew(ConfirmationDialog); install_android_build_template->set_text(TTR("This will set up your project for custom Android builds by installing the source template to \"res://android/build\".\nYou can then apply modifications and build your own custom APK on export (adding modules, changing the AndroidManifest.xml, etc.).\nNote that in order to make custom builds instead of using pre-built APKs, the \"Use Custom Build\" option should be enabled in the Android export preset.")); - install_android_build_template->get_ok()->set_text(TTR("Install")); + install_android_build_template->get_ok_button()->set_text(TTR("Install")); install_android_build_template->connect("confirmed", callable_mp(this, &EditorNode::_menu_confirm_current)); gui_base->add_child(install_android_build_template); remove_android_build_template = memnew(ConfirmationDialog); remove_android_build_template->set_text(TTR("The Android build template is already installed in this project and it won't be overwritten.\nRemove the \"res://android/build\" directory manually before attempting this operation again.")); - remove_android_build_template->get_ok()->set_text(TTR("Show in File Manager")); + remove_android_build_template->get_ok_button()->set_text(TTR("Show in File Manager")); remove_android_build_template->connect("confirmed", callable_mp(this, &EditorNode::_menu_option), varray(FILE_EXPLORE_ANDROID_BUILD_TEMPLATES)); gui_base->add_child(remove_android_build_template); @@ -6636,6 +6672,8 @@ EditorNode::EditorNode() { add_editor_plugin(memnew(GradientEditorPlugin(this))); add_editor_plugin(memnew(CollisionShape2DEditorPlugin(this))); add_editor_plugin(memnew(CurveEditorPlugin(this))); + add_editor_plugin(memnew(FontEditorPlugin(this))); + add_editor_plugin(memnew(OpenTypeFeaturesEditorPlugin(this))); add_editor_plugin(memnew(TextureEditorPlugin(this))); add_editor_plugin(memnew(TextureLayeredEditorPlugin(this))); add_editor_plugin(memnew(Texture3DEditorPlugin(this))); @@ -6723,7 +6761,7 @@ EditorNode::EditorNode() { set_process(true); open_imported = memnew(ConfirmationDialog); - open_imported->get_ok()->set_text(TTR("Open Anyway")); + open_imported->get_ok_button()->set_text(TTR("Open Anyway")); new_inherited_button = open_imported->add_button(TTR("New Inherited"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "inherit"); open_imported->connect("confirmed", callable_mp(this, &EditorNode::_open_imported)); open_imported->connect("custom_action", callable_mp(this, &EditorNode::_inherit_imported)); @@ -6773,7 +6811,7 @@ EditorNode::EditorNode() { pick_main_scene = memnew(ConfirmationDialog); gui_base->add_child(pick_main_scene); - pick_main_scene->get_ok()->set_text(TTR("Select")); + pick_main_scene->get_ok_button()->set_text(TTR("Select")); pick_main_scene->connect("confirmed", callable_mp(this, &EditorNode::_menu_option), varray(SETTINGS_PICK_MAIN_SCENE)); for (int i = 0; i < _init_callbacks.size(); i++) { @@ -6801,14 +6839,16 @@ EditorNode::EditorNode() { ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1); ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2); ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_ALT | KEY_3); + ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_ALT | KEY_4); ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_MASK_ALT | KEY_SPACE); #else - ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_F1); - ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_F2); - ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_F3); //hack needed for script editor F3 search to work :) Assign like this or don't use F3 - ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_MASK_SHIFT | KEY_F1); + // Use the Ctrl modifier so F2 can be used to rename nodes in the scene tree dock. + ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_CTRL | KEY_F1); + ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_CTRL | KEY_F2); + ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_CTRL | KEY_F3); + ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_CTRL | KEY_F4); + ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_F1); #endif - ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library")); ED_SHORTCUT("editor/editor_next", TTR("Open the next Editor")); ED_SHORTCUT("editor/editor_prev", TTR("Open the previous Editor")); diff --git a/editor/editor_node.h b/editor/editor_node.h index dec28b0d2b..ab8d268801 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -81,7 +81,7 @@ class RunSettingsDialog; class ScriptCreateDialog; class TabContainer; class Tabs; -class TextureProgress; +class TextureProgressBar; class Button; class VSplitContainer; class Window; @@ -107,10 +107,10 @@ public: String path; List<String> args; String output; - Thread *execute_output_thread; + Thread *execute_output_thread = nullptr; Mutex execute_output_mutex; - int exitcode; - volatile bool done; + int exitcode = 0; + volatile bool done = false; }; private: @@ -161,7 +161,6 @@ private: RUN_STOP, RUN_PLAY_SCENE, RUN_PLAY_CUSTOM_SCENE, - RUN_SCENE_SETTINGS, RUN_SETTINGS, RUN_PROJECT_DATA_FOLDER, RUN_PROJECT_MANAGER, @@ -272,7 +271,7 @@ private: Button *play_scene_button; Button *play_custom_scene_button; Button *search_button; - TextureProgress *audio_vu; + TextureProgressBar *audio_vu; Timer *screenshot_timer; @@ -312,7 +311,6 @@ private: ConfirmationDialog *remove_android_build_template; EditorSettingsDialog *settings_config_dialog; - RunSettingsDialog *run_settings_dialog; ProjectSettingsEditor *project_settings; PopupMenu *vcs_actions_menu; EditorFileDialog *file; @@ -409,8 +407,8 @@ private: struct BottomPanelItem { String name; - Control *control; - Button *button; + Control *control = nullptr; + Button *button = nullptr; }; Vector<BottomPanelItem> bottom_panel_items; @@ -554,8 +552,8 @@ private: struct ExportDefer { String preset; String path; - bool debug; - bool pack_only; + bool debug = false; + bool pack_only = false; } export_defer; bool cmdline_export_mode; @@ -579,7 +577,7 @@ private: void _dock_make_float(); void _scene_tab_changed(int p_tab); void _scene_tab_closed(int p_tab, int option = SCENE_TAB_CLOSE); - void _scene_tab_hover(int p_tab); + void _scene_tab_hovered(int p_tab); void _scene_tab_exit(); void _scene_tab_input(const Ref<InputEvent> &p_input); void _reposition_active_tab(int idx_to); @@ -824,7 +822,6 @@ public: Button *get_pause_button() { return pause_button; } Button *add_bottom_panel_item(String p_text, Control *p_item); - bool are_bottom_panels_hidden() const; void make_bottom_panel_item_visible(Control *p_item); void raise_bottom_panel_item(Control *p_item); void hide_bottom_panel(); @@ -833,7 +830,7 @@ public: Variant drag_resource(const Ref<Resource> &p_res, Control *p_from); Variant drag_files_and_dirs(const Vector<String> &p_paths, Control *p_from); - void add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud = Variant()); + void add_tool_menu_item(const String &p_name, const Callable &p_callback); void add_tool_submenu_item(const String &p_name, PopupMenu *p_submenu); void remove_tool_menu_item(const String &p_name); diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index e330713cfb..f974ba9998 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -489,8 +489,8 @@ void EditorPlugin::remove_control_from_container(CustomControlContainer p_locati } } -void EditorPlugin::add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud) { - EditorNode::get_singleton()->add_tool_menu_item(p_name, p_handler, p_callback, p_ud); +void EditorPlugin::add_tool_menu_item(const String &p_name, const Callable &p_callable) { + EditorNode::get_singleton()->add_tool_menu_item(p_name, p_callable); } void EditorPlugin::add_tool_submenu_item(const String &p_name, Object *p_submenu) { @@ -826,7 +826,7 @@ void EditorPlugin::_bind_methods() { ClassDB::bind_method(D_METHOD("remove_control_from_docks", "control"), &EditorPlugin::remove_control_from_docks); ClassDB::bind_method(D_METHOD("remove_control_from_bottom_panel", "control"), &EditorPlugin::remove_control_from_bottom_panel); ClassDB::bind_method(D_METHOD("remove_control_from_container", "container", "control"), &EditorPlugin::remove_control_from_container); - ClassDB::bind_method(D_METHOD("add_tool_menu_item", "name", "handler", "callback", "ud"), &EditorPlugin::add_tool_menu_item, DEFVAL(Variant())); + ClassDB::bind_method(D_METHOD("add_tool_menu_item", "name", "callable"), &EditorPlugin::add_tool_menu_item); ClassDB::bind_method(D_METHOD("add_tool_submenu_item", "name", "submenu"), &EditorPlugin::add_tool_submenu_item); ClassDB::bind_method(D_METHOD("remove_tool_menu_item", "name"), &EditorPlugin::remove_tool_menu_item); ClassDB::bind_method(D_METHOD("add_custom_type", "type", "base", "script", "icon"), &EditorPlugin::add_custom_type); @@ -866,6 +866,8 @@ void EditorPlugin::_bind_methods() { ClassDB::add_virtual_method(get_class_static(), MethodInfo("forward_canvas_draw_over_viewport", PropertyInfo(Variant::OBJECT, "overlay", PROPERTY_HINT_RESOURCE_TYPE, "Control"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo("forward_canvas_force_draw_over_viewport", PropertyInfo(Variant::OBJECT, "overlay", PROPERTY_HINT_RESOURCE_TYPE, "Control"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "forward_spatial_gui_input", PropertyInfo(Variant::OBJECT, "camera", PROPERTY_HINT_RESOURCE_TYPE, "Camera3D"), PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent"))); + ClassDB::add_virtual_method(get_class_static(), MethodInfo("forward_spatial_draw_over_viewport", PropertyInfo(Variant::OBJECT, "overlay", PROPERTY_HINT_RESOURCE_TYPE, "Control"))); + ClassDB::add_virtual_method(get_class_static(), MethodInfo("forward_spatial_force_draw_over_viewport", PropertyInfo(Variant::OBJECT, "overlay", PROPERTY_HINT_RESOURCE_TYPE, "Control"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_plugin_name")); ClassDB::add_virtual_method(get_class_static(), MethodInfo(PropertyInfo(Variant::OBJECT, "icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "get_plugin_icon")); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "has_main_screen")); diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h index 11063066d6..03908b43ca 100644 --- a/editor/editor_plugin.h +++ b/editor/editor_plugin.h @@ -174,7 +174,7 @@ public: void remove_control_from_docks(Control *p_control); void remove_control_from_bottom_panel(Control *p_control); - void add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud = Variant()); + void add_tool_menu_item(const String &p_name, const Callable &p_callable); void add_tool_submenu_item(const String &p_name, Object *p_submenu); void remove_tool_menu_item(const String &p_name); diff --git a/editor/editor_plugin_settings.cpp b/editor/editor_plugin_settings.cpp index f984f48c1c..1fdba10a74 100644 --- a/editor/editor_plugin_settings.cpp +++ b/editor/editor_plugin_settings.cpp @@ -42,7 +42,7 @@ void EditorPluginSettings::_notification(int p_what) { if (p_what == NOTIFICATION_WM_WINDOW_FOCUS_IN) { update_plugins(); } else if (p_what == Node::NOTIFICATION_READY) { - plugin_config_dialog->connect_compat("plugin_ready", EditorNode::get_singleton(), "_on_plugin_ready"); + plugin_config_dialog->connect("plugin_ready", Callable(EditorNode::get_singleton(), "_on_plugin_ready")); plugin_list->connect("button_pressed", callable_mp(this, &EditorPluginSettings::_cell_button_pressed)); } } diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 9e7ddd9fac..523e65babe 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -36,7 +36,7 @@ #include "editor_properties_array_dict.h" #include "editor_scale.h" #include "scene/main/window.h" -#include "scene/resources/dynamic_font.h" +#include "scene/resources/font.h" ///////////////////// NULL ///////////////////////// @@ -68,9 +68,9 @@ void EditorPropertyText::_text_changed(const String &p_string) { } if (string_name) { - emit_changed(get_edited_property(), StringName(p_string), "", true); + emit_changed(get_edited_property(), StringName(p_string), "", false); } else { - emit_changed(get_edited_property(), p_string, "", true); + emit_changed(get_edited_property(), p_string, "", false); } } @@ -146,7 +146,8 @@ void EditorPropertyMultilineText::_notification(int p_what) { Ref<Texture2D> df = get_theme_icon("DistractionFree", "EditorIcons"); open_big_text->set_icon(df); Ref<Font> font = get_theme_font("font", "Label"); - text->set_custom_minimum_size(Vector2(0, font->get_height() * 6)); + int font_size = get_theme_font_size("font_size", "Label"); + text->set_custom_minimum_size(Vector2(0, font->get_height(font_size) * 6)); } break; } @@ -290,6 +291,7 @@ EditorPropertyPath::EditorPropertyPath() { HBoxContainer *path_hb = memnew(HBoxContainer); add_child(path_hb); path = memnew(LineEdit); + path->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); path_hb->add_child(path); path->connect("text_entered", callable_mp(this, &EditorPropertyPath::_path_selected)); path->connect("focus_exited", callable_mp(this, &EditorPropertyPath::_path_focus_exited)); @@ -587,7 +589,8 @@ public: virtual Size2 get_minimum_size() const override { Ref<Font> font = get_theme_font("font", "Label"); - return Vector2(0, font->get_height() * 2); + int font_size = get_theme_font_size("font_size", "Label"); + return Vector2(0, font->get_height(font_size) * 2); } virtual String get_tooltip(const Point2 &p_pos) const override { @@ -985,6 +988,7 @@ void EditorPropertyEasing::_draw_easing() { const float exp = get_edited_object()->get(get_edited_property()); const Ref<Font> f = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); const Color font_color = get_theme_color("font_color", "Label"); Color line_color; if (dragging) { @@ -1022,7 +1026,7 @@ void EditorPropertyEasing::_draw_easing() { } else { decimals = 1; } - f->draw(ci, Point2(10, 10 + f->get_ascent()), rtos(exp).pad_decimals(decimals), font_color); + f->draw_string(ci, Point2(10, 10 + f->get_ascent(font_size)), TS->format_number(rtos(exp).pad_decimals(decimals)), HALIGN_LEFT, -1, font_size, font_color); } void EditorPropertyEasing::update_property() { @@ -1039,7 +1043,7 @@ void EditorPropertyEasing::_set_preset(int p_preset) { void EditorPropertyEasing::_setup_spin() { setting = true; spin->setup_and_show(); - spin->get_line_edit()->set_text(rtos(get_edited_object()->get(get_edited_property()))); + spin->get_line_edit()->set_text(TS->format_number(rtos(get_edited_object()->get(get_edited_property())))); setting = false; spin->show(); } @@ -1088,7 +1092,7 @@ void EditorPropertyEasing::_notification(int p_what) { preset->add_icon_item(get_theme_icon("CurveInOut", "EditorIcons"), "In-Out", EASING_IN_OUT); preset->add_icon_item(get_theme_icon("CurveOutIn", "EditorIcons"), "Out-In", EASING_OUT_IN); } - easing_draw->set_custom_minimum_size(Size2(0, get_theme_font("font", "Label")->get_height() * 2)); + easing_draw->set_custom_minimum_size(Size2(0, get_theme_font("font", "Label")->get_height(get_theme_font_size("font_size", "Label")) * 2)); } break; } } @@ -3016,7 +3020,7 @@ bool EditorPropertyResource::_is_drop_valid(const Dictionary &p_drag_data) const } else if (at == "ShaderMaterial") { allowed_types.append("Shader"); } else if (at == "Font") { - allowed_types.append("DynamicFontData"); + allowed_types.append("FontData"); } } @@ -3115,9 +3119,9 @@ void EditorPropertyResource::drop_data_fw(const Point2 &p_point, const Variant & break; } - if (at == "Font" && ClassDB::is_parent_class(res->get_class(), "DynamicFontData")) { - Ref<DynamicFont> font = memnew(DynamicFont); - font->set_font_data(res); + if (at == "Font" && ClassDB::is_parent_class(res->get_class(), "FontData")) { + Ref<Font> font = memnew(Font); + font->add_data(res); res = font; break; } @@ -3645,7 +3649,7 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, Variant::Typ add_property_editor(p_path, editor); } break; - case Variant::_RID: { + case Variant::RID: { EditorPropertyRID *editor = memnew(EditorPropertyRID); add_property_editor(p_path, editor); } break; diff --git a/editor/editor_properties.h b/editor/editor_properties.h index be3e9db8ed..63dee9f6d6 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -41,7 +41,7 @@ class EditorPropertyNil : public EditorProperty { GDCLASS(EditorPropertyNil, EditorProperty); - LineEdit *text; + LineEdit *text = nullptr; public: virtual void update_property() override; @@ -595,7 +595,6 @@ class EditorPropertyResource : public EditorProperty { GDCLASS(EditorPropertyResource, EditorProperty); enum MenuOption { - OBJ_MENU_LOAD = 0, OBJ_MENU_EDIT = 1, OBJ_MENU_CLEAR = 2, diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 51fac6acec..56fbfbd0c2 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -186,7 +186,7 @@ void EditorPropertyArray::_change_type_menu(int p_index) { Variant value; Callable::CallError ce; - value = Variant::construct(Variant::Type(p_index), nullptr, 0, ce); + Variant::construct(Variant::Type(p_index), value, nullptr, 0, ce); Variant array = object->get_array(); array.set(changing_type_idx, value); @@ -445,7 +445,7 @@ void EditorPropertyArray::drop_data_fw(const Point2 &p_point, const Variant &p_d // Handle the case where array is not initialised yet if (!array.is_array()) { Callable::CallError ce; - array = Variant::construct(array_type, nullptr, 0, ce); + Variant::construct(array_type, array, nullptr, 0, ce); } // Loop the file array and add to existing array @@ -491,7 +491,7 @@ void EditorPropertyArray::_edit_pressed() { Variant array = get_edited_object()->get(get_edited_property()); if (!array.is_array()) { Callable::CallError ce; - array = Variant::construct(array_type, nullptr, 0, ce); + Variant::construct(array_type, array, nullptr, 0, ce); get_edited_object()->set(get_edited_property(), array); } @@ -524,7 +524,9 @@ void EditorPropertyArray::_length_changed(double p_page) { for (int i = previous_size; i < size; i++) { if (array.get(i).get_type() == Variant::NIL) { Callable::CallError ce; - array.set(i, Variant::construct(subtype, nullptr, 0, ce)); + Variant r; + Variant::construct(subtype, r, nullptr, 0, ce); + array.set(i, r); } } } @@ -534,7 +536,9 @@ void EditorPropertyArray::_length_changed(double p_page) { // Pool*Array don't initialize their elements, have to do it manually for (int i = previous_size; i < size; i++) { Callable::CallError ce; - array.set(i, Variant::construct(array.get(i).get_type(), nullptr, 0, ce)); + Variant r; + Variant::construct(array.get(i).get_type(), r, nullptr, 0, ce); + array.set(i, r); } } @@ -657,7 +661,7 @@ void EditorPropertyDictionary::_change_type_menu(int p_index) { if (changing_type_idx < 0) { Variant value; Callable::CallError ce; - value = Variant::construct(Variant::Type(p_index), nullptr, 0, ce); + Variant::construct(Variant::Type(p_index), value, nullptr, 0, ce); if (changing_type_idx == -1) { object->set_new_item_key(value); } else { @@ -672,7 +676,7 @@ void EditorPropertyDictionary::_change_type_menu(int p_index) { if (p_index < Variant::VARIANT_MAX) { Variant value; Callable::CallError ce; - value = Variant::construct(Variant::Type(p_index), nullptr, 0, ce); + Variant::construct(Variant::Type(p_index), value, nullptr, 0, ce); Variant key = dict.get_key_at_index(changing_type_idx); dict[key] = value; } else { @@ -888,7 +892,7 @@ void EditorPropertyDictionary::update_property() { prop = memnew(EditorPropertyNodePath); } break; - case Variant::_RID: { + case Variant::RID: { prop = memnew(EditorPropertyRID); } break; @@ -1044,7 +1048,7 @@ void EditorPropertyDictionary::_edit_pressed() { Variant prop_val = get_edited_object()->get(get_edited_property()); if (prop_val.get_type() == Variant::NIL) { Callable::CallError ce; - prop_val = Variant::construct(Variant::DICTIONARY, nullptr, 0, ce); + Variant::construct(Variant::DICTIONARY, prop_val, nullptr, 0, ce); get_edited_object()->set(get_edited_property(), prop_val); } diff --git a/editor/editor_resource_preview.h b/editor/editor_resource_preview.h index 2f4bc65de9..05a4e1bafb 100644 --- a/editor/editor_resource_preview.h +++ b/editor/editor_resource_preview.h @@ -77,9 +77,9 @@ class EditorResourcePreview : public Node { struct Item { Ref<Texture2D> preview; Ref<Texture2D> small_preview; - int order; - uint32_t last_hash; - uint64_t modified_time; + int order = 0; + uint32_t last_hash = 0; + uint64_t modified_time = 0; }; int order; diff --git a/editor/editor_run.h b/editor/editor_run.h index a15d65d91b..08b1e74ed1 100644 --- a/editor/editor_run.h +++ b/editor/editor_run.h @@ -36,7 +36,6 @@ class EditorRun { public: enum Status { - STATUS_PLAY, STATUS_PAUSED, STATUS_STOP diff --git a/editor/editor_sectioned_inspector.cpp b/editor/editor_sectioned_inspector.cpp index cf19b54cff..bc9ca15467 100644 --- a/editor/editor_sectioned_inspector.cpp +++ b/editor/editor_sectioned_inspector.cpp @@ -35,9 +35,9 @@ class SectionedInspectorFilter : public Object { GDCLASS(SectionedInspectorFilter, Object); - Object *edited; + Object *edited = nullptr; String section; - bool allow_sub; + bool allow_sub = false; bool _set(const StringName &p_name, const Variant &p_value) { if (!edited) { @@ -123,10 +123,6 @@ public: edited = p_edited; _change_notify(); } - - SectionedInspectorFilter() { - edited = nullptr; - } }; void SectionedInspector::_bind_methods() { diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index f5c1de9def..73a191d317 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -158,10 +158,10 @@ void EditorSettings::_initial_set(const StringName &p_name, const Variant &p_val struct _EVCSort { String name; - Variant::Type type; - int order; - bool save; - bool restart_if_changed; + Variant::Type type = Variant::Type::NIL; + int order = 0; + bool save = false; + bool restart_if_changed = false; bool operator<(const _EVCSort &p_vcs) const { return order < p_vcs.order; } }; @@ -262,13 +262,30 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { String host_lang = OS::get_singleton()->get_locale(); host_lang = TranslationServer::standardize_locale(host_lang); - // Some locales are not properly supported currently in Godot due to lack of font shaping - // (e.g. Arabic or Hindi), so even though we have work in progress translations for them, - // we skip them as they don't render properly. (GH-28577) - const Vector<String> locales_to_skip = String("ar,bn,fa,he,hi,ml,si,ta,te,ur").split(","); + // Skip locales if Text server lack required features. + Vector<String> locales_to_skip; + if (!TS->has_feature(TextServer::FEATURE_BIDI_LAYOUT) || !TS->has_feature(TextServer::FEATURE_SHAPING)) { + locales_to_skip.push_back("ar"); // Arabic + locales_to_skip.push_back("fa"); // Persian + locales_to_skip.push_back("ur"); // Urdu + } + if (!TS->has_feature(TextServer::FEATURE_BIDI_LAYOUT)) { + locales_to_skip.push_back("he"); // Hebrew + } + if (!TS->has_feature(TextServer::FEATURE_SHAPING)) { + locales_to_skip.push_back("bn"); // Bengali + locales_to_skip.push_back("hi"); // Hindi + locales_to_skip.push_back("ml"); // Malayalam + locales_to_skip.push_back("si"); // Sinhala + locales_to_skip.push_back("ta"); // Tamil + locales_to_skip.push_back("te"); // Telugu + } - String best; + if (!locales_to_skip.empty()) { + WARN_PRINT("Some locales are not properly supported by selected Text Server and are disabled."); + } + String best; EditorTranslationList *etl = _editor_translations; while (etl->data) { @@ -316,6 +333,10 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { hints["interface/editor/main_font_size"] = PropertyInfo(Variant::INT, "interface/editor/main_font_size", PROPERTY_HINT_RANGE, "8,48,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); _initial_set("interface/editor/code_font_size", 14); hints["interface/editor/code_font_size"] = PropertyInfo(Variant::INT, "interface/editor/code_font_size", PROPERTY_HINT_RANGE, "8,48,1", PROPERTY_USAGE_DEFAULT); + _initial_set("interface/editor/code_font_contextual_ligatures", 0); + hints["interface/editor/code_font_contextual_ligatures"] = PropertyInfo(Variant::INT, "interface/editor/code_font_contextual_ligatures", PROPERTY_HINT_ENUM, "Default,Disable contextual alternates (coding ligatures),Use custom OpenType feature set", PROPERTY_USAGE_DEFAULT); + _initial_set("interface/editor/code_font_custom_opentype_features", ""); + _initial_set("interface/editor/code_font_custom_variations", ""); _initial_set("interface/editor/font_antialiased", true); _initial_set("interface/editor/font_hinting", 0); hints["interface/editor/font_hinting"] = PropertyInfo(Variant::INT, "interface/editor/font_hinting", PROPERTY_HINT_ENUM, "Auto,None,Light,Normal", PROPERTY_USAGE_DEFAULT); @@ -387,15 +408,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("filesystem/file_dialog/thumbnail_size", 64); hints["filesystem/file_dialog/thumbnail_size"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16"); - // Import - _initial_set("filesystem/import/pvrtc_texture_tool", ""); -#ifdef WINDOWS_ENABLED - hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "*.exe"); -#else - hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, ""); -#endif - _initial_set("filesystem/import/pvrtc_fast_conversion", false); - /* Docks */ // SceneTree @@ -510,7 +522,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { hints["editors/3d/secondary_grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/secondary_grid_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT); // If a line is a multiple of this, it uses the primary grid color. - _initial_set("editors/3d/primary_grid_steps", 10); + // Use a power of 2 value by default as it's more common to use powers of 2 in level design. + _initial_set("editors/3d/primary_grid_steps", 8); hints["editors/3d/primary_grid_steps"] = PropertyInfo(Variant::INT, "editors/3d/primary_grid_steps", PROPERTY_HINT_RANGE, "1,100,1", PROPERTY_USAGE_DEFAULT); // At 1000, the grid mostly looks like it has no edge. @@ -536,9 +549,15 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("editors/3d/grid_xy_plane", false); _initial_set("editors/3d/grid_yz_plane", false); + // Use a lower default FOV for the 3D camera compared to the + // Camera3D node as the 3D viewport doesn't span the whole screen. + // This means it's technically viewed from a further distance, which warrants a narrower FOV. _initial_set("editors/3d/default_fov", 70.0); + hints["editors/3d/default_fov"] = PropertyInfo(Variant::FLOAT, "editors/3d/default_fov", PROPERTY_HINT_RANGE, "1,179,0.1"); _initial_set("editors/3d/default_z_near", 0.05); - _initial_set("editors/3d/default_z_far", 500.0); + hints["editors/3d/default_z_near"] = PropertyInfo(Variant::FLOAT, "editors/3d/default_z_near", PROPERTY_HINT_RANGE, "0.01,10,0.01,or_greater"); + _initial_set("editors/3d/default_z_far", 4000.0); + hints["editors/3d/default_z_far"] = PropertyInfo(Variant::FLOAT, "editors/3d/default_z_far", PROPERTY_HINT_RANGE, "0.1,4000,0.1,or_greater"); // 3D: Navigation _initial_set("editors/3d/navigation/navigation_scheme", 0); @@ -609,6 +628,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { // Animation _initial_set("editors/animation/autorename_animation_tracks", true); _initial_set("editors/animation/confirm_insert_track", true); + _initial_set("editors/animation/default_create_bezier_tracks", false); + _initial_set("editors/animation/default_create_reset_tracks", true); _initial_set("editors/animation/onion_layers_past_color", Color(1, 0, 0)); _initial_set("editors/animation/onion_layers_future_color", Color(0, 1, 0)); @@ -1518,11 +1539,6 @@ Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path) { return sc; } -struct ShortcutMapping { - const char *path; - uint32_t keycode; -}; - Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, uint32_t p_keycode) { #ifdef OSX_ENABLED // Use Cmd+Backspace as a general replacement for Delete shortcuts on macOS diff --git a/editor/editor_settings.h b/editor/editor_settings.h index 41e6bab4ba..3061da4d43 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -47,13 +47,13 @@ class EditorSettings : public Resource { public: struct Plugin { - EditorPlugin *instance; + EditorPlugin *instance = nullptr; String path; String name; String author; String version; String description; - bool installs; + bool installs = false; String script; Vector<String> install_files; }; diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index efc966c6c4..d72510d40d 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -37,13 +37,13 @@ String EditorSpinSlider::get_tooltip(const Point2 &p_pos) const { if (grabber->is_visible()) { - return rtos(get_value()) + "\n\n" + TTR("Hold Ctrl to round to integers. Hold Shift for more precise changes."); + return TS->format_number(rtos(get_value())) + "\n\n" + TTR("Hold Ctrl to round to integers. Hold Shift for more precise changes."); } - return rtos(get_value()); + return TS->format_number(rtos(get_value())); } String EditorSpinSlider::get_text_value() const { - return String::num(get_value(), Math::range_step_decimals(get_step())); + return TS->format_number(String::num(get_value(), Math::range_step_decimals(get_step()))); } void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { @@ -214,10 +214,11 @@ void EditorSpinSlider::_notification(int p_what) { draw_style_box(sb, Rect2(Vector2(), get_size())); } Ref<Font> font = get_theme_font("font", "LineEdit"); + int font_size = get_theme_font_size("font_size", "LineEdit"); int sep_base = 4 * EDSCALE; int sep = sep_base + sb->get_offset().x; //make it have the same margin on both sides, looks better - int string_width = font->get_string_size(label).width; + int string_width = font->get_string_size(label, font_size).width; int number_width = get_size().width - sb->get_minimum_size().width - string_width - sep; Ref<Texture2D> updown = get_theme_icon("updown", "SpinBox"); @@ -228,7 +229,7 @@ void EditorSpinSlider::_notification(int p_what) { String numstr = get_text_value(); - int vofs = (get_size().height - font->get_height()) / 2 + font->get_ascent(); + int vofs = (get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size); Color fc = get_theme_color("font_color", "LineEdit"); Color lc; @@ -248,9 +249,9 @@ void EditorSpinSlider::_notification(int p_what) { draw_style_box(focus, Rect2(Vector2(), get_size())); } - draw_string(font, Vector2(Math::round(sb->get_offset().x), vofs), label, lc * Color(1, 1, 1, 0.5)); + draw_string(font, Vector2(Math::round(sb->get_offset().x), vofs), label, HALIGN_LEFT, -1, font_size, lc * Color(1, 1, 1, 0.5)); - draw_string(font, Vector2(Math::round(sb->get_offset().x + string_width + sep), vofs), numstr, fc, number_width); + draw_string(font, Vector2(Math::round(sb->get_offset().x + string_width + sep), vofs), numstr, HALIGN_LEFT, number_width, font_size, fc); if (get_step() == 1) { Ref<Texture2D> updown2 = get_theme_icon("updown", "SpinBox"); @@ -330,9 +331,10 @@ void EditorSpinSlider::_notification(int p_what) { Size2 EditorSpinSlider::get_minimum_size() const { Ref<StyleBox> sb = get_theme_stylebox("normal", "LineEdit"); Ref<Font> font = get_theme_font("font", "LineEdit"); + int font_size = get_theme_font_size("font_size", "LineEdit"); Size2 ms = sb->get_minimum_size(); - ms.height += font->get_height(); + ms.height += font->get_height(font_size); return ms; } @@ -360,7 +362,7 @@ void EditorSpinSlider::_evaluate_input_text() { // This prevents using functions like `pow()`, but using functions // in EditorSpinSlider is a barely known (and barely used) feature. // Instead, we'd rather support German/French keyboard layouts out of the box. - const String text = value_input->get_text().replace(",", "."); + const String text = TS->parse_number(value_input->get_text().replace(",", ".")); Ref<Expression> expr; expr.instance(); diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 79525ced51..35de38fad2 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -85,6 +85,25 @@ static Ref<StyleBoxLine> make_line_stylebox(Color p_color, int p_thickness = 1, return style; } +static Ref<Texture2D> flip_icon(Ref<Texture2D> p_texture, bool p_flip_y = false, bool p_flip_x = false) { + if (!p_flip_y && !p_flip_x) { + return p_texture; + } + + Ref<ImageTexture> texture(memnew(ImageTexture)); + Ref<Image> img = p_texture->get_data(); + + if (p_flip_y) { + img->flip_y(); + } + if (p_flip_x) { + img->flip_x(); + } + + texture->create_from_image(img); + return texture; +} + #ifdef MODULE_SVG_ENABLED static Ref<ImageTexture> editor_generate_icon(int p_index, bool p_convert_color, float p_scale = EDSCALE, bool p_force_filter = false) { Ref<ImageTexture> icon = memnew(ImageTexture); @@ -441,7 +460,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // Highlighted tabs and border width Color tab_color = highlight_tabs ? base_color.lerp(font_color, contrast) : base_color; - const int border_width = CLAMP(border_size, 0, 3) * EDSCALE; + // Ensure borders are visible when using an editor scale below 100%. + const int border_width = CLAMP(border_size, 0, 3) * MAX(1, EDSCALE); const int default_margin_size = 4; const int margin_size_extra = default_margin_size + CLAMP(border_size, 0, 3); @@ -599,12 +619,18 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("icon_color_pressed", "Button", icon_color_pressed); // OptionButton + theme->set_stylebox("focus", "OptionButton", style_widget_focus); + theme->set_stylebox("normal", "OptionButton", style_widget); theme->set_stylebox("hover", "OptionButton", style_widget_hover); theme->set_stylebox("pressed", "OptionButton", style_widget_pressed); - theme->set_stylebox("focus", "OptionButton", style_widget_focus); theme->set_stylebox("disabled", "OptionButton", style_widget_disabled); + theme->set_stylebox("normal_mirrored", "OptionButton", style_widget); + theme->set_stylebox("hover_mirrored", "OptionButton", style_widget_hover); + theme->set_stylebox("pressed_mirrored", "OptionButton", style_widget_pressed); + theme->set_stylebox("disabled_mirrored", "OptionButton", style_widget_disabled); + theme->set_color("font_color", "OptionButton", font_color); theme->set_color("font_color_hover", "OptionButton", font_color_hl); theme->set_color("font_color_pressed", "OptionButton", accent_color); @@ -626,6 +652,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("off", "CheckButton", theme->get_icon("GuiToggleOff", "EditorIcons")); theme->set_icon("off_disabled", "CheckButton", theme->get_icon("GuiToggleOffDisabled", "EditorIcons")); + theme->set_icon("on_mirrored", "CheckButton", theme->get_icon("GuiToggleOnMirrored", "EditorIcons")); + theme->set_icon("on_disabled_mirrored", "CheckButton", theme->get_icon("GuiToggleOnDisabledMirrored", "EditorIcons")); + theme->set_icon("off_mirrored", "CheckButton", theme->get_icon("GuiToggleOffMirrored", "EditorIcons")); + theme->set_icon("off_disabled_mirrored", "CheckButton", theme->get_icon("GuiToggleOffDisabledMirrored", "EditorIcons")); + theme->set_color("font_color", "CheckButton", font_color); theme->set_color("font_color_hover", "CheckButton", font_color_hl); theme->set_color("font_color_pressed", "CheckButton", accent_color); @@ -664,7 +695,14 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("panel", "PopupDialog", style_popup); // PopupMenu - theme->set_stylebox("panel", "PopupMenu", style_popup); + const int popup_menu_margin_size = default_margin_size * 1.5 * EDSCALE; + Ref<StyleBoxFlat> style_popup_menu = style_popup->duplicate(); + style_popup_menu->set_default_margin(MARGIN_LEFT, popup_menu_margin_size); + style_popup_menu->set_default_margin(MARGIN_TOP, popup_menu_margin_size); + style_popup_menu->set_default_margin(MARGIN_RIGHT, popup_menu_margin_size); + style_popup_menu->set_default_margin(MARGIN_BOTTOM, popup_menu_margin_size); + + theme->set_stylebox("panel", "PopupMenu", style_popup_menu); theme->set_stylebox("separator", "PopupMenu", style_popup_separator); theme->set_stylebox("labeled_separator_left", "PopupMenu", style_popup_labeled_separator_left); theme->set_stylebox("labeled_separator_right", "PopupMenu", style_popup_labeled_separator_right); @@ -673,11 +711,13 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("font_color_hover", "PopupMenu", font_color_hl); theme->set_color("font_color_accel", "PopupMenu", font_color_disabled); theme->set_color("font_color_disabled", "PopupMenu", font_color_disabled); + theme->set_color("font_color_separator", "PopupMenu", font_color_disabled); theme->set_icon("checked", "PopupMenu", theme->get_icon("GuiChecked", "EditorIcons")); theme->set_icon("unchecked", "PopupMenu", theme->get_icon("GuiUnchecked", "EditorIcons")); theme->set_icon("radio_checked", "PopupMenu", theme->get_icon("GuiRadioChecked", "EditorIcons")); theme->set_icon("radio_unchecked", "PopupMenu", theme->get_icon("GuiRadioUnchecked", "EditorIcons")); theme->set_icon("submenu", "PopupMenu", theme->get_icon("ArrowRight", "EditorIcons")); + theme->set_icon("submenu_mirrored", "PopupMenu", theme->get_icon("ArrowLeft", "EditorIcons")); theme->set_icon("visibility_hidden", "PopupMenu", theme->get_icon("GuiVisibilityHidden", "EditorIcons")); theme->set_icon("visibility_visible", "PopupMenu", theme->get_icon("GuiVisibilityVisible", "EditorIcons")); theme->set_icon("visibility_xray", "PopupMenu", theme->get_icon("GuiVisibilityXray", "EditorIcons")); @@ -706,6 +746,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("unchecked", "Tree", theme->get_icon("GuiUnchecked", "EditorIcons")); theme->set_icon("arrow", "Tree", theme->get_icon("GuiTreeArrowDown", "EditorIcons")); theme->set_icon("arrow_collapsed", "Tree", theme->get_icon("GuiTreeArrowRight", "EditorIcons")); + theme->set_icon("arrow_collapsed_mirrored", "Tree", theme->get_icon("GuiTreeArrowLeft", "EditorIcons")); theme->set_icon("updown", "Tree", theme->get_icon("GuiTreeUpdown", "EditorIcons")); theme->set_icon("select_arrow", "Tree", theme->get_icon("GuiDropdown", "EditorIcons")); theme->set_stylebox("bg_focus", "Tree", style_focus); @@ -850,7 +891,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("DebuggerPanel", "EditorStyles", style_panel_debugger); Ref<StyleBoxFlat> style_panel_invisible_top = style_content_panel->duplicate(); - int stylebox_offset = theme->get_font("tab_fg", "TabContainer")->get_height() + theme->get_stylebox("tab_fg", "TabContainer")->get_minimum_size().height + theme->get_stylebox("panel", "TabContainer")->get_default_margin(MARGIN_TOP); + int stylebox_offset = theme->get_font("tab_fg", "TabContainer")->get_height(theme->get_font_size("tab_fg", "TabContainer")) + theme->get_stylebox("tab_fg", "TabContainer")->get_minimum_size().height + theme->get_stylebox("panel", "TabContainer")->get_default_margin(MARGIN_TOP); style_panel_invisible_top->set_expand_margin_size(MARGIN_TOP, -stylebox_offset); style_panel_invisible_top->set_default_margin(MARGIN_TOP, 0); theme->set_stylebox("BottomPanelDebuggerOverride", "EditorStyles", style_panel_invisible_top); @@ -930,6 +971,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_constant("title_height", "Window", 24 * EDSCALE); theme->set_constant("resize_margin", "Window", 4 * EDSCALE); theme->set_font("title_font", "Window", theme->get_font("title", "EditorFonts")); + theme->set_font_size("title_font_size", "Window", theme->get_font_size("title_size", "EditorFonts")); // complex window, for now only Editor settings and Project settings Ref<StyleBoxFlat> style_complex_window = style_window->duplicate(); @@ -1051,11 +1093,33 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("more", "GraphEdit", theme->get_icon("ZoomMore", "EditorIcons")); theme->set_icon("reset", "GraphEdit", theme->get_icon("ZoomReset", "EditorIcons")); theme->set_icon("snap", "GraphEdit", theme->get_icon("SnapGrid", "EditorIcons")); + theme->set_icon("minimap", "GraphEdit", theme->get_icon("GridMinimap", "EditorIcons")); theme->set_constant("bezier_len_pos", "GraphEdit", 80 * EDSCALE); theme->set_constant("bezier_len_neg", "GraphEdit", 160 * EDSCALE); - // GraphNode + // GraphEditMinimap + theme->set_stylebox("bg", "GraphEditMinimap", make_flat_stylebox(dark_color_1, 0, 0, 0, 0)); + Ref<StyleBoxFlat> style_minimap_camera; + Ref<StyleBoxFlat> style_minimap_node; + if (dark_theme) { + style_minimap_camera = make_flat_stylebox(Color(0.65, 0.65, 0.65, 0.2), 0, 0, 0, 0); + style_minimap_camera->set_border_color(Color(0.65, 0.65, 0.65, 0.45)); + style_minimap_node = make_flat_stylebox(Color(1, 1, 1), 0, 0, 0, 0); + } else { + style_minimap_camera = make_flat_stylebox(Color(0.38, 0.38, 0.38, 0.2), 0, 0, 0, 0); + style_minimap_camera->set_border_color(Color(0.38, 0.38, 0.38, 0.45)); + style_minimap_node = make_flat_stylebox(Color(0, 0, 0), 0, 0, 0, 0); + } + style_minimap_camera->set_border_width_all(1); + style_minimap_node->set_corner_radius_all(1); + theme->set_stylebox("camera", "GraphEditMinimap", style_minimap_camera); + theme->set_stylebox("node", "GraphEditMinimap", style_minimap_node); + Ref<Texture2D> resizer_icon = theme->get_icon("GuiResizer", "EditorIcons"); + theme->set_icon("resizer", "GraphEditMinimap", flip_icon(resizer_icon, true, true)); + theme->set_color("resizer_color", "GraphEditMinimap", Color(1, 1, 1, 0.65)); + + // GraphNode const float mv = dark_theme ? 0.0 : 1.0; const float mv2 = 1.0 - mv; const int gn_margin_side = 28; diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp index 84517f36ea..e9b6f6b5e9 100644 --- a/editor/export_template_manager.cpp +++ b/editor/export_template_manager.cpp @@ -661,8 +661,8 @@ ExportTemplateManager::ExportTemplateManager() { installed_scroll->set_enable_h_scroll(false); installed_vb->set_h_size_flags(Control::SIZE_EXPAND_FILL); - get_cancel()->set_text(TTR("Close")); - get_ok()->set_text(TTR("Install From File")); + get_cancel_button()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Install From File")); remove_confirm = memnew(ConfirmationDialog); remove_confirm->set_title(TTR("Remove Template")); @@ -690,7 +690,7 @@ ExportTemplateManager::ExportTemplateManager() { template_downloader = memnew(AcceptDialog); template_downloader->set_title(TTR("Download Templates")); - template_downloader->get_ok()->set_text(TTR("Close")); + template_downloader->get_ok_button()->set_text(TTR("Close")); template_downloader->set_exclusive(true); add_child(template_downloader); template_downloader->connect("cancelled", callable_mp(this, &ExportTemplateManager::_window_template_downloader_closed)); diff --git a/editor/fileserver/editor_file_server.h b/editor/fileserver/editor_file_server.h index ca5a891856..6d3c0d0d47 100644 --- a/editor/fileserver/editor_file_server.h +++ b/editor/fileserver/editor_file_server.h @@ -47,11 +47,11 @@ class EditorFileServer : public Object { }; struct ClientData { - Thread *thread; + Thread *thread = nullptr; Ref<StreamPeerTCP> connection; Map<int, FileAccess *> files; - EditorFileServer *efs; - bool quit; + EditorFileServer *efs = nullptr; + bool quit = false; }; Ref<TCP_Server> server; diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 2052319e3e..6c8bd1901e 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -68,6 +68,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory } subdirectory_item->set_text(0, dname); + subdirectory_item->set_structured_text_bidi_override(0, STRUCTURED_TEXT_FILE); subdirectory_item->set_icon(0, get_theme_icon("Folder", "EditorIcons")); subdirectory_item->set_icon_modulate(0, get_theme_color("folder_icon_modulate", "FileDialog")); subdirectory_item->set_selectable(0, true); @@ -136,6 +137,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory TreeItem *file_item = tree->create_item(subdirectory_item); file_item->set_text(0, fi.name); + file_item->set_structured_text_bidi_override(0, STRUCTURED_TEXT_FILE); file_item->set_icon(0, _get_tree_item_icon(!fi.import_broken, fi.type)); String file_metadata = lpath.plus_file(fi.name); file_item->set_metadata(0, file_metadata); @@ -320,6 +322,8 @@ void FileSystemDock::_update_display_mode(bool p_force) { void FileSystemDock::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_ENTER_TREE: { if (initialized) { return; @@ -348,8 +352,13 @@ void FileSystemDock::_notification(int p_what) { file_list_search_box->set_clear_button_enabled(true); file_list_button_sort->set_icon(get_theme_icon("Sort", ei)); - button_hist_next->set_icon(get_theme_icon("Forward", ei)); - button_hist_prev->set_icon(get_theme_icon("Back", ei)); + if (is_layout_rtl()) { + button_hist_next->set_icon(get_theme_icon("Back", ei)); + button_hist_prev->set_icon(get_theme_icon("Forward", ei)); + } else { + button_hist_next->set_icon(get_theme_icon("Forward", ei)); + button_hist_prev->set_icon(get_theme_icon("Back", ei)); + } file_list_popup->connect("id_pressed", callable_mp(this, &FileSystemDock::_file_list_rmb_option)); tree_popup->connect("id_pressed", callable_mp(this, &FileSystemDock::_tree_rmb_option)); @@ -402,8 +411,13 @@ void FileSystemDock::_notification(int p_what) { String ei = "EditorIcons"; button_reload->set_icon(get_theme_icon("Reload", ei)); button_toggle_display_mode->set_icon(get_theme_icon("Panels2", ei)); - button_hist_next->set_icon(get_theme_icon("Forward", ei)); - button_hist_prev->set_icon(get_theme_icon("Back", ei)); + if (is_layout_rtl()) { + button_hist_next->set_icon(get_theme_icon("Back", ei)); + button_hist_prev->set_icon(get_theme_icon("Forward", ei)); + } else { + button_hist_next->set_icon(get_theme_icon("Forward", ei)); + button_hist_prev->set_icon(get_theme_icon("Back", ei)); + } if (file_list_display_mode == FILE_LIST_DISPLAY_LIST) { button_file_list_display_mode->set_icon(get_theme_icon("FileThumbnail", "EditorIcons")); } else { @@ -1491,7 +1505,8 @@ void FileSystemDock::_move_with_overwrite() { _move_operation_confirm(to_move_path, true); } -bool FileSystemDock::_check_existing() { +Vector<String> FileSystemDock::_check_existing() { + Vector<String> conflicting_items; String &p_to_path = to_move_path; for (int i = 0; i < to_move.size(); i++) { String ol_pth = to_move[i].path.ends_with("/") ? to_move[i].path.substr(0, to_move[i].path.length() - 1) : to_move[i].path; @@ -1501,21 +1516,24 @@ bool FileSystemDock::_check_existing() { String old_path = (p_item.is_file || p_item.path.ends_with("/")) ? p_item.path : (p_item.path + "/"); String new_path = (p_item.is_file || p_new_path.ends_with("/")) ? p_new_path : (p_new_path + "/"); - if (p_item.is_file && FileAccess::exists(new_path)) { - return false; - } else if (!p_item.is_file && DirAccess::exists(new_path)) { - return false; + if ((p_item.is_file && FileAccess::exists(new_path)) || + (!p_item.is_file && DirAccess::exists(new_path))) { + conflicting_items.push_back(old_path); } } - return true; + return conflicting_items; } void FileSystemDock::_move_operation_confirm(const String &p_to_path, bool p_overwrite) { if (!p_overwrite) { to_move_path = p_to_path; - bool can_move = _check_existing(); - if (!can_move) { + Vector<String> conflicting_items = _check_existing(); + if (!conflicting_items.empty()) { // Ask to do something. + overwrite_dialog->set_text(vformat( + TTR("The following files or folders conflict with items in the target location '%s':\n\n%s\n\nDo you wish to overwrite them?"), + to_move_path, + String("\n").join(conflicting_items))); overwrite_dialog->popup_centered(); return; } @@ -2354,16 +2372,16 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str } if (p_paths.size() == 1) { - p_popup->add_icon_item(get_theme_icon("ActionCopy", "EditorIcons"), TTR("Copy Path"), FILE_COPY_PATH); + p_popup->add_icon_shortcut(get_theme_icon("ActionCopy", "EditorIcons"), ED_GET_SHORTCUT("filesystem_dock/copy_path"), FILE_COPY_PATH); if (p_paths[0] != "res://") { - p_popup->add_icon_item(get_theme_icon("Rename", "EditorIcons"), TTR("Rename..."), FILE_RENAME); - p_popup->add_icon_item(get_theme_icon("Duplicate", "EditorIcons"), TTR("Duplicate..."), FILE_DUPLICATE); + p_popup->add_icon_shortcut(get_theme_icon("Rename", "EditorIcons"), ED_GET_SHORTCUT("filesystem_dock/rename"), FILE_RENAME); + p_popup->add_icon_shortcut(get_theme_icon("Duplicate", "EditorIcons"), ED_GET_SHORTCUT("filesystem_dock/duplicate"), FILE_DUPLICATE); } } if (p_paths.size() > 1 || p_paths[0] != "res://") { p_popup->add_icon_item(get_theme_icon("MoveUp", "EditorIcons"), TTR("Move To..."), FILE_MOVE); - p_popup->add_icon_item(get_theme_icon("Remove", "EditorIcons"), TTR("Delete"), FILE_REMOVE); + p_popup->add_icon_shortcut(get_theme_icon("Remove", "EditorIcons"), ED_GET_SHORTCUT("filesystem_dock/delete"), FILE_REMOVE); } if (p_paths.size() == 1) { @@ -2497,7 +2515,11 @@ void FileSystemDock::_tree_gui_input(Ref<InputEvent> p_event) { _tree_rmb_option(FILE_REMOVE); } else if (ED_IS_SHORTCUT("filesystem_dock/rename", p_event)) { _tree_rmb_option(FILE_RENAME); + } else { + return; } + + accept_event(); } } @@ -2512,7 +2534,11 @@ void FileSystemDock::_file_list_gui_input(Ref<InputEvent> p_event) { _file_list_rmb_option(FILE_REMOVE); } else if (ED_IS_SHORTCUT("filesystem_dock/rename", p_event)) { _file_list_rmb_option(FILE_RENAME); + } else { + return; } + + accept_event(); } } @@ -2665,10 +2691,11 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { editor = p_editor; path = "res://"; - ED_SHORTCUT("filesystem_dock/copy_path", TTR("Copy Path"), KEY_MASK_CMD | KEY_C); + // `KEY_MASK_CMD | KEY_C` conflicts with other editor shortcuts. + ED_SHORTCUT("filesystem_dock/copy_path", TTR("Copy Path"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_C); ED_SHORTCUT("filesystem_dock/duplicate", TTR("Duplicate..."), KEY_MASK_CMD | KEY_D); - ED_SHORTCUT("filesystem_dock/delete", TTR("Delete"), KEY_DELETE); - ED_SHORTCUT("filesystem_dock/rename", TTR("Rename")); + ED_SHORTCUT("filesystem_dock/delete", TTR("Move to Trash"), KEY_DELETE); + ED_SHORTCUT("filesystem_dock/rename", TTR("Rename..."), KEY_F2); VBoxContainer *top_vbc = memnew(VBoxContainer); add_child(top_vbc); @@ -2692,6 +2719,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { toolbar_hbc->add_child(button_hist_next); current_path = memnew(LineEdit); + current_path->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); current_path->set_h_size_flags(SIZE_EXPAND_FILL); _set_current_path_text(path); toolbar_hbc->add_child(current_path); @@ -2809,7 +2837,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { add_child(remove_dialog); move_dialog = memnew(EditorDirDialog); - move_dialog->get_ok()->set_text(TTR("Move")); + move_dialog->get_ok_button()->set_text(TTR("Move")); add_child(move_dialog); move_dialog->connect("dir_selected", callable_mp(this, &FileSystemDock::_move_operation_confirm), make_binds(false)); @@ -2819,14 +2847,13 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { rename_dialog_text = memnew(LineEdit); rename_dialog_vb->add_margin_child(TTR("Name:"), rename_dialog_text); - rename_dialog->get_ok()->set_text(TTR("Rename")); + rename_dialog->get_ok_button()->set_text(TTR("Rename")); add_child(rename_dialog); rename_dialog->register_text_enter(rename_dialog_text); rename_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_rename_operation_confirm)); overwrite_dialog = memnew(ConfirmationDialog); - overwrite_dialog->set_text(TTR("There is already file or folder with the same name in this location.")); - overwrite_dialog->get_ok()->set_text(TTR("Overwrite")); + overwrite_dialog->get_ok_button()->set_text(TTR("Overwrite")); add_child(overwrite_dialog); overwrite_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_move_with_overwrite)); @@ -2836,7 +2863,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { duplicate_dialog_text = memnew(LineEdit); duplicate_dialog_vb->add_margin_child(TTR("Name:"), duplicate_dialog_text); - duplicate_dialog->get_ok()->set_text(TTR("Duplicate")); + duplicate_dialog->get_ok_button()->set_text(TTR("Duplicate")); add_child(duplicate_dialog); duplicate_dialog->register_text_enter(duplicate_dialog_text); duplicate_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_duplicate_operation_confirm)); diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index 1db1485426..4b93931ba7 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -236,7 +236,7 @@ private: void _rename_operation_confirm(); void _duplicate_operation_confirm(); void _move_with_overwrite(); - bool _check_existing(); + Vector<String> _check_existing(); void _move_operation_confirm(const String &p_to_path, bool p_overwrite = false); void _tree_rmb_option(int p_option); @@ -270,8 +270,8 @@ private: String path; StringName type; Vector<String> sources; - bool import_broken; - uint64_t modified_time; + bool import_broken = false; + uint64_t modified_time = 0; bool operator<(const FileInfo &fi) const { return NaturalNoCaseComparator()(name, fi.name); diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index c2ccbdb08c..076b873eac 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -86,11 +86,6 @@ static bool find_next(const String &line, String pattern, int from, bool match_c } //-------------------------------------------------------------------------------- -FindInFiles::FindInFiles() { - _searching = false; - _whole_words = true; - _match_case = true; -} void FindInFiles::set_search_text(String p_pattern) { _pattern = p_pattern; @@ -388,7 +383,7 @@ FindInFilesDialog::FindInFilesDialog() { _replace_button = add_button(TTR("Replace..."), false, "replace"); _replace_button->set_disabled(true); - Button *cancel_button = get_ok(); + Button *cancel_button = get_ok_button(); cancel_button->set_text(TTR("Cancel")); _mode = SEARCH_MODE; @@ -571,6 +566,7 @@ FindInFilesPanel::FindInFilesPanel() { _search_text_label = memnew(Label); _search_text_label->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("source", "EditorFonts")); + _search_text_label->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("source_size", "EditorFonts")); hbc->add_child(_search_text_label); _progress_bar = memnew(ProgressBar); @@ -599,6 +595,7 @@ FindInFilesPanel::FindInFilesPanel() { _results_display = memnew(Tree); _results_display->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("source", "EditorFonts")); + _results_display->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("source_size", "EditorFonts")); _results_display->set_v_size_flags(SIZE_EXPAND_FILL); _results_display->connect("item_selected", callable_mp(this, &FindInFilesPanel::_on_result_selected)); _results_display->connect("item_edited", callable_mp(this, &FindInFilesPanel::_on_item_edited)); @@ -755,10 +752,11 @@ void FindInFilesPanel::draw_result_text(Object *item_obj, Rect2 rect) { Result r = E->value(); String item_text = item->get_text(_with_replace ? 1 : 0); Ref<Font> font = _results_display->get_theme_font("font"); + int font_size = _results_display->get_theme_font_size("font_size"); Rect2 match_rect = rect; - match_rect.position.x += font->get_string_size(item_text.left(r.begin_trimmed)).x; - match_rect.size.x = font->get_string_size(_search_text_label->get_text()).x; + match_rect.position.x += font->get_string_size(item_text.left(r.begin_trimmed), font_size).x; + match_rect.size.x = font->get_string_size(_search_text_label->get_text(), font_size).x; match_rect.position.y += 1 * EDSCALE; match_rect.size.y -= 2 * EDSCALE; @@ -781,7 +779,19 @@ void FindInFilesPanel::_on_item_edited() { } void FindInFilesPanel::_on_finished() { - _status_label->set_text(TTR("Search complete")); + String results_text; + int result_count = _result_items.size(); + int file_count = _file_items.size(); + + if (result_count == 1 && file_count == 1) { + results_text = vformat(TTR("%d match in %d file."), result_count, file_count); + } else if (result_count != 1 && file_count == 1) { + results_text = vformat(TTR("%d matches in %d file."), result_count, file_count); + } else { + results_text = vformat(TTR("%d matches in %d files."), result_count, file_count); + } + + _status_label->set_text(results_text); update_replace_buttons(); set_progress_visible(false); _refresh_button->show(); diff --git a/editor/find_in_files.h b/editor/find_in_files.h index 3b949a35b4..d4755c7b50 100644 --- a/editor/find_in_files.h +++ b/editor/find_in_files.h @@ -42,8 +42,6 @@ public: static const char *SIGNAL_RESULT_FOUND; static const char *SIGNAL_FINISHED; - FindInFiles(); - void set_search_text(String p_pattern); void set_whole_words(bool p_whole_word); void set_match_case(bool p_match_case); @@ -76,15 +74,15 @@ private: String _pattern; Set<String> _extension_filter; String _root_dir; - bool _whole_words; - bool _match_case; + bool _whole_words = true; + bool _match_case = true; // State - bool _searching; + bool _searching = false; String _current_dir; Vector<PackedStringArray> _folders_stack; Vector<String> _files_to_scan; - int _initial_files_count; + int _initial_files_count = 0; }; class LineEdit; @@ -188,10 +186,10 @@ private: void _on_replace_all_clicked(); struct Result { - int line_number; - int begin; - int end; - int begin_trimmed; + int line_number = 0; + int begin = 0; + int end = 0; + int begin_trimmed = 0; }; void apply_replaces_in_file(String fpath, const Vector<Result> &locations, String new_text); diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp index 4e6e2d0237..32c50321d7 100644 --- a/editor/groups_editor.cpp +++ b/editor/groups_editor.cpp @@ -361,9 +361,16 @@ void GroupDialog::_delete_group_item(const String &p_name) { void GroupDialog::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_TRANSLATION_CHANGED: + case Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_ENTER_TREE: { - add_button->set_icon(groups->get_theme_icon("Forward", "EditorIcons")); - remove_button->set_icon(groups->get_theme_icon("Back", "EditorIcons")); + if (is_layout_rtl()) { + add_button->set_icon(groups->get_theme_icon("Back", "EditorIcons")); + remove_button->set_icon(groups->get_theme_icon("Forward", "EditorIcons")); + } else { + add_button->set_icon(groups->get_theme_icon("Forward", "EditorIcons")); + remove_button->set_icon(groups->get_theme_icon("Back", "EditorIcons")); + } add_filter->set_right_icon(groups->get_theme_icon("Search", "EditorIcons")); add_filter->set_clear_button_enabled(true); @@ -533,7 +540,7 @@ GroupDialog::GroupDialog() { error = memnew(ConfirmationDialog); add_child(error); - error->get_ok()->set_text(TTR("Close")); + error->get_ok_button()->set_text(TTR("Close")); } //////////////////////////////////////////////////////////////////////////////// diff --git a/editor/icons/AspectRatioContainer.svg b/editor/icons/AspectRatioContainer.svg new file mode 100644 index 0000000000..a7aef8e028 --- /dev/null +++ b/editor/icons/AspectRatioContainer.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-1.1046 0-2 .89543-2 2h2zm2 0v2h2v-2zm4 0v2h2c0-1.1046-.89543-2-2-2zm-8 4v2h2v-2zm8 0v2h2v-2zm-8 4v2h2v-2zm8 0v2h2v-2zm-8 4c0 1.1046.89543 2 2 2v-2zm4 0v2h2v-2zm4 0v2c1.1046 0 2-.89543 2-2z" fill="#a5efac"/></svg> diff --git a/editor/icons/AudioStreamMP3.svg b/editor/icons/AudioStreamMP3.svg new file mode 100644 index 0000000000..900d5873fe --- /dev/null +++ b/editor/icons/AudioStreamMP3.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><path d="m11.971 1.002c-.08326.00207-.16593.014541-.24609.037109l-7 2c-.42881.12287-.7244.51487-.72461.96094v5.5508c-.16454-.033679-.33205-.050692-.5-.050781-1.3807 0-2.5 1.1193-2.5 2.5-.00000475 1.3807 1.1193 2.5 2.5 2.5 1.3456-.0013 2.4488-1.0674 2.4961-2.4121.0025906-.029226.003894-.058551.0039062-.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5c-.000916-.56314-.4664-1.0145-1.0293-.99805zm-1.4707 6.998c-.277 0-.5.223-.5.5v5c0 .277.223.5.5.5s.5-.223.5-.5v-5c0-.277-.223-.5-.5-.5zm2 1c-.277 0-.5.223-.5.5v3c0 .277.223.5.5.5s.5-.223.5-.5v-3c0-.277-.223-.5-.5-.5zm-4 1c-.277 0-.5.223-.5.5v1c0 .277.223.5.5.5s.5-.223.5-.5v-1c0-.277-.223-.5-.5-.5zm6 0c-.277 0-.5.223-.5.5v1c0 .277.223.5.5.5s.5-.223.5-.5v-1c0-.277-.223-.5-.5-.5z" fill="url(#a)"/></svg> diff --git a/editor/icons/AutoEndBackwards.svg b/editor/icons/AutoEndBackwards.svg new file mode 100644 index 0000000000..c6de305069 --- /dev/null +++ b/editor/icons/AutoEndBackwards.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2 14c-.552262-.000055-.999945-.447738-1-1v-10c.000055-.5522619.447738-.9999448 1-1h8c.303863-.0001753.591325.1378063.78125.375l4 5c.291397.3649711.291397.8830289 0 1.248l-4 5c-.189538.237924-.477058.376652-.78125.37695h-8zm1-2h6.5195004l3.1991996-4-3.1991996-4h-6.5195004zm6.0000004-2v-4l1.9999996 2z" fill-rule="evenodd"/><path d="m3.8685125 4.9095434h4.1550816v1.1637426h-2.6154217v1.1117544h2.4594562v1.1637428h-2.4594562v1.3676976h2.7034024v1.1637432h-4.2430623z" stroke-width=".204755"/></g></svg> diff --git a/editor/icons/AutoPlayBackwards.svg b/editor/icons/AutoPlayBackwards.svg new file mode 100644 index 0000000000..20602ba348 --- /dev/null +++ b/editor/icons/AutoPlayBackwards.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13.999798 2a-1.0001 1.0001 0 0 1 1 1v10a-1.0001 1.0001 0 0 1 -1 1h-8.0000003a-1.0001 1.0001 0 0 1 -.78125-.375l-4-5a-1.0001 1.0001 0 0 1 0-1.248l4-5a-1.0001 1.0001 0 0 1 .78125-.37695h8.0000003zm-1 2h-6.5195003l-3.1992 4 3.1992 4h6.5195003zm-3.0000003 1c1.1046003 0 2.0000003.8954 2.0000003 2v4h-1v-2h-2.0000003v2h-1v-4c0-1.1046.89543-2 2-2zm0 1a-1 1 0 0 0 -1 1v1h2.0000003v-1a-1 1 0 0 0 -1.0000003-1zm-3 0v4l-2-2z" fill="#e0e0e0" fill-rule="evenodd"/></svg> diff --git a/editor/icons/BitmapFont.svg b/editor/icons/BitmapFont.svg deleted file mode 100644 index d3ab5f7dd7..0000000000 --- a/editor/icons/BitmapFont.svg +++ /dev/null @@ -1 +0,0 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1037.4v4h1v-1h1v-1h4v10h-1v1h-1v1h6v-1h-1v-1h-1v-10h4v1h1v1h1v-4z" fill="#84c2ff" transform="translate(0 -1036.4)"/></svg> diff --git a/editor/icons/CubeMesh.svg b/editor/icons/BoxMesh.svg index d540858248..d540858248 100644 --- a/editor/icons/CubeMesh.svg +++ b/editor/icons/BoxMesh.svg diff --git a/editor/icons/CanvasGroup.svg b/editor/icons/CanvasGroup.svg new file mode 100644 index 0000000000..232ae53231 --- /dev/null +++ b/editor/icons/CanvasGroup.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v6h-6v8h8v-6h6v-8zm2 2h4v4h-4z" fill="#a5b8f3" fill-opacity=".588235"/><path d="m1 1v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.00002341-.446 0-1 0s-1-.00002341-1 0zm12 0v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.00002341-.446 0-1 0s-1-.00002341-1 0zm-12 12v2c0 .000023.446 0 1 0s1 .000023 1 0v-2c0-.000023-.446 0-1 0s-1-.000023-1 0zm12 0v2c0 .000023.446 0 1 0s1 .000023 1 0v-2c0-.000023-.446 0-1 0s-1-.000023-1 0z" fill="#a5b7f4"/></svg> diff --git a/editor/icons/CodeEdit.svg b/editor/icons/CodeEdit.svg new file mode 100644 index 0000000000..0750b072e7 --- /dev/null +++ b/editor/icons/CodeEdit.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m29 1042.4h1v1h-1z" fill="#fefeff"/><path d="m3 1c-1.1046 0-2 .8954-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10zm2 1-1 1 1 1-1 1 1 1 2-2zm2 3v1h2v-1z" fill="#a5efac" transform="translate(0 1036.4)"/></g></svg> diff --git a/editor/icons/DynamicFont.svg b/editor/icons/DynamicFont.svg deleted file mode 100644 index bbaa12ea1b..0000000000 --- a/editor/icons/DynamicFont.svg +++ /dev/null @@ -1 +0,0 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m1 1037.4v2 1h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1-1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2z" fill="#e0e0e0"/><path d="m4 5v2 1h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1-1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2z" fill="#84c2ff" transform="translate(0 1036.4)"/></g></svg> diff --git a/editor/icons/EditorCurveHandle.svg b/editor/icons/EditorCurveHandle.svg index ea69f4e4cc..e0f3256807 100644 --- a/editor/icons/EditorCurveHandle.svg +++ b/editor/icons/EditorCurveHandle.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" fill="#fefefe" r="2.75" stroke="#000" stroke-linecap="square"/></svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#fefefe" r="4.4" stroke="#000" stroke-linecap="square" stroke-width="1.6"/></svg> diff --git a/editor/icons/EditorPathSharpHandle.svg b/editor/icons/EditorPathSharpHandle.svg index 328dc04677..5166930cca 100644 --- a/editor/icons/EditorPathSharpHandle.svg +++ b/editor/icons/EditorPathSharpHandle.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><path d="m-3.035534-10.106602h6.071068v6.071068h-6.071068z" fill="#fefefe" stroke="#000" stroke-linecap="square" transform="matrix(-.70710678 .70710678 -.70710678 -.70710678 0 0)"/></svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14.868629 8.0000002-6.8686288 6.8686288-6.8686293-6.8686288 6.8686293-6.8686293z" fill="#fefefe" stroke="#000" stroke-linecap="square" stroke-width="1.6"/></svg> diff --git a/editor/icons/EditorPathSmoothHandle.svg b/editor/icons/EditorPathSmoothHandle.svg index b498345d5a..2ab4f3a96a 100644 --- a/editor/icons/EditorPathSmoothHandle.svg +++ b/editor/icons/EditorPathSmoothHandle.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><path d="m1.5-8.5h7v7h-7z" fill="#fefefe" stroke="#000" stroke-linecap="square" transform="rotate(90)"/></svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13.6 2.4v11.2h-11.2v-11.2z" fill="#fefefe" stroke="#000" stroke-linecap="square" stroke-width="1.6"/></svg> diff --git a/editor/icons/DynamicFontData.svg b/editor/icons/FontData.svg index 7ee88582a5..7ee88582a5 100644 --- a/editor/icons/DynamicFontData.svg +++ b/editor/icons/FontData.svg diff --git a/editor/icons/GridMinimap.svg b/editor/icons/GridMinimap.svg new file mode 100644 index 0000000000..72f107066d --- /dev/null +++ b/editor/icons/GridMinimap.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 2.1992188v2.6152343l-2.625 1.3125v-2.6152343zm-12 4.0644531 2.625 1.3125v2.5507811l-2.625-1.3124999zm12 0v2.5507812l-2.625 1.3124999v-2.5507811zm-8 1.4550781h4v2.640625h-4zm-4 2.560547 2.625 1.3125v2.521484l-2.625-1.3125zm12 0v2.521484l-2.625 1.3125v-2.521484zm-8 1.455078h4v2.640625h-4zm1.7014535-8.109375h2.2985465v2.734375h-4.15625s-.7487346.647119-.8746377.640625c-.1310411-.0067594-1.5097373-1.4558594-1.5097373-1.4558594l-1.459375-.7296875v-2.6152343l.068419.034223s.026411-.4573464.062111-.6760553c.0346282-.2121439.1970747-.59225724.1970747-.59225724l-1.0483078-.52372301c-.0795772-.04012218-.1668141-.06276382-.2558594-.06640625-.35427845-.01325803-.64865004.27047362-.6484375.625v12c.00021484.236623.13402736.45284.34570312.558594l3.99999998 2c.086686.043505.1823067.06624.2792969.066406h6c.09699-.000166.192611-.0229.279297-.06641l4-2c.211676-.10575.345488-.321967.345703-.55859v-12c-.000468-.46423753-.488958-.76598317-.904297-.55859375l-3.869141 1.93359375h-2.9709527s.033448.4166167.015891.625c-.029188.3464401-.1950466.625-.1950468.625z" fill="#e0e0e0"/><path d="m5 6s-2.21875-2.1616704-2.21875-3.2425057c0-1.0808352 0-2.6072392 2.21875-2.6072392s2.21875 1.526404 2.21875 2.6072392c0 1.0808353-2.21875 3.2425057-2.21875 3.2425057z" fill="#fff" fill-opacity=".68627"/></svg> diff --git a/editor/icons/GuiResizerMirrored.svg b/editor/icons/GuiResizerMirrored.svg new file mode 100644 index 0000000000..8227f5b648 --- /dev/null +++ b/editor/icons/GuiResizerMirrored.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill-opacity=".588" fill="#fff" d="M4 3a1 1 0 0 1 1 1v6h6a1 1 0 0 1 0 2H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/></svg> diff --git a/editor/icons/GuiTabMirrored.svg b/editor/icons/GuiTabMirrored.svg new file mode 100644 index 0000000000..a0011a5b2d --- /dev/null +++ b/editor/icons/GuiTabMirrored.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path fill-opacity=".196" fill="#fff" d="M2 0v8H0V0zm5.014.002a-1 1 0 0 1 .693.291-1 1 0 0 1 0 1.414L5.414 4l2.293 2.293a-1 1 0 0 1 0 1.414-1 1 0 0 1-1.414 0l-3-3a-1 1 0 0 1 0-1.414l3-3a-1 1 0 0 1 .72-.29z"/></svg> diff --git a/editor/icons/GuiToggleOffMirrored.svg b/editor/icons/GuiToggleOffMirrored.svg new file mode 100644 index 0000000000..d650de9cda --- /dev/null +++ b/editor/icons/GuiToggleOffMirrored.svg @@ -0,0 +1 @@ +<svg height="26" width="42" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="matrix(-1 0 0 1 42 0)"><rect fill-opacity=".188" height="16" rx="9" width="38" x="2" y="5"/><circle cx="10" cy="13" r="5"/></g></svg> diff --git a/editor/icons/GuiToggleOnMirrored.svg b/editor/icons/GuiToggleOnMirrored.svg new file mode 100644 index 0000000000..7339b6efd2 --- /dev/null +++ b/editor/icons/GuiToggleOnMirrored.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="42" height="26"><path fill="#e0e0e0" d="M31 5c4.986 0 9 3.568 9 8s-4.014 8-9 8H11c-4.986 0-9-3.568-9-8s4.014-8 9-8zM10 8a-5 5 0 0 0-5 5-5 5 0 0 0 5 5-5 5 0 0 0 5-5-5 5 0 0 0-5-5z"/></svg> diff --git a/editor/icons/GuiTreeArrowLeft.svg b/editor/icons/GuiTreeArrowLeft.svg new file mode 100644 index 0000000000..d0f7b36fab --- /dev/null +++ b/editor/icons/GuiTreeArrowLeft.svg @@ -0,0 +1 @@ +<svg height="12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m7 9-3-3 3-3" style="fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.392"/></svg> diff --git a/editor/icons/Texture3D.svg b/editor/icons/Texture3D.svg index 6bdc599f6d..795dd62ba5 100644 --- a/editor/icons/Texture3D.svg +++ b/editor/icons/Texture3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".203212" transform="scale(.9167105 1.0908569)"><path d="m5.8175194 8.9717502q-.2194689 0-.4633233-.032514-.2438544-.0243854-.4714519-.0731562-.2275974-.0487709-.4145524-.1056703-.1869551-.0568993-.2926253-.1056702l.2357259-1.0079315q.2113405.089413.5364797.1950835.3332677.097542.8209765.097542.5608651 0 .8209764-.2113404.2601114-.2113405.2601114-.5689936 0-.219469-.097542-.3657816-.089413-.1544415-.2519826-.2438547-.1625696-.0975418-.3901671-.1300557-.2194689-.0406424-.4714518-.0406424h-.4714519v-.9754176h.5364797q.1788266 0 .3413962-.032514.1706981-.032514.3007537-.1056703.1300557-.081285.203212-.2113404.081285-.1381842.081285-.3413962 0-.1544411-.065028-.2682398-.0650278-.1137987-.1706981-.186955-.0975417-.0731563-.2357259-.1056702-.1300557-.0406424-.2682398-.0406424-.3495247 0-.6502784.1056702-.2926253.1056703-.5364797.2601114l-.4308095-.8860043q.1300557-.0812848.3007538-.1706981.1788266-.0894133.390167-.1625696.2113405-.0731563.4470664-.1219272.2438544-.048771.5120943-.048771.4958373 0 .8534904.1219272.3657816.1137987.6015075.3332677.2357259.2113405.3495246.5039657.1137987.2844968.1137987.625893 0 .3332677-.186955.6502784-.186955.3088822-.5039657.4714518.4389379.1788266.6746638.5364797.2438544.3495246.2438544.8453619 0 .3901671-.1300557.7234347-.1300557.3251393-.406424.5689937-.2763683.235726-.7071777.3739101-.422681.1300557-1.0079316.1300557z"/><path d="m10.502445 7.817506q.08941.00813.203212.016257.121927 0 .284497 0 .951032 0 1.406227-.4795803.463323-.4795803.463323-1.3249422 0-.8860044-.438938-1.3411992-.438938-.4551949-1.38997-.4551949-.130055 0-.26824.00813-.138184 0-.260111.016257zm3.665945-1.7882655q0 .7315631-.227598 1.2761713-.227597.5446082-.650278.9022613-.414553.3576531-1.01606.5364797-.601508.1788265-1.349328.1788265-.341396 0-.796591-.032514-.4551948-.0243853-.8941328-.1137986v-5.486724q.438938-.081285.9103898-.1056702.47958-.032514.820976-.032514.723435 0 1.308686.1625696.593379.1625696 1.01606.5120943.422681.3495246.650278.8941328.227598.5446081.227598 1.3086853z"/></g></g></svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(-.359546 .287637)"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".203212" transform="scale(.9167105 1.0908569)"><path d="m5.8175194 8.9717502q-.2194689 0-.4633233-.032514-.2438544-.0243854-.4714519-.0731562-.2275974-.0487709-.4145524-.1056703-.1869551-.0568993-.2926253-.1056702l.2357259-1.0079315q.2113405.089413.5364797.1950835.3332677.097542.8209765.097542.5608651 0 .8209764-.2113404.2601114-.2113405.2601114-.5689936 0-.219469-.097542-.3657816-.089413-.1544415-.2519826-.2438547-.1625696-.0975418-.3901671-.1300557-.2194689-.0406424-.4714518-.0406424h-.4714519v-.9754176h.5364797q.1788266 0 .3413962-.032514.1706981-.032514.3007537-.1056703.1300557-.081285.203212-.2113404.081285-.1381842.081285-.3413962 0-.1544411-.065028-.2682398-.0650278-.1137987-.1706981-.186955-.0975417-.0731563-.2357259-.1056702-.1300557-.0406424-.2682398-.0406424-.3495247 0-.6502784.1056702-.2926253.1056703-.5364797.2601114l-.4308095-.8860043q.1300557-.0812848.3007538-.1706981.1788266-.0894133.390167-.1625696.2113405-.0731563.4470664-.1219272.2438544-.048771.5120943-.048771.4958373 0 .8534904.1219272.3657816.1137987.6015075.3332677.2357259.2113405.3495246.5039657.1137987.2844968.1137987.625893 0 .3332677-.186955.6502784-.186955.3088822-.5039657.4714518.4389379.1788266.6746638.5364797.2438544.3495246.2438544.8453619 0 .3901671-.1300557.7234347-.1300557.3251393-.406424.5689937-.2763683.235726-.7071777.3739101-.422681.1300557-1.0079316.1300557z"/><path d="m10.502445 7.817506q.08941.00813.203212.016257.121927 0 .284497 0 .951032 0 1.406227-.4795803.463323-.4795803.463323-1.3249422 0-.8860044-.438938-1.3411992-.438938-.4551949-1.38997-.4551949-.130055 0-.26824.00813-.138184 0-.260111.016257zm3.665945-1.7882655q0 .7315631-.227598 1.2761713-.227597.5446082-.650278.9022613-.414553.3576531-1.01606.5364797-.601508.1788265-1.349328.1788265-.341396 0-.796591-.032514-.4551948-.0243853-.8941328-.1137986v-5.486724q.438938-.081285.9103898-.1056702.47958-.032514.820976-.032514.723435 0 1.308686.1625696.593379.1625696 1.01606.5120943.422681.3495246.650278.8941328.227598.5446081.227598 1.3086853z"/></g></g></svg> diff --git a/editor/icons/TextureArray.svg b/editor/icons/TextureArray.svg index 86d4875e12..a71860023b 100644 --- a/editor/icons/TextureArray.svg +++ b/editor/icons/TextureArray.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".207395" transform="matrix(1.6197742 0 0 .750929 -3.723153 1.832957)"><path d="m4.7302951 2.4553483h2.2481639v.9872012h-1.0701592v6.0559397h1.0701592v.9872008h-2.2481639z"/><path d="m10.138643 10.48569h-2.2481636v-.9872008h1.0701592v-6.0559397h-1.0701592v-.9872012h2.2481636z"/></g></g></svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(-.359546 .287637)"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".207395" transform="matrix(1.6197742 0 0 .750929 -3.723153 1.832957)"><path d="m4.9900159 2.5027746h1.85211v1.3316838h-.926055v5.3267353h.926055v1.3316833h-1.85211z"/><path d="m9.9289759 10.492877h-1.85211v-1.3316833h.926055v-5.3267353h-.926055v-1.3316838h1.85211z"/></g></g></svg> diff --git a/editor/icons/TextureProgress.svg b/editor/icons/TextureProgressBar.svg index 30d76e33b8..30d76e33b8 100644 --- a/editor/icons/TextureProgress.svg +++ b/editor/icons/TextureProgressBar.svg diff --git a/editor/import/collada.h b/editor/import/collada.h index aa0d42035f..29d49d4aa7 100644 --- a/editor/import/collada.h +++ b/editor/import/collada.h @@ -96,8 +96,8 @@ public: }; float aspect = 1; - float z_near = 0.1; - float z_far = 100; + float z_near = 0.05; + float z_far = 4000; CameraData() {} }; @@ -128,7 +128,7 @@ public: String name; struct Source { Vector<float> array; - int stride; + int stride = 0; }; Map<String, Source> sources; @@ -142,15 +142,15 @@ public: struct Primitives { struct SourceRef { String source; - int offset; + int offset = 0; }; String material; Map<String, SourceRef> sources; Vector<float> polygons; Vector<float> indices; - int count; - int vertex_size; + int count = 0; + int vertex_size = 0; }; Vector<Primitives> primitives; @@ -168,7 +168,7 @@ public: struct Source { Vector<String> sarray; Vector<float> array; - int stride; + int stride = 0; }; Map<String, Source> sources; @@ -200,14 +200,14 @@ public: struct Weights { struct SourceRef { String source; - int offset; + int offset = 0; }; String material; Map<String, SourceRef> sources; Vector<float> sets; Vector<float> indices; - int count; + int count = 0; } weights; Map<String, Transform> bone_rest_map; @@ -242,8 +242,8 @@ public: Color color; int uid = 0; struct Weight { - int bone_idx; - float weight; + int bone_idx = 0; + float weight = 0; bool operator<(const Weight w) const { return weight > w.weight; } //heaviest first }; @@ -313,7 +313,6 @@ public: struct Node { enum Type { - TYPE_NODE, TYPE_JOINT, TYPE_SKELETON, //this bone is not collada, it's added afterwards as optimization @@ -332,7 +331,7 @@ public: }; String id; - Op op; + Op op = OP_ROTATE; Vector<float> data; }; @@ -376,7 +375,7 @@ public: }; struct NodeGeometry : public Node { - bool controller; + bool controller = false; String source; struct Material { @@ -439,7 +438,7 @@ public: TYPE_MATRIX }; - float time; + float time = 0; Vector<float> data; Point2 in_tangent; Point2 out_tangent; @@ -464,10 +463,10 @@ public: float unit_scale = 1.0; Vector3::Axis up_axis = Vector3::AXIS_Y; - bool z_up; + bool z_up = false; struct Version { - int major, minor, rev; + int major = 0, minor = 0, rev = 0; bool operator<(const Version &p_ver) const { return (major == p_ver.major) ? ((minor == p_ver.minor) ? (rev < p_ver.rev) : minor < p_ver.minor) : major < p_ver.major; } Version(int p_major = 0, int p_minor = 0, int p_rev = 0) { diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index 12cbaaa885..4e93fe6f12 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -46,33 +46,28 @@ struct ColladaImport { Collada collada; - Node3D *scene; + Node3D *scene = nullptr; Vector<Ref<Animation>> animations; struct NodeMap { //String path; - Node3D *node; - int bone; + Node3D *node = nullptr; + int bone = -1; List<int> anim_tracks; - - NodeMap() { - node = nullptr; - bone = -1; - } }; - bool found_ambient; + bool found_ambient = false; Color ambient; - bool found_directional; - bool force_make_tangents; - bool apply_mesh_xform_to_vertices; - bool use_mesh_builtin_materials; - float bake_fps; + bool found_directional = false; + bool force_make_tangents = false; + bool apply_mesh_xform_to_vertices = true; + bool use_mesh_builtin_materials = false; + float bake_fps = 15; Map<String, NodeMap> node_map; //map from collada node to engine node Map<String, String> node_name_map; //map from collada node to engine node - Map<String, Ref<ArrayMesh>> mesh_cache; + Map<String, Ref<EditorSceneImporterMesh>> mesh_cache; Map<String, Ref<Curve3D>> curve_cache; Map<String, Ref<Material>> material_cache; Map<Collada::Node *, Skeleton3D *> skeleton_map; @@ -88,7 +83,7 @@ struct ColladaImport { Error _create_scene(Collada::Node *p_node, Node3D *p_parent); Error _create_resources(Collada::Node *p_node, bool p_use_compression); Error _create_material(const String &p_target); - Error _create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<ArrayMesh>> p_morph_meshes = Vector<Ref<ArrayMesh>>(), bool p_use_compression = false, bool p_use_mesh_material = false); + Error _create_mesh_surfaces(bool p_optimize, Ref<EditorSceneImporterMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<EditorSceneImporterMesh>> p_morph_meshes = Vector<Ref<EditorSceneImporterMesh>>(), bool p_use_compression = false, bool p_use_mesh_material = false); Error load(const String &p_path, int p_flags, bool p_force_make_tangents = false, bool p_use_compression = false); void _fix_param_animation_tracks(); void create_animation(int p_clip, bool p_make_tracks_in_all_bones, bool p_import_value_tracks); @@ -98,14 +93,6 @@ struct ColladaImport { Vector<String> missing_textures; void _pre_process_lights(Collada::Node *p_node); - - ColladaImport() { - found_ambient = false; - found_directional = false; - force_make_tangents = false; - apply_mesh_xform_to_vertices = true; - bake_fps = 15; - } }; Error ColladaImport::_populate_skeleton(Skeleton3D *p_skeleton, Collada::Node *p_node, int &r_bone, int p_parent) { @@ -291,8 +278,8 @@ Error ColladaImport::_create_scene(Collada::Node *p_node, Node3D *p_parent) { node = memnew(Path3D); } else { //mesh since nothing else - node = memnew(MeshInstance3D); - //Object::cast_to<MeshInstance3D>(node)->set_flag(GeometryInstance3D::FLAG_USE_BAKED_LIGHT, true); + node = memnew(EditorSceneImporterMeshNode); + //Object::cast_to<EditorSceneImporterMeshNode>(node)->set_flag(GeometryInstance3D::FLAG_USE_BAKED_LIGHT, true); } } break; case Collada::Node::TYPE_SKELETON: { @@ -453,7 +440,7 @@ Error ColladaImport::_create_material(const String &p_target) { return OK; } -Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<ArrayMesh>> p_morph_meshes, bool p_use_compression, bool p_use_mesh_material) { +Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<EditorSceneImporterMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<EditorSceneImporterMesh>> p_morph_meshes, bool p_use_compression, bool p_use_mesh_material) { bool local_xform_mirror = p_local_xform.basis.determinant() < 0; if (p_morph_data) { @@ -844,19 +831,19 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me for (int k = 0; k < vertex_array.size(); k++) { if (normal_src) { - surftool->add_normal(vertex_array[k].normal); + surftool->set_normal(vertex_array[k].normal); if (binormal_src && tangent_src) { - surftool->add_tangent(vertex_array[k].tangent); + surftool->set_tangent(vertex_array[k].tangent); } } if (uv_src) { - surftool->add_uv(Vector2(vertex_array[k].uv.x, vertex_array[k].uv.y)); + surftool->set_uv(Vector2(vertex_array[k].uv.x, vertex_array[k].uv.y)); } if (uv2_src) { - surftool->add_uv2(Vector2(vertex_array[k].uv2.x, vertex_array[k].uv2.y)); + surftool->set_uv2(Vector2(vertex_array[k].uv2.x, vertex_array[k].uv2.y)); } if (color_src) { - surftool->add_color(vertex_array[k].color); + surftool->set_color(vertex_array[k].color); } if (has_weights) { @@ -876,8 +863,8 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me } } - surftool->add_bones(bones); - surftool->add_weights(weights); + surftool->set_bones(bones); + surftool->set_weights(weights); } surftool->add_vertex(vertex_array[k].vertex); @@ -910,7 +897,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me //////////////////////////// for (int mi = 0; mi < p_morph_meshes.size(); mi++) { - Array a = p_morph_meshes[mi]->surface_get_arrays(surface); + Array a = p_morph_meshes[mi]->get_surface_arrays(surface); //add valid weight and bone arrays if they exist, TODO check if they are unique to shape (generally not) if (has_weights) { @@ -923,14 +910,15 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me mr.push_back(a); } - p_mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, d, mr, Dictionary(), p_use_compression ? Mesh::ARRAY_COMPRESS_DEFAULT : 0); - + String surface_name; + Ref<Material> mat; if (material.is_valid()) { if (p_use_mesh_material) { - p_mesh->surface_set_material(surface, material); + mat = material; } - p_mesh->surface_set_name(surface, material->get_name()); + surface_name = material->get_name(); } + p_mesh->add_surface(Mesh::PRIMITIVE_TRIANGLES, d, mr, Dictionary(), mat, surface_name); } /*****************/ @@ -1015,10 +1003,10 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres } } - if (Object::cast_to<MeshInstance3D>(node)) { + if (Object::cast_to<EditorSceneImporterMeshNode>(node)) { Collada::NodeGeometry *ng2 = static_cast<Collada::NodeGeometry *>(p_node); - MeshInstance3D *mi = Object::cast_to<MeshInstance3D>(node); + EditorSceneImporterMeshNode *mi = Object::cast_to<EditorSceneImporterMeshNode>(node); ERR_FAIL_COND_V(!mi, ERR_BUG); @@ -1027,7 +1015,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres String meshid; Transform apply_xform; Vector<int> bone_remap; - Vector<Ref<ArrayMesh>> morphs; + Vector<Ref<EditorSceneImporterMesh>> morphs; if (ng2->controller) { String ngsource = ng2->source; @@ -1096,10 +1084,10 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres for (int i = 0; i < names.size(); i++) { String meshid2 = names[i]; if (collada.state.mesh_data_map.has(meshid2)) { - Ref<ArrayMesh> mesh = Ref<ArrayMesh>(memnew(ArrayMesh)); + Ref<EditorSceneImporterMesh> mesh = Ref<EditorSceneImporterMesh>(memnew(EditorSceneImporterMesh)); const Collada::MeshData &meshdata = collada.state.mesh_data_map[meshid2]; mesh->set_name(meshdata.name); - Error err = _create_mesh_surfaces(false, mesh, ng2->material_map, meshdata, apply_xform, bone_remap, skin, nullptr, Vector<Ref<ArrayMesh>>(), false); + Error err = _create_mesh_surfaces(false, mesh, ng2->material_map, meshdata, apply_xform, bone_remap, skin, nullptr, Vector<Ref<EditorSceneImporterMesh>>(), false); ERR_FAIL_COND_V(err, err); morphs.push_back(mesh); @@ -1122,7 +1110,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres meshid = ng2->source; } - Ref<ArrayMesh> mesh; + Ref<EditorSceneImporterMesh> mesh; if (mesh_cache.has(meshid)) { mesh = mesh_cache[meshid]; } else { @@ -1130,7 +1118,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres //bleh, must ignore invalid ERR_FAIL_COND_V(!collada.state.mesh_data_map.has(meshid), ERR_INVALID_DATA); - mesh = Ref<ArrayMesh>(memnew(ArrayMesh)); + mesh = Ref<EditorSceneImporterMesh>(memnew(EditorSceneImporterMesh)); const Collada::MeshData &meshdata = collada.state.mesh_data_map[meshid]; mesh->set_name(meshdata.name); Error err = _create_mesh_surfaces(morphs.size() == 0, mesh, ng2->material_map, meshdata, apply_xform, bone_remap, skin, morph, morphs, p_use_compression, use_mesh_builtin_materials); diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index 266df78949..1059692ca0 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -970,9 +970,6 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { return OK; } - bool compress_vert_data = state.import_flags & IMPORT_USE_COMPRESSION; - uint32_t mesh_flags = compress_vert_data ? Mesh::ARRAY_COMPRESS_DEFAULT : 0; - Array meshes = state.json["meshes"]; for (GLTFMeshIndex i = 0; i < meshes.size(); i++) { print_verbose("glTF: Parsing mesh: " + itos(i)); @@ -980,6 +977,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { GLTFMesh mesh; mesh.mesh.instance(); + bool has_vertex_color = false; ERR_FAIL_COND_V(!d.has("primitives"), ERR_PARSE_ERROR); @@ -1035,6 +1033,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { } if (a.has("COLOR_0")) { array[Mesh::ARRAY_COLOR] = _decode_accessor_as_color(state, a["COLOR_0"], true); + has_vertex_color = true; } if (a.has("JOINTS_0")) { array[Mesh::ARRAY_BONES] = _decode_accessor_as_ints(state, a["JOINTS_0"], true); @@ -1227,21 +1226,25 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { } //just add it - mesh.mesh->add_surface_from_arrays(primitive, array, morphs, Dictionary(), mesh_flags); + Ref<Material> mat; if (p.has("material")) { const int material = p["material"]; ERR_FAIL_INDEX_V(material, state.materials.size(), ERR_FILE_CORRUPT); - const Ref<Material> &mat = state.materials[material]; - - mesh.mesh->surface_set_material(mesh.mesh->get_surface_count() - 1, mat); - } else { - Ref<StandardMaterial3D> mat; - mat.instance(); - mat->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + Ref<StandardMaterial3D> mat3d = state.materials[material]; + if (has_vertex_color) { + mat3d->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + } + mat = mat3d; - mesh.mesh->surface_set_material(mesh.mesh->get_surface_count() - 1, mat); + } else if (has_vertex_color) { + Ref<StandardMaterial3D> mat3d; + mat3d.instance(); + mat3d->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + mat = mat3d; } + + mesh.mesh->add_surface(primitive, array, morphs, Dictionary(), mat); } mesh.blend_weights.resize(mesh.mesh->get_blend_shape_count()); @@ -1304,12 +1307,14 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b String uri = d["uri"]; if (uri.begins_with("data:")) { // Embedded data using base64. - // Validate data MIME types and throw an error if it's one we don't know/support. + // Validate data MIME types and throw a warning if it's one we don't know/support. if (!uri.begins_with("data:application/octet-stream;base64") && !uri.begins_with("data:application/gltf-buffer;base64") && !uri.begins_with("data:image/png;base64") && !uri.begins_with("data:image/jpeg;base64")) { - ERR_PRINT("glTF: Got image data with an unknown URI data type: " + uri); + WARN_PRINT(vformat("glTF: Image index '%d' uses an unsupported URI data type: %s. Skipping it.", i, uri)); + state.images.push_back(Ref<Texture2D>()); // Placeholder to keep count. + continue; } data = _parse_base64_uri(uri); data_ptr = data.ptr(); @@ -1344,7 +1349,8 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b } } else if (d.has("bufferView")) { // Handles the third bullet point from the spec (bufferView). - ERR_FAIL_COND_V_MSG(mimetype.empty(), ERR_FILE_CORRUPT, "glTF: Image specifies 'bufferView' but no 'mimeType', which is invalid."); + ERR_FAIL_COND_V_MSG(mimetype.empty(), ERR_FILE_CORRUPT, + vformat("glTF: Image index '%d' specifies 'bufferView' but no 'mimeType', which is invalid.", i)); const GLTFBufferViewIndex bvi = d["bufferView"]; @@ -1381,7 +1387,8 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b } } - ERR_FAIL_COND_V_MSG(img.is_null(), ERR_FILE_CORRUPT, "glTF: Couldn't load image with its given mimetype: " + mimetype); + ERR_FAIL_COND_V_MSG(img.is_null(), ERR_FILE_CORRUPT, + vformat("glTF: Couldn't load image index '%d' with its given mimetype: %s.", i, mimetype)); Ref<ImageTexture> t; t.instance(); @@ -1437,7 +1444,8 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (d.has("name")) { material->set_name(d["name"]); } - material->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + //don't do this here only if vertex color exists + //material->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); if (d.has("pbrMetallicRoughness")) { const Dictionary &mr = d["pbrMetallicRoughness"]; @@ -2583,12 +2591,12 @@ BoneAttachment3D *EditorSceneImporterGLTF::_generate_bone_attachment(GLTFState & return bone_attachment; } -MeshInstance3D *EditorSceneImporterGLTF::_generate_mesh_instance(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { +EditorSceneImporterMeshNode *EditorSceneImporterGLTF::_generate_mesh_instance(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { const GLTFNode *gltf_node = state.nodes[node_index]; ERR_FAIL_INDEX_V(gltf_node->mesh, state.meshes.size(), nullptr); - MeshInstance3D *mi = memnew(MeshInstance3D); + EditorSceneImporterMeshNode *mi = memnew(EditorSceneImporterMeshNode); print_verbose("glTF: Creating mesh for: " + gltf_node->name); GLTFMesh &mesh = state.meshes.write[gltf_node->mesh]; @@ -3055,7 +3063,7 @@ void EditorSceneImporterGLTF::_process_mesh_instances(GLTFState &state, Node3D * const GLTFSkinIndex skin_i = node->skin; Map<GLTFNodeIndex, Node *>::Element *mi_element = state.scene_nodes.find(node_i); - MeshInstance3D *mi = Object::cast_to<MeshInstance3D>(mi_element->get()); + EditorSceneImporterMeshNode *mi = Object::cast_to<EditorSceneImporterMeshNode>(mi_element->get()); ERR_FAIL_COND(mi == nullptr); const GLTFSkeletonIndex skel_i = state.skins[node->skin].skeleton; diff --git a/editor/import/editor_scene_importer_gltf.h b/editor/import/editor_scene_importer_gltf.h index bd30f8f1dd..e6163a46be 100644 --- a/editor/import/editor_scene_importer_gltf.h +++ b/editor/import/editor_scene_importer_gltf.h @@ -38,7 +38,7 @@ class AnimationPlayer; class BoneAttachment3D; -class MeshInstance3D; +class EditorSceneImporterMeshNode; class EditorSceneImporterGLTF : public EditorSceneImporter { GDCLASS(EditorSceneImporterGLTF, EditorSceneImporter); @@ -116,8 +116,6 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { GLTFNodeIndex fake_joint_parent = -1; GLTFLightIndex light = -1; - - GLTFNode() {} }; struct GLTFBufferView { @@ -127,8 +125,6 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { int byte_stride = 0; bool indices = false; //matrices need to be transformed to this - - GLTFBufferView() {} }; struct GLTFAccessor { @@ -137,7 +133,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { int component_type = 0; bool normalized = false; int count = 0; - GLTFType type; + GLTFType type = GLTFType::TYPE_SCALAR; float min = 0; float max = 0; int sparse_count = 0; @@ -146,8 +142,6 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { int sparse_indices_component_type = 0; int sparse_values_buffer_view = 0; int sparse_values_byte_offset = 0; - - GLTFAccessor() {} }; struct GLTFTexture { GLTFImageIndex src_image; @@ -166,8 +160,6 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { // Set of unique bone names for the skeleton Set<String> unique_names; - - GLTFSkeleton() {} }; struct GLTFSkin { @@ -204,22 +196,18 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { // The Actual Skin that will be created as a mapping between the IBM's of this skin // to the generated skeleton for the mesh instances. Ref<Skin> godot_skin; - - GLTFSkin() {} }; struct GLTFMesh { - Ref<ArrayMesh> mesh; + Ref<EditorSceneImporterMesh> mesh; Vector<float> blend_weights; }; struct GLTFCamera { bool perspective = true; - float fov_size = 64; - float zfar = 500; - float znear = 0.1; - - GLTFCamera() {} + float fov_size = 75; + float zfar = 4000; + float znear = 0.05; }; struct GLTFLight { @@ -229,8 +217,6 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { float range = Math_INF; float inner_cone_angle = 0.0f; float outer_cone_angle = Math_PI / 4.0; - - GLTFLight() {} }; struct GLTFAnimation { @@ -264,11 +250,11 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { struct GLTFState { Dictionary json; - int major_version; - int minor_version; + int major_version = 0; + int minor_version = 0; Vector<uint8_t> glb_data; - bool use_named_skin_binds; + bool use_named_skin_binds = false; Vector<GLTFNode *> nodes; Vector<Vector<uint8_t>> buffers; @@ -276,7 +262,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { Vector<GLTFAccessor> accessors; Vector<GLTFMesh> meshes; //meshes are loaded directly, no reason not to. - Vector<Ref<Material>> materials; + Vector<Ref<StandardMaterial3D>> materials; String scene_name; Vector<int> root_nodes; @@ -369,7 +355,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { Error _parse_animations(GLTFState &state); BoneAttachment3D *_generate_bone_attachment(GLTFState &state, Skeleton3D *skeleton, const GLTFNodeIndex node_index); - MeshInstance3D *_generate_mesh_instance(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); + EditorSceneImporterMeshNode *_generate_mesh_instance(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); Camera3D *_generate_camera(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); Light3D *_generate_light(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); Node3D *_generate_spatial(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 49b47bf4be..30c7b2920a 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -210,7 +210,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ bool generate_tangents = p_generate_tangents; Vector3 scale_mesh = p_scale_mesh; Vector3 offset_mesh = p_offset_mesh; - int mesh_flags = p_optimize ? Mesh::ARRAY_COMPRESS_DEFAULT : 0; + int mesh_flags = 0; Vector<Vector3> vertices; Vector<Vector3> normals; @@ -225,6 +225,8 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ String current_material_library; String current_material; String current_group; + uint32_t smooth_group = 0; + bool smoothing = true; while (true) { String l = f->get_line().strip_edges(); @@ -294,7 +296,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ norm += normals.size() + 1; } ERR_FAIL_INDEX_V(norm, normals.size(), ERR_FILE_CORRUPT); - surf_tool->add_normal(normals[norm]); + surf_tool->set_normal(normals[norm]); } if (face[idx].size() >= 2 && face[idx][1] != String()) { @@ -303,7 +305,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ uv += uvs.size() + 1; } ERR_FAIL_INDEX_V(uv, uvs.size(), ERR_FILE_CORRUPT); - surf_tool->add_uv(uvs[uv]); + surf_tool->set_uv(uvs[uv]); } int vtx = face[idx][0].to_int() - 1; @@ -315,6 +317,10 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ Vector3 vertex = vertices[vtx]; //if (weld_vertices) // vertex.snap(Vector3(weld_tolerance, weld_tolerance, weld_tolerance)); + if (!smoothing) { + smooth_group++; + } + surf_tool->set_smooth_group(smooth_group); surf_tool->add_vertex(vertex); } @@ -322,10 +328,15 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_ } } else if (l.begins_with("s ")) { //smoothing String what = l.substr(2, l.length()).strip_edges(); + bool do_smooth; if (what == "off") { - surf_tool->add_smooth_group(false); + do_smooth = false; } else { - surf_tool->add_smooth_group(true); + do_smooth = true; + } + if (do_smooth != smoothing) { + smooth_group++; + smoothing = do_smooth; } } else if (/*l.begins_with("g ") ||*/ l.begins_with("usemtl ") || (l.begins_with("o ") || f->eof_reached())) { //commit group to mesh //groups are too annoying @@ -426,8 +437,15 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in Node3D *scene = memnew(Node3D); for (List<Ref<Mesh>>::Element *E = meshes.front(); E; E = E->next()) { - MeshInstance3D *mi = memnew(MeshInstance3D); - mi->set_mesh(E->get()); + Ref<EditorSceneImporterMesh> mesh; + mesh.instance(); + Ref<Mesh> m = E->get(); + for (int i = 0; i < m->get_surface_count(); i++) { + mesh->add_surface(m->surface_get_primitive_type(i), m->surface_get_arrays(i), Array(), Dictionary(), m->surface_get_material(i)); + } + + EditorSceneImporterMeshNode *mi = memnew(EditorSceneImporterMeshNode); + mi->set_mesh(mesh); mi->set_name(E->get()->get_name()); scene->add_child(mi); mi->set_owner(scene); @@ -473,6 +491,10 @@ String ResourceImporterOBJ::get_resource_type() const { return "Mesh"; } +int ResourceImporterOBJ::get_format_version() const { + return 1; +} + int ResourceImporterOBJ::get_preset_count() const { return 0; } diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h index 4083bc7403..97f747b33c 100644 --- a/editor/import/resource_importer_obj.h +++ b/editor/import/resource_importer_obj.h @@ -54,6 +54,7 @@ public: virtual void get_recognized_extensions(List<String> *p_extensions) const override; virtual String get_save_extension() const override; virtual String get_resource_type() const override; + virtual int get_format_version() const override; virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 5dcdf6bec4..b591627660 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -44,6 +44,7 @@ #include "scene/resources/ray_shape_3d.h" #include "scene/resources/resource_format_text.h" #include "scene/resources/sphere_shape_3d.h" +#include "scene/resources/surface_tool.h" #include "scene/resources/world_margin_shape_3d.h" uint32_t EditorSceneImporter::get_import_flags() const { @@ -119,6 +120,345 @@ void EditorSceneImporter::_bind_methods() { BIND_CONSTANT(IMPORT_USE_COMPRESSION); } +//////////////////////////////////////////////// + +void EditorSceneImporterMesh::add_blend_shape(const String &p_name) { + ERR_FAIL_COND(surfaces.size() > 0); + blend_shapes.push_back(p_name); +} + +int EditorSceneImporterMesh::get_blend_shape_count() const { + return blend_shapes.size(); +} + +String EditorSceneImporterMesh::get_blend_shape_name(int p_blend_shape) const { + ERR_FAIL_INDEX_V(p_blend_shape, blend_shapes.size(), String()); + return blend_shapes[p_blend_shape]; +} + +void EditorSceneImporterMesh::set_blend_shape_mode(Mesh::BlendShapeMode p_blend_shape_mode) { + blend_shape_mode = p_blend_shape_mode; +} +Mesh::BlendShapeMode EditorSceneImporterMesh::get_blend_shape_mode() const { + return blend_shape_mode; +} + +void EditorSceneImporterMesh::add_surface(Mesh::PrimitiveType p_primitive, const Array &p_arrays, const Array &p_blend_shapes, const Dictionary &p_lods, const Ref<Material> &p_material, const String &p_name) { + ERR_FAIL_COND(p_blend_shapes.size() != blend_shapes.size()); + ERR_FAIL_COND(p_arrays.size() != Mesh::ARRAY_MAX); + Surface s; + s.primitive = p_primitive; + s.arrays = p_arrays; + s.name = p_name; + + for (int i = 0; i < blend_shapes.size(); i++) { + Array bsdata = p_blend_shapes[i]; + ERR_FAIL_COND(bsdata.size() != Mesh::ARRAY_MAX); + Surface::BlendShape bs; + bs.arrays = bsdata; + s.blend_shape_data.push_back(bs); + } + + List<Variant> lods; + p_lods.get_key_list(&lods); + for (List<Variant>::Element *E = lods.front(); E; E = E->next()) { + ERR_CONTINUE(!E->get().is_num()); + Surface::LOD lod; + lod.distance = E->get(); + lod.indices = p_lods[E->get()]; + ERR_CONTINUE(lod.indices.size() == 0); + s.lods.push_back(lod); + } + + s.material = p_material; + + surfaces.push_back(s); + mesh.unref(); +} +int EditorSceneImporterMesh::get_surface_count() const { + return surfaces.size(); +} + +Mesh::PrimitiveType EditorSceneImporterMesh::get_surface_primitive_type(int p_surface) { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Mesh::PRIMITIVE_MAX); + return surfaces[p_surface].primitive; +} +Array EditorSceneImporterMesh::get_surface_arrays(int p_surface) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Array()); + return surfaces[p_surface].arrays; +} +String EditorSceneImporterMesh::get_surface_name(int p_surface) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), String()); + return surfaces[p_surface].name; +} +Array EditorSceneImporterMesh::get_surface_blend_shape_arrays(int p_surface, int p_blend_shape) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Array()); + ERR_FAIL_INDEX_V(p_blend_shape, surfaces[p_surface].blend_shape_data.size(), Array()); + return surfaces[p_surface].blend_shape_data[p_blend_shape].arrays; +} +int EditorSceneImporterMesh::get_surface_lod_count(int p_surface) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), 0); + return surfaces[p_surface].lods.size(); +} +Vector<int> EditorSceneImporterMesh::get_surface_lod_indices(int p_surface, int p_lod) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Vector<int>()); + ERR_FAIL_INDEX_V(p_lod, surfaces[p_surface].lods.size(), Vector<int>()); + + return surfaces[p_surface].lods[p_lod].indices; +} + +float EditorSceneImporterMesh::get_surface_lod_size(int p_surface, int p_lod) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), 0); + ERR_FAIL_INDEX_V(p_lod, surfaces[p_surface].lods.size(), 0); + return surfaces[p_surface].lods[p_lod].distance; +} + +Ref<Material> EditorSceneImporterMesh::get_surface_material(int p_surface) const { + ERR_FAIL_INDEX_V(p_surface, surfaces.size(), Ref<Material>()); + return surfaces[p_surface].material; +} + +void EditorSceneImporterMesh::generate_lods() { + if (!SurfaceTool::simplify_func) { + return; + } + + for (int i = 0; i < surfaces.size(); i++) { + if (surfaces[i].primitive != Mesh::PRIMITIVE_TRIANGLES) { + continue; + } + + surfaces.write[i].lods.clear(); + Vector<Vector3> vertices = surfaces[i].arrays[RS::ARRAY_VERTEX]; + Vector<int> indices = surfaces[i].arrays[RS::ARRAY_INDEX]; + if (indices.size() == 0) { + continue; //no lods if no indices + } + uint32_t vertex_count = vertices.size(); + const Vector3 *vertices_ptr = vertices.ptr(); + + int min_indices = 10; + int index_target = indices.size() / 2; + print_line("total: " + itos(indices.size())); + while (index_target > min_indices) { + float error; + Vector<int> new_indices; + new_indices.resize(indices.size()); + size_t new_len = SurfaceTool::simplify_func((unsigned int *)new_indices.ptrw(), (const unsigned int *)indices.ptr(), indices.size(), (const float *)vertices_ptr, vertex_count, sizeof(Vector3), index_target, 1e20, &error); + print_line("shoot for " + itos(index_target) + ", got " + itos(new_len) + " distance " + rtos(error)); + if ((int)new_len > (index_target * 120 / 100)) { + break; // 20 percent tolerance + } + new_indices.resize(new_len); + Surface::LOD lod; + lod.distance = error; + lod.indices = new_indices; + surfaces.write[i].lods.push_back(lod); + index_target /= 2; + } + } +} + +bool EditorSceneImporterMesh::has_mesh() const { + return mesh.is_valid(); +} + +Ref<ArrayMesh> EditorSceneImporterMesh::get_mesh() { + ERR_FAIL_COND_V(surfaces.size() == 0, Ref<ArrayMesh>()); + + if (mesh.is_null()) { + mesh.instance(); + for (int i = 0; i < blend_shapes.size(); i++) { + mesh->add_blend_shape(blend_shapes[i]); + } + mesh->set_blend_shape_mode(blend_shape_mode); + for (int i = 0; i < surfaces.size(); i++) { + Array bs_data; + if (surfaces[i].blend_shape_data.size()) { + for (int j = 0; j < surfaces[i].blend_shape_data.size(); j++) { + bs_data.push_back(surfaces[i].blend_shape_data[j].arrays); + } + } + Dictionary lods; + if (surfaces[i].lods.size()) { + for (int j = 0; j < surfaces[i].lods.size(); j++) { + lods[surfaces[i].lods[j].distance] = surfaces[i].lods[j].indices; + } + } + + mesh->add_surface_from_arrays(surfaces[i].primitive, surfaces[i].arrays, bs_data, lods); + if (surfaces[i].material.is_valid()) { + mesh->surface_set_material(mesh->get_surface_count() - 1, surfaces[i].material); + } + if (surfaces[i].name != String()) { + mesh->surface_set_name(mesh->get_surface_count() - 1, surfaces[i].name); + } + } + } + + return mesh; +} + +void EditorSceneImporterMesh::clear() { + surfaces.clear(); + blend_shapes.clear(); + mesh.unref(); +} + +void EditorSceneImporterMesh::_set_data(const Dictionary &p_data) { + clear(); + if (p_data.has("blend_shape_names")) { + blend_shapes = p_data["blend_shape_names"]; + } + if (p_data.has("surfaces")) { + Array surface_arr = p_data["surfaces"]; + for (int i = 0; i < surface_arr.size(); i++) { + Dictionary s = surface_arr[i]; + ERR_CONTINUE(!s.has("primitive")); + ERR_CONTINUE(!s.has("arrays")); + Mesh::PrimitiveType prim = Mesh::PrimitiveType(int(s["primitive"])); + ERR_CONTINUE(prim >= Mesh::PRIMITIVE_MAX); + Array arr = s["arrays"]; + Dictionary lods; + String name; + if (s.has("name")) { + name = s["name"]; + } + if (s.has("lods")) { + lods = s["lods"]; + } + Array blend_shapes; + if (s.has("blend_shapes")) { + blend_shapes = s["blend_shapes"]; + } + Ref<Material> material; + if (s.has("material")) { + material = s["material"]; + } + add_surface(prim, arr, blend_shapes, lods, material, name); + } + } +} +Dictionary EditorSceneImporterMesh::_get_data() const { + Dictionary data; + if (blend_shapes.size()) { + data["blend_shape_names"] = blend_shapes; + } + Array surface_arr; + for (int i = 0; i < surfaces.size(); i++) { + Dictionary d; + d["primitive"] = surfaces[i].primitive; + d["arrays"] = surfaces[i].arrays; + if (surfaces[i].blend_shape_data.size()) { + Array bs_data; + for (int j = 0; j < surfaces[i].blend_shape_data.size(); j++) { + bs_data.push_back(surfaces[i].blend_shape_data[j].arrays); + } + d["blend_shapes"] = bs_data; + } + if (surfaces[i].lods.size()) { + Dictionary lods; + for (int j = 0; j < surfaces[i].lods.size(); j++) { + lods[surfaces[i].lods[j].distance] = surfaces[i].lods[j].indices; + } + d["lods"] = lods; + } + + if (surfaces[i].material.is_valid()) { + d["material"] = surfaces[i].material; + } + + if (surfaces[i].name != String()) { + d["name"] = surfaces[i].name; + } + + surface_arr.push_back(d); + } + data["surfaces"] = surface_arr; + return data; +} + +void EditorSceneImporterMesh::_bind_methods() { + ClassDB::bind_method(D_METHOD("add_blend_shape", "name"), &EditorSceneImporterMesh::add_blend_shape); + ClassDB::bind_method(D_METHOD("get_blend_shape_count"), &EditorSceneImporterMesh::get_blend_shape_count); + ClassDB::bind_method(D_METHOD("get_blend_shape_name", "blend_shape_idx"), &EditorSceneImporterMesh::get_blend_shape_name); + + ClassDB::bind_method(D_METHOD("set_blend_shape_mode", "mode"), &EditorSceneImporterMesh::set_blend_shape_mode); + ClassDB::bind_method(D_METHOD("get_blend_shape_mode"), &EditorSceneImporterMesh::get_blend_shape_mode); + + ClassDB::bind_method(D_METHOD("add_surface", "primitive", "arrays", "blend_shapes", "lods", "material"), &EditorSceneImporterMesh::add_surface, DEFVAL(Array()), DEFVAL(Dictionary()), DEFVAL(Ref<Material>()), DEFVAL(String())); + + ClassDB::bind_method(D_METHOD("get_surface_count"), &EditorSceneImporterMesh::get_surface_count); + ClassDB::bind_method(D_METHOD("get_surface_primitive_type", "surface_idx"), &EditorSceneImporterMesh::get_surface_primitive_type); + ClassDB::bind_method(D_METHOD("get_surface_name", "surface_idx"), &EditorSceneImporterMesh::get_surface_name); + ClassDB::bind_method(D_METHOD("get_surface_arrays", "surface_idx"), &EditorSceneImporterMesh::get_surface_arrays); + ClassDB::bind_method(D_METHOD("get_surface_blend_shape_arrays", "surface_idx", "blend_shape_idx"), &EditorSceneImporterMesh::get_surface_blend_shape_arrays); + ClassDB::bind_method(D_METHOD("get_surface_lod_count", "surface_idx"), &EditorSceneImporterMesh::get_surface_lod_count); + ClassDB::bind_method(D_METHOD("get_surface_lod_size", "surface_idx", "lod_idx"), &EditorSceneImporterMesh::get_surface_lod_size); + ClassDB::bind_method(D_METHOD("get_surface_lod_indices", "surface_idx", "lod_idx"), &EditorSceneImporterMesh::get_surface_lod_indices); + ClassDB::bind_method(D_METHOD("get_surface_material", "surface_idx"), &EditorSceneImporterMesh::get_surface_material); + + ClassDB::bind_method(D_METHOD("get_mesh"), &EditorSceneImporterMesh::get_mesh); + ClassDB::bind_method(D_METHOD("clear"), &EditorSceneImporterMesh::clear); + + ClassDB::bind_method(D_METHOD("_set_data", "data"), &EditorSceneImporterMesh::_set_data); + ClassDB::bind_method(D_METHOD("_get_data"), &EditorSceneImporterMesh::_get_data); + + ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "_set_data", "_get_data"); +} + +void EditorSceneImporterMeshNode::set_mesh(const Ref<EditorSceneImporterMesh> &p_mesh) { + mesh = p_mesh; +} +Ref<EditorSceneImporterMesh> EditorSceneImporterMeshNode::get_mesh() const { + return mesh; +} + +void EditorSceneImporterMeshNode::set_skin(const Ref<Skin> &p_skin) { + skin = p_skin; +} +Ref<Skin> EditorSceneImporterMeshNode::get_skin() const { + return skin; +} + +void EditorSceneImporterMeshNode::set_surface_material(int p_idx, const Ref<Material> &p_material) { + ERR_FAIL_COND(p_idx < 0); + if (p_idx >= surface_materials.size()) { + surface_materials.resize(p_idx + 1); + } + + surface_materials.write[p_idx] = p_material; +} +Ref<Material> EditorSceneImporterMeshNode::get_surface_material(int p_idx) const { + ERR_FAIL_COND_V(p_idx < 0, Ref<Material>()); + if (p_idx >= surface_materials.size()) { + return Ref<Material>(); + } + return surface_materials[p_idx]; +} + +void EditorSceneImporterMeshNode::set_skeleton_path(const NodePath &p_path) { + skeleton_path = p_path; +} +NodePath EditorSceneImporterMeshNode::get_skeleton_path() const { + return skeleton_path; +} + +void EditorSceneImporterMeshNode::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_mesh", "mesh"), &EditorSceneImporterMeshNode::set_mesh); + ClassDB::bind_method(D_METHOD("get_mesh"), &EditorSceneImporterMeshNode::get_mesh); + + ClassDB::bind_method(D_METHOD("set_skin", "skin"), &EditorSceneImporterMeshNode::set_skin); + ClassDB::bind_method(D_METHOD("get_skin"), &EditorSceneImporterMeshNode::get_skin); + + ClassDB::bind_method(D_METHOD("set_skeleton_path", "skeleton_path"), &EditorSceneImporterMeshNode::set_skeleton_path); + ClassDB::bind_method(D_METHOD("get_skeleton_path"), &EditorSceneImporterMeshNode::get_skeleton_path); + + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "EditorSceneImporterMesh"), "set_mesh", "get_mesh"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "skin", PROPERTY_HINT_RESOURCE_TYPE, "Skin"), "set_skin", "get_skin"); + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "skeleton_path", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Skeleton"), "set_skeleton_path", "get_skeleton_path"); +} + ///////////////////////////////// void EditorScenePostImport::_bind_methods() { BIND_VMETHOD(MethodInfo(Variant::OBJECT, "post_import", PropertyInfo(Variant::OBJECT, "scene"))); @@ -172,6 +512,10 @@ String ResourceImporterScene::get_resource_type() const { return "PackedScene"; } +int ResourceImporterScene::get_format_version() const { + return 1; +} + bool ResourceImporterScene::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { if (p_option.begins_with("animation/")) { if (p_option != "animation/import" && !bool(p_options["animation/import"])) { @@ -1120,9 +1464,9 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "materials/location", PROPERTY_HINT_ENUM, "Node,Mesh"), (meshes_out || materials_out) ? 1 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "materials/storage", PROPERTY_HINT_ENUM, "Built-In,Files (.material),Files (.tres)", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), materials_out ? 1 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "materials/keep_on_reimport"), materials_out)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/compress"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/ensure_tangents"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "meshes/storage", PROPERTY_HINT_ENUM, "Built-In,Files (.mesh),Files (.tres)"), meshes_out ? 1 : 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "meshes/generate_lods"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "meshes/light_baking", PROPERTY_HINT_ENUM, "Disabled,Enable,Gen Lightmaps", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "meshes/lightmap_texel_size", PROPERTY_HINT_RANGE, "0.001,100,0.001"), 0.1)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "skins/use_named_skins"), true)); @@ -1215,6 +1559,37 @@ Ref<Animation> ResourceImporterScene::import_animation_from_other_importer(Edito return importer->import_animation(p_path, p_flags, p_bake_fps); } +void ResourceImporterScene::_generate_meshes(Node *p_node, bool p_generate_lods) { + EditorSceneImporterMeshNode *src_mesh = Object::cast_to<EditorSceneImporterMeshNode>(p_node); + if (src_mesh != nullptr) { + //is mesh + MeshInstance3D *mesh_node = memnew(MeshInstance3D); + mesh_node->set_transform(src_mesh->get_transform()); + mesh_node->set_skin(src_mesh->get_skin()); + mesh_node->set_skeleton_path(src_mesh->get_skeleton_path()); + + Ref<ArrayMesh> mesh; + if (!src_mesh->get_mesh()->has_mesh()) { + if (p_generate_lods) { + src_mesh->get_mesh()->generate_lods(); + } + //do mesh processing + } + mesh = src_mesh->get_mesh()->get_mesh(); + mesh_node->set_mesh(mesh); + for (int i = 0; i < mesh->get_surface_count(); i++) { + mesh_node->set_surface_material(i, src_mesh->get_surface_material(i)); + } + + p_node->replace_by(mesh_node); + memdelete(p_node); + p_node = mesh_node; + } + + for (int i = 0; i < p_node->get_child_count(); i++) { + _generate_meshes(p_node->get_child(i), p_generate_lods); + } +} Error ResourceImporterScene::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) { const String &src_path = p_source_file; @@ -1253,10 +1628,6 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p import_flags |= EditorSceneImporter::IMPORT_ANIMATION; } - if (int(p_options["meshes/compress"])) { - import_flags |= EditorSceneImporter::IMPORT_USE_COMPRESSION; - } - if (bool(p_options["meshes/ensure_tangents"])) { import_flags |= EditorSceneImporter::IMPORT_GENERATE_TANGENT_ARRAYS; } @@ -1311,6 +1682,10 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p scene->set_name(p_save_path.get_file().get_basename()); } + bool gen_lods = bool(p_options["meshes/generate_lods"]); + + _generate_meshes(scene, gen_lods); + err = OK; String animation_filter = String(p_options["animation/filter_script"]).strip_edges(); diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h index 465d11116b..aef6c0ac50 100644 --- a/editor/import/resource_importer_scene.h +++ b/editor/import/resource_importer_scene.h @@ -32,9 +32,11 @@ #define RESOURCEIMPORTERSCENE_H #include "core/io/resource_importer.h" +#include "scene/3d/node_3d.h" #include "scene/resources/animation.h" #include "scene/resources/mesh.h" #include "scene/resources/shape_3d.h" +#include "scene/resources/skin.h" class Material; @@ -88,6 +90,92 @@ public: EditorScenePostImport(); }; +// The following classes are used by importers instead of ArrayMesh and MeshInstance3D +// so the data is not reginstered (hence, quality loss), importing happens faster and +// its easier to modify before saving + +class EditorSceneImporterMesh : public Resource { + GDCLASS(EditorSceneImporterMesh, Resource) + + struct Surface { + Mesh::PrimitiveType primitive; + Array arrays; + struct BlendShape { + Array arrays; + }; + Vector<BlendShape> blend_shape_data; + struct LOD { + Vector<int> indices; + float distance; + }; + Vector<LOD> lods; + Ref<Material> material; + String name; + }; + Vector<Surface> surfaces; + Vector<String> blend_shapes; + Mesh::BlendShapeMode blend_shape_mode = Mesh::BLEND_SHAPE_MODE_NORMALIZED; + + Ref<ArrayMesh> mesh; + +protected: + void _set_data(const Dictionary &p_data); + Dictionary _get_data() const; + + static void _bind_methods(); + +public: + void add_blend_shape(const String &p_name); + int get_blend_shape_count() const; + String get_blend_shape_name(int p_blend_shape) const; + + void add_surface(Mesh::PrimitiveType p_primitive, const Array &p_arrays, const Array &p_blend_shapes = Array(), const Dictionary &p_lods = Dictionary(), const Ref<Material> &p_material = Ref<Material>(), const String &p_name = String()); + int get_surface_count() const; + + void set_blend_shape_mode(Mesh::BlendShapeMode p_blend_shape_mode); + Mesh::BlendShapeMode get_blend_shape_mode() const; + + Mesh::PrimitiveType get_surface_primitive_type(int p_surface); + String get_surface_name(int p_surface) const; + Array get_surface_arrays(int p_surface) const; + Array get_surface_blend_shape_arrays(int p_surface, int p_blend_shape) const; + int get_surface_lod_count(int p_surface) const; + Vector<int> get_surface_lod_indices(int p_surface, int p_lod) const; + float get_surface_lod_size(int p_surface, int p_lod) const; + Ref<Material> get_surface_material(int p_surface) const; + + void generate_lods(); + + bool has_mesh() const; + Ref<ArrayMesh> get_mesh(); + void clear(); +}; + +class EditorSceneImporterMeshNode : public Node3D { + GDCLASS(EditorSceneImporterMeshNode, Node3D) + + Ref<EditorSceneImporterMesh> mesh; + Ref<Skin> skin; + NodePath skeleton_path; + Vector<Ref<Material>> surface_materials; + +protected: + static void _bind_methods(); + +public: + void set_mesh(const Ref<EditorSceneImporterMesh> &p_mesh); + Ref<EditorSceneImporterMesh> get_mesh() const; + + void set_skin(const Ref<Skin> &p_skin); + Ref<Skin> get_skin() const; + + void set_surface_material(int p_idx, const Ref<Material> &p_material); + Ref<Material> get_surface_material(int p_idx) const; + + void set_skeleton_path(const NodePath &p_path); + NodePath get_skeleton_path() const; +}; + class ResourceImporterScene : public ResourceImporter { GDCLASS(ResourceImporterScene, ResourceImporter); @@ -119,6 +207,7 @@ class ResourceImporterScene : public ResourceImporter { }; void _replace_owner(Node *p_node, Node *p_scene, Node *p_new_owner); + void _generate_meshes(Node *p_node, bool p_generate_lods); public: static ResourceImporterScene *get_singleton() { return singleton; } @@ -133,6 +222,7 @@ public: virtual void get_recognized_extensions(List<String> *p_extensions) const override; virtual String get_save_extension() const override; virtual String get_resource_type() const override; + virtual int get_format_version() const override; virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index 3a0e624a8f..c8dae53722 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -205,7 +205,7 @@ void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options, r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "mipmaps/generate"), (p_preset == PRESET_3D ? true : false))); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "mipmaps/limit", PROPERTY_HINT_RANGE, "-1,256"), -1)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "roughness/mode", PROPERTY_HINT_ENUM, "Detect,Disabled,Red,Green,Blue,Alpha,Gray"), 0)); - r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "roughness/src_normal", PROPERTY_HINT_FILE, "*.png,*.jpg"), "")); + r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "roughness/src_normal", PROPERTY_HINT_FILE, "*.bmp,*.dds,*.exr,*.jpeg,*.jpg,*.hdr,*.png,*.svg,*.svgz,*.tga,*.webp"), "")); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/fix_alpha_border"), p_preset != PRESET_3D)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/premult_alpha"), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/invert_color"), false)); @@ -537,7 +537,7 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String } if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_pvrtc")) { - _save_stex(image, p_save_path + ".pvrtc.stex", compress_mode, lossy, Image::COMPRESS_PVRTC4, mipmaps, stream, detect_3d, detect_roughness, detect_normal, force_normal, srgb_friendly_pack, true, mipmap_limit, normal_image, roughness_channel); + _save_stex(image, p_save_path + ".pvrtc.stex", compress_mode, lossy, Image::COMPRESS_PVRTC1_4, mipmaps, stream, detect_3d, detect_roughness, detect_normal, force_normal, srgb_friendly_pack, true, mipmap_limit, normal_image, roughness_channel); r_platform_variants->push_back("pvrtc"); formats_imported.push_back("pvrtc"); } diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h index 97c4622731..39036d4423 100644 --- a/editor/import/resource_importer_texture.h +++ b/editor/import/resource_importer_texture.h @@ -60,13 +60,9 @@ protected: Mutex mutex; struct MakeInfo { - int flags; + int flags = 0; String normal_path_for_roughness; - RS::TextureDetectRoughnessChannel channel_for_roughness; - MakeInfo() { - flags = 0; - channel_for_roughness = RS::TEXTURE_DETECT_ROUGNHESS_R; - } + RS::TextureDetectRoughnessChannel channel_for_roughness = RS::TEXTURE_DETECT_ROUGNHESS_R; }; Map<StringName, MakeInfo> make_flags; diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp index 2423553d22..c9f689cc08 100644 --- a/editor/import/resource_importer_texture_atlas.cpp +++ b/editor/import/resource_importer_texture_atlas.cpp @@ -97,7 +97,7 @@ Error ResourceImporterTextureAtlas::import(const String &p_source_file, const St return OK; } -static void _plot_triangle(Vector2 *vertices, const Vector2 &p_offset, bool p_transposed, Ref<Image> p_image, const Ref<Image> &p_src_image) { +static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_transposed, Ref<Image> p_image, const Ref<Image> &p_src_image) { int width = p_image->get_width(); int height = p_image->get_height(); int src_width = p_src_image->get_width(); @@ -281,13 +281,13 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file for (int j = 0; j < pack_data.chart_pieces.size(); j++) { const EditorAtlasPacker::Chart &chart = charts[pack_data.chart_pieces[j]]; for (int k = 0; k < chart.faces.size(); k++) { - Vector2 positions[3]; + Vector2i positions[3]; for (int l = 0; l < 3; l++) { int vertex_idx = chart.faces[k].vertex[l]; - positions[l] = chart.vertices[vertex_idx]; + positions[l] = Vector2i(chart.vertices[vertex_idx]); } - _plot_triangle(positions, chart.final_offset, chart.transposed, new_atlas, pack_data.image); + _plot_triangle(positions, Vector2i(chart.final_offset), chart.transposed, new_atlas, pack_data.image); } } } diff --git a/editor/import/resource_importer_texture_atlas.h b/editor/import/resource_importer_texture_atlas.h index 9d973c3d8d..d237b096d3 100644 --- a/editor/import/resource_importer_texture_atlas.h +++ b/editor/import/resource_importer_texture_atlas.h @@ -38,7 +38,7 @@ class ResourceImporterTextureAtlas : public ResourceImporter { struct PackData { Rect2 region; - bool is_mesh; + bool is_mesh = false; Vector<int> chart_pieces; //one for region, many for mesh Vector<Vector<Vector2>> chart_vertices; //for mesh Ref<Image> image; diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 8ab2e0aef1..5582f9f5f0 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -536,7 +536,7 @@ ImportDock::ImportDock() { hb->add_spacer(); reimport_confirm = memnew(ConfirmationDialog); - reimport_confirm->get_ok()->set_text(TTR("Save Scenes, Re-Import, and Restart")); + reimport_confirm->get_ok_button()->set_text(TTR("Save Scenes, Re-Import, and Restart")); add_child(reimport_confirm); reimport_confirm->connect("confirmed", callable_mp(this, &ImportDock::_reimport_and_restart)); diff --git a/editor/input_map_editor.cpp b/editor/input_map_editor.cpp index c67e16d371..83adccb752 100644 --- a/editor/input_map_editor.cpp +++ b/editor/input_map_editor.cpp @@ -35,47 +35,6 @@ #include "editor/editor_node.h" #include "editor/editor_scale.h" -static const char *_button_descriptions[JOY_SDL_BUTTONS] = { - TTRC("Face Bottom, DualShock Cross, Xbox A, Nintendo B"), - TTRC("Face Right, DualShock Circle, Xbox B, Nintendo A"), - TTRC("Face Left, DualShock Square, Xbox X, Nintendo Y"), - TTRC("Face Top, DualShock Triangle, Xbox Y, Nintendo X"), - TTRC("DualShock Select, Xbox Back, Nintendo -"), - TTRC("Home, DualShock PS, Guide"), - TTRC("Start, Nintendo +"), - TTRC("Left Stick, DualShock L3, Xbox L/LS"), - TTRC("Right Stick, DualShock R3, Xbox R/RS"), - TTRC("Left Shoulder, DualShock L1, Xbox LB"), - TTRC("Right Shoulder, DualShock R1, Xbox RB"), - TTRC("D-Pad Up"), - TTRC("D-Pad Down"), - TTRC("D-Pad Left"), - TTRC("D-Pad Right") -}; - -static const char *_axis_descriptions[JOY_AXIS_MAX * 2] = { - TTRC("Left Stick Left"), - TTRC("Left Stick Right"), - TTRC("Left Stick Up"), - TTRC("Left Stick Down"), - TTRC("Right Stick Left"), - TTRC("Right Stick Right"), - TTRC("Right Stick Up"), - TTRC("Right Stick Down"), - TTRC("Joystick 2 Left"), - TTRC("Joystick 2 Right, Left Trigger, L2, LT"), - TTRC("Joystick 2 Up"), - TTRC("Joystick 2 Down, Right Trigger, R2, RT"), - TTRC("Joystick 3 Left"), - TTRC("Joystick 3 Right"), - TTRC("Joystick 3 Up"), - TTRC("Joystick 3 Down"), - TTRC("Joystick 4 Left"), - TTRC("Joystick 4 Right"), - TTRC("Joystick 4 Up"), - TTRC("Joystick 4 Down"), -}; - void InputMapEditor::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { @@ -395,6 +354,42 @@ void InputMapEditor::_show_last_added(const Ref<InputEvent> &p_event, const Stri } } +// Maps to 2*axis if value is neg, or + 1 if value is pos. +static const char *_joy_axis_descriptions[JOY_AXIS_MAX * 2] = { + TTRC("Left Stick Left, Joystick 0 Left"), + TTRC("Left Stick Right, Joystick 0 Right"), + TTRC("Left Stick Up, Joystick 0 Up"), + TTRC("Left Stick Down, Joystick 0 Down"), + TTRC("Right Stick Left, Joystick 1 Left"), + TTRC("Right Stick Right, Joystick 1 Right"), + TTRC("Right Stick Up, Joystick 1 Up"), + TTRC("Right Stick Down, Joystick 1 Down"), + TTRC("Joystick 2 Left"), + TTRC("Left Trigger, Sony L2, Xbox LT, Joystick 2 Right"), + TTRC("Joystick 2 Up"), + TTRC("Right Trigger, Sony R2, Xbox RT, Joystick 2 Down"), + TTRC("Joystick 3 Left"), + TTRC("Joystick 3 Right"), + TTRC("Joystick 3 Up"), + TTRC("Joystick 3 Down"), + TTRC("Joystick 4 Left"), + TTRC("Joystick 4 Right"), + TTRC("Joystick 4 Up"), + TTRC("Joystick 4 Down"), +}; + +// Separate from `InputEvent::as_text()` since the descriptions need to be different for the input map editor. See #43660. +String InputMapEditor::_get_joypad_motion_event_text(const Ref<InputEventJoypadMotion> &p_event) { + ERR_FAIL_COND_V_MSG(p_event.is_null(), String(), "Provided event is not a valid instance of InputEventJoypadMotion"); + + String desc = TTR("Unknown Joypad Axis"); + if (p_event->get_axis() < JOY_AXIS_MAX) { + desc = RTR(_joy_axis_descriptions[2 * p_event->get_axis() + (p_event->get_axis_value() < 0 ? 0 : 1)]); + } + + return vformat("Joypad Axis %s %s (%s)", itos(p_event->get_axis()), p_event->get_axis_value() < 0 ? "-" : "+", desc); +} + void InputMapEditor::_wait_for_key(const Ref<InputEvent> &p_event) { Ref<InputEventKey> k = p_event; @@ -403,7 +398,7 @@ void InputMapEditor::_wait_for_key(const Ref<InputEvent> &p_event) { const String str = (press_a_key_physical) ? keycode_get_string(k->get_physical_keycode_with_modifiers()) + TTR(" (Physical)") : keycode_get_string(k->get_keycode_with_modifiers()); press_a_key_label->set_text(str); - press_a_key->get_ok()->set_disabled(false); + press_a_key->get_ok_button()->set_disabled(false); press_a_key->set_input_as_handled(); } } @@ -437,7 +432,7 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { case INPUT_KEY: { press_a_key_physical = false; press_a_key_label->set_text(TTR("Press a Key...")); - press_a_key->get_ok()->set_disabled(true); + press_a_key->get_ok_button()->set_disabled(true); last_wait_for_key = Ref<InputEvent>(); press_a_key->popup_centered(Size2(250, 80) * EDSCALE); //press_a_key->grab_focus(); @@ -470,10 +465,10 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { if (mb.is_valid()) { device_index->select(mb->get_button_index() - 1); _set_current_device(mb->get_device()); - device_input->get_ok()->set_text(TTR("Change")); + device_input->get_ok_button()->set_text(TTR("Change")); } else { _set_current_device(0); - device_input->get_ok()->set_text(TTR("Add")); + device_input->get_ok_button()->set_text(TTR("Add")); } } break; @@ -481,9 +476,11 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { device_index_label->set_text(TTR("Joypad Axis Index:")); device_index->clear(); for (int i = 0; i < JOY_AXIS_MAX * 2; i++) { - String desc = TTR("Axis") + " " + itos(i / 2) + " " + ((i & 1) ? "+" : "-") + - " (" + TTR(_axis_descriptions[i]) + ")"; - device_index->add_item(desc); + Ref<InputEventJoypadMotion> jm; + jm.instance(); + jm->set_axis(i / 2); + jm->set_axis_value((i & 1) ? 1 : -1); + device_index->add_item(_get_joypad_motion_event_text(jm)); } device_input->popup_centered(Size2(350, 95) * EDSCALE); @@ -491,10 +488,10 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { if (jm.is_valid()) { device_index->select(jm->get_axis() * 2 + (jm->get_axis_value() > 0 ? 1 : 0)); _set_current_device(jm->get_device()); - device_input->get_ok()->set_text(TTR("Change")); + device_input->get_ok_button()->set_text(TTR("Change")); } else { _set_current_device(0); - device_input->get_ok()->set_text(TTR("Add")); + device_input->get_ok_button()->set_text(TTR("Add")); } } break; @@ -502,11 +499,10 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { device_index_label->set_text(TTR("Joypad Button Index:")); device_index->clear(); for (int i = 0; i < JOY_BUTTON_MAX; i++) { - String desc = TTR("Button") + " " + itos(i); - if (i < JOY_SDL_BUTTONS) { - desc += " (" + TTR(_button_descriptions[i]) + ")"; - } - device_index->add_item(desc); + Ref<InputEventJoypadButton> jb; + jb.instance(); + jb->set_button_index(i); + device_index->add_item(jb->as_text()); } device_input->popup_centered(Size2(350, 95) * EDSCALE); @@ -514,10 +510,10 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) { if (jb.is_valid()) { device_index->select(jb->get_button_index()); _set_current_device(jb->get_device()); - device_input->get_ok()->set_text(TTR("Change")); + device_input->get_ok_button()->set_text(TTR("Change")); } else { _set_current_device(0); - device_input->get_ok()->set_text(TTR("Add")); + device_input->get_ok_button()->set_text(TTR("Add")); } } break; @@ -714,14 +710,7 @@ void InputMapEditor::_update_actions() { Ref<InputEventJoypadButton> jb = event; if (jb.is_valid()) { - const int idx = jb->get_button_index(); - String str = _get_device_string(jb->get_device()) + ", " + - TTR("Button") + " " + itos(idx); - if (idx >= 0 && idx < JOY_SDL_BUTTONS) { - str += String() + " (" + TTR(_button_descriptions[jb->get_button_index()]) + ")"; - } - - action2->set_text(0, str); + action2->set_text(0, jb->as_text()); action2->set_icon(0, input_editor->get_theme_icon("JoyButton", "EditorIcons")); } @@ -754,12 +743,8 @@ void InputMapEditor::_update_actions() { Ref<InputEventJoypadMotion> jm = event; if (jm.is_valid()) { - int ax = jm->get_axis(); - int n = 2 * ax + (jm->get_axis_value() < 0 ? 0 : 1); - String str = _get_device_string(jm->get_device()) + ", " + - TTR("Axis") + " " + itos(ax) + " " + (jm->get_axis_value() < 0 ? "-" : "+") + - " (" + _axis_descriptions[n] + ")"; - action2->set_text(0, str); + device_index->add_item(_get_joypad_motion_event_text(jm)); + action2->set_text(0, jm->as_text()); action2->set_icon(0, input_editor->get_theme_icon("JoyAxis", "EditorIcons")); } action2->set_metadata(0, i); @@ -993,7 +978,7 @@ InputMapEditor::InputMapEditor() { add_child(popup_add); press_a_key = memnew(ConfirmationDialog); - press_a_key->get_ok()->set_disabled(true); + press_a_key->get_ok_button()->set_disabled(true); //press_a_key->set_focus_mode(Control::FOCUS_ALL); press_a_key->connect("window_input", callable_mp(this, &InputMapEditor::_wait_for_key)); press_a_key->connect("confirmed", callable_mp(this, &InputMapEditor::_press_a_key_confirm)); @@ -1009,7 +994,7 @@ InputMapEditor::InputMapEditor() { press_a_key_label = l; device_input = memnew(ConfirmationDialog); - device_input->get_ok()->set_text(TTR("Add")); + device_input->get_ok_button()->set_text(TTR("Add")); device_input->connect("confirmed", callable_mp(this, &InputMapEditor::_device_input_add)); add_child(device_input); diff --git a/editor/input_map_editor.h b/editor/input_map_editor.h index b9a3ce19d4..b59eb97e1d 100644 --- a/editor/input_map_editor.h +++ b/editor/input_map_editor.h @@ -88,6 +88,8 @@ class InputMapEditor : public Control { void _press_a_key_confirm(); void _show_last_added(const Ref<InputEvent> &p_event, const String &p_name); + String _get_joypad_motion_event_text(const Ref<InputEventJoypadMotion> &p_event); + Variant get_drag_data_fw(const Point2 &p_point, Control *p_from); bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); diff --git a/editor/inspector_dock.cpp b/editor/inspector_dock.cpp index c88cd8ea5f..e0ba50fe4f 100644 --- a/editor/inspector_dock.cpp +++ b/editor/inspector_dock.cpp @@ -332,13 +332,20 @@ Container *InspectorDock::get_addon_area() { void InspectorDock::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { set_theme(editor->get_gui_base()->get_theme()); resource_new_button->set_icon(get_theme_icon("New", "EditorIcons")); resource_load_button->set_icon(get_theme_icon("Load", "EditorIcons")); resource_save_button->set_icon(get_theme_icon("Save", "EditorIcons")); - backward_button->set_icon(get_theme_icon("Back", "EditorIcons")); - forward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + backward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + forward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + } else { + backward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + forward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + } history_menu->set_icon(get_theme_icon("History", "EditorIcons")); object_menu->set_icon(get_theme_icon("Tools", "EditorIcons")); warning->set_icon(get_theme_icon("NodeWarning", "EditorIcons")); @@ -524,7 +531,11 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { backward_button = memnew(Button); backward_button->set_flat(true); general_options_hb->add_child(backward_button); - backward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + if (is_layout_rtl()) { + backward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + } else { + backward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + } backward_button->set_flat(true); backward_button->set_tooltip(TTR("Go to the previous edited object in history.")); backward_button->set_disabled(true); @@ -533,7 +544,11 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { forward_button = memnew(Button); forward_button->set_flat(true); general_options_hb->add_child(forward_button); - forward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + if (is_layout_rtl()) { + forward_button->set_icon(get_theme_icon("Back", "EditorIcons")); + } else { + forward_button->set_icon(get_theme_icon("Forward", "EditorIcons")); + } forward_button->set_flat(true); forward_button->set_tooltip(TTR("Go to the next edited object in history.")); forward_button->set_disabled(true); @@ -554,6 +569,7 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { node_info_hb->add_child(editor_path); object_menu = memnew(MenuButton); + object_menu->set_shortcut_context(this); object_menu->set_icon(get_theme_icon("Tools", "EditorIcons")); node_info_hb->add_child(object_menu); object_menu->set_tooltip(TTR("Object properties.")); diff --git a/editor/localization_editor.cpp b/editor/localization_editor.cpp index e725ce482d..2a21885c4c 100644 --- a/editor/localization_editor.cpp +++ b/editor/localization_editor.cpp @@ -37,6 +37,24 @@ #include "scene/gui/control.h" void LocalizationEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_TEXT_SERVER_CHANGED) { + ts_name->set_text(TTR("Text server: ") + TS->get_name()); + + FileAccessRef file_check = FileAccess::create(FileAccess::ACCESS_RESOURCES); + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + if (file_check->file_exists("res://" + TS->get_support_data_filename())) { + ts_data_status->set_text(TTR("Support data: ") + TTR("Installed")); + ts_install->set_disabled(true); + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not installed")); + ts_install->set_disabled(false); + } + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not supported")); + ts_install->set_disabled(false); + } + ts_data_info->set_text(TTR("Info: ") + TS->get_support_data_info()); + } if (p_what == NOTIFICATION_ENTER_TREE) { translation_list->connect("button_pressed", callable_mp(this, &LocalizationEditor::_translation_delete)); translation_pot_list->connect("button_pressed", callable_mp(this, &LocalizationEditor::_pot_delete)); @@ -622,6 +640,26 @@ void LocalizationEditor::update_translations() { updating_translations = false; } +void LocalizationEditor::_install_ts_data() { + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + TS->save_support_data("res://" + TS->get_support_data_filename()); + } + + FileAccessRef file_check = FileAccess::create(FileAccess::ACCESS_RESOURCES); + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + if (file_check->file_exists("res://" + TS->get_support_data_filename())) { + ts_data_status->set_text(TTR("Support data: ") + TTR("Installed")); + ts_install->set_disabled(true); + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not installed")); + ts_install->set_disabled(false); + } + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not supported")); + ts_install->set_disabled(false); + } +} + void LocalizationEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("update_translations"), &LocalizationEditor::update_translations); @@ -791,4 +829,37 @@ LocalizationEditor::LocalizationEditor() { pot_file_open_dialog->connect("file_selected", callable_mp(this, &LocalizationEditor::_pot_add)); add_child(pot_file_open_dialog); } + + { + VBoxContainer *tvb = memnew(VBoxContainer); + tvb->set_name(TTR("Text Server Data")); + translations->add_child(tvb); + + ts_name = memnew(Label(TTR("Text server: ") + TS->get_name())); + tvb->add_child(ts_name); + + ts_data_status = memnew(Label(TTR("Support data: "))); + tvb->add_child(ts_data_status); + + ts_data_info = memnew(Label(TTR("Info: ") + TS->get_support_data_info())); + tvb->add_child(ts_data_info); + + ts_install = memnew(Button(TTR("Install support data..."))); + ts_install->connect("pressed", callable_mp(this, &LocalizationEditor::_install_ts_data)); + tvb->add_child(ts_install); + + FileAccessRef file_check = FileAccess::create(FileAccess::ACCESS_RESOURCES); + if (TS->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + if (file_check->file_exists("res://" + TS->get_support_data_filename())) { + ts_data_status->set_text(TTR("Support data: ") + TTR("Installed")); + ts_install->set_disabled(true); + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not installed")); + ts_install->set_disabled(false); + } + } else { + ts_data_status->set_text(TTR("Support data: ") + TTR("Not supported")); + ts_install->set_disabled(false); + } + } } diff --git a/editor/localization_editor.h b/editor/localization_editor.h index 3c077d9c77..43b6bb60f6 100644 --- a/editor/localization_editor.h +++ b/editor/localization_editor.h @@ -58,6 +58,11 @@ class LocalizationEditor : public VBoxContainer { Vector<TreeItem *> translation_filter_treeitems; Vector<int> translation_locales_idxs_remap; + Label *ts_name; + Label *ts_data_status; + Label *ts_data_info; + Button *ts_install; + Tree *translation_pot_list; EditorFileDialog *pot_file_open_dialog; EditorFileDialog *pot_generate_dialog; @@ -89,6 +94,8 @@ class LocalizationEditor : public VBoxContainer { void _pot_generate(const String &p_file); void _update_pot_file_extensions(); + void _install_ts_data(); + protected: void _notification(int p_what); static void _bind_methods(); diff --git a/editor/multi_node_edit.cpp b/editor/multi_node_edit.cpp index 1077aca7b3..a7d5e5149e 100644 --- a/editor/multi_node_edit.cpp +++ b/editor/multi_node_edit.cpp @@ -173,10 +173,6 @@ void MultiNodeEdit::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::OBJECT, "scripts", PROPERTY_HINT_RESOURCE_TYPE, "Script")); } -void MultiNodeEdit::clear_nodes() { - nodes.clear(); -} - void MultiNodeEdit::add_node(const NodePath &p_node) { nodes.push_back(p_node); } diff --git a/editor/multi_node_edit.h b/editor/multi_node_edit.h index 694dad76f1..7f0fb625ef 100644 --- a/editor/multi_node_edit.h +++ b/editor/multi_node_edit.h @@ -38,7 +38,7 @@ class MultiNodeEdit : public Reference { List<NodePath> nodes; struct PLData { - int uses; + int uses = 0; PropertyInfo info; }; @@ -50,7 +50,6 @@ protected: void _get_property_list(List<PropertyInfo> *p_list) const; public: - void clear_nodes(); void add_node(const NodePath &p_node); int get_node_count() const; diff --git a/editor/node_3d_editor_gizmos.cpp b/editor/node_3d_editor_gizmos.cpp index 397a958d8f..1f6c32ed70 100644 --- a/editor/node_3d_editor_gizmos.cpp +++ b/editor/node_3d_editor_gizmos.cpp @@ -398,10 +398,10 @@ void EditorNode3DGizmo::add_handles(const Vector<Vector3> &p_handles, const Ref< void EditorNode3DGizmo::add_solid_box(Ref<Material> &p_material, Vector3 p_size, Vector3 p_position) { ERR_FAIL_COND(!spatial_node); - CubeMesh cubem; - cubem.set_size(p_size); + BoxMesh box_mesh; + box_mesh.set_size(p_size); - Array arrays = cubem.surface_get_arrays(0); + Array arrays = box_mesh.surface_get_arrays(0); PackedVector3Array vertex = arrays[RS::ARRAY_VERTEX]; Vector3 *w = vertex.ptrw(); @@ -412,7 +412,7 @@ void EditorNode3DGizmo::add_solid_box(Ref<Material> &p_material, Vector3 p_size, arrays[RS::ARRAY_VERTEX] = vertex; Ref<ArrayMesh> m = memnew(ArrayMesh); - m->add_surface_from_arrays(cubem.surface_get_primitive_type(0), arrays); + m->add_surface_from_arrays(box_mesh.surface_get_primitive_type(0), arrays); m->surface_set_material(0, p_material); add_mesh(m); } @@ -792,7 +792,7 @@ bool Light3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Light3D>(p_spatial) != nullptr; } -String Light3DGizmoPlugin::get_name() const { +String Light3DGizmoPlugin::get_gizmo_name() const { return "Light3D"; } @@ -1061,7 +1061,7 @@ bool AudioStreamPlayer3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<AudioStreamPlayer3D>(p_spatial) != nullptr; } -String AudioStreamPlayer3DGizmoPlugin::get_name() const { +String AudioStreamPlayer3DGizmoPlugin::get_gizmo_name() const { return "AudioStreamPlayer3D"; } @@ -1195,7 +1195,7 @@ bool Camera3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Camera3D>(p_spatial) != nullptr; } -String Camera3DGizmoPlugin::get_name() const { +String Camera3DGizmoPlugin::get_gizmo_name() const { return "Camera3D"; } @@ -1432,7 +1432,7 @@ bool MeshInstance3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<MeshInstance3D>(p_spatial) != nullptr && Object::cast_to<SoftBody3D>(p_spatial) == nullptr; } -String MeshInstance3DGizmoPlugin::get_name() const { +String MeshInstance3DGizmoPlugin::get_gizmo_name() const { return "MeshInstance3D"; } @@ -1469,7 +1469,7 @@ bool Sprite3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Sprite3D>(p_spatial) != nullptr; } -String Sprite3DGizmoPlugin::get_name() const { +String Sprite3DGizmoPlugin::get_gizmo_name() const { return "Sprite3D"; } @@ -1531,7 +1531,7 @@ bool Position3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Position3D>(p_spatial) != nullptr; } -String Position3DGizmoPlugin::get_name() const { +String Position3DGizmoPlugin::get_gizmo_name() const { return "Position3D"; } @@ -1556,7 +1556,7 @@ bool Skeleton3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Skeleton3D>(p_spatial) != nullptr; } -String Skeleton3DGizmoPlugin::get_name() const { +String Skeleton3DGizmoPlugin::get_gizmo_name() const { return "Skeleton3D"; } @@ -1625,13 +1625,13 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { int pointidx = 0; for (int j = 0; j < 3; j++) { bones.write[0] = parent; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(rootcolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(rootcolor); surface_tool->add_vertex(v0 - grests[parent].basis[j].normalized() * dist * 0.05); - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(rootcolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(rootcolor); surface_tool->add_vertex(v0 + grests[parent].basis[j].normalized() * dist * 0.05); if (j == closest) { @@ -1654,24 +1654,24 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { point += axis * dist * 0.1; bones.write[0] = parent; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(v0); - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(point); bones.write[0] = parent; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(point); bones.write[0] = i; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(v1); points[pointidx++] = point; } @@ -1680,13 +1680,13 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { SWAP(points[1], points[2]); for (int j = 0; j < 4; j++) { bones.write[0] = parent; - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(points[j]); - surface_tool->add_bones(bones); - surface_tool->add_weights(weights); - surface_tool->add_color(bonecolor); + surface_tool->set_bones(bones); + surface_tool->set_weights(weights); + surface_tool->set_color(bonecolor); surface_tool->add_vertex(points[(j + 1) % 4]); } @@ -1716,14 +1716,12 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) { Vector3 face_points[4]; for (int j=0;j<4;j++) { - float v[3]; v[0]=1.0; v[1]=1-2*((j>>1)&1); v[2]=v[1]*(1-2*(j&1)); for (int k=0;k<3;k++) { - if (i<3) face_points[j][(i+k)%3]=v[k]*(i>=3?-1:1); else @@ -1760,7 +1758,7 @@ bool PhysicalBone3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<PhysicalBone3D>(p_spatial) != nullptr; } -String PhysicalBone3DGizmoPlugin::get_name() const { +String PhysicalBone3DGizmoPlugin::get_gizmo_name() const { return "PhysicalBone3D"; } @@ -1897,7 +1895,7 @@ bool RayCast3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<RayCast3D>(p_spatial) != nullptr; } -String RayCast3DGizmoPlugin::get_name() const { +String RayCast3DGizmoPlugin::get_gizmo_name() const { return "RayCast3D"; } @@ -1949,7 +1947,7 @@ bool SpringArm3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<SpringArm3D>(p_spatial) != nullptr; } -String SpringArm3DGizmoPlugin::get_name() const { +String SpringArm3DGizmoPlugin::get_gizmo_name() const { return "SpringArm3D"; } @@ -1968,7 +1966,7 @@ bool VehicleWheel3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<VehicleWheel3D>(p_spatial) != nullptr; } -String VehicleWheel3DGizmoPlugin::get_name() const { +String VehicleWheel3DGizmoPlugin::get_gizmo_name() const { return "VehicleWheel3D"; } @@ -2040,7 +2038,7 @@ bool SoftBody3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<SoftBody3D>(p_spatial) != nullptr; } -String SoftBody3DGizmoPlugin::get_name() const { +String SoftBody3DGizmoPlugin::get_gizmo_name() const { return "SoftBody3D"; } @@ -2116,7 +2114,7 @@ bool VisibilityNotifier3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<VisibilityNotifier3D>(p_spatial) != nullptr; } -String VisibilityNotifier3DGizmoPlugin::get_name() const { +String VisibilityNotifier3DGizmoPlugin::get_gizmo_name() const { return "VisibilityNotifier3D"; } @@ -2272,7 +2270,7 @@ bool CPUParticles3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<CPUParticles3D>(p_spatial) != nullptr; } -String CPUParticles3DGizmoPlugin::get_name() const { +String CPUParticles3DGizmoPlugin::get_gizmo_name() const { return "CPUParticles3D"; } @@ -2304,7 +2302,7 @@ bool GPUParticles3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<GPUParticles3D>(p_spatial) != nullptr; } -String GPUParticles3DGizmoPlugin::get_name() const { +String GPUParticles3DGizmoPlugin::get_gizmo_name() const { return "GPUParticles3D"; } @@ -2471,7 +2469,7 @@ bool GPUParticlesCollision3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return (Object::cast_to<GPUParticlesCollision3D>(p_spatial) != nullptr) || (Object::cast_to<GPUParticlesAttractor3D>(p_spatial) != nullptr); } -String GPUParticlesCollision3DGizmoPlugin::get_name() const { +String GPUParticlesCollision3DGizmoPlugin::get_gizmo_name() const { return "GPUParticlesCollision3D"; } @@ -2735,7 +2733,7 @@ bool ReflectionProbeGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<ReflectionProbe>(p_spatial) != nullptr; } -String ReflectionProbeGizmoPlugin::get_name() const { +String ReflectionProbeGizmoPlugin::get_gizmo_name() const { return "ReflectionProbe"; } @@ -2920,7 +2918,7 @@ bool DecalGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Decal>(p_spatial) != nullptr; } -String DecalGizmoPlugin::get_name() const { +String DecalGizmoPlugin::get_gizmo_name() const { return "Decal"; } @@ -3061,7 +3059,7 @@ bool GIProbeGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<GIProbe>(p_spatial) != nullptr; } -String GIProbeGizmoPlugin::get_name() const { +String GIProbeGizmoPlugin::get_gizmo_name() const { return "GIProbe"; } @@ -3256,7 +3254,7 @@ bool BakedLightmapGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<BakedLightmap>(p_spatial) != nullptr; } -String BakedLightmapGizmoPlugin::get_name() const { +String BakedLightmapGizmoPlugin::get_gizmo_name() const { return "BakedLightmap"; } @@ -3438,7 +3436,7 @@ bool LightmapProbeGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<LightmapProbe>(p_spatial) != nullptr; } -String LightmapProbeGizmoPlugin::get_name() const { +String LightmapProbeGizmoPlugin::get_gizmo_name() const { return "LightmapProbe"; } @@ -3522,7 +3520,7 @@ bool CollisionShape3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<CollisionShape3D>(p_spatial) != nullptr; } -String CollisionShape3DGizmoPlugin::get_name() const { +String CollisionShape3DGizmoPlugin::get_gizmo_name() const { return "CollisionShape3D"; } @@ -4122,7 +4120,7 @@ bool CollisionPolygon3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<CollisionPolygon3D>(p_spatial) != nullptr; } -String CollisionPolygon3DGizmoPlugin::get_name() const { +String CollisionPolygon3DGizmoPlugin::get_gizmo_name() const { return "CollisionPolygon3D"; } @@ -4169,7 +4167,7 @@ bool NavigationRegion3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<NavigationRegion3D>(p_spatial) != nullptr; } -String NavigationRegion3DGizmoPlugin::get_name() const { +String NavigationRegion3DGizmoPlugin::get_gizmo_name() const { return "NavigationRegion3D"; } @@ -4534,7 +4532,7 @@ bool Joint3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to<Joint3D>(p_spatial) != nullptr; } -String Joint3DGizmoPlugin::get_name() const { +String Joint3DGizmoPlugin::get_gizmo_name() const { return "Joint3D"; } diff --git a/editor/node_3d_editor_gizmos.h b/editor/node_3d_editor_gizmos.h index 4826054643..e418456d60 100644 --- a/editor/node_3d_editor_gizmos.h +++ b/editor/node_3d_editor_gizmos.h @@ -41,7 +41,7 @@ class Light3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override; @@ -58,7 +58,7 @@ class AudioStreamPlayer3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override; @@ -75,7 +75,7 @@ class Camera3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override; @@ -92,7 +92,7 @@ class MeshInstance3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool can_be_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -105,7 +105,7 @@ class Sprite3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool can_be_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -121,7 +121,7 @@ class Position3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -133,7 +133,7 @@ class Skeleton3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -145,7 +145,7 @@ class PhysicalBone3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -157,7 +157,7 @@ class RayCast3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -169,7 +169,7 @@ class SpringArm3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -181,7 +181,7 @@ class VehicleWheel3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -193,7 +193,7 @@ class SoftBody3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool is_selectable_when_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -211,7 +211,7 @@ class VisibilityNotifier3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -228,7 +228,7 @@ class CPUParticles3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool is_selectable_when_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -240,7 +240,7 @@ class GPUParticles3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; bool is_selectable_when_hidden() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -258,7 +258,7 @@ class GPUParticlesCollision3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -275,7 +275,7 @@ class ReflectionProbeGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -292,7 +292,7 @@ class DecalGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -309,7 +309,7 @@ class GIProbeGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -326,7 +326,7 @@ class BakedLightmapGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -343,7 +343,7 @@ class LightmapProbeGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -360,7 +360,7 @@ class CollisionShape3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -377,7 +377,7 @@ class CollisionPolygon3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; CollisionPolygon3DGizmoPlugin(); @@ -395,7 +395,7 @@ class NavigationRegion3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; @@ -427,7 +427,7 @@ class Joint3DGizmoPlugin : public EditorNode3DGizmoPlugin { public: bool has_gizmo(Node3D *p_spatial) override; - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; void redraw(EditorNode3DGizmo *p_gizmo) override; diff --git a/editor/plugin_config_dialog.cpp b/editor/plugin_config_dialog.cpp index 3ad6938498..a780750633 100644 --- a/editor/plugin_config_dialog.cpp +++ b/editor/plugin_config_dialog.cpp @@ -126,7 +126,7 @@ void PluginConfigDialog::_on_cancelled() { void PluginConfigDialog::_on_required_text_changed(const String &) { int lang_idx = script_option_edit->get_selected(); String ext = ScriptServer::get_language(lang_idx)->get_extension(); - get_ok()->set_disabled(script_edit->get_text().get_basename().empty() || script_edit->get_text().get_extension() != ext || name_edit->get_text().empty()); + get_ok_button()->set_disabled(script_edit->get_text().get_basename().empty() || script_edit->get_text().get_extension() != ext || name_edit->get_text().empty()); } void PluginConfigDialog::_notification(int p_what) { @@ -138,7 +138,7 @@ void PluginConfigDialog::_notification(int p_what) { } break; case NOTIFICATION_READY: { connect("confirmed", callable_mp(this, &PluginConfigDialog::_on_confirmed)); - get_cancel()->connect("pressed", callable_mp(this, &PluginConfigDialog::_on_cancelled)); + get_cancel_button()->connect("pressed", callable_mp(this, &PluginConfigDialog::_on_cancelled)); } break; } } @@ -171,8 +171,8 @@ void PluginConfigDialog::config(const String &p_config_path) { Object::cast_to<Label>(subfolder_edit->get_parent()->get_child(subfolder_edit->get_index() - 1))->show(); set_title(TTR("Create a Plugin")); } - get_ok()->set_disabled(!_edit_mode); - get_ok()->set_text(_edit_mode ? TTR("Update") : TTR("Create")); + get_ok_button()->set_disabled(!_edit_mode); + get_ok_button()->set_text(_edit_mode ? TTR("Update") : TTR("Create")); } void PluginConfigDialog::_bind_methods() { @@ -180,7 +180,7 @@ void PluginConfigDialog::_bind_methods() { } PluginConfigDialog::PluginConfigDialog() { - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); set_hide_on_ok(true); GridContainer *grid = memnew(GridContainer); diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index 7a3fb1ff52..281b1d79af 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -551,9 +551,10 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl if (vertex == hover_point) { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); String num = String::num(vertex.vertex); - Size2 num_size = font->get_string_size(num); - p_overlay->draw_string(font, point - num_size * 0.5, num, Color(1.0, 1.0, 1.0, 0.5)); + Size2 num_size = font->get_string_size(num, font_size); + p_overlay->draw_string(font, point - num_size * 0.5, num, HALIGN_LEFT, -1, font_size, Color(1.0, 1.0, 1.0, 0.5)); } } } @@ -723,7 +724,7 @@ AbstractPolygon2DEditor::AbstractPolygon2DEditor(EditorNode *p_editor, bool p_wi create_resource = memnew(ConfirmationDialog); add_child(create_resource); - create_resource->get_ok()->set_text(TTR("Create")); + create_resource->get_ok_button()->set_text(TTR("Create")); mode = MODE_EDIT; } diff --git a/editor/plugins/animation_blend_space_1d_editor.cpp b/editor/plugins/animation_blend_space_1d_editor.cpp index d335b29c2f..223484044a 100644 --- a/editor/plugins/animation_blend_space_1d_editor.cpp +++ b/editor/plugins/animation_blend_space_1d_editor.cpp @@ -201,6 +201,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_draw() { linecolor_soft.a *= 0.5; Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Ref<Texture2D> icon = get_theme_icon("KeyValue", "EditorIcons"); Ref<Texture2D> icon_selected = get_theme_icon("KeySelected", "EditorIcons"); @@ -221,7 +222,7 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_draw() { float x = point; blend_space_draw->draw_line(Point2(x, s.height - 1), Point2(x, s.height - 5 * EDSCALE), linecolor); - blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height(font_size) + font->get_ascent(font_size)), "0", HALIGN_LEFT, -1, font_size, linecolor); blend_space_draw->draw_line(Point2(x, s.height - 5 * EDSCALE), Point2(x, 0), linecolor_soft); } diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp index 60a5188af7..94785a5422 100644 --- a/editor/plugins/animation_blend_space_2d_editor.cpp +++ b/editor/plugins/animation_blend_space_2d_editor.cpp @@ -396,6 +396,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { Color linecolor_soft = linecolor; linecolor_soft.a *= 0.5; Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Ref<Texture2D> icon = get_theme_icon("KeyValue", "EditorIcons"); Ref<Texture2D> icon_selected = get_theme_icon("KeySelected", "EditorIcons"); @@ -412,14 +413,14 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { if (blend_space->get_min_space().y < 0) { int y = (blend_space->get_max_space().y / (blend_space->get_max_space().y - blend_space->get_min_space().y)) * s.height; blend_space_draw->draw_line(Point2(0, y), Point2(5 * EDSCALE, y), linecolor); - blend_space_draw->draw_string(font, Point2(2 * EDSCALE, y - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_string(font, Point2(2 * EDSCALE, y - font->get_height(font_size) + font->get_ascent(font_size)), "0", HALIGN_LEFT, -1, font_size, linecolor); blend_space_draw->draw_line(Point2(5 * EDSCALE, y), Point2(s.width, y), linecolor_soft); } if (blend_space->get_min_space().x < 0) { int x = (-blend_space->get_min_space().x / (blend_space->get_max_space().x - blend_space->get_min_space().x)) * s.width; blend_space_draw->draw_line(Point2(x, s.height - 1), Point2(x, s.height - 5 * EDSCALE), linecolor); - blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height() + font->get_ascent()), "0", linecolor); + blend_space_draw->draw_string(font, Point2(x + 2 * EDSCALE, s.height - 2 * EDSCALE - font->get_height(font_size) + font->get_ascent(font_size)), "0", HALIGN_LEFT, -1, font_size, linecolor); blend_space_draw->draw_line(Point2(x, s.height - 5 * EDSCALE), Point2(x, 0), linecolor_soft); } diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 1e56e3d11f..4b97dacbc1 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -105,6 +105,8 @@ void AnimationPlayerEditor::_notification(int p_what) { case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { add_theme_style_override("panel", editor->get_gui_base()->get_theme_stylebox("panel", "Panel")); } break; + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_THEME_CHANGED: { autoplay->set_icon(get_theme_icon("AutoPlay", "EditorIcons")); @@ -114,6 +116,19 @@ void AnimationPlayerEditor::_notification(int p_what) { play_bw_from->set_icon(get_theme_icon("PlayBackwards", "EditorIcons")); autoplay_icon = get_theme_icon("AutoPlay", "EditorIcons"); + reset_icon = get_theme_icon("Reload", "EditorIcons"); + { + Ref<Image> autoplay_img = autoplay_icon->get_data(); + Ref<Image> reset_img = reset_icon->get_data(); + Ref<Image> autoplay_reset_img; + Size2 icon_size = Size2(autoplay_img->get_width(), autoplay_img->get_height()); + autoplay_reset_img.instance(); + autoplay_reset_img->create(icon_size.x * 2, icon_size.y, false, autoplay_img->get_format()); + autoplay_reset_img->blit_rect(autoplay_img, Rect2(Point2(), icon_size), Point2()); + autoplay_reset_img->blit_rect(reset_img, Rect2(Point2(), icon_size), Point2(icon_size.x, 0)); + autoplay_reset_icon.instance(); + autoplay_reset_icon->create_from_image(autoplay_reset_img); + } stop->set_icon(get_theme_icon("Stop", "EditorIcons")); onion_toggle->set_icon(get_theme_icon("Onion", "EditorIcons")); @@ -815,11 +830,17 @@ void AnimationPlayerEditor::_update_player() { int active_idx = -1; for (List<StringName>::Element *E = animlist.front(); E; E = E->next()) { - if (player->get_autoplay() == E->get()) { - animation->add_icon_item(autoplay_icon, E->get()); - } else { - animation->add_item(E->get()); + Ref<Texture2D> icon; + if (E->get() == player->get_autoplay()) { + if (E->get() == "RESET") { + icon = autoplay_reset_icon; + } else { + icon = autoplay_icon; + } + } else if (E->get() == "RESET") { + icon = reset_icon; } + animation->add_icon_item(icon, E->get()); if (player->get_assigned_animation() == E->get()) { active_idx = animation->get_item_count() - 1; @@ -1210,9 +1231,11 @@ void AnimationPlayerEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { } else { _play_bw_pressed(); } + accept_event(); } break; case KEY_S: { _stop_pressed(); + accept_event(); } break; case KEY_D: { if (!k->get_shift()) { @@ -1220,6 +1243,7 @@ void AnimationPlayerEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { } else { _play_pressed(); } + accept_event(); } break; } } @@ -1370,7 +1394,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { } // Backup current animation state. - AnimatedValuesBackup values_backup = player->backup_animated_values(); + Ref<AnimatedValuesBackup> values_backup = player->backup_animated_values(); float cpos = player->get_current_animation_position(); // Render every past/future step with the capture shader. @@ -1400,7 +1424,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { if (valid) { player->seek(pos, true); get_tree()->flush_transform_notifications(); // Needed for transforms of Node3Ds. - values_backup.update_skeletons(); // Needed for Skeletons (2D & 3D). + values_backup->update_skeletons(); // Needed for Skeletons (2D & 3D). RS::get_singleton()->viewport_set_active(onion.captures[cidx], true); RS::get_singleton()->viewport_set_parent_viewport(root_vp, onion.captures[cidx]); @@ -1420,7 +1444,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { // (Seeking with update=true wouldn't do the trick because the current value of the properties // may not match their value for the current point in the animation). player->seek(cpos, false); - player->restore_animated_values(values_backup); + values_backup->restore(); // Restore state of main editors. if (Node3DEditor::get_singleton()->is_visible()) { @@ -1545,6 +1569,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay delete_dialog->connect("confirmed", callable_mp(this, &AnimationPlayerEditor::_animation_remove_confirmed)); tool_anim = memnew(MenuButton); + tool_anim->set_shortcut_context(this); tool_anim->set_flat(false); tool_anim->set_tooltip(TTR("Animation Tools")); tool_anim->set_text(TTR("Animation")); @@ -1636,7 +1661,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay name_dialog->register_text_enter(name); error_dialog = memnew(ConfirmationDialog); - error_dialog->get_ok()->set_text(TTR("Close")); + error_dialog->get_ok_button()->set_text(TTR("Close")); error_dialog->set_title(TTR("Error!")); add_child(error_dialog); @@ -1644,7 +1669,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay blend_editor.dialog = memnew(AcceptDialog); add_child(blend_editor.dialog); - blend_editor.dialog->get_ok()->set_text(TTR("Close")); + blend_editor.dialog->get_ok_button()->set_text(TTR("Close")); blend_editor.dialog->set_hide_on_ok(true); VBoxContainer *blend_vb = memnew(VBoxContainer); blend_editor.dialog->add_child(blend_vb); diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h index e11db1390b..ab3feb115f 100644 --- a/editor/plugins/animation_player_editor_plugin.h +++ b/editor/plugins/animation_player_editor_plugin.h @@ -105,6 +105,8 @@ class AnimationPlayerEditor : public VBoxContainer { Label *name_title; UndoRedo *undo_redo; Ref<Texture2D> autoplay_icon; + Ref<Texture2D> reset_icon; + Ref<ImageTexture> autoplay_reset_icon; bool last_active; float timeline_position; @@ -113,9 +115,9 @@ class AnimationPlayerEditor : public VBoxContainer { int current_option; struct BlendEditor { - AcceptDialog *dialog; - Tree *tree; - OptionButton *next; + AcceptDialog *dialog = nullptr; + Tree *tree = nullptr; + OptionButton *next = nullptr; } blend_editor; @@ -131,13 +133,13 @@ class AnimationPlayerEditor : public VBoxContainer { // Onion skinning. struct { // Settings. - bool enabled; - bool past; - bool future; - int steps; - bool differences_only; - bool force_white_modulate; - bool include_gizmos; + bool enabled = false; + bool past = false; + bool future = false; + int steps = 0; + bool differences_only = false; + bool force_white_modulate = false; + bool include_gizmos = false; int get_needed_capture_count() const { // 'Differences only' needs a capture of the present. @@ -145,8 +147,8 @@ class AnimationPlayerEditor : public VBoxContainer { } // Rendering. - int64_t last_frame; - int can_overlay; + int64_t last_frame = 0; + int can_overlay = 0; Size2 capture_size; Vector<RID> captures; Vector<bool> captures_valid; diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index 4634d15941..c59e056f4f 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -559,6 +559,7 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { Ref<StyleBox> style_selected = get_theme_stylebox("state_machine_selectedframe", "GraphNode"); Ref<Font> font = get_theme_font("title_font", "GraphNode"); + int font_size = get_theme_font_size("title_font_size", "GraphNode"); Color font_color = get_theme_color("title_color", "GraphNode"); Ref<Texture2D> play = get_theme_icon("Play", "EditorIcons"); Ref<Texture2D> auto_play = get_theme_icon("AutoPlay", "EditorIcons"); @@ -612,9 +613,9 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { Ref<StyleBox> sb = E->get() == selected_node ? style_selected : style; Size2 s = sb->get_minimum_size(); - int strsize = font->get_string_size(name).width; + int strsize = font->get_string_size(name, font_size).width; s.width += strsize; - s.height += MAX(font->get_height(), play->get_height()); + s.height += MAX(font->get_height(font_size), play->get_height()); s.width += sep + play->get_width(); if (needs_editor) { s.width += sep + edit->get_width(); @@ -741,7 +742,7 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { Ref<AnimationNode> anode = state_machine->get_node(name); bool needs_editor = AnimationTreeEditor::get_singleton()->can_edit(anode); Ref<StyleBox> sb = name == selected_node ? style_selected : style; - int strsize = font->get_string_size(name).width; + int strsize = font->get_string_size(name, font_size).width; NodeRect &nr = node_rects.write[i]; @@ -759,12 +760,12 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { bool onstart = state_machine->get_start_node() == name; if (onstart) { - state_machine_draw->draw_string(font, offset + Vector2(0, -font->get_height() - 3 * EDSCALE + font->get_ascent()), TTR("Start"), font_color); + state_machine_draw->draw_string(font, offset + Vector2(0, -font->get_height(font_size) - 3 * EDSCALE + font->get_ascent(font_size)), TTR("Start"), HALIGN_LEFT, -1, font_size, font_color); } if (state_machine->get_end_node() == name) { - int endofs = nr.node.size.x - font->get_string_size(TTR("End")).x; - state_machine_draw->draw_string(font, offset + Vector2(endofs, -font->get_height() - 3 * EDSCALE + font->get_ascent()), TTR("End"), font_color); + int endofs = nr.node.size.x - font->get_string_size(TTR("End"), font_size).x; + state_machine_draw->draw_string(font, offset + Vector2(endofs, -font->get_height(font_size) - 3 * EDSCALE + font->get_ascent(font_size)), TTR("End"), HALIGN_LEFT, -1, font_size, font_color); } offset.x += sb->get_offset().x; @@ -781,10 +782,10 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { } offset.x += sep + play->get_width(); - nr.name.position = offset + Vector2(0, (h - font->get_height()) / 2).floor(); - nr.name.size = Vector2(strsize, font->get_height()); + nr.name.position = offset + Vector2(0, (h - font->get_height(font_size)) / 2).floor(); + nr.name.size = Vector2(strsize, font->get_height(font_size)); - state_machine_draw->draw_string(font, nr.name.position + Vector2(0, font->get_ascent()), name, font_color); + state_machine_draw->draw_string(font, nr.name.position + Vector2(0, font->get_ascent(font_size)), name, HALIGN_LEFT, -1, font_size, font_color); offset.x += strsize + sep; if (needs_editor) { @@ -880,7 +881,7 @@ void AnimationNodeStateMachineEditor::_update_graph() { } void AnimationNodeStateMachineEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) { error_panel->add_theme_style_override("panel", get_theme_stylebox("bg", "Tree")); error_label->add_theme_color_override("font_color", get_theme_color("error_color", "Editor")); panel->add_theme_style_override("panel", get_theme_stylebox("bg", "Tree")); diff --git a/editor/plugins/animation_state_machine_editor.h b/editor/plugins/animation_state_machine_editor.h index f78d90bdbf..119feb417d 100644 --- a/editor/plugins/animation_state_machine_editor.h +++ b/editor/plugins/animation_state_machine_editor.h @@ -126,10 +126,10 @@ class AnimationNodeStateMachineEditor : public AnimationTreeNodeEditorPlugin { Vector2 to; AnimationNodeStateMachineTransition::SwitchMode mode; StringName advance_condition_name; - bool advance_condition_state; - bool disabled; - bool auto_advance; - float width; + bool advance_condition_state = false; + bool disabled = false; + bool auto_advance = false; + float width = 0; }; Vector<TransitionLine> transition_lines; diff --git a/editor/plugins/animation_tree_editor_plugin.cpp b/editor/plugins/animation_tree_editor_plugin.cpp index 1bbb68d224..800df12199 100644 --- a/editor/plugins/animation_tree_editor_plugin.cpp +++ b/editor/plugins/animation_tree_editor_plugin.cpp @@ -142,9 +142,6 @@ void AnimationTreeEditor::enter_editor(const String &p_path) { edit_path(path); } -void AnimationTreeEditor::_about_to_show_root() { -} - void AnimationTreeEditor::_notification(int p_what) { if (p_what == NOTIFICATION_PROCESS) { ObjectID root; diff --git a/editor/plugins/animation_tree_editor_plugin.h b/editor/plugins/animation_tree_editor_plugin.h index 356a078d99..fd3a449487 100644 --- a/editor/plugins/animation_tree_editor_plugin.h +++ b/editor/plugins/animation_tree_editor_plugin.h @@ -62,7 +62,6 @@ class AnimationTreeEditor : public VBoxContainer { Vector<AnimationTreeNodeEditorPlugin *> editors; void _update_path(); - void _about_to_show_root(); ObjectID current_root; void _path_button_pressed(int p_path); diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 5742becf3a..ba798a7826 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -295,8 +295,8 @@ EditorAssetLibraryItemDescription::EditorAssetLibraryItemDescription() { preview_hb->set_v_size_flags(Control::SIZE_EXPAND_FILL); previews->add_child(preview_hb); - get_ok()->set_text(TTR("Download")); - get_cancel()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Download")); + get_cancel_button()->set_text(TTR("Close")); } /////////////////////////////////////////////////////////////////////////////////// @@ -580,7 +580,7 @@ void EditorAssetLibrary::_notification(int p_what) { } } -void EditorAssetLibrary::_unhandled_input(const Ref<InputEvent> &p_event) { +void EditorAssetLibrary::_unhandled_key_input(const Ref<InputEvent> &p_event) { const Ref<InputEventKey> key = p_event; if (key.is_valid() && key->is_pressed()) { @@ -1187,6 +1187,10 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const _request_image(item->get_instance_id(), r["icon_url"], IMAGE_QUEUE_ICON, 0); } } + + if (!result.empty()) { + library_scroll->set_v_scroll(0); + } } break; case REQUESTING_ASSET: { Dictionary r = d; @@ -1281,7 +1285,7 @@ void EditorAssetLibrary::disable_community_support() { } void EditorAssetLibrary::_bind_methods() { - ClassDB::bind_method("_unhandled_input", &EditorAssetLibrary::_unhandled_input); + ClassDB::bind_method("_unhandled_key_input", &EditorAssetLibrary::_unhandled_key_input); ADD_SIGNAL(MethodInfo("install_asset", PropertyInfo(Variant::STRING, "zip_path"), PropertyInfo(Variant::STRING, "name"))); } @@ -1454,7 +1458,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { description = nullptr; set_process(true); - set_process_unhandled_input(true); + set_process_unhandled_key_input(true); // Global shortcuts since there is no main element to be focused. downloads_scroll = memnew(ScrollContainer); downloads_scroll->set_enable_h_scroll(true); diff --git a/editor/plugins/asset_library_editor_plugin.h b/editor/plugins/asset_library_editor_plugin.h index f7ad53f87b..b69dfc208e 100644 --- a/editor/plugins/asset_library_editor_plugin.h +++ b/editor/plugins/asset_library_editor_plugin.h @@ -89,10 +89,10 @@ class EditorAssetLibraryItemDescription : public ConfirmationDialog { PanelContainer *previews_bg; struct Preview { - int id; - bool is_video; + int id = 0; + bool is_video = false; String video_link; - Button *button; + Button *button = nullptr; Ref<Texture2D> image; }; @@ -234,12 +234,12 @@ class EditorAssetLibrary : public PanelContainer { }; struct ImageQueue { - bool active; - int queue_id; - ImageType image_type; - int image_index; + bool active = false; + int queue_id = 0; + ImageType image_type = ImageType::IMAGE_QUEUE_ICON; + int image_index = 0; String image_url; - HTTPRequest *request; + HTTPRequest *request = nullptr; ObjectID target; }; @@ -298,7 +298,7 @@ class EditorAssetLibrary : public PanelContainer { protected: static void _bind_methods(); void _notification(int p_what); - void _unhandled_input(const Ref<InputEvent> &p_event); + void _unhandled_key_input(const Ref<InputEvent> &p_event); public: void disable_community_support(); diff --git a/editor/plugins/audio_stream_editor_plugin.cpp b/editor/plugins/audio_stream_editor_plugin.cpp index e6f6b6f2e0..998916349c 100644 --- a/editor/plugins/audio_stream_editor_plugin.cpp +++ b/editor/plugins/audio_stream_editor_plugin.cpp @@ -236,11 +236,13 @@ AudioStreamEditor::AudioStreamEditor() { _current_label->set_align(Label::ALIGN_RIGHT); _current_label->set_h_size_flags(SIZE_EXPAND_FILL); _current_label->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("status_source", "EditorFonts")); + _current_label->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("status_source_size", "EditorFonts")); _current_label->set_modulate(Color(1, 1, 1, 0.5)); hbox->add_child(_current_label); _duration_label = memnew(Label); _duration_label->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("status_source", "EditorFonts")); + _duration_label->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("status_source_size", "EditorFonts")); hbox->add_child(_duration_label); } diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index e1f2d2c045..2a4cc691c3 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -52,7 +52,6 @@ #include "scene/gui/subviewport_container.h" #include "scene/main/canvas_layer.h" #include "scene/main/window.h" -#include "scene/resources/dynamic_font.h" #include "scene/resources/packed_scene.h" // Min and Max are power of two in order to play nicely with successive increment. @@ -479,22 +478,24 @@ void CanvasItemEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { return; } - if (k->get_keycode() == KEY_CONTROL || k->get_keycode() == KEY_ALT || k->get_keycode() == KEY_SHIFT) { - viewport->update(); - } - - if (k->is_pressed() && !k->get_control() && !k->is_echo()) { - if ((grid_snap_active || show_grid) && multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) { - // Multiply the grid size - grid_step_multiplier = MIN(grid_step_multiplier + 1, 12); + if (k.is_valid()) { + if (k->get_keycode() == KEY_CONTROL || k->get_keycode() == KEY_ALT || k->get_keycode() == KEY_SHIFT) { viewport->update(); - } else if ((grid_snap_active || show_grid) && divide_grid_step_shortcut.is_valid() && divide_grid_step_shortcut->is_shortcut(p_ev)) { - // Divide the grid size - Point2 new_grid_step = grid_step * Math::pow(2.0, grid_step_multiplier - 1); - if (new_grid_step.x >= 1.0 && new_grid_step.y >= 1.0) { - grid_step_multiplier--; + } + + if (k->is_pressed() && !k->get_control() && !k->is_echo()) { + if ((grid_snap_active || show_grid) && multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) { + // Multiply the grid size + grid_step_multiplier = MIN(grid_step_multiplier + 1, 12); + viewport->update(); + } else if ((grid_snap_active || show_grid) && divide_grid_step_shortcut.is_valid() && divide_grid_step_shortcut->is_shortcut(p_ev)) { + // Divide the grid size + Point2 new_grid_step = grid_step * Math::pow(2.0, grid_step_multiplier - 1); + if (new_grid_step.x >= 1.0 && new_grid_step.y >= 1.0) { + grid_step_multiplier--; + } + viewport->update(); } - viewport->update(); } } } @@ -857,7 +858,11 @@ Vector2 CanvasItemEditor::_anchor_to_position(const Control *p_control, Vector2 Transform2D parent_transform = p_control->get_transform().affine_inverse(); Rect2 parent_rect = p_control->get_parent_anchorable_rect(); - return parent_transform.xform(parent_rect.position + Vector2(parent_rect.size.x * anchor.x, parent_rect.size.y * anchor.y)); + if (p_control->is_layout_rtl()) { + return parent_transform.xform(parent_rect.position + Vector2(parent_rect.size.x - parent_rect.size.x * anchor.x, parent_rect.size.y * anchor.y)); + } else { + return parent_transform.xform(parent_rect.position + Vector2(parent_rect.size.x * anchor.x, parent_rect.size.y * anchor.y)); + } } Vector2 CanvasItemEditor::_position_to_anchor(const Control *p_control, Vector2 position) { @@ -866,7 +871,11 @@ Vector2 CanvasItemEditor::_position_to_anchor(const Control *p_control, Vector2 Rect2 parent_rect = p_control->get_parent_anchorable_rect(); Vector2 output = Vector2(); - output.x = (parent_rect.size.x == 0) ? 0.0 : (p_control->get_transform().xform(position).x - parent_rect.position.x) / parent_rect.size.x; + if (p_control->is_layout_rtl()) { + output.x = (parent_rect.size.x == 0) ? 0.0 : (parent_rect.size.x - p_control->get_transform().xform(position).x - parent_rect.position.x) / parent_rect.size.x; + } else { + output.x = (parent_rect.size.x == 0) ? 0.0 : (p_control->get_transform().xform(position).x - parent_rect.position.x) / parent_rect.size.x; + } output.y = (parent_rect.size.y == 0) ? 0.0 : (p_control->get_transform().xform(position).y - parent_rect.position.y) / parent_rect.size.y; return output; } @@ -1513,7 +1522,7 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) { // Start rotation if (drag_type == DRAG_NONE) { if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { - if ((b->get_control() && !b->get_alt() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) { + if ((b->get_command() && !b->get_alt() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) { List<CanvasItem *> selection = _get_edited_canvas_items(); // Remove not movable nodes @@ -1628,7 +1637,11 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) { for (int i = 0; i < 4; i++) { anchor_pos[i] = (transform * control->get_global_transform_with_canvas()).xform(_anchor_to_position(control, anchor_pos[i])); anchor_rects[i] = Rect2(anchor_pos[i], anchor_handle->get_size()); - anchor_rects[i].position -= anchor_handle->get_size() * Vector2(float(i == 0 || i == 3), float(i <= 1)); + if (control->is_layout_rtl()) { + anchor_rects[i].position -= anchor_handle->get_size() * Vector2(float(i == 1 || i == 2), float(i <= 1)); + } else { + anchor_rects[i].position -= anchor_handle->get_size() * Vector2(float(i == 0 || i == 3), float(i <= 1)); + } } DragType dragger[] = { @@ -2343,12 +2356,12 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { (!Input::get_singleton()->is_key_pressed(KEY_DOWN)) && (!Input::get_singleton()->is_key_pressed(KEY_LEFT)) && (!Input::get_singleton()->is_key_pressed(KEY_RIGHT))) { - if (drag_selection.size() != 1) { + if (drag_selection.size() > 1) { _commit_canvas_item_state( drag_selection, vformat(TTR("Move %d CanvasItems"), drag_selection.size()), true); - } else { + } else if (drag_selection.size() == 1) { _commit_canvas_item_state( drag_selection, vformat(TTR("Move CanvasItem \"%s\" to (%d, %d)"), @@ -2771,7 +2784,8 @@ void CanvasItemEditor::_draw_text_at_position(Point2 p_position, String p_string Color color = get_theme_color("font_color", "Editor"); color.a = 0.8; Ref<Font> font = get_theme_font("font", "Label"); - Size2 text_size = font->get_string_size(p_string); + int font_size = get_theme_font_size("font_size", "Label"); + Size2 text_size = font->get_string_size(p_string, font_size); switch (p_side) { case MARGIN_LEFT: p_position += Vector2(-text_size.x - 5, text_size.y / 2); @@ -2786,18 +2800,18 @@ void CanvasItemEditor::_draw_text_at_position(Point2 p_position, String p_string p_position += Vector2(-text_size.x / 2, text_size.y + 5); break; } - viewport->draw_string(font, p_position, p_string, color); + viewport->draw_string(font, p_position, p_string, HALIGN_LEFT, -1, font_size, color); } void CanvasItemEditor::_draw_margin_at_position(int p_value, Point2 p_position, Margin p_side) { - String str = vformat("%d px", p_value); + String str = TS->format_number(vformat("%d " + TTR("px"), p_value)); if (p_value != 0) { _draw_text_at_position(p_position, str, p_side); } } void CanvasItemEditor::_draw_percentage_at_position(float p_value, Point2 p_position, Margin p_side) { - String str = vformat("%.1f %%", p_value * 100.0); + String str = TS->format_number(vformat("%.1f ", p_value * 100.0)) + TS->percent_sign(); if (p_value != 0) { _draw_text_at_position(p_position, str, p_side); } @@ -2841,17 +2855,19 @@ void CanvasItemEditor::_draw_guides() { Color text_color = get_theme_color("font_color", "Editor"); text_color.a = 0.5; if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_V_GUIDE) { - String str = vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).x)); + String str = TS->format_number(vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).x))); Ref<Font> font = get_theme_font("font", "Label"); - Size2 text_size = font->get_string_size(str); - viewport->draw_string(font, Point2(dragged_guide_pos.x + 10, RULER_WIDTH + text_size.y / 2 + 10), str, text_color); + int font_size = get_theme_font_size("font_size", "Label"); + Size2 text_size = font->get_string_size(str, font_size); + viewport->draw_string(font, Point2(dragged_guide_pos.x + 10, RULER_WIDTH + text_size.y / 2 + 10), str, HALIGN_LEFT, -1, font_size, text_color); viewport->draw_line(Point2(dragged_guide_pos.x, 0), Point2(dragged_guide_pos.x, viewport->get_size().y), guide_color, Math::round(EDSCALE)); } if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_H_GUIDE) { - String str = vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).y)); + String str = TS->format_number(vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).y))); Ref<Font> font = get_theme_font("font", "Label"); - Size2 text_size = font->get_string_size(str); - viewport->draw_string(font, Point2(RULER_WIDTH + 10, dragged_guide_pos.y + text_size.y / 2 + 10), str, text_color); + int font_size = get_theme_font_size("font_size", "Label"); + Size2 text_size = font->get_string_size(str, font_size); + viewport->draw_string(font, Point2(RULER_WIDTH + 10, dragged_guide_pos.y + text_size.y / 2 + 10), str, HALIGN_LEFT, -1, font_size, text_color); viewport->draw_line(Point2(0, dragged_guide_pos.y), Point2(viewport->get_size().x, dragged_guide_pos.y), guide_color, Math::round(EDSCALE)); } } @@ -2876,6 +2892,7 @@ void CanvasItemEditor::_draw_rulers() { Color font_color = get_theme_color("font_color", "Editor"); font_color.a = 0.8; Ref<Font> font = get_theme_font("rulers", "EditorFonts"); + int font_size = get_theme_font_size("rulers_size", "EditorFonts"); // The rule transform Transform2D ruler_transform = Transform2D(); @@ -2922,7 +2939,7 @@ void CanvasItemEditor::_draw_rulers() { if (i % (major_subdivision * minor_subdivision) == 0) { viewport->draw_line(Point2(position.x, 0), Point2(position.x, RULER_WIDTH), graduation_color, Math::round(EDSCALE)); float val = (ruler_transform * major_subdivide * minor_subdivide).xform(Point2(i, 0)).x; - viewport->draw_string(font, Point2(position.x + 2, font->get_height()), vformat(((int)val == val) ? "%d" : "%.1f", val), font_color); + viewport->draw_string(font, Point2(position.x + 2, font->get_height(font_size)), TS->format_number(vformat(((int)val == val) ? "%d" : "%.1f", val)), HALIGN_LEFT, -1, font_size, font_color); } else { if (i % minor_subdivision == 0) { viewport->draw_line(Point2(position.x, RULER_WIDTH * 0.33), Point2(position.x, RULER_WIDTH), graduation_color, Math::round(EDSCALE)); @@ -2940,9 +2957,9 @@ void CanvasItemEditor::_draw_rulers() { viewport->draw_line(Point2(0, position.y), Point2(RULER_WIDTH, position.y), graduation_color, Math::round(EDSCALE)); float val = (ruler_transform * major_subdivide * minor_subdivide).xform(Point2(0, i)).y; - Transform2D text_xform = Transform2D(-Math_PI / 2.0, Point2(font->get_height(), position.y - 2)); + Transform2D text_xform = Transform2D(-Math_PI / 2.0, Point2(font->get_height(font_size), position.y - 2)); viewport->draw_set_transform_matrix(viewport->get_transform() * text_xform); - viewport->draw_string(font, Point2(), vformat(((int)val == val) ? "%d" : "%.1f", val), font_color); + viewport->draw_string(font, Point2(), TS->format_number(vformat(((int)val == val) ? "%d" : "%.1f", val)), HALIGN_LEFT, -1, font_size, font_color); viewport->draw_set_transform_matrix(viewport->get_transform()); } else { @@ -3054,17 +3071,21 @@ void CanvasItemEditor::_draw_ruler_tool() { } Ref<Font> font = get_theme_font("bold", "EditorFonts"); + int font_size = get_theme_font_size("bold_size", "EditorFonts"); Color font_color = get_theme_color("font_color", "Editor"); Color font_secondary_color = font_color; - font_secondary_color.a = 0.5; - float text_height = font->get_height(); + font_secondary_color.set_v(font_secondary_color.get_v() > 0.5 ? 0.7 : 0.3); + Color outline_color = font_color.inverted(); + float text_height = font->get_height(font_size); + + const float outline_size = 2; const float text_width = 76; const float angle_text_width = 54; Point2 text_pos = (begin + end) / 2 - Vector2(text_width / 2, text_height / 2); text_pos.x = CLAMP(text_pos.x, text_width / 2, viewport->get_rect().size.x - text_width * 1.5); text_pos.y = CLAMP(text_pos.y, text_height * 1.5, viewport->get_rect().size.y - text_height * 1.5); - viewport->draw_string(font, text_pos, vformat("%.2f px", length_vector.length()), font_color); + viewport->draw_string(font, text_pos, TS->format_number(vformat("%.2f " + TTR("px"), length_vector.length())), HALIGN_LEFT, -1, font_size, font_color, outline_size, outline_color); if (draw_secondary_lines) { const float horizontal_angle_rad = atan2(length_vector.y, length_vector.x); @@ -3074,16 +3095,16 @@ void CanvasItemEditor::_draw_ruler_tool() { Point2 text_pos2 = text_pos; text_pos2.x = begin.x < text_pos.x ? MIN(text_pos.x - text_width, begin.x - text_width / 2) : MAX(text_pos.x + text_width, begin.x - text_width / 2); - viewport->draw_string(font, text_pos2, vformat("%.2f px", length_vector.y), font_secondary_color); + viewport->draw_string(font, text_pos2, TS->format_number(vformat("%.2f " + TTR("px"), length_vector.y)), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); Point2 v_angle_text_pos = Point2(); v_angle_text_pos.x = CLAMP(begin.x - angle_text_width / 2, angle_text_width / 2, viewport->get_rect().size.x - angle_text_width); v_angle_text_pos.y = begin.y < end.y ? MIN(text_pos2.y - 2 * text_height, begin.y - text_height * 0.5) : MAX(text_pos2.y + text_height * 3, begin.y + text_height * 1.5); - viewport->draw_string(font, v_angle_text_pos, vformat("%d deg", vertical_angle), font_secondary_color); + viewport->draw_string(font, v_angle_text_pos, TS->format_number(vformat("%d " + TTR("deg"), vertical_angle)), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); text_pos2 = text_pos; text_pos2.y = end.y < text_pos.y ? MIN(text_pos.y - text_height * 2, end.y - text_height / 2) : MAX(text_pos.y + text_height * 2, end.y - text_height / 2); - viewport->draw_string(font, text_pos2, vformat("%.2f px", length_vector.x), font_secondary_color); + viewport->draw_string(font, text_pos2, TS->format_number(vformat("%.2f " + TTR("px"), length_vector.x)), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); Point2 h_angle_text_pos = Point2(); h_angle_text_pos.x = CLAMP(end.x - angle_text_width / 2, angle_text_width / 2, viewport->get_rect().size.x - angle_text_width); @@ -3100,7 +3121,7 @@ void CanvasItemEditor::_draw_ruler_tool() { h_angle_text_pos.y = MIN(text_pos.y - height_multiplier * text_height, MIN(end.y - text_height * 0.5, text_pos2.y - height_multiplier * text_height)); } } - viewport->draw_string(font, h_angle_text_pos, vformat("%d deg", horizontal_angle), font_secondary_color); + viewport->draw_string(font, h_angle_text_pos, TS->format_number(vformat("%d " + TTR("deg"), horizontal_angle)), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); // Angle arcs int arc_point_count = 8; @@ -3137,17 +3158,17 @@ void CanvasItemEditor::_draw_ruler_tool() { text_pos.y = CLAMP(text_pos.y, text_height * 2.5, viewport->get_rect().size.y - text_height / 2); if (draw_secondary_lines) { - viewport->draw_string(font, text_pos, vformat("%.2f units", (length_vector / grid_step).length()), font_color); + viewport->draw_string(font, text_pos, TS->format_number(vformat("%.2f " + TTR("units"), (length_vector / grid_step).length())), HALIGN_LEFT, -1, font_size, font_color, outline_size, outline_color); Point2 text_pos2 = text_pos; text_pos2.x = begin.x < text_pos.x ? MIN(text_pos.x - text_width, begin.x - text_width / 2) : MAX(text_pos.x + text_width, begin.x - text_width / 2); - viewport->draw_string(font, text_pos2, vformat("%d units", roundf(length_vector.y / grid_step.y)), font_secondary_color); + viewport->draw_string(font, text_pos2, TS->format_number(vformat("%d " + TTR("units"), roundf(length_vector.y / grid_step.y))), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); text_pos2 = text_pos; text_pos2.y = end.y < text_pos.y ? MIN(text_pos.y - text_height * 2, end.y + text_height / 2) : MAX(text_pos.y + text_height * 2, end.y + text_height / 2); - viewport->draw_string(font, text_pos2, vformat("%d units", roundf(length_vector.x / grid_step.x)), font_secondary_color); + viewport->draw_string(font, text_pos2, TS->format_number(vformat("%d " + TTR("units"), roundf(length_vector.x / grid_step.x))), HALIGN_LEFT, -1, font_size, font_secondary_color, outline_size, outline_color); } else { - viewport->draw_string(font, text_pos, vformat("%d units", roundf((length_vector / grid_step).length())), font_color); + viewport->draw_string(font, text_pos, TS->format_number(vformat("%d " + TTR("units"), roundf((length_vector / grid_step).length()))), HALIGN_LEFT, -1, font_size, font_color, outline_size, outline_color); } } } else { @@ -3177,10 +3198,17 @@ void CanvasItemEditor::_draw_control_anchors(Control *control) { // Draw the anchors handles Rect2 anchor_rects[4]; - anchor_rects[0] = Rect2(anchors_pos[0] - anchor_handle->get_size(), anchor_handle->get_size()); - anchor_rects[1] = Rect2(anchors_pos[1] - Vector2(0.0, anchor_handle->get_size().y), Point2(-anchor_handle->get_size().x, anchor_handle->get_size().y)); - anchor_rects[2] = Rect2(anchors_pos[2], -anchor_handle->get_size()); - anchor_rects[3] = Rect2(anchors_pos[3] - Vector2(anchor_handle->get_size().x, 0.0), Point2(anchor_handle->get_size().x, -anchor_handle->get_size().y)); + if (control->is_layout_rtl()) { + anchor_rects[0] = Rect2(anchors_pos[0] - Vector2(0.0, anchor_handle->get_size().y), Point2(-anchor_handle->get_size().x, anchor_handle->get_size().y)); + anchor_rects[1] = Rect2(anchors_pos[1] - anchor_handle->get_size(), anchor_handle->get_size()); + anchor_rects[2] = Rect2(anchors_pos[2] - Vector2(anchor_handle->get_size().x, 0.0), Point2(anchor_handle->get_size().x, -anchor_handle->get_size().y)); + anchor_rects[3] = Rect2(anchors_pos[3], -anchor_handle->get_size()); + } else { + anchor_rects[0] = Rect2(anchors_pos[0] - anchor_handle->get_size(), anchor_handle->get_size()); + anchor_rects[1] = Rect2(anchors_pos[1] - Vector2(0.0, anchor_handle->get_size().y), Point2(-anchor_handle->get_size().x, anchor_handle->get_size().y)); + anchor_rects[2] = Rect2(anchors_pos[2], -anchor_handle->get_size()); + anchor_rects[3] = Rect2(anchors_pos[3] - Vector2(anchor_handle->get_size().x, 0.0), Point2(anchor_handle->get_size().x, -anchor_handle->get_size().y)); + } for (int i = 0; i < 4; i++) { anchor_handle->draw_rect(ci, anchor_rects[i]); @@ -3389,7 +3417,6 @@ void CanvasItemEditor::_draw_selection() { if (canvas_item->_edit_use_rect()) { Vector2 pre_drag_endpoints[4] = { - pre_drag_xform.xform(se->pre_drag_rect.position), pre_drag_xform.xform(se->pre_drag_rect.position + Vector2(se->pre_drag_rect.size.x, 0)), pre_drag_xform.xform(se->pre_drag_rect.position + se->pre_drag_rect.size), @@ -3745,6 +3772,7 @@ void CanvasItemEditor::_draw_hover() { String node_name = hovering_results[i].name; Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Size2 node_name_size = font->get_string_size(node_name); Size2 item_size = Size2(node_icon->get_size().x + 4 + node_name_size.x, MAX(node_icon->get_size().y, node_name_size.y - 3)); @@ -3762,7 +3790,7 @@ void CanvasItemEditor::_draw_hover() { viewport->draw_texture(node_icon, pos, Color(1.0, 1.0, 1.0, 0.5)); // Draw name - viewport->draw_string(font, pos + Point2(node_icon->get_size().x + 4, item_size.y - 3), node_name, Color(1.0, 1.0, 1.0, 0.5)); + viewport->draw_string(font, pos + Point2(node_icon->get_size().x + 4, item_size.y - 3), node_name, HALIGN_LEFT, -1, font_size, Color(1.0, 1.0, 1.0, 0.5)); } } @@ -4343,8 +4371,13 @@ void CanvasItemEditor::_update_scrollbars() { } // Move and resize the scrollbars, avoiding overlap. - v_scroll->set_begin(Point2(size.width - vmin.width, (show_rulers) ? RULER_WIDTH : 0)); - v_scroll->set_end(Point2(size.width, size.height - (h_scroll->is_visible() ? hmin.height : 0))); + if (is_layout_rtl()) { + v_scroll->set_begin(Point2(0, (show_rulers) ? RULER_WIDTH : 0)); + v_scroll->set_end(Point2(vmin.width, size.height - (h_scroll->is_visible() ? hmin.height : 0))); + } else { + v_scroll->set_begin(Point2(size.width - vmin.width, (show_rulers) ? RULER_WIDTH : 0)); + v_scroll->set_end(Point2(size.width, size.height - (h_scroll->is_visible() ? hmin.height : 0))); + } h_scroll->set_begin(Point2((show_rulers) ? RULER_WIDTH : 0, size.height - hmin.height)); h_scroll->set_end(Point2(size.width - (v_scroll->is_visible() ? vmin.width : 0), size.height)); @@ -4541,9 +4574,9 @@ void CanvasItemEditor::_update_zoom_label() { // even if their display doesn't have a particularly low DPI. if (zoom >= 10) { // Don't show a decimal when the zoom level is higher than 1000 %. - zoom_text = rtos(Math::round((zoom / MAX(1, EDSCALE)) * 100)) + " %"; + zoom_text = TS->format_number(rtos(Math::round((zoom / MAX(1, EDSCALE)) * 100))) + " " + TS->percent_sign(); } else { - zoom_text = rtos(Math::stepify((zoom / MAX(1, EDSCALE)) * 100, 0.1)) + " %"; + zoom_text = TS->format_number(rtos(Math::stepify((zoom / MAX(1, EDSCALE)) * 100, 0.1))) + " " + TS->percent_sign(); } zoom_reset->set_text(zoom_text); @@ -5704,6 +5737,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { warning_child_of_container->set_text(TTR("Warning: Children of a container get their position and size determined only by their parent.")); warning_child_of_container->add_theme_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_theme_color("warning_color", "Editor")); warning_child_of_container->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("main", "EditorFonts")); + warning_child_of_container->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("main_size", "EditorFonts")); add_control_to_info_overlay(warning_child_of_container); h_scroll = memnew(HScrollBar); @@ -5723,18 +5757,18 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_hb->add_child(zoom_minus); zoom_minus->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_zoom_minus)); zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom Out"), KEY_MASK_CMD | KEY_MINUS)); + zoom_minus->set_shortcut_context(this); zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew(Button); zoom_reset->set_flat(true); zoom_hb->add_child(zoom_reset); - Ref<DynamicFont> font = zoom_reset->get_theme_font("font")->duplicate(false); - font->set_outline_size(1); - font->set_outline_color(Color(0, 0, 0)); - zoom_reset->add_theme_font_override("font", font); + zoom_reset->add_theme_constant_override("outline_size", 1); + zoom_reset->add_theme_color_override("font_outline_modulate", Color(0, 0, 0)); zoom_reset->add_theme_color_override("font_color", Color(1, 1, 1)); zoom_reset->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_zoom_reset)); zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KEY_MASK_CMD | KEY_0)); + zoom_reset->set_shortcut_context(this); zoom_reset->set_focus_mode(FOCUS_NONE); zoom_reset->set_text_align(Button::TextAlign::ALIGN_CENTER); // Prevent the button's size from changing when the text size changes @@ -5745,6 +5779,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_hb->add_child(zoom_plus); zoom_plus->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_zoom_plus)); zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom In"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS + zoom_plus->set_shortcut_context(this); zoom_plus->set_focus_mode(FOCUS_NONE); updating_scroll = false; @@ -5756,6 +5791,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { select_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_SELECT)); select_button->set_pressed(true); select_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/select_mode", TTR("Select Mode"), KEY_Q)); + select_button->set_shortcut_context(this); select_button->set_tooltip(keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate") + "\n" + TTR("Alt+Drag: Move") + "\n" + TTR("Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).") + "\n" + TTR("Alt+RMB: Depth list selection")); hb->add_child(memnew(VSeparator)); @@ -5766,6 +5802,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { move_button->set_toggle_mode(true); move_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_MOVE)); move_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/move_mode", TTR("Move Mode"), KEY_W)); + move_button->set_shortcut_context(this); move_button->set_tooltip(TTR("Move Mode")); rotate_button = memnew(Button); @@ -5774,6 +5811,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { rotate_button->set_toggle_mode(true); rotate_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_ROTATE)); rotate_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/rotate_mode", TTR("Rotate Mode"), KEY_E)); + rotate_button->set_shortcut_context(this); rotate_button->set_tooltip(TTR("Rotate Mode")); scale_button = memnew(Button); @@ -5782,6 +5820,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { scale_button->set_toggle_mode(true); scale_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_SCALE)); scale_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/scale_mode", TTR("Scale Mode"), KEY_S)); + scale_button->set_shortcut_context(this); scale_button->set_tooltip(TTR("Scale Mode")); hb->add_child(memnew(VSeparator)); @@ -5806,6 +5845,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { pan_button->set_toggle_mode(true); pan_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_PAN)); pan_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/pan_mode", TTR("Pan Mode"), KEY_G)); + pan_button->set_shortcut_context(this); pan_button->set_tooltip(TTR("Pan Mode")); ruler_button = memnew(Button); @@ -5814,6 +5854,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { ruler_button->set_toggle_mode(true); ruler_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_button_tool_select), make_binds(TOOL_RULER)); ruler_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/ruler_mode", TTR("Ruler Mode"), KEY_R)); + ruler_button->set_shortcut_context(this); ruler_button->set_tooltip(TTR("Ruler Mode")); hb->add_child(memnew(VSeparator)); @@ -5825,6 +5866,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { smart_snap_button->connect("toggled", callable_mp(this, &CanvasItemEditor::_button_toggle_smart_snap)); smart_snap_button->set_tooltip(TTR("Toggle smart snapping.")); smart_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_smart_snap", TTR("Use Smart Snap"), KEY_MASK_SHIFT | KEY_S)); + smart_snap_button->set_shortcut_context(this); grid_snap_button = memnew(Button); grid_snap_button->set_flat(true); @@ -5833,8 +5875,10 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { grid_snap_button->connect("toggled", callable_mp(this, &CanvasItemEditor::_button_toggle_grid_snap)); grid_snap_button->set_tooltip(TTR("Toggle grid snapping.")); grid_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_grid_snap", TTR("Use Grid Snap"), KEY_MASK_SHIFT | KEY_G)); + grid_snap_button->set_shortcut_context(this); snap_config_menu = memnew(MenuButton); + snap_config_menu->set_shortcut_context(this); hb->add_child(snap_config_menu); snap_config_menu->set_h_size_flags(SIZE_SHRINK_END); snap_config_menu->set_tooltip(TTR("Snapping Options")); @@ -5894,6 +5938,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb->add_child(memnew(VSeparator)); skeleton_menu = memnew(MenuButton); + skeleton_menu->set_shortcut_context(this); hb->add_child(skeleton_menu); skeleton_menu->set_tooltip(TTR("Skeleton Options")); skeleton_menu->set_switch_on_hover(true); @@ -5922,6 +5967,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb->add_child(memnew(VSeparator)); view_menu = memnew(MenuButton); + view_menu->set_shortcut_context(this); view_menu->set_text(TTR("View")); hb->add_child(view_menu); view_menu->get_popup()->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_popup_callback)); @@ -5929,7 +5975,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p = view_menu->get_popup(); p->set_hide_on_checkable_item_selection(false); - p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Always Show Grid"), KEY_G), SHOW_GRID); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Always Show Grid"), KEY_MASK_CTRL | KEY_G), SHOW_GRID); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_helpers", TTR("Show Helpers"), KEY_H), SHOW_HELPERS); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers")), SHOW_RULERS); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), KEY_Y), SHOW_GUIDES); @@ -5946,6 +5992,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/preview_canvas_scale", TTR("Preview Canvas Scale"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_P), PREVIEW_CANVAS_SCALE); presets_menu = memnew(MenuButton); + presets_menu->set_shortcut_context(this); presets_menu->set_text(TTR("Layout")); hb->add_child(presets_menu); presets_menu->hide(); @@ -5979,6 +6026,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_loc_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(ANIM_INSERT_POS)); key_loc_button->set_tooltip(TTR("Translation mask for inserting keys.")); animation_hb->add_child(key_loc_button); + key_rot_button = memnew(Button); key_rot_button->set_toggle_mode(true); key_rot_button->set_flat(true); @@ -5987,6 +6035,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_rot_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(ANIM_INSERT_ROT)); key_rot_button->set_tooltip(TTR("Rotation mask for inserting keys.")); animation_hb->add_child(key_rot_button); + key_scale_button = memnew(Button); key_scale_button->set_toggle_mode(true); key_scale_button->set_flat(true); @@ -5994,23 +6043,27 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_scale_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(ANIM_INSERT_SCALE)); key_scale_button->set_tooltip(TTR("Scale mask for inserting keys.")); animation_hb->add_child(key_scale_button); + key_insert_button = memnew(Button); key_insert_button->set_flat(true); key_insert_button->set_focus_mode(FOCUS_NONE); key_insert_button->connect("pressed", callable_mp(this, &CanvasItemEditor::_popup_callback), varray(ANIM_INSERT_KEY)); key_insert_button->set_tooltip(TTR("Insert keys (based on mask).")); key_insert_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/anim_insert_key", TTR("Insert Key"), KEY_INSERT)); + key_insert_button->set_shortcut_context(this); animation_hb->add_child(key_insert_button); + key_auto_insert_button = memnew(Button); key_auto_insert_button->set_flat(true); key_auto_insert_button->set_toggle_mode(true); key_auto_insert_button->set_focus_mode(FOCUS_NONE); - //key_auto_insert_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_KEY)); key_auto_insert_button->set_tooltip(TTR("Auto insert keys when objects are translated, rotated or scaled (based on mask).\nKeys are only added to existing tracks, no new tracks will be created.\nKeys must be inserted manually for the first time.")); key_auto_insert_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/anim_auto_insert_key", TTR("Auto Insert Key"))); + key_auto_insert_button->set_shortcut_context(this); animation_hb->add_child(key_auto_insert_button); animation_menu = memnew(MenuButton); + animation_menu->set_shortcut_context(this); animation_menu->set_tooltip(TTR("Animation Key and Pose Options")); animation_hb->add_child(animation_menu); animation_menu->get_popup()->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_popup_callback)); diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index 859e80befe..c4a1dca593 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -288,9 +288,9 @@ private: MenuOption last_option; struct _SelectResult { - CanvasItem *item; - float z_index; - bool has_z; + CanvasItem *item = nullptr; + float z_index = 0; + bool has_z = true; _FORCE_INLINE_ bool operator<(const _SelectResult &p_rr) const { return has_z && p_rr.has_z ? p_rr.z_index < z_index : p_rr.has_z; } @@ -308,8 +308,6 @@ private: Transform2D xform; float length = 0.f; uint64_t last_pass = 0; - - BoneList() {} }; uint64_t bone_last_frame; @@ -331,7 +329,7 @@ private: struct PoseClipboard { Vector2 pos; Vector2 scale; - float rot; + float rot = 0; ObjectID id; }; List<PoseClipboard> pose_clipboard; diff --git a/editor/plugins/collision_polygon_3d_editor_plugin.h b/editor/plugins/collision_polygon_3d_editor_plugin.h index 98f499031a..bb4ee2185e 100644 --- a/editor/plugins/collision_polygon_3d_editor_plugin.h +++ b/editor/plugins/collision_polygon_3d_editor_plugin.h @@ -44,7 +44,6 @@ class CollisionPolygon3DEditor : public HBoxContainer { UndoRedo *undo_redo; enum Mode { - MODE_CREATE, MODE_EDIT, diff --git a/editor/plugins/collision_shape_2d_editor_plugin.cpp b/editor/plugins/collision_shape_2d_editor_plugin.cpp index 105ac24950..23ab6a9de2 100644 --- a/editor/plugins/collision_shape_2d_editor_plugin.cpp +++ b/editor/plugins/collision_shape_2d_editor_plugin.cpp @@ -563,6 +563,8 @@ CollisionShape2DEditor::CollisionShape2DEditor(EditorNode *p_editor) { edit_handle = -1; pressed = false; + + shape_type = 0; } void CollisionShape2DEditorPlugin::edit(Object *p_obj) { diff --git a/editor/plugins/cpu_particles_3d_editor_plugin.h b/editor/plugins/cpu_particles_3d_editor_plugin.h index 90300daf71..d6886a24dc 100644 --- a/editor/plugins/cpu_particles_3d_editor_plugin.h +++ b/editor/plugins/cpu_particles_3d_editor_plugin.h @@ -38,7 +38,6 @@ class CPUParticles3DEditor : public GPUParticles3DEditorBase { GDCLASS(CPUParticles3DEditor, GPUParticles3DEditorBase); enum Menu { - MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_NODE, MENU_OPTION_CLEAR_EMISSION_VOLUME, MENU_OPTION_RESTART diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index 539ab03f5b..4768cac217 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -518,7 +518,9 @@ void CurveEditor::set_hover_point_index(int index) { void CurveEditor::update_view_transform() { Ref<Font> font = get_theme_font("font", "Label"); - const real_t margin = font->get_height() + 2 * EDSCALE; + int font_size = get_theme_font_size("font_size", "Label"); + + const real_t margin = font->get_height(font_size) + 2 * EDSCALE; float min_y = 0; float max_y = 1; @@ -662,18 +664,19 @@ void CurveEditor::_draw() { draw_set_transform_matrix(Transform2D()); Ref<Font> font = get_theme_font("font", "Label"); - float font_height = font->get_height(); + int font_size = get_theme_font_size("font_size", "Label"); + float font_height = font->get_height(font_size); Color text_color = get_theme_color("font_color", "Editor"); { // X axis float y = curve.get_min_value(); Vector2 off(0, font_height - 1); - draw_string(font, get_view_pos(Vector2(0, y)) + off, "0.0", text_color); - draw_string(font, get_view_pos(Vector2(0.25, y)) + off, "0.25", text_color); - draw_string(font, get_view_pos(Vector2(0.5, y)) + off, "0.5", text_color); - draw_string(font, get_view_pos(Vector2(0.75, y)) + off, "0.75", text_color); - draw_string(font, get_view_pos(Vector2(1, y)) + off, "1.0", text_color); + draw_string(font, get_view_pos(Vector2(0, y)) + off, "0.0", HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0.25, y)) + off, "0.25", HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0.5, y)) + off, "0.5", HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0.75, y)) + off, "0.75", HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(1, y)) + off, "1.0", HALIGN_LEFT, -1, font_size, text_color); } { @@ -682,9 +685,9 @@ void CurveEditor::_draw() { float m1 = 0.5 * (curve.get_min_value() + curve.get_max_value()); float m2 = curve.get_max_value(); Vector2 off(1, -1); - draw_string(font, get_view_pos(Vector2(0, m0)) + off, String::num(m0, 2), text_color); - draw_string(font, get_view_pos(Vector2(0, m1)) + off, String::num(m1, 2), text_color); - draw_string(font, get_view_pos(Vector2(0, m2)) + off, String::num(m2, 3), text_color); + draw_string(font, get_view_pos(Vector2(0, m0)) + off, String::num(m0, 2), HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0, m1)) + off, String::num(m1, 2), HALIGN_LEFT, -1, font_size, text_color); + draw_string(font, get_view_pos(Vector2(0, m2)) + off, String::num(m2, 3), HALIGN_LEFT, -1, font_size, text_color); } // Draw tangents for current point @@ -744,10 +747,10 @@ void CurveEditor::_draw() { if (_selected_point > 0 && _selected_point + 1 < curve.get_point_count()) { text_color.a *= 0.4; - draw_string(font, Vector2(50 * EDSCALE, font_height), TTR("Hold Shift to edit tangents individually"), text_color); + draw_string(font, Vector2(50 * EDSCALE, font_height), TTR("Hold Shift to edit tangents individually"), HALIGN_LEFT, -1, font_size, text_color); } else if (curve.get_point_count() == 0) { text_color.a *= 0.4; - draw_string(font, Vector2(50 * EDSCALE, font_height), TTR("Right click to add point"), text_color); + draw_string(font, Vector2(50 * EDSCALE, font_height), TTR("Right click to add point"), HALIGN_LEFT, -1, font_size, text_color); } } diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp index 3cf4dc5ac8..2fc0e35f82 100644 --- a/editor/plugins/editor_preview_plugins.cpp +++ b/editor/plugins/editor_preview_plugins.cpp @@ -37,7 +37,7 @@ #include "editor/editor_scale.h" #include "editor/editor_settings.h" #include "scene/resources/bit_map.h" -#include "scene/resources/dynamic_font.h" +#include "scene/resources/font.h" #include "scene/resources/material.h" #include "scene/resources/mesh.h" #include "servers/audio/audio_stream.h" @@ -798,25 +798,79 @@ void EditorFontPreviewPlugin::_bind_methods() { } bool EditorFontPreviewPlugin::handles(const String &p_type) const { - return ClassDB::is_parent_class(p_type, "DynamicFontData") || ClassDB::is_parent_class(p_type, "DynamicFont"); -} + return ClassDB::is_parent_class(p_type, "FontData") || ClassDB::is_parent_class(p_type, "Font"); +} + +struct FSample { + String script; + String sample; +}; + +static FSample _samples[] = { + { "hani", U"漢語" }, + { "armn", U"Աբ" }, + { "copt", U"Αα" }, + { "cyrl", U"Аб" }, + { "grek", U"Αα" }, + { "hebr", U"אב" }, + { "arab", U"اب" }, + { "syrc", U"ܐܒ" }, + { "thaa", U"ހށ" }, + { "deva", U"आ" }, + { "beng", U"আ" }, + { "guru", U"ਆ" }, + { "gujr", U"આ" }, + { "orya", U"ଆ" }, + { "taml", U"ஆ" }, + { "telu", U"ఆ" }, + { "knda", U"ಆ" }, + { "mylm", U"ആ" }, + { "sinh", U"ආ" }, + { "thai", U"กิ" }, + { "laoo", U"ກິ" }, + { "tibt", U"ༀ" }, + { "mymr", U"က" }, + { "geor", U"Ⴀა" }, + { "hang", U"한글" }, + { "ethi", U"ሀ" }, + { "cher", U"Ꭳ" }, + { "cans", U"ᐁ" }, + { "ogam", U"ᚁ" }, + { "runr", U"ᚠ" }, + { "tglg", U"ᜀ" }, + { "hano", U"ᜠ" }, + { "buhd", U"ᝀ" }, + { "tagb", U"ᝠ" }, + { "khmr", U"ក" }, + { "mong", U"ᠠ" }, + { "limb", U"ᤁ" }, + { "tale", U"ᥐ" }, + { "latn", U"Ab" }, + { "zyyy", U"😀" }, + { "", U"" } +}; Ref<Texture2D> EditorFontPreviewPlugin::generate_from_path(const String &p_path, const Size2 &p_size) const { RES res = ResourceLoader::load(p_path); - Ref<DynamicFont> sampled_font; - if (res->is_class("DynamicFont")) { + Ref<Font> sampled_font; + if (res->is_class("Font")) { sampled_font = res->duplicate(); - if (sampled_font->get_outline_color() == Color(1, 1, 1, 1)) { - sampled_font->set_outline_color(Color(0, 0, 0, 1)); - } - } else if (res->is_class("DynamicFontData")) { + } else if (res->is_class("FontData")) { sampled_font.instance(); - sampled_font->set_font_data(res); + sampled_font->add_data(res->duplicate()); } - sampled_font->set_size(50); - String sampled_text = "Abg"; - Vector2 size = sampled_font->get_string_size(sampled_text); + String sample; + for (int j = 0; j < sampled_font->get_data_count(); j++) { + for (int i = 0; _samples[i].script != String(); i++) { + if (sampled_font->get_data(j)->is_script_supported(_samples[i].script)) { + if (sampled_font->get_data(j)->has_char(_samples[i].sample[0])) { + sample += _samples[i].sample; + } + } + } + } + Vector2 size = sampled_font->get_string_size(sample, 50); Vector2 pos; @@ -825,7 +879,7 @@ Ref<Texture2D> EditorFontPreviewPlugin::generate_from_path(const String &p_path, Ref<Font> font = sampled_font; - font->draw(canvas_item, pos, sampled_text); + font->draw_string(canvas_item, pos, sample, HALIGN_LEFT, -1.f, 50, Color(1, 1, 1)); preview_done = false; RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ONCE); //once used for capture diff --git a/editor/plugins/editor_preview_plugins.h b/editor/plugins/editor_preview_plugins.h index 9885efc2b5..04e6be2354 100644 --- a/editor/plugins/editor_preview_plugins.h +++ b/editor/plugins/editor_preview_plugins.h @@ -90,7 +90,7 @@ class EditorMaterialPreviewPlugin : public EditorResourcePreviewGenerator { RID light2; RID light_instance2; RID camera; - mutable volatile bool preview_done; + mutable volatile bool preview_done = false; void _preview_done(const Variant &p_udata); @@ -134,7 +134,7 @@ class EditorMeshPreviewPlugin : public EditorResourcePreviewGenerator { RID light2; RID light_instance2; RID camera; - mutable volatile bool preview_done; + mutable volatile bool preview_done = false; void _preview_done(const Variant &p_udata); @@ -156,7 +156,7 @@ class EditorFontPreviewPlugin : public EditorResourcePreviewGenerator { RID viewport_texture; RID canvas; RID canvas_item; - mutable volatile bool preview_done; + mutable volatile bool preview_done = false; void _preview_done(const Variant &p_udata); diff --git a/editor/plugins/font_editor_plugin.cpp b/editor/plugins/font_editor_plugin.cpp new file mode 100644 index 0000000000..a82547182c --- /dev/null +++ b/editor/plugins/font_editor_plugin.cpp @@ -0,0 +1,331 @@ +/*************************************************************************/ +/* font_editor_plugin.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "font_editor_plugin.h" + +#include "editor/editor_scale.h" + +void FontDataPreview::_notification(int p_what) { + if (p_what == NOTIFICATION_DRAW) { + Color text_color = get_theme_color("font_color", "Label"); + Color line_color = text_color; + line_color.a *= 0.6; + Vector2 pos = (get_size() - line->get_size()) / 2; + line->draw(get_canvas_item(), pos, text_color); + draw_line(Vector2(0, pos.y + line->get_line_ascent()), Vector2(pos.x - 5, pos.y + line->get_line_ascent()), line_color); + draw_line(Vector2(pos.x + line->get_size().x + 5, pos.y + line->get_line_ascent()), Vector2(get_size().x, pos.y + line->get_line_ascent()), line_color); + } +} + +void FontDataPreview::_bind_methods() {} + +Size2 FontDataPreview::get_minimum_size() const { + return Vector2(64, 64) * EDSCALE; +} + +struct FSample { + String script; + String sample; +}; + +static FSample _samples[] = { + { "hani", U"漢語" }, + { "armn", U"Աբ" }, + { "copt", U"Αα" }, + { "cyrl", U"Аб" }, + { "grek", U"Αα" }, + { "hebr", U"אב" }, + { "arab", U"اب" }, + { "syrc", U"ܐܒ" }, + { "thaa", U"ހށ" }, + { "deva", U"आ" }, + { "beng", U"আ" }, + { "guru", U"ਆ" }, + { "gujr", U"આ" }, + { "orya", U"ଆ" }, + { "taml", U"ஆ" }, + { "telu", U"ఆ" }, + { "knda", U"ಆ" }, + { "mylm", U"ആ" }, + { "sinh", U"ආ" }, + { "thai", U"กิ" }, + { "laoo", U"ກິ" }, + { "tibt", U"ༀ" }, + { "mymr", U"က" }, + { "geor", U"Ⴀა" }, + { "hang", U"한글" }, + { "ethi", U"ሀ" }, + { "cher", U"Ꭳ" }, + { "cans", U"ᐁ" }, + { "ogam", U"ᚁ" }, + { "runr", U"ᚠ" }, + { "tglg", U"ᜀ" }, + { "hano", U"ᜠ" }, + { "buhd", U"ᝀ" }, + { "tagb", U"ᝠ" }, + { "khmr", U"ក" }, + { "mong", U"ᠠ" }, + { "limb", U"ᤁ" }, + { "tale", U"ᥐ" }, + { "latn", U"Ab" }, + { "zyyy", U"😀" }, + { "", U"" } +}; + +void FontDataPreview::set_data(const Ref<FontData> &p_data) { + Ref<Font> f = memnew(Font); + f->add_data(p_data); + + line->clear(); + + String sample; + for (int i = 0; _samples[i].script != String(); i++) { + if (p_data->is_script_supported(_samples[i].script)) { + if (p_data->has_char(_samples[i].sample[0])) { + sample += _samples[i].sample; + } + } + } + line->add_string(sample, f, 72); + + update(); +} + +FontDataPreview::FontDataPreview() { + line.instance(); +} + +/*************************************************************************/ + +void FontDataEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_SORT_CHILDREN) { + int split_width = get_name_split_ratio() * get_size().width; + button->set_size(Size2(get_theme_icon("Add", "EditorIcons")->get_width(), get_size().height)); + if (is_layout_rtl()) { + if (le != nullptr) { + fit_child_in_rect(le, Rect2(Vector2(split_width, 0), Size2(split_width, get_size().height))); + } + fit_child_in_rect(chk, Rect2(Vector2(split_width - chk->get_size().x, 0), Size2(chk->get_size().x, get_size().height))); + fit_child_in_rect(button, Rect2(Vector2(0, 0), Size2(button->get_size().width, get_size().height))); + } else { + if (le != nullptr) { + fit_child_in_rect(le, Rect2(Vector2(0, 0), Size2(split_width, get_size().height))); + } + fit_child_in_rect(chk, Rect2(Vector2(split_width, 0), Size2(chk->get_size().x, get_size().height))); + fit_child_in_rect(button, Rect2(Vector2(get_size().width - button->get_size().width, 0), Size2(button->get_size().width, get_size().height))); + } + update(); + } + if (p_what == NOTIFICATION_DRAW) { + int split_width = get_name_split_ratio() * get_size().width; + Color dark_color = get_theme_color("dark_color_2", "Editor"); + if (is_layout_rtl()) { + draw_rect(Rect2(Vector2(0, 0), Size2(split_width, get_size().height)), dark_color); + } else { + draw_rect(Rect2(Vector2(split_width, 0), Size2(split_width, get_size().height)), dark_color); + } + } + if (p_what == NOTIFICATION_THEME_CHANGED) { + if (le != nullptr) { + button->set_icon(get_theme_icon("Add", "EditorIcons")); + } else { + button->set_icon(get_theme_icon("Remove", "EditorIcons")); + } + queue_sort(); + } + if (p_what == NOTIFICATION_RESIZED) { + queue_sort(); + } +} + +void FontDataEditor::update_property() { + if (le == nullptr) { + bool c = get_edited_object()->get(get_edited_property()); + chk->set_pressed(c); + chk->set_disabled(is_read_only()); + } +} + +Size2 FontDataEditor::get_minimum_size() const { + return Size2(0, 60); +} + +void FontDataEditor::_bind_methods() { +} + +void FontDataEditor::init_lang_add() { + le = memnew(LineEdit); + le->set_placeholder("Language code"); + le->set_custom_minimum_size(Size2(get_size().width / 2, 0)); + le->set_editable(true); + add_child(le); + + button->set_icon(get_theme_icon("Add", "EditorIcons")); + button->connect("pressed", callable_mp(this, &FontDataEditor::add_lang)); +} + +void FontDataEditor::init_lang_edit() { + button->set_icon(get_theme_icon("Remove", "EditorIcons")); + button->connect("pressed", callable_mp(this, &FontDataEditor::remove_lang)); + chk->connect("toggled", callable_mp(this, &FontDataEditor::toggle_lang)); +} + +void FontDataEditor::init_script_add() { + le = memnew(LineEdit); + le->set_placeholder("Script code"); + le->set_custom_minimum_size(Size2(get_size().width / 2, 0)); + le->set_editable(true); + add_child(le); + + button->set_icon(get_theme_icon("Add", "EditorIcons")); + button->connect("pressed", callable_mp(this, &FontDataEditor::add_script)); +} + +void FontDataEditor::init_script_edit() { + button->set_icon(get_theme_icon("Remove", "EditorIcons")); + button->connect("pressed", callable_mp(this, &FontDataEditor::remove_script)); + chk->connect("toggled", callable_mp(this, &FontDataEditor::toggle_script)); +} + +void FontDataEditor::add_lang() { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr && !le->get_text().empty()) { + fd->set_language_support_override(le->get_text(), chk->is_pressed()); + le->set_text(""); + chk->set_pressed(false); + } +} + +void FontDataEditor::add_script() { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr && le->get_text().length() == 4) { + fd->set_script_support_override(le->get_text(), chk->is_pressed()); + le->set_text(""); + chk->set_pressed(false); + } +} + +void FontDataEditor::toggle_lang(bool p_pressed) { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr) { + String lang = String(get_edited_property()).replace("language_support_override/", ""); + fd->set_language_support_override(lang, p_pressed); + } +} + +void FontDataEditor::toggle_script(bool p_pressed) { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr) { + String script = String(get_edited_property()).replace("script_support_override/", ""); + fd->set_script_support_override(script, p_pressed); + } +} + +void FontDataEditor::remove_lang() { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr) { + String lang = String(get_edited_property()).replace("language_support_override/", ""); + fd->remove_language_support_override(lang); + } +} + +void FontDataEditor::remove_script() { + FontData *fd = Object::cast_to<FontData>(get_edited_object()); + if (fd != nullptr) { + String script = String(get_edited_property()).replace("script_support_override/", ""); + fd->remove_script_support_override(script); + } +} + +FontDataEditor::FontDataEditor() { + chk = memnew(CheckBox); + chk->set_text(TTR("On")); + chk->set_flat(true); + add_child(chk); + + button = memnew(Button); + button->set_flat(true); + add_child(button); +} + +/*************************************************************************/ + +bool EditorInspectorPluginFont::can_handle(Object *p_object) { + return Object::cast_to<FontData>(p_object) != nullptr; +} + +void EditorInspectorPluginFont::parse_begin(Object *p_object) { + FontData *fd = Object::cast_to<FontData>(p_object); + ERR_FAIL_COND(!fd); + + FontDataPreview *editor = memnew(FontDataPreview); + editor->set_data(fd); + add_custom_control(editor); +} + +bool EditorInspectorPluginFont::parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage, bool p_wide) { + if (p_path.begins_with("language_support_override/") && p_object->is_class("FontData")) { + String lang = p_path.replace("language_support_override/", ""); + + FontDataEditor *editor = memnew(FontDataEditor); + if (lang != "_new") { + editor->init_lang_edit(); + } else { + editor->init_lang_add(); + } + add_property_editor(p_path, editor); + + return true; + } + + if (p_path.begins_with("script_support_override/") && p_object->is_class("FontData")) { + String script = p_path.replace("script_support_override/", ""); + + FontDataEditor *editor = memnew(FontDataEditor); + if (script != "_new") { + editor->init_script_edit(); + } else { + editor->init_script_add(); + } + add_property_editor(p_path, editor); + + return true; + } + + return false; +} + +/*************************************************************************/ + +FontEditorPlugin::FontEditorPlugin(EditorNode *p_node) { + Ref<EditorInspectorPluginFont> fd_plugin; + fd_plugin.instance(); + EditorInspector::add_inspector_plugin(fd_plugin); +} diff --git a/editor/run_settings_dialog.cpp b/editor/plugins/font_editor_plugin.h index b6dda4c5bb..1d3ffc8857 100644 --- a/editor/run_settings_dialog.cpp +++ b/editor/plugins/font_editor_plugin.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* run_settings_dialog.cpp */ +/* font_editor_plugin.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,58 +28,84 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "run_settings_dialog.h" - -void RunSettingsDialog::popup_run_settings() { - popup_centered(Size2(300, 150)); -} - -void RunSettingsDialog::set_custom_arguments(const String &p_arguments) { - arguments->set_text(p_arguments); -} - -String RunSettingsDialog::get_custom_arguments() const { - return arguments->get_text(); -} - -void RunSettingsDialog::_bind_methods() { - //ClassDB::bind_method("_browse_selected_file",&RunSettingsDialog::_browse_selected_file); -} - -void RunSettingsDialog::_run_mode_changed(int idx) { - if (idx == 0) { - arguments->set_editable(false); - } else { - arguments->set_editable(true); - } -} - -int RunSettingsDialog::get_run_mode() const { - return run_mode->get_selected(); -} - -void RunSettingsDialog::set_run_mode(int p_run_mode) { - run_mode->select(p_run_mode); - arguments->set_editable(p_run_mode); -} - -RunSettingsDialog::RunSettingsDialog() { - /* SNAP DIALOG */ - - VBoxContainer *vbc = memnew(VBoxContainer); - add_child(vbc); - //set_child_rect(vbc); - - run_mode = memnew(OptionButton); - vbc->add_margin_child(TTR("Run Mode:"), run_mode); - run_mode->add_item(TTR("Current Scene")); - run_mode->add_item(TTR("Main Scene")); - run_mode->connect("item_selected", callable_mp(this, &RunSettingsDialog::_run_mode_changed)); - arguments = memnew(LineEdit); - vbc->add_margin_child(TTR("Main Scene Arguments:"), arguments); - arguments->set_editable(false); - - get_ok()->set_text(TTR("Close")); - - set_title(TTR("Scene Run Settings")); -} +#ifndef FONT_EDITOR_PLUGIN_H +#define FONT_EDITOR_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "scene/resources/font.h" +#include "scene/resources/text_line.h" + +class FontDataPreview : public Control { + GDCLASS(FontDataPreview, Control); + +protected: + void _notification(int p_what); + static void _bind_methods(); + + Ref<TextLine> line; + +public: + virtual Size2 get_minimum_size() const override; + + void set_data(const Ref<FontData> &p_data); + + FontDataPreview(); +}; + +/*************************************************************************/ + +class FontDataEditor : public EditorProperty { + GDCLASS(FontDataEditor, EditorProperty); + + LineEdit *le = nullptr; + CheckBox *chk = nullptr; + Button *button = nullptr; + + void toggle_lang(bool p_pressed); + void toggle_script(bool p_pressed); + void add_lang(); + void add_script(); + void remove_lang(); + void remove_script(); + +protected: + void _notification(int p_what); + + static void _bind_methods(); + +public: + virtual Size2 get_minimum_size() const override; + virtual void update_property() override; + + void init_lang_add(); + void init_lang_edit(); + void init_script_add(); + void init_script_edit(); + + FontDataEditor(); +}; + +/*************************************************************************/ + +class EditorInspectorPluginFont : public EditorInspectorPlugin { + GDCLASS(EditorInspectorPluginFont, EditorInspectorPlugin); + +public: + virtual bool can_handle(Object *p_object) override; + virtual void parse_begin(Object *p_object) override; + virtual bool parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage, bool p_wide) override; +}; + +/*************************************************************************/ + +class FontEditorPlugin : public EditorPlugin { + GDCLASS(FontEditorPlugin, EditorPlugin); + +public: + FontEditorPlugin(EditorNode *p_node); + + virtual String get_name() const override { return "Font"; } +}; + +#endif // FONT_EDITOR_PLUGIN_H diff --git a/editor/plugins/gpu_particles_2d_editor_plugin.h b/editor/plugins/gpu_particles_2d_editor_plugin.h index 86e89bd0b0..f3ca20b71a 100644 --- a/editor/plugins/gpu_particles_2d_editor_plugin.h +++ b/editor/plugins/gpu_particles_2d_editor_plugin.h @@ -42,7 +42,6 @@ class GPUParticles2DEditorPlugin : public EditorPlugin { GDCLASS(GPUParticles2DEditorPlugin, EditorPlugin); enum { - MENU_GENERATE_VISIBILITY_RECT, MENU_LOAD_EMISSION_MASK, MENU_CLEAR_EMISSION_MASK, diff --git a/editor/plugins/gpu_particles_3d_editor_plugin.cpp b/editor/plugins/gpu_particles_3d_editor_plugin.cpp index c98ba25db5..0de52b3930 100644 --- a/editor/plugins/gpu_particles_3d_editor_plugin.cpp +++ b/editor/plugins/gpu_particles_3d_editor_plugin.cpp @@ -213,7 +213,7 @@ GPUParticles3DEditorBase::GPUParticles3DEditorBase() { emission_fill->add_item(TTR("Volume")); emd_vb->add_margin_child(TTR("Emission Source: "), emission_fill); - emission_dialog->get_ok()->set_text(TTR("Create")); + emission_dialog->get_ok_button()->set_text(TTR("Create")); emission_dialog->connect("confirmed", callable_mp(this, &GPUParticles3DEditorBase::_generate_emission_points)); emission_tree_dialog = memnew(SceneTreeDialog); diff --git a/editor/plugins/gpu_particles_3d_editor_plugin.h b/editor/plugins/gpu_particles_3d_editor_plugin.h index 1665b3676a..ce376e4386 100644 --- a/editor/plugins/gpu_particles_3d_editor_plugin.h +++ b/editor/plugins/gpu_particles_3d_editor_plugin.h @@ -71,7 +71,6 @@ class GPUParticles3DEditor : public GPUParticles3DEditorBase { GPUParticles3D *node; enum Menu { - MENU_OPTION_GENERATE_AABB, MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_NODE, MENU_OPTION_CLEAR_EMISSION_VOLUME, diff --git a/editor/plugins/item_list_editor_plugin.h b/editor/plugins/item_list_editor_plugin.h index 87586904a3..fa5e802869 100644 --- a/editor/plugins/item_list_editor_plugin.h +++ b/editor/plugins/item_list_editor_plugin.h @@ -49,7 +49,6 @@ protected: public: enum Flags { - FLAG_ICON = 1, FLAG_CHECKABLE = 2, FLAG_ID = 4, diff --git a/editor/plugins/material_editor_plugin.h b/editor/plugins/material_editor_plugin.h index a6df790620..570ba9ae03 100644 --- a/editor/plugins/material_editor_plugin.h +++ b/editor/plugins/material_editor_plugin.h @@ -55,7 +55,7 @@ class MaterialEditor : public Control { Camera3D *camera; Ref<SphereMesh> sphere_mesh; - Ref<CubeMesh> box_mesh; + Ref<BoxMesh> box_mesh; TextureButton *sphere_switch; TextureButton *box_switch; diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.cpp b/editor/plugins/mesh_instance_3d_editor_plugin.cpp index 5b241deab0..2a08e3a8b5 100644 --- a/editor/plugins/mesh_instance_3d_editor_plugin.cpp +++ b/editor/plugins/mesh_instance_3d_editor_plugin.cpp @@ -457,7 +457,7 @@ MeshInstance3DEditor::MeshInstance3DEditor() { outline_dialog = memnew(ConfirmationDialog); outline_dialog->set_title(TTR("Create Outline Mesh")); - outline_dialog->get_ok()->set_text(TTR("Create")); + outline_dialog->get_ok_button()->set_text(TTR("Create")); VBoxContainer *outline_dialog_vbc = memnew(VBoxContainer); outline_dialog->add_child(outline_dialog_vbc); diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.h b/editor/plugins/mesh_instance_3d_editor_plugin.h index 77a2b8ec34..f42136942b 100644 --- a/editor/plugins/mesh_instance_3d_editor_plugin.h +++ b/editor/plugins/mesh_instance_3d_editor_plugin.h @@ -40,7 +40,6 @@ class MeshInstance3DEditor : public Control { GDCLASS(MeshInstance3DEditor, Control); enum Menu { - MENU_OPTION_CREATE_STATIC_TRIMESH_BODY, MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE, MENU_OPTION_CREATE_SINGLE_CONVEX_COLLISION_SHAPE, diff --git a/editor/plugins/mesh_library_editor_plugin.cpp b/editor/plugins/mesh_library_editor_plugin.cpp index 374a8c8290..b11a07365c 100644 --- a/editor/plugins/mesh_library_editor_plugin.cpp +++ b/editor/plugins/mesh_library_editor_plugin.cpp @@ -267,7 +267,7 @@ MeshLibraryEditor::MeshLibraryEditor(EditorNode *p_editor) { editor = p_editor; cd = memnew(ConfirmationDialog); add_child(cd); - cd->get_ok()->connect("pressed", callable_mp(this, &MeshLibraryEditor::_menu_confirm)); + cd->get_ok_button()->connect("pressed", callable_mp(this, &MeshLibraryEditor::_menu_confirm)); } void MeshLibraryEditorPlugin::edit(Object *p_node) { @@ -301,4 +301,6 @@ MeshLibraryEditorPlugin::MeshLibraryEditorPlugin(EditorNode *p_node) { mesh_library_editor->set_anchors_and_margins_preset(Control::PRESET_TOP_WIDE); mesh_library_editor->set_end(Point2(0, 22)); mesh_library_editor->hide(); + + editor = nullptr; } diff --git a/editor/plugins/mesh_library_editor_plugin.h b/editor/plugins/mesh_library_editor_plugin.h index ea13303740..fafbce9243 100644 --- a/editor/plugins/mesh_library_editor_plugin.h +++ b/editor/plugins/mesh_library_editor_plugin.h @@ -46,7 +46,6 @@ class MeshLibraryEditor : public Control { int to_erase; enum { - MENU_OPTION_ADD_ITEM, MENU_OPTION_REMOVE_ITEM, MENU_OPTION_UPDATE_FROM_SCENE, diff --git a/editor/plugins/multimesh_editor_plugin.cpp b/editor/plugins/multimesh_editor_plugin.cpp index bd1384967f..b8a4f7bc5a 100644 --- a/editor/plugins/multimesh_editor_plugin.cpp +++ b/editor/plugins/multimesh_editor_plugin.cpp @@ -345,9 +345,9 @@ MultiMeshEditor::MultiMeshEditor() { populate_amount->set_value(128); vbc->add_margin_child(TTR("Amount:"), populate_amount); - populate_dialog->get_ok()->set_text(TTR("Populate")); + populate_dialog->get_ok_button()->set_text(TTR("Populate")); - populate_dialog->get_ok()->connect("pressed", callable_mp(this, &MultiMeshEditor::_populate)); + populate_dialog->get_ok_button()->connect("pressed", callable_mp(this, &MultiMeshEditor::_populate)); std = memnew(SceneTreeDialog); populate_dialog->add_child(std); std->connect("selected", callable_mp(this, &MultiMeshEditor::_browsed)); diff --git a/editor/plugins/multimesh_editor_plugin.h b/editor/plugins/multimesh_editor_plugin.h index d1f8a3b74a..6a80fd4d16 100644 --- a/editor/plugins/multimesh_editor_plugin.h +++ b/editor/plugins/multimesh_editor_plugin.h @@ -63,7 +63,6 @@ class MultiMeshEditor : public Control { SpinBox *populate_amount; enum Menu { - MENU_OPTION_POPULATE }; diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index cc26caa5a3..4d7be66180 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -63,12 +63,15 @@ #define GIZMO_SCALE_OFFSET (GIZMO_CIRCLE_SIZE + 0.3) #define GIZMO_ARROW_OFFSET (GIZMO_CIRCLE_SIZE + 0.3) -#define ZOOM_MIN_DISTANCE 0.001 -#define ZOOM_MULTIPLIER 1.08 -#define ZOOM_INDICATOR_DELAY_S 1.5 - -#define FREELOOK_MIN_SPEED 0.01 -#define FREELOOK_SPEED_MULTIPLIER 1.08 +#define ZOOM_FREELOOK_MIN 0.01 +#define ZOOM_FREELOOK_MULTIPLIER 1.08 +#define ZOOM_FREELOOK_INDICATOR_DELAY_S 1.5 + +#ifdef REAL_T_IS_DOUBLE +#define ZOOM_FREELOOK_MAX 1'000'000'000'000 +#else +#define ZOOM_FREELOOK_MAX 10'000 +#endif #define MIN_Z 0.01 #define MAX_Z 1000000.0 @@ -138,7 +141,7 @@ void ViewportRotationControl::_draw_axis(const Axis2D &p_axis) { if (front) { String axis_name = direction == 0 ? "X" : (direction == 1 ? "Y" : "Z"); draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS, c); - draw_char(get_theme_font("rotation_control", "EditorFonts"), p_axis.screen_point + Vector2i(-4, 5) * EDSCALE, axis_name, "", Color(0.3, 0.3, 0.3)); + draw_char(get_theme_font("rotation_control", "EditorFonts"), p_axis.screen_point + Vector2i(-4, 5) * EDSCALE, axis_name, "", get_theme_font_size("rotation_control_size", "EditorFonts"), Color(0.3, 0.3, 0.3)); } else { draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS * (0.55 + (0.2 * (1.0 + p_axis.z_axis))), c); } @@ -1117,7 +1120,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (b.is_valid()) { emit_signal("clicked", this); - float zoom_factor = 1 + (ZOOM_MULTIPLIER - 1) * b->get_factor(); + float zoom_factor = 1 + (ZOOM_FREELOOK_MULTIPLIER - 1) * b->get_factor(); switch (b->get_button_index()) { case BUTTON_WHEEL_UP: { if (is_freelook_active()) { @@ -2207,34 +2210,28 @@ void Node3DEditorViewport::set_freelook_active(bool active_now) { } void Node3DEditorViewport::scale_cursor_distance(real_t scale) { - // Prevents zero distance which would short-circuit any scaling - if (cursor.distance < ZOOM_MIN_DISTANCE) { - cursor.distance = ZOOM_MIN_DISTANCE; - } - - cursor.distance *= scale; - - if (cursor.distance < ZOOM_MIN_DISTANCE) { - cursor.distance = ZOOM_MIN_DISTANCE; + real_t min_distance = MAX(camera->get_znear() * 4, ZOOM_FREELOOK_MIN); + real_t max_distance = MIN(camera->get_zfar() / 4, ZOOM_FREELOOK_MAX); + if (unlikely(min_distance > max_distance)) { + cursor.distance = (min_distance + max_distance) / 2; + } else { + cursor.distance = CLAMP(cursor.distance * scale, min_distance, max_distance); } - zoom_indicator_delay = ZOOM_INDICATOR_DELAY_S; + zoom_indicator_delay = ZOOM_FREELOOK_INDICATOR_DELAY_S; surface->update(); } void Node3DEditorViewport::scale_freelook_speed(real_t scale) { - // Prevents zero distance which would short-circuit any scaling - if (freelook_speed < FREELOOK_MIN_SPEED) { - freelook_speed = FREELOOK_MIN_SPEED; - } - - freelook_speed *= scale; - - if (freelook_speed < FREELOOK_MIN_SPEED) { - freelook_speed = FREELOOK_MIN_SPEED; + real_t min_speed = MAX(camera->get_znear() * 4, ZOOM_FREELOOK_MIN); + real_t max_speed = MIN(camera->get_zfar() / 4, ZOOM_FREELOOK_MAX); + if (unlikely(min_speed > max_speed)) { + freelook_speed = (min_speed + max_speed) / 2; + } else { + freelook_speed = CLAMP(freelook_speed * scale, min_speed, max_speed); } - zoom_indicator_delay = ZOOM_INDICATOR_DELAY_S; + zoom_indicator_delay = ZOOM_FREELOOK_INDICATOR_DELAY_S; surface->update(); } @@ -2426,6 +2423,7 @@ void Node3DEditorViewport::_notification(int p_what) { t.basis = t.basis * aabb_s; RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance, t); + RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance_xray, t); } if (changed || (spatial_editor->is_gizmo_visible() && !exist)) { @@ -2514,7 +2512,7 @@ void Node3DEditorViewport::_notification(int p_what) { gpu_time_history[i] = 0; } cpu_time_history_index = 0; - cpu_time_history_index = 0; + gpu_time_history_index = 0; } if (show_fps) { cpu_time_history[cpu_time_history_index] = RS::get_singleton()->viewport_get_measured_render_time_cpu(viewport->get_viewport_rid()); @@ -2592,7 +2590,7 @@ void Node3DEditorViewport::_notification(int p_what) { } } -static void draw_indicator_bar(Control &surface, real_t fill, const Ref<Texture2D> icon, const Ref<Font> font, const String &text) { +static void draw_indicator_bar(Control &surface, real_t fill, const Ref<Texture2D> icon, const Ref<Font> font, int font_size, const String &text) { // Adjust bar size from control height const Vector2 surface_size = surface.get_size(); const real_t h = surface_size.y / 2.0; @@ -2612,7 +2610,7 @@ static void draw_indicator_bar(Control &surface, real_t fill, const Ref<Texture2 surface.draw_texture(icon, icon_pos); // Draw text below the bar (for speed/zoom information). - surface.draw_string(font, Vector2(icon_pos.x, icon_pos.y + icon_size.y + 16 * EDSCALE), text); + surface.draw_string(font, Vector2(icon_pos.x, icon_pos.y + icon_size.y + 16 * EDSCALE), text, HALIGN_LEFT, -1.f, font_size); } void Node3DEditorViewport::_draw() { @@ -2650,19 +2648,39 @@ void Node3DEditorViewport::_draw() { if (message_time > 0) { Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); Point2 msgpos = Point2(5, get_size().y - 20); - font->draw(ci, msgpos + Point2(1, 1), message, Color(0, 0, 0, 0.8)); - font->draw(ci, msgpos + Point2(-1, -1), message, Color(0, 0, 0, 0.8)); - font->draw(ci, msgpos, message, Color(1, 1, 1, 1)); + font->draw_string(ci, msgpos + Point2(1, 1), message, HALIGN_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); + font->draw_string(ci, msgpos + Point2(-1, -1), message, HALIGN_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); + font->draw_string(ci, msgpos, message, HALIGN_LEFT, -1, font_size, Color(1, 1, 1, 1)); } if (_edit.mode == TRANSFORM_ROTATE) { Point2 center = _point_to_screen(_edit.center); + + Color handle_color; + switch (_edit.plane) { + case TRANSFORM_X_AXIS: + handle_color = get_theme_color("axis_x_color", "Editor"); + break; + case TRANSFORM_Y_AXIS: + handle_color = get_theme_color("axis_y_color", "Editor"); + break; + case TRANSFORM_Z_AXIS: + handle_color = get_theme_color("axis_z_color", "Editor"); + break; + default: + handle_color = get_theme_color("accent_color", "Editor"); + break; + } + handle_color.a = 1.0; + handle_color *= Color(1.3, 1.3, 1.3, 1.0); + RenderingServer::get_singleton()->canvas_item_add_line( ci, _edit.mouse_pos, center, - get_theme_color("accent_color", "Editor") * Color(1, 1, 1, 0.6), + handle_color, Math::round(2 * EDSCALE)); } if (previewing) { @@ -2687,7 +2705,7 @@ void Node3DEditorViewport::_draw() { } break; } - draw_rect = Rect2(Vector2(), s).clip(draw_rect); + draw_rect = Rect2(Vector2(), s).intersection(draw_rect); surface->draw_rect(draw_rect, Color(0.6, 0.6, 0.1, 0.5), false, Math::round(2 * EDSCALE)); @@ -2696,19 +2714,13 @@ void Node3DEditorViewport::_draw() { if (is_freelook_active()) { // Show speed - real_t min_speed = FREELOOK_MIN_SPEED; - real_t max_speed = camera->get_zfar(); + real_t min_speed = MAX(camera->get_znear() * 4, ZOOM_FREELOOK_MIN); + real_t max_speed = MIN(camera->get_zfar() / 4, ZOOM_FREELOOK_MAX); real_t scale_length = (max_speed - min_speed); if (!Math::is_zero_approx(scale_length)) { real_t logscale_t = 1.0 - Math::log(1 + freelook_speed - min_speed) / Math::log(1 + scale_length); - // There is no real maximum speed so that factor can become negative, - // Let's make it look asymptotic instead (will decrease slower and slower). - if (logscale_t < 0.25) { - logscale_t = 0.25 * Math::exp(4.0 * logscale_t - 1.0); - } - // Display the freelook speed to help the user get a better sense of scale. const int precision = freelook_speed < 1.0 ? 2 : 1; draw_indicator_bar( @@ -2716,25 +2728,20 @@ void Node3DEditorViewport::_draw() { 1.0 - logscale_t, get_theme_icon("ViewportSpeed", "EditorIcons"), get_theme_font("font", "Label"), + get_theme_font_size("font_size", "Label"), vformat("%s u/s", String::num(freelook_speed).pad_decimals(precision))); } } else { // Show zoom - real_t min_distance = ZOOM_MIN_DISTANCE; // TODO Why not pick znear to limit zoom? - real_t max_distance = camera->get_zfar(); + real_t min_distance = MAX(camera->get_znear() * 4, ZOOM_FREELOOK_MIN); + real_t max_distance = MIN(camera->get_zfar() / 4, ZOOM_FREELOOK_MAX); real_t scale_length = (max_distance - min_distance); if (!Math::is_zero_approx(scale_length)) { real_t logscale_t = 1.0 - Math::log(1 + cursor.distance - min_distance) / Math::log(1 + scale_length); - // There is no real maximum distance so that factor can become negative, - // Let's make it look asymptotic instead (will decrease slower and slower). - if (logscale_t < 0.25) { - logscale_t = 0.25 * Math::exp(4.0 * logscale_t - 1.0); - } - // Display the zoom center distance to help the user get a better sense of scale. const int precision = cursor.distance < 1.0 ? 2 : 1; draw_indicator_bar( @@ -2742,6 +2749,7 @@ void Node3DEditorViewport::_draw() { logscale_t, get_theme_icon("ViewportZoom", "EditorIcons"), get_theme_font("font", "Label"), + get_theme_font_size("font_size", "Label"), vformat("%s u", String::num(cursor.distance).pad_decimals(precision))); } } @@ -2966,11 +2974,11 @@ void Node3DEditorViewport::_menu_option(int p_option) { int idx = view_menu->get_popup()->get_item_index(VIEW_GIZMOS); bool current = view_menu->get_popup()->is_item_checked(idx); current = !current; + uint32_t layers = ((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + index)) | (1 << GIZMO_GRID_LAYER) | (1 << MISC_TOOL_LAYER); if (current) { - camera->set_cull_mask(((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + index)) | (1 << GIZMO_EDIT_LAYER) | (1 << GIZMO_GRID_LAYER)); - } else { - camera->set_cull_mask(((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + index)) | (1 << GIZMO_GRID_LAYER)); + layers |= (1 << GIZMO_EDIT_LAYER); } + camera->set_cull_mask(layers); view_menu->get_popup()->set_item_checked(idx, current); } break; @@ -3009,7 +3017,8 @@ void Node3DEditorViewport::_menu_option(int p_option) { case VIEW_DISPLAY_DEBUG_DECAL_ATLAS: case VIEW_DISPLAY_DEBUG_SDFGI: case VIEW_DISPLAY_DEBUG_SDFGI_PROBES: - case VIEW_DISPLAY_DEBUG_GI_BUFFER: { + case VIEW_DISPLAY_DEBUG_GI_BUFFER: + case VIEW_DISPLAY_DEBUG_DISABLE_LOD: { static const int display_options[] = { VIEW_DISPLAY_NORMAL, VIEW_DISPLAY_WIREFRAME, @@ -3026,6 +3035,7 @@ void Node3DEditorViewport::_menu_option(int p_option) { VIEW_DISPLAY_DEBUG_SCENE_LUMINANCE, VIEW_DISPLAY_DEBUG_SSAO, VIEW_DISPLAY_DEBUG_GI_BUFFER, + VIEW_DISPLAY_DEBUG_DISABLE_LOD, VIEW_DISPLAY_DEBUG_PSSM_SPLITS, VIEW_DISPLAY_DEBUG_DECAL_ATLAS, VIEW_DISPLAY_DEBUG_SDFGI, @@ -3048,6 +3058,7 @@ void Node3DEditorViewport::_menu_option(int p_option) { Viewport::DEBUG_DRAW_SCENE_LUMINANCE, Viewport::DEBUG_DRAW_SSAO, Viewport::DEBUG_DRAW_GI_BUFFER, + Viewport::DEBUG_DRAW_DISABLE_LOD, Viewport::DEBUG_DRAW_PSSM_SPLITS, Viewport::DEBUG_DRAW_DECAL_ATLAS, Viewport::DEBUG_DRAW_SDFGI, @@ -3891,7 +3902,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito surface->set_clip_contents(true); camera = memnew(Camera3D); camera->set_disable_gizmo(true); - camera->set_cull_mask(((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + p_index)) | (1 << GIZMO_EDIT_LAYER) | (1 << GIZMO_GRID_LAYER)); + camera->set_cull_mask(((1 << 20) - 1) | (1 << (GIZMO_BASE_LAYER + p_index)) | (1 << GIZMO_EDIT_LAYER) | (1 << GIZMO_GRID_LAYER) | (1 << MISC_TOOL_LAYER)); viewport->add_child(camera); camera->make_current(); surface->set_focus_mode(FOCUS_ALL); @@ -3902,8 +3913,9 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito view_menu = memnew(MenuButton); view_menu->set_flat(false); - vbox->add_child(view_menu); view_menu->set_h_size_flags(0); + view_menu->set_shortcut_context(this); + vbox->add_child(view_menu); display_submenu = memnew(PopupMenu); view_menu->get_popup()->add_child(display_submenu); @@ -3950,6 +3962,8 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito display_submenu->add_radio_check_item(TTR("SSAO"), VIEW_DISPLAY_DEBUG_SSAO); display_submenu->add_separator(); display_submenu->add_radio_check_item(TTR("GI Buffer"), VIEW_DISPLAY_DEBUG_GI_BUFFER); + display_submenu->add_separator(); + display_submenu->add_radio_check_item(TTR("Disable LOD"), VIEW_DISPLAY_DEBUG_DISABLE_LOD); display_submenu->set_name("display_advanced"); view_menu->get_popup()->add_submenu_item(TTR("Display Advanced..."), "display_advanced", VIEW_DISPLAY_ADVANCED); view_menu->get_popup()->add_separator(); @@ -4417,6 +4431,9 @@ Node3DEditorSelectedItem::~Node3DEditorSelectedItem() { if (sbox_instance.is_valid()) { RenderingServer::get_singleton()->free(sbox_instance); } + if (sbox_instance_xray.is_valid()) { + RenderingServer::get_singleton()->free(sbox_instance_xray); + } } void Node3DEditor::select_gizmo_highlight_axis(int p_axis) { @@ -4500,42 +4517,75 @@ Object *Node3DEditor::_get_editor_data(Object *p_what) { Node3DEditorSelectedItem *si = memnew(Node3DEditorSelectedItem); si->sp = sp; - si->sbox_instance = RenderingServer::get_singleton()->instance_create2(selection_box->get_rid(), sp->get_world_3d()->get_scenario()); - RS::get_singleton()->instance_geometry_set_cast_shadows_setting(si->sbox_instance, RS::SHADOW_CASTING_SETTING_OFF); + si->sbox_instance = RenderingServer::get_singleton()->instance_create2( + selection_box->get_rid(), + sp->get_world_3d()->get_scenario()); + RS::get_singleton()->instance_geometry_set_cast_shadows_setting( + si->sbox_instance, + RS::SHADOW_CASTING_SETTING_OFF); + RS::get_singleton()->instance_set_layer_mask(si->sbox_instance, 1 << Node3DEditorViewport::MISC_TOOL_LAYER); + si->sbox_instance_xray = RenderingServer::get_singleton()->instance_create2( + selection_box_xray->get_rid(), + sp->get_world_3d()->get_scenario()); + RS::get_singleton()->instance_geometry_set_cast_shadows_setting( + si->sbox_instance_xray, + RS::SHADOW_CASTING_SETTING_OFF); + RS::get_singleton()->instance_set_layer_mask(si->sbox_instance_xray, 1 << Node3DEditorViewport::MISC_TOOL_LAYER); return si; } -void Node3DEditor::_generate_selection_box() { +void Node3DEditor::_generate_selection_boxes() { + // Use two AABBs to create the illusion of a slightly thicker line. AABB aabb(Vector3(), Vector3(1, 1, 1)); - aabb.grow_by(aabb.get_longest_axis_size() / 20.0); - + AABB aabb_offset(Vector3(), Vector3(1, 1, 1)); + // Grow the bounding boxes slightly to avoid Z-fighting with the mesh's edges. + aabb.grow_by(0.005); + aabb_offset.grow_by(0.01); + + // Create a x-ray (visible through solid surfaces) and standard version of the selection box. + // Both will be drawn at the same position, but with different opacity. + // This lets the user see where the selection is while still having a sense of depth. Ref<SurfaceTool> st = memnew(SurfaceTool); + Ref<SurfaceTool> st_xray = memnew(SurfaceTool); st->begin(Mesh::PRIMITIVE_LINES); + st_xray->begin(Mesh::PRIMITIVE_LINES); for (int i = 0; i < 12; i++) { Vector3 a, b; aabb.get_edge(i, a, b); - st->add_color(Color(1.0, 1.0, 0.8, 0.8)); st->add_vertex(a); - st->add_color(Color(1.0, 1.0, 0.8, 0.4)); - st->add_vertex(a.lerp(b, 0.2)); + st->add_vertex(b); + st_xray->add_vertex(a); + st_xray->add_vertex(b); + } - st->add_color(Color(1.0, 1.0, 0.8, 0.4)); - st->add_vertex(a.lerp(b, 0.8)); - st->add_color(Color(1.0, 1.0, 0.8, 0.8)); + for (int i = 0; i < 12; i++) { + Vector3 a, b; + aabb_offset.get_edge(i, a, b); + + st->add_vertex(a); st->add_vertex(b); + st_xray->add_vertex(a); + st_xray->add_vertex(b); } Ref<StandardMaterial3D> mat = memnew(StandardMaterial3D); mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); - mat->set_albedo(Color(1, 1, 1)); + // Use a similar color to the 2D editor selection. + mat->set_albedo(Color(1, 0.5, 0)); mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); - mat->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - mat->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); st->set_material(mat); selection_box = st->commit(); + + Ref<StandardMaterial3D> mat_xray = memnew(StandardMaterial3D); + mat_xray->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + mat_xray->set_flag(StandardMaterial3D::FLAG_DISABLE_DEPTH_TEST, true); + mat_xray->set_albedo(Color(1, 0.5, 0, 0.15)); + mat_xray->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + st_xray->set_material(mat_xray); + selection_box_xray = st_xray->commit(); } Dictionary Node3DEditor::get_state() const { @@ -4973,11 +5023,10 @@ void Node3DEditor::_menu_item_pressed(int p_option) { for (int i = 0; i < 3; ++i) { if (grid_enable[i]) { grid_visible[i] = grid_enabled; - if (grid_instance[i].is_valid()) { - RenderingServer::get_singleton()->instance_set_visible(grid_instance[i], grid_enabled); - } } } + _finish_grid(); + _init_grid(); view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(p_option), grid_enabled); @@ -5203,7 +5252,7 @@ void Node3DEditor::_init_indicators() { gizmo_color[i] = mat; Ref<StandardMaterial3D> mat_hl = mat->duplicate(); - mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); + mat_hl->set_albedo(Color(col.r * 1.3, col.g * 1.3, col.b * 1.3, 1.0)); gizmo_color_hl[i] = mat_hl; Vector3 ivec; @@ -5298,7 +5347,7 @@ void Node3DEditor::_init_indicators() { surftool->commit(move_plane_gizmo[i]); Ref<StandardMaterial3D> plane_mat_hl = plane_mat->duplicate(); - plane_mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); + plane_mat_hl->set_albedo(Color(col.r * 1.3, col.g * 1.3, col.b * 1.3, 1.0)); plane_gizmo_color_hl[i] = plane_mat_hl; // needed, so we can draw planes from both sides } @@ -5319,7 +5368,7 @@ void Node3DEditor::_init_indicators() { Vector2 ofs = Vector2(Math::cos((Math_PI * 2.0 * k) / m), Math::sin((Math_PI * 2.0 * k) / m)); Vector3 normal = ivec * ofs.x + ivec2 * ofs.y; - surftool->add_normal(basis.xform(normal)); + surftool->set_normal(basis.xform(normal)); surftool->add_vertex(vertex); } } @@ -5381,7 +5430,7 @@ void Node3DEditor::_init_indicators() { rotate_gizmo[i]->surface_set_material(0, rotate_mat); Ref<ShaderMaterial> rotate_mat_hl = rotate_mat->duplicate(); - rotate_mat_hl->set_shader_param("albedo", Color(col.r, col.g, col.b, 1.0)); + rotate_mat_hl->set_shader_param("albedo", Color(col.r * 1.3, col.g * 1.3, col.b * 1.3, 1.0)); rotate_gizmo_color_hl[i] = rotate_mat_hl; if (i == 2) { // Rotation white outline @@ -5508,13 +5557,13 @@ void Node3DEditor::_init_indicators() { surftool->commit(scale_plane_gizmo[i]); Ref<StandardMaterial3D> plane_mat_hl = plane_mat->duplicate(); - plane_mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); + plane_mat_hl->set_albedo(Color(col.r * 1.3, col.g * 1.3, col.b * 1.3, 1.0)); plane_gizmo_color_hl[i] = plane_mat_hl; // needed, so we can draw planes from both sides } } } - _generate_selection_box(); + _generate_selection_boxes(); } void Node3DEditor::_update_gizmos_menu() { @@ -5801,13 +5850,25 @@ void Node3DEditor::snap_selected_nodes_to_floor() { Set<CollisionShape3D *> cs = _get_child_nodes<CollisionShape3D>(sp); if (cs.size()) { - AABB aabb = sp->get_global_transform().xform(cs.front()->get()->get_shape()->get_debug_mesh()->get_aabb()); + AABB aabb; + bool found_valid_shape = false; + if (cs.front()->get()->get_shape().is_valid()) { + aabb = sp->get_global_transform().xform(cs.front()->get()->get_shape()->get_debug_mesh()->get_aabb()); + found_valid_shape = true; + } for (Set<CollisionShape3D *>::Element *I = cs.front(); I; I = I->next()) { - aabb.merge_with(sp->get_global_transform().xform(I->get()->get_shape()->get_debug_mesh()->get_aabb())); + if (I->get()->get_shape().is_valid()) { + aabb.merge_with(sp->get_global_transform().xform(I->get()->get_shape()->get_debug_mesh()->get_aabb())); + found_valid_shape = true; + } + } + if (found_valid_shape) { + Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5); + from = aabb.position + size; + position_offset.y = from.y - sp->get_global_transform().origin.y; + } else { + from = sp->get_global_transform().origin; } - Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5); - from = aabb.position + size; - position_offset.y = from.y - sp->get_global_transform().origin.y; } else if (vi.size()) { AABB aabb = vi.front()->get()->get_transformed_aabb(); for (Set<VisualInstance3D *>::Element *I = vi.front(); I; I = I->next()) { @@ -6120,9 +6181,9 @@ void Node3DEditor::_bind_methods() { } void Node3DEditor::clear() { - settings_fov->set_value(EDITOR_DEF("editors/3d/default_fov", 70.0)); - settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.05)); - settings_zfar->set_value(EDITOR_DEF("editors/3d/default_z_far", 1500.0)); + settings_fov->set_value(EDITOR_GET("editors/3d/default_fov")); + settings_znear->set_value(EDITOR_GET("editors/3d/default_z_near")); + settings_zfar->set_value(EDITOR_GET("editors/3d/default_z_far")); for (uint32_t i = 0; i < VIEWPORTS_COUNT; i++) { viewports[i]->reset(); @@ -6132,7 +6193,6 @@ void Node3DEditor::clear() { view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(MENU_VIEW_ORIGIN), true); for (int i = 0; i < 3; ++i) { if (grid_enable[i]) { - RenderingServer::get_singleton()->instance_set_visible(grid_instance[i], true); grid_visible[i] = true; } } @@ -6180,6 +6240,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_SELECT; tool_button[TOOL_MODE_SELECT]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds); tool_button[TOOL_MODE_SELECT]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_select", TTR("Select Mode"), KEY_Q)); + tool_button[TOOL_MODE_SELECT]->set_shortcut_context(this); tool_button[TOOL_MODE_SELECT]->set_tooltip(keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate\nAlt+Drag: Move\nAlt+RMB: Depth list selection")); hbc_menu->add_child(memnew(VSeparator)); @@ -6191,6 +6252,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_MOVE; tool_button[TOOL_MODE_MOVE]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds); tool_button[TOOL_MODE_MOVE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_move", TTR("Move Mode"), KEY_W)); + tool_button[TOOL_MODE_MOVE]->set_shortcut_context(this); tool_button[TOOL_MODE_ROTATE] = memnew(Button); hbc_menu->add_child(tool_button[TOOL_MODE_ROTATE]); @@ -6199,6 +6261,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_ROTATE; tool_button[TOOL_MODE_ROTATE]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds); tool_button[TOOL_MODE_ROTATE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_rotate", TTR("Rotate Mode"), KEY_E)); + tool_button[TOOL_MODE_ROTATE]->set_shortcut_context(this); tool_button[TOOL_MODE_SCALE] = memnew(Button); hbc_menu->add_child(tool_button[TOOL_MODE_SCALE]); @@ -6207,6 +6270,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_SCALE; tool_button[TOOL_MODE_SCALE]->connect("pressed", callable_mp(this, &Node3DEditor::_menu_item_pressed), button_binds); tool_button[TOOL_MODE_SCALE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_scale", TTR("Scale Mode"), KEY_R)); + tool_button[TOOL_MODE_SCALE]->set_shortcut_context(this); hbc_menu->add_child(memnew(VSeparator)); @@ -6255,6 +6319,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_LOCAL_COORDS; tool_option_button[TOOL_OPT_LOCAL_COORDS]->connect("toggled", callable_mp(this, &Node3DEditor::_menu_item_toggled), button_binds); tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_shortcut(ED_SHORTCUT("spatial_editor/local_coords", TTR("Use Local Space"), KEY_T)); + tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_shortcut_context(this); tool_option_button[TOOL_OPT_USE_SNAP] = memnew(Button); hbc_menu->add_child(tool_option_button[TOOL_OPT_USE_SNAP]); @@ -6263,6 +6328,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { button_binds.write[0] = MENU_TOOL_USE_SNAP; tool_option_button[TOOL_OPT_USE_SNAP]->connect("toggled", callable_mp(this, &Node3DEditor::_menu_item_toggled), button_binds); tool_option_button[TOOL_OPT_USE_SNAP]->set_shortcut(ED_SHORTCUT("spatial_editor/snap", TTR("Use Snap"), KEY_Y)); + tool_option_button[TOOL_OPT_USE_SNAP]->set_shortcut_context(this); hbc_menu->add_child(memnew(VSeparator)); @@ -6300,6 +6366,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { transform_menu = memnew(MenuButton); transform_menu->set_text(TTR("Transform")); transform_menu->set_switch_on_hover(true); + transform_menu->set_shortcut_context(this); hbc_menu->add_child(transform_menu); p = transform_menu->get_popup(); @@ -6314,6 +6381,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { view_menu = memnew(MenuButton); view_menu->set_text(TTR("View")); view_menu->set_switch_on_hover(true); + view_menu->set_shortcut_context(this); hbc_menu->add_child(view_menu); p = view_menu->get_popup(); @@ -6379,7 +6447,7 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { snap_dialog->set_title(TTR("Snap Settings")); add_child(snap_dialog); snap_dialog->connect("confirmed", callable_mp(this, &Node3DEditor::_snap_changed)); - snap_dialog->get_cancel()->connect("pressed", callable_mp(this, &Node3DEditor::_snap_update)); + snap_dialog->get_cancel_button()->connect("pressed", callable_mp(this, &Node3DEditor::_snap_update)); VBoxContainer *snap_dialog_vbc = memnew(VBoxContainer); snap_dialog->add_child(snap_dialog_vbc); @@ -6407,22 +6475,22 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { settings_fov = memnew(SpinBox); settings_fov->set_max(MAX_FOV); settings_fov->set_min(MIN_FOV); - settings_fov->set_step(0.01); - settings_fov->set_value(EDITOR_DEF("editors/3d/default_fov", 70.0)); + settings_fov->set_step(0.1); + settings_fov->set_value(EDITOR_GET("editors/3d/default_fov")); settings_vbc->add_margin_child(TTR("Perspective FOV (deg.):"), settings_fov); settings_znear = memnew(SpinBox); settings_znear->set_max(MAX_Z); settings_znear->set_min(MIN_Z); settings_znear->set_step(0.01); - settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.05)); + settings_znear->set_value(EDITOR_GET("editors/3d/default_z_near")); settings_vbc->add_margin_child(TTR("View Z-Near:"), settings_znear); settings_zfar = memnew(SpinBox); settings_zfar->set_max(MAX_Z); settings_zfar->set_min(MIN_Z); - settings_zfar->set_step(0.01); - settings_zfar->set_value(EDITOR_DEF("editors/3d/default_z_far", 1500)); + settings_zfar->set_step(0.1); + settings_zfar->set_value(EDITOR_GET("editors/3d/default_z_far")); settings_vbc->add_margin_child(TTR("View Z-Far:"), settings_zfar); for (uint32_t i = 0; i < VIEWPORTS_COUNT; ++i) { @@ -6497,8 +6565,8 @@ Node3DEditor::Node3DEditor(EditorNode *p_editor) { add_to_group("_spatial_editor_group"); EDITOR_DEF("editors/3d/manipulator_gizmo_size", 80); - EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "editors/3d/manipulator_gizmo_size", PROPERTY_HINT_RANGE, "16,1024,1")); - EDITOR_DEF("editors/3d/manipulator_gizmo_opacity", 0.4); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "editors/3d/manipulator_gizmo_size", PROPERTY_HINT_RANGE, "16,160,1")); + EDITOR_DEF("editors/3d/manipulator_gizmo_opacity", 0.9); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::FLOAT, "editors/3d/manipulator_gizmo_opacity", PROPERTY_HINT_RANGE, "0,1,0.01")); EDITOR_DEF("editors/3d/navigation/show_viewport_rotation_gizmo", true); @@ -6631,7 +6699,7 @@ Node3DEditorPlugin::Node3DEditorPlugin(EditorNode *p_node) { editor->get_viewport()->add_child(spatial_editor); spatial_editor->hide(); - spatial_editor->connect_compat("transform_key_request", editor->get_inspector_dock(), "_transform_keyed"); + spatial_editor->connect("transform_key_request", Callable(editor->get_inspector_dock(), "_transform_keyed")); } Node3DEditorPlugin::~Node3DEditorPlugin() { @@ -6718,12 +6786,12 @@ void EditorNode3DGizmoPlugin::create_icon_material(const String &p_name, const R materials[p_name] = icons; } -void EditorNode3DGizmoPlugin::create_handle_material(const String &p_name, bool p_billboard) { +void EditorNode3DGizmoPlugin::create_handle_material(const String &p_name, bool p_billboard, const Ref<Texture2D> &p_icon) { Ref<StandardMaterial3D> handle_material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); handle_material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); handle_material->set_flag(StandardMaterial3D::FLAG_USE_POINT_SIZE, true); - Ref<Texture2D> handle_t = Node3DEditor::get_singleton()->get_theme_icon("Editor3DHandle", "EditorIcons"); + Ref<Texture2D> handle_t = p_icon != nullptr ? p_icon : Node3DEditor::get_singleton()->get_theme_icon("Editor3DHandle", "EditorIcons"); handle_material->set_point_size(handle_t->get_width()); handle_material->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, handle_t); handle_material->set_albedo(Color(1, 1, 1)); @@ -6766,9 +6834,9 @@ Ref<StandardMaterial3D> EditorNode3DGizmoPlugin::get_material(const String &p_na return mat; } -String EditorNode3DGizmoPlugin::get_name() const { - if (get_script_instance() && get_script_instance()->has_method("get_name")) { - return get_script_instance()->call("get_name"); +String EditorNode3DGizmoPlugin::get_gizmo_name() const { + if (get_script_instance() && get_script_instance()->has_method("get_gizmo_name")) { + return get_script_instance()->call("get_gizmo_name"); } return TTR("Nameless gizmo"); } @@ -6807,10 +6875,10 @@ void EditorNode3DGizmoPlugin::_bind_methods() { ClassDB::bind_method(D_METHOD("create_material", "name", "color", "billboard", "on_top", "use_vertex_color"), &EditorNode3DGizmoPlugin::create_material, DEFVAL(false), DEFVAL(false), DEFVAL(false)); ClassDB::bind_method(D_METHOD("create_icon_material", "name", "texture", "on_top", "color"), &EditorNode3DGizmoPlugin::create_icon_material, DEFVAL(false), DEFVAL(Color(1, 1, 1, 1))); - ClassDB::bind_method(D_METHOD("create_handle_material", "name", "billboard"), &EditorNode3DGizmoPlugin::create_handle_material, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("create_handle_material", "name", "billboard", "texture"), &EditorNode3DGizmoPlugin::create_handle_material, DEFVAL(false), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("add_material", "name", "material"), &EditorNode3DGizmoPlugin::add_material); - ClassDB::bind_method(D_METHOD("get_material", "name", "gizmo"), &EditorNode3DGizmoPlugin::get_material); //, DEFVAL(Ref<EditorNode3DGizmo>())); + ClassDB::bind_method(D_METHOD("get_material", "name", "gizmo"), &EditorNode3DGizmoPlugin::get_material, DEFVAL(Ref<EditorNode3DGizmo>())); BIND_VMETHOD(MethodInfo(Variant::STRING, "get_name")); BIND_VMETHOD(MethodInfo(Variant::INT, "get_priority")); diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h index e4a384449b..079c86ceb4 100644 --- a/editor/plugins/node_3d_editor_plugin.h +++ b/editor/plugins/node_3d_editor_plugin.h @@ -61,16 +61,10 @@ public: Ref<Material> material; Ref<SkinReference> skin_reference; RID skeleton; - bool billboard; - bool unscaled; - bool can_intersect; - bool extra_margin; - Instance() { - billboard = false; - unscaled = false; - can_intersect = false; - extra_margin = false; - } + bool billboard = false; + bool unscaled = false; + bool can_intersect = false; + bool extra_margin = false; void create_instance(Node3D *p_base, bool p_hidden = false); }; @@ -80,7 +74,7 @@ public: struct Handle { Vector3 pos; - bool billboard; + bool billboard = false; }; Vector<Vector3> handles; @@ -180,7 +174,6 @@ class Node3DEditorViewport : public Control { friend class Node3DEditor; friend class ViewportRotationControl; enum { - VIEW_TOP, VIEW_BOTTOM, VIEW_LEFT, @@ -219,6 +212,7 @@ class Node3DEditorViewport : public Control { VIEW_DISPLAY_DEBUG_SDFGI, VIEW_DISPLAY_DEBUG_SDFGI_PROBES, VIEW_DISPLAY_DEBUG_GI_BUFFER, + VIEW_DISPLAY_DEBUG_DISABLE_LOD, VIEW_LOCK_ROTATION, VIEW_CINEMATIC_PREVIEW, VIEW_AUTO_ORTHOGONAL, @@ -230,6 +224,7 @@ public: GIZMO_BASE_LAYER = 27, GIZMO_EDIT_LAYER = 26, GIZMO_GRID_LAYER = 25, + MISC_TOOL_LAYER = 24, FRAME_TIME_HISTORY = 20, }; @@ -297,9 +292,9 @@ private: Label *fps_label; struct _RayResult { - Node3D *item; - float depth; - int handle; + Node3D *item = nullptr; + float depth = 0; + int handle = 0; _FORCE_INLINE_ bool operator<(const _RayResult &p_rr) const { return depth < p_rr.depth; } }; @@ -376,11 +371,11 @@ private: Vector3 click_ray_pos; Vector3 center; Vector3 orig_gizmo_pos; - int edited_gizmo; + int edited_gizmo = 0; Point2 mouse_pos; - bool snap; + bool snap = false; Ref<EditorNode3DGizmo> gizmo; - int gizmo_handle; + int gizmo_handle = 0; Variant gizmo_initial_value; Vector3 gizmo_initial_pos; } _edit; @@ -498,6 +493,7 @@ public: bool last_xform_dirty; Node3D *sp; RID sbox_instance; + RID sbox_instance_xray; Node3DEditorSelectedItem() { sp = nullptr; @@ -553,7 +549,6 @@ public: static const unsigned int VIEWPORTS_COUNT = 4; enum ToolMode { - TOOL_MODE_SELECT, TOOL_MODE_MOVE, TOOL_MODE_ROTATE, @@ -567,7 +562,6 @@ public: }; enum ToolOptions { - TOOL_OPT_LOCAL_COORDS, TOOL_OPT_USE_SNAP, TOOL_OPT_OVERRIDE_CAMERA, @@ -613,6 +607,7 @@ private: float snap_rotate_value; float snap_scale_value; + Ref<ArrayMesh> selection_box_xray; Ref<ArrayMesh> selection_box; RID indicators; RID indicators_instance; @@ -626,13 +621,12 @@ private: AABB preview_bounds; struct Gizmo { - bool visible; - float scale; + bool visible = false; + float scale = 0; Transform transform; } gizmo; enum MenuOption { - MENU_TOOL_SELECT, MENU_TOOL_MOVE, MENU_TOOL_ROTATE, @@ -701,7 +695,7 @@ private: HBoxContainer *hbc_menu; - void _generate_selection_box(); + void _generate_selection_boxes(); UndoRedo *undo_redo; int camera_override_viewport_id; @@ -864,12 +858,12 @@ protected: public: void create_material(const String &p_name, const Color &p_color, bool p_billboard = false, bool p_on_top = false, bool p_use_vertex_color = false); void create_icon_material(const String &p_name, const Ref<Texture2D> &p_texture, bool p_on_top = false, const Color &p_albedo = Color(1, 1, 1, 1)); - void create_handle_material(const String &p_name, bool p_billboard = false); + void create_handle_material(const String &p_name, bool p_billboard = false, const Ref<Texture2D> &p_texture = nullptr); void add_material(const String &p_name, Ref<StandardMaterial3D> p_material); Ref<StandardMaterial3D> get_material(const String &p_name, const Ref<EditorNode3DGizmo> &p_gizmo = Ref<EditorNode3DGizmo>()); - virtual String get_name() const; + virtual String get_gizmo_name() const; virtual int get_priority() const; virtual bool can_be_hidden() const; virtual bool is_selectable_when_hidden() const; diff --git a/editor/plugins/ot_features_plugin.cpp b/editor/plugins/ot_features_plugin.cpp new file mode 100644 index 0000000000..3478148521 --- /dev/null +++ b/editor/plugins/ot_features_plugin.cpp @@ -0,0 +1,213 @@ +/*************************************************************************/ +/* ot_features_plugin.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "ot_features_plugin.h" + +#include "editor/editor_scale.h" + +void OpenTypeFeaturesEditor::_value_changed(double val) { + if (setting) { + return; + } + + emit_changed(get_edited_property(), spin->get_value()); +} + +void OpenTypeFeaturesEditor::update_property() { + double val = get_edited_object()->get(get_edited_property()); + setting = true; + spin->set_value(val); + setting = false; +} + +void OpenTypeFeaturesEditor::_notification(int p_what) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + Color base = get_theme_color("accent_color", "Editor"); + + button->set_icon(get_theme_icon("Remove", "EditorIcons")); + button->set_size(get_theme_icon("Remove", "EditorIcons")->get_size()); + spin->set_custom_label_color(true, base); + } +} + +void OpenTypeFeaturesEditor::_remove_feature() { + get_edited_object()->set(get_edited_property(), -1); +} + +void OpenTypeFeaturesEditor::_bind_methods() { +} + +OpenTypeFeaturesEditor::OpenTypeFeaturesEditor() { + HBoxContainer *bc = memnew(HBoxContainer); + add_child(bc); + + spin = memnew(EditorSpinSlider); + spin->set_flat(true); + bc->add_child(spin); + add_focusable(spin); + spin->connect("value_changed", callable_mp(this, &OpenTypeFeaturesEditor::_value_changed)); + spin->set_h_size_flags(SIZE_EXPAND_FILL); + + spin->set_min(0); + spin->set_max(65536); + spin->set_step(1); + spin->set_hide_slider(false); + spin->set_allow_greater(false); + spin->set_allow_lesser(false); + + button = memnew(Button); + button->set_tooltip(RTR("Remove feature")); + button->set_flat(true); + bc->add_child(button); + + button->connect("pressed", callable_mp(this, &OpenTypeFeaturesEditor::_remove_feature)); + + setting = false; +} + +/*************************************************************************/ + +void OpenTypeFeaturesAdd::_add_feature(int p_option) { + get_edited_object()->set("opentype_features/" + TS->tag_to_name(p_option), 1); +} + +void OpenTypeFeaturesAdd::update_property() { + menu->clear(); + menu_ss->clear(); + menu_cv->clear(); + menu_cu->clear(); + bool have_ss = false; + bool have_cv = false; + bool have_cu = false; + Dictionary features = Object::cast_to<Control>(get_edited_object())->get_theme_font("font")->get_feature_list(); + for (const Variant *ftr = features.next(nullptr); ftr != nullptr; ftr = features.next(ftr)) { + String ftr_name = TS->tag_to_name(*ftr); + if (ftr_name.begins_with("stylistic_set_")) { + menu_ss->add_item(ftr_name.capitalize(), (int32_t)*ftr); + have_ss = true; + } else if (ftr_name.begins_with("character_variant_")) { + menu_cv->add_item(ftr_name.capitalize(), (int32_t)*ftr); + have_cv = true; + } else if (ftr_name.begins_with("custom_")) { + menu_cu->add_item(ftr_name.replace("custom_", ""), (int32_t)*ftr); + have_cu = true; + } else { + menu->add_item(ftr_name.capitalize(), (int32_t)*ftr); + } + } + if (have_ss) { + menu->add_submenu_item(RTR("Stylistic Sets"), "SSMenu"); + } + if (have_cv) { + menu->add_submenu_item(RTR("Character Variants"), "CVMenu"); + } + if (have_cu) { + menu->add_submenu_item(RTR("Custom"), "CUMenu"); + } +} + +void OpenTypeFeaturesAdd::_features_menu() { + Size2 size = get_size(); + menu->set_position(get_screen_position() + Size2(0, size.height * get_global_transform().get_scale().y)); + menu->popup(); +} + +void OpenTypeFeaturesAdd::_notification(int p_what) { + if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) { + set_label(""); + button->set_icon(get_theme_icon("Add", "EditorIcons")); + button->set_size(get_theme_icon("Add", "EditorIcons")->get_size()); + } +} + +void OpenTypeFeaturesAdd::_bind_methods() { +} + +OpenTypeFeaturesAdd::OpenTypeFeaturesAdd() { + menu = memnew(PopupMenu); + add_child(menu); + + menu_cv = memnew(PopupMenu); + menu_cv->set_name("CVMenu"); + menu->add_child(menu_cv); + + menu_ss = memnew(PopupMenu); + menu_ss->set_name("SSMenu"); + menu->add_child(menu_ss); + + menu_cu = memnew(PopupMenu); + menu_cu->set_name("CUMenu"); + menu->add_child(menu_cu); + + button = memnew(Button); + button->set_flat(true); + button->set_text(RTR("Add feature...")); + button->set_tooltip(RTR("Add feature...")); + add_child(button); + + button->connect("pressed", callable_mp(this, &OpenTypeFeaturesAdd::_features_menu)); + menu->connect("id_pressed", callable_mp(this, &OpenTypeFeaturesAdd::_add_feature)); + menu_cv->connect("id_pressed", callable_mp(this, &OpenTypeFeaturesAdd::_add_feature)); + menu_ss->connect("id_pressed", callable_mp(this, &OpenTypeFeaturesAdd::_add_feature)); + menu_cu->connect("id_pressed", callable_mp(this, &OpenTypeFeaturesAdd::_add_feature)); +} + +/*************************************************************************/ + +bool EditorInspectorPluginOpenTypeFeatures::can_handle(Object *p_object) { + return (Object::cast_to<Control>(p_object) != nullptr); +} + +void EditorInspectorPluginOpenTypeFeatures::parse_begin(Object *p_object) { +} + +void EditorInspectorPluginOpenTypeFeatures::parse_category(Object *p_object, const String &p_parse_category) { +} + +bool EditorInspectorPluginOpenTypeFeatures::parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage, bool p_wide) { + if (p_path == "opentype_features/_new") { + OpenTypeFeaturesAdd *editor = memnew(OpenTypeFeaturesAdd); + add_property_editor(p_path, editor); + return true; + } else if (p_path.begins_with("opentype_features")) { + OpenTypeFeaturesEditor *editor = memnew(OpenTypeFeaturesEditor); + add_property_editor(p_path, editor); + return true; + } + return false; +} + +/*************************************************************************/ + +OpenTypeFeaturesEditorPlugin::OpenTypeFeaturesEditorPlugin(EditorNode *p_node) { + Ref<EditorInspectorPluginOpenTypeFeatures> ftr_plugin; + ftr_plugin.instance(); + EditorInspector::add_inspector_plugin(ftr_plugin); +} diff --git a/editor/plugins/ot_features_plugin.h b/editor/plugins/ot_features_plugin.h new file mode 100644 index 0000000000..5b5f367b24 --- /dev/null +++ b/editor/plugins/ot_features_plugin.h @@ -0,0 +1,105 @@ +/*************************************************************************/ +/* ot_features_plugin.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef OT_FEATURES_PLUGIN_H +#define OT_FEATURES_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "editor/editor_properties.h" + +/*************************************************************************/ + +class OpenTypeFeaturesEditor : public EditorProperty { + GDCLASS(OpenTypeFeaturesEditor, EditorProperty); + EditorSpinSlider *spin; + bool setting = true; + void _value_changed(double p_val); + Button *button = nullptr; + + void _remove_feature(); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + virtual void update_property() override; + OpenTypeFeaturesEditor(); +}; + +/*************************************************************************/ + +class OpenTypeFeaturesAdd : public EditorProperty { + GDCLASS(OpenTypeFeaturesAdd, EditorProperty); + + Button *button = nullptr; + PopupMenu *menu = nullptr; + PopupMenu *menu_ss = nullptr; + PopupMenu *menu_cv = nullptr; + PopupMenu *menu_cu = nullptr; + + void _add_feature(int p_option); + void _features_menu(); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + virtual void update_property() override; + + OpenTypeFeaturesAdd(); +}; + +/*************************************************************************/ + +class EditorInspectorPluginOpenTypeFeatures : public EditorInspectorPlugin { + GDCLASS(EditorInspectorPluginOpenTypeFeatures, EditorInspectorPlugin); + +public: + virtual bool can_handle(Object *p_object) override; + virtual void parse_begin(Object *p_object) override; + virtual void parse_category(Object *p_object, const String &p_parse_category) override; + virtual bool parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage, bool p_wide) override; +}; + +/*************************************************************************/ + +class OpenTypeFeaturesEditorPlugin : public EditorPlugin { + GDCLASS(OpenTypeFeaturesEditorPlugin, EditorPlugin); + +public: + OpenTypeFeaturesEditorPlugin(EditorNode *p_node); + + virtual String get_name() const override { return "OpenTypeFeatures"; } +}; + +#endif // OT_FEATURES_PLUGIN_H diff --git a/editor/plugins/path_2d_editor_plugin.h b/editor/plugins/path_2d_editor_plugin.h index 6a7dffc7f8..8a420d7c8d 100644 --- a/editor/plugins/path_2d_editor_plugin.h +++ b/editor/plugins/path_2d_editor_plugin.h @@ -76,7 +76,6 @@ class Path2DEditor : public HBoxContainer { }; enum Action { - ACTION_NONE, ACTION_MOVING_POINT, ACTION_MOVING_IN, diff --git a/editor/plugins/path_3d_editor_plugin.cpp b/editor/plugins/path_3d_editor_plugin.cpp index f53130c24d..043693801e 100644 --- a/editor/plugins/path_3d_editor_plugin.cpp +++ b/editor/plugins/path_3d_editor_plugin.cpp @@ -224,6 +224,7 @@ void Path3DGizmo::redraw() { Ref<StandardMaterial3D> path_material = gizmo_plugin->get_material("path_material", this); Ref<StandardMaterial3D> path_thin_material = gizmo_plugin->get_material("path_thin_material", this); Ref<StandardMaterial3D> handles_material = gizmo_plugin->get_material("handles"); + Ref<StandardMaterial3D> sec_handles_material = gizmo_plugin->get_material("sec_handles"); Ref<Curve3D> c = path->get_curve(); if (c.is_null()) { @@ -281,7 +282,7 @@ void Path3DGizmo::redraw() { add_handles(handles, handles_material); } if (sec_handles.size()) { - add_handles(sec_handles, handles_material, false, true); + add_handles(sec_handles, sec_handles_material, false, true); } } } @@ -289,6 +290,8 @@ void Path3DGizmo::redraw() { Path3DGizmo::Path3DGizmo(Path3D *p_path) { path = p_path; set_spatial_node(p_path); + orig_in_length = 0; + orig_out_length = 0; } bool Path3DEditorPlugin::forward_spatial_gui_input(Camera3D *p_camera, const Ref<InputEvent> &p_event) { @@ -629,7 +632,7 @@ Ref<EditorNode3DGizmo> Path3DGizmoPlugin::create_gizmo(Node3D *p_spatial) { return ref; } -String Path3DGizmoPlugin::get_name() const { +String Path3DGizmoPlugin::get_gizmo_name() const { return "Path3D"; } @@ -641,5 +644,6 @@ Path3DGizmoPlugin::Path3DGizmoPlugin() { Color path_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/path", Color(0.5, 0.5, 1.0, 0.8)); create_material("path_material", path_color); create_material("path_thin_material", Color(0.5, 0.5, 0.5)); - create_handle_material("handles"); + create_handle_material("handles", false, Node3DEditor::get_singleton()->get_theme_icon("EditorPathSmoothHandle", "EditorIcons")); + create_handle_material("sec_handles", false, Node3DEditor::get_singleton()->get_theme_icon("EditorCurveHandle", "EditorIcons")); } diff --git a/editor/plugins/path_3d_editor_plugin.h b/editor/plugins/path_3d_editor_plugin.h index be275944a6..3b92a59143 100644 --- a/editor/plugins/path_3d_editor_plugin.h +++ b/editor/plugins/path_3d_editor_plugin.h @@ -59,7 +59,7 @@ protected: Ref<EditorNode3DGizmo> create_gizmo(Node3D *p_spatial) override; public: - String get_name() const override; + String get_gizmo_name() const override; int get_priority() const override; Path3DGizmoPlugin(); }; diff --git a/editor/plugins/resource_preloader_editor_plugin.cpp b/editor/plugins/resource_preloader_editor_plugin.cpp index f317aebe74..684d43e963 100644 --- a/editor/plugins/resource_preloader_editor_plugin.cpp +++ b/editor/plugins/resource_preloader_editor_plugin.cpp @@ -62,7 +62,7 @@ void ResourcePreloaderEditor::_files_load_request(const Vector<String> &p_paths) dialog->set_text(TTR("ERROR: Couldn't load resource!")); dialog->set_title(TTR("Error!")); //dialog->get_cancel()->set_text("Close"); - dialog->get_ok()->set_text(TTR("Close")); + dialog->get_ok_button()->set_text(TTR("Close")); dialog->popup_centered(); return; ///beh should show an error i guess } @@ -144,7 +144,7 @@ void ResourcePreloaderEditor::_paste_pressed() { if (!r.is_valid()) { dialog->set_text(TTR("Resource clipboard is empty!")); dialog->set_title(TTR("Error!")); - dialog->get_ok()->set_text(TTR("Close")); + dialog->get_ok_button()->set_text(TTR("Close")); dialog->popup_centered(); return; ///beh should show an error i guess } diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 8dd7d6d6e2..e0a6fe16f7 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -234,15 +234,15 @@ static bool _is_built_in_script(Script *p_script) { class EditorScriptCodeCompletionCache : public ScriptCodeCompletionCache { struct Cache { - uint64_t time_loaded; + uint64_t time_loaded = 0; RES cache; }; Map<String, Cache> cached; public: - uint64_t max_time_cache; - int max_cache_size; + uint64_t max_time_cache = 5 * 60 * 1000; //minutes, five + int max_cache_size = 128; void cleanup() { List<Map<String, Cache>::Element *> to_clean; @@ -292,11 +292,6 @@ public: return E->get().cache; } - EditorScriptCodeCompletionCache() { - max_cache_size = 128; - max_time_cache = 5 * 60 * 1000; //minutes, five - } - virtual ~EditorScriptCodeCompletionCache() {} }; @@ -343,7 +338,7 @@ void ScriptEditorQuickOpen::_update_search() { } } - get_ok()->set_disabled(root->get_children() == nullptr); + get_ok_button()->set_disabled(root->get_children() == nullptr); } void ScriptEditorQuickOpen::_confirmed() { @@ -387,8 +382,8 @@ ScriptEditorQuickOpen::ScriptEditorQuickOpen() { search_box->connect("gui_input", callable_mp(this, &ScriptEditorQuickOpen::_sbox_input)); search_options = memnew(Tree); vbc->add_margin_child(TTR("Matches:"), search_options, true); - get_ok()->set_text(TTR("Open")); - get_ok()->set_disabled(true); + get_ok_button()->set_text(TTR("Open")); + get_ok_button()->set_disabled(true); register_text_enter(search_box); set_hide_on_ok(false); search_options->connect("item_activated", callable_mp(this, &ScriptEditorQuickOpen::_confirmed)); @@ -1249,13 +1244,35 @@ void ScriptEditor::_menu_option(int p_option) { RES resource = current->get_edited_resource(); Ref<TextFile> text_file = resource; + Ref<Script> script = resource; + if (text_file != nullptr) { current->apply_code(); _save_text_file(text_file, text_file->get_path()); break; } + + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + if (EditorHelp::get_doc_data()->has_doc(doc.name)) { + EditorHelp::get_doc_data()->remove_doc(doc.name); + } + } + } + editor->save_resource(resource); + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + EditorHelp::get_doc_data()->add_doc(doc); + update_doc(doc.name); + } + } + } break; case FILE_SAVE_AS: { if (trim_trailing_whitespace_on_save) { @@ -1274,6 +1291,8 @@ void ScriptEditor::_menu_option(int p_option) { RES resource = current->get_edited_resource(); Ref<TextFile> text_file = resource; + Ref<Script> script = resource; + if (text_file != nullptr) { file_dialog->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); @@ -1289,9 +1308,27 @@ void ScriptEditor::_menu_option(int p_option) { break; } + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + if (EditorHelp::get_doc_data()->has_doc(doc.name)) { + EditorHelp::get_doc_data()->remove_doc(doc.name); + } + } + } + editor->push_item(resource.ptr()); editor->save_resource_as(resource); + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + EditorHelp::get_doc_data()->add_doc(doc); + update_doc(doc.name); + } + } } break; case FILE_TOOL_RELOAD: @@ -1485,12 +1522,19 @@ void ScriptEditor::_notification(int p_what) { EditorFileSystem::get_singleton()->connect("filesystem_changed", callable_mp(this, &ScriptEditor::_filesystem_changed)); [[fallthrough]]; } + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_THEME_CHANGED: { help_search->set_icon(get_theme_icon("HelpSearch", "EditorIcons")); site_search->set_icon(get_theme_icon("Instance", "EditorIcons")); - script_forward->set_icon(get_theme_icon("Forward", "EditorIcons")); - script_back->set_icon(get_theme_icon("Back", "EditorIcons")); + if (is_layout_rtl()) { + script_forward->set_icon(get_theme_icon("Back", "EditorIcons")); + script_back->set_icon(get_theme_icon("Forward", "EditorIcons")); + } else { + script_forward->set_icon(get_theme_icon("Forward", "EditorIcons")); + script_back->set_icon(get_theme_icon("Back", "EditorIcons")); + } members_overview_alphabeta_sort_button->set_icon(get_theme_icon("Sort", "EditorIcons")); @@ -1597,17 +1641,6 @@ void ScriptEditor::get_breakpoints(List<String> *p_breakpoints) { } } -void ScriptEditor::ensure_focus_current() { - if (!is_inside_tree()) { - return; - } - - ScriptEditorBase *current = _get_current_editor(); - if (current) { - current->ensure_focus(); - } -} - void ScriptEditor::_members_overview_selected(int p_idx) { ScriptEditorBase *se = _get_current_editor(); if (!se) { @@ -1674,11 +1707,11 @@ struct _ScriptEditorItemData { String name; String sort_key; Ref<Texture2D> icon; - int index; + int index = 0; String tooltip; - bool used; - int category; - Node *ref; + bool used = false; + int category = 0; + Node *ref = nullptr; bool operator<(const _ScriptEditorItemData &id) const { if (category == id.category) { @@ -2311,11 +2344,33 @@ void ScriptEditor::save_all_scripts() { if (edited_res->get_path() != "" && edited_res->get_path().find("local://") == -1 && edited_res->get_path().find("::") == -1) { Ref<TextFile> text_file = edited_res; + Ref<Script> script = edited_res; + if (text_file != nullptr) { _save_text_file(text_file, text_file->get_path()); continue; } + + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + if (EditorHelp::get_doc_data()->has_doc(doc.name)) { + EditorHelp::get_doc_data()->remove_doc(doc.name); + } + } + } + editor->save_resource(edited_res); //external script, save it + + if (script != nullptr) { + const Vector<DocData::ClassDoc> &documentations = script->get_documentation(); + for (int j = 0; j < documentations.size(); j++) { + const DocData::ClassDoc &doc = documentations.get(j); + EditorHelp::get_doc_data()->add_doc(doc); + update_doc(doc.name); + } + } } } @@ -2637,7 +2692,7 @@ void ScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Co } } -void ScriptEditor::_unhandled_input(const Ref<InputEvent> &p_event) { +void ScriptEditor::_unhandled_key_input(const Ref<InputEvent> &p_event) { if (!is_visible_in_tree() || !p_event->is_pressed() || p_event->is_echo()) { return; } @@ -2893,6 +2948,18 @@ void ScriptEditor::_help_class_goto(const String &p_desc) { _save_layout(); } +void ScriptEditor::update_doc(const String &p_name) { + ERR_FAIL_COND(!EditorHelp::get_doc_data()->has_doc(p_name)); + + for (int i = 0; i < tab_container->get_child_count(); i++) { + EditorHelp *eh = Object::cast_to<EditorHelp>(tab_container->get_child(i)); + if (eh && eh->get_class() == p_name) { + eh->update_doc(); + return; + } + } +} + void ScriptEditor::_update_selected_editor_menu() { for (int i = 0; i < tab_container->get_child_count(); i++) { bool current = tab_container->get_current_tab() == i; @@ -3165,7 +3232,7 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_update_script_connections", &ScriptEditor::_update_script_connections); ClassDB::bind_method("_help_class_open", &ScriptEditor::_help_class_open); ClassDB::bind_method("_live_auto_reload_running_scripts", &ScriptEditor::_live_auto_reload_running_scripts); - ClassDB::bind_method("_unhandled_input", &ScriptEditor::_unhandled_input); + ClassDB::bind_method("_unhandled_key_input", &ScriptEditor::_unhandled_key_input); ClassDB::bind_method("_update_members_overview", &ScriptEditor::_update_members_overview); ClassDB::bind_method("_update_recent_scripts", &ScriptEditor::_update_recent_scripts); @@ -3292,12 +3359,13 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { ED_SHORTCUT("script_editor/window_move_down", TTR("Move Down"), KEY_MASK_SHIFT | KEY_MASK_ALT | KEY_DOWN); ED_SHORTCUT("script_editor/next_script", TTR("Next script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_PERIOD); // these should be KEY_GREATER and KEY_LESS but those don't work ED_SHORTCUT("script_editor/prev_script", TTR("Previous script"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_COMMA); - set_process_unhandled_input(true); + set_process_unhandled_key_input(true); file_menu = memnew(MenuButton); - menu_hb->add_child(file_menu); file_menu->set_text(TTR("File")); file_menu->set_switch_on_hover(true); + file_menu->set_shortcut_context(this); + menu_hb->add_child(file_menu); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New Script...")), FILE_NEW); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new_textfile", TTR("New Text File...")), FILE_NEW_TEXTFILE); @@ -3352,10 +3420,11 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->connect("id_pressed", callable_mp(this, &ScriptEditor::_menu_option)); script_search_menu = memnew(MenuButton); - menu_hb->add_child(script_search_menu); script_search_menu->set_text(TTR("Search")); script_search_menu->set_switch_on_hover(true); + script_search_menu->set_shortcut_context(this); script_search_menu->get_popup()->connect("id_pressed", callable_mp(this, &ScriptEditor::_menu_option)); + menu_hb->add_child(script_search_menu); MenuButton *debug_menu = memnew(MenuButton); menu_hb->add_child(debug_menu); @@ -3413,7 +3482,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { tab_container->connect("tab_changed", callable_mp(this, &ScriptEditor::_tab_changed)); erase_tab_confirm = memnew(ConfirmationDialog); - erase_tab_confirm->get_ok()->set_text(TTR("Save")); + erase_tab_confirm->get_ok_button()->set_text(TTR("Save")); erase_tab_confirm->add_button(TTR("Discard"), DisplayServer::get_singleton()->get_swap_cancel_ok(), "discard"); erase_tab_confirm->connect("confirmed", callable_mp(this, &ScriptEditor::_close_current_tab)); erase_tab_confirm->connect("custom_action", callable_mp(this, &ScriptEditor::_close_discard_current_tab)); @@ -3446,7 +3515,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { disk_changed_list->set_v_size_flags(SIZE_EXPAND_FILL); disk_changed->connect("confirmed", callable_mp(this, &ScriptEditor::_reload_scripts)); - disk_changed->get_ok()->set_text(TTR("Reload")); + disk_changed->get_ok_button()->set_text(TTR("Reload")); disk_changed->add_button(TTR("Resave"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "resave"); disk_changed->connect("custom_action", callable_mp(this, &ScriptEditor::_resave_scripts)); diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index 32f47239ef..aafd8cba18 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -291,7 +291,7 @@ class ScriptEditor : public PanelContainer { Vector<Ref<EditorSyntaxHighlighter>> syntax_highlighters; struct ScriptHistory { - Control *control; + Control *control = nullptr; Variant state; }; @@ -402,7 +402,7 @@ class ScriptEditor : public PanelContainer { bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); - void _unhandled_input(const Ref<InputEvent> &p_event); + void _unhandled_key_input(const Ref<InputEvent> &p_event); void _script_list_gui_input(const Ref<InputEvent> &ev); void _make_script_list_context_menu(); @@ -453,7 +453,6 @@ public: bool toggle_scripts_panel(); bool is_scripts_panel_toggled(); - void ensure_focus_current(); void apply_scripts() const; void open_script_create_dialog(const String &p_base_name, const String &p_base_path); @@ -482,6 +481,7 @@ public: void close_builtin_scripts_from_scene(const String &p_scene); void goto_help(const String &p_desc) { _help_class_goto(p_desc); } + void update_doc(const String &p_name); bool can_take_away_focus() const; diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 7feb7cb3d3..e854ed4fb3 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -912,6 +912,7 @@ void ScriptTextEditor::update_toggle_scripts_button() { void ScriptTextEditor::_update_connected_methods() { CodeEdit *text_edit = code_editor->get_text_editor(); + text_edit->set_gutter_width(connection_gutter, text_edit->get_row_height()); for (int i = 0; i < text_edit->get_line_count(); i++) { if (text_edit->get_line_gutter_metadata(i, connection_gutter) == "") { continue; @@ -1352,7 +1353,8 @@ void ScriptTextEditor::_change_syntax_highlighter(int p_idx) { void ScriptTextEditor::_notification(int p_what) { switch (p_what) { - case NOTIFICATION_THEME_CHANGED: { + case NOTIFICATION_THEME_CHANGED: + case NOTIFICATION_ENTER_TREE: { code_editor->get_text_editor()->set_gutter_width(connection_gutter, code_editor->get_text_editor()->get_row_height()); } break; default: @@ -1697,6 +1699,8 @@ void ScriptTextEditor::_enable_code_editor() { editor_box->add_child(warnings_panel); warnings_panel->add_theme_font_override( "normal_font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("main", "EditorFonts")); + warnings_panel->add_theme_font_size_override( + "normal_font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("main_size", "EditorFonts")); warnings_panel->connect("meta_clicked", callable_mp(this, &ScriptTextEditor::_warning_clicked)); add_child(context_menu); @@ -1845,6 +1849,7 @@ ScriptTextEditor::ScriptTextEditor() { edit_menu = memnew(MenuButton); edit_menu->set_text(TTR("Edit")); edit_menu->set_switch_on_hover(true); + edit_menu->set_shortcut_context(this); convert_case = memnew(PopupMenu); convert_case->set_name("convert_case"); @@ -1864,10 +1869,12 @@ ScriptTextEditor::ScriptTextEditor() { search_menu = memnew(MenuButton); search_menu->set_text(TTR("Search")); search_menu->set_switch_on_hover(true); + search_menu->set_shortcut_context(this); goto_menu = memnew(MenuButton); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); + goto_menu->set_shortcut_context(this); bookmarks_menu = memnew(PopupMenu); bookmarks_menu->set_name("Bookmarks"); diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index 29db284b44..d24dcdef83 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -372,7 +372,6 @@ void ShaderEditor::_bind_methods() { void ShaderEditor::ensure_select_current() { /* if (tab_container->get_child_count() && tab_container->get_current_tab()>=0) { - ShaderTextEditor *ste = Object::cast_to<ShaderTextEditor>(tab_container->get_child(tab_container->get_current_tab())); if (!ste) return; @@ -582,6 +581,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { HBoxContainer *hbc = memnew(HBoxContainer); edit_menu = memnew(MenuButton); + edit_menu->set_shortcut_context(this); edit_menu->set_text(TTR("Edit")); edit_menu->set_switch_on_hover(true); @@ -606,6 +606,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { edit_menu->get_popup()->connect("id_pressed", callable_mp(this, &ShaderEditor::_menu_option)); search_menu = memnew(MenuButton); + search_menu->set_shortcut_context(this); search_menu->set_text(TTR("Search")); search_menu->set_switch_on_hover(true); @@ -616,6 +617,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { search_menu->get_popup()->connect("id_pressed", callable_mp(this, &ShaderEditor::_menu_option)); MenuButton *goto_menu = memnew(MenuButton); + goto_menu->set_shortcut_context(this); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); goto_menu->get_popup()->connect("id_pressed", callable_mp(this, &ShaderEditor::_menu_option)); @@ -659,7 +661,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { vbc->add_child(dl); disk_changed->connect("confirmed", callable_mp(this, &ShaderEditor::_reload_shader_from_disk)); - disk_changed->get_ok()->set_text(TTR("Reload")); + disk_changed->get_ok_button()->set_text(TTR("Reload")); disk_changed->add_button(TTR("Resave"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "resave"); disk_changed->connect("custom_action", callable_mp(this, &ShaderEditor::save_external_data)); @@ -712,6 +714,8 @@ ShaderEditorPlugin::ShaderEditorPlugin(EditorNode *p_node) { shader_editor->set_custom_minimum_size(Size2(0, 300) * EDSCALE); button = editor->add_bottom_panel_item(TTR("Shader"), shader_editor); button->hide(); + + _2d = false; } ShaderEditorPlugin::~ShaderEditorPlugin() { diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h index 904aed186a..e81a782ac8 100644 --- a/editor/plugins/shader_editor_plugin.h +++ b/editor/plugins/shader_editor_plugin.h @@ -69,7 +69,6 @@ class ShaderEditor : public PanelContainer { GDCLASS(ShaderEditor, PanelContainer); enum { - EDIT_UNDO, EDIT_REDO, EDIT_CUT, diff --git a/editor/plugins/skeleton_3d_editor_plugin.cpp b/editor/plugins/skeleton_3d_editor_plugin.cpp index 52da8dea19..22f50c0689 100644 --- a/editor/plugins/skeleton_3d_editor_plugin.cpp +++ b/editor/plugins/skeleton_3d_editor_plugin.cpp @@ -114,10 +114,11 @@ void BoneTransformEditor::_notification(int p_what) { } case NOTIFICATION_SORT_CHILDREN: { const Ref<Font> font = get_theme_font("font", "Tree"); + int font_size = get_theme_font_size("font_size", "Tree"); Point2 buffer; buffer.x += get_theme_constant("inspector_margin", "Editor"); - buffer.y += font->get_height(); + buffer.y += font->get_height(font_size); buffer.y += get_theme_constant("vseparation", "Tree"); const float vector_height = translation_property->get_size().y; @@ -263,12 +264,7 @@ void BoneTransformEditor::_update_transform_properties(Transform tform) { } BoneTransformEditor::BoneTransformEditor(Skeleton3D *p_skeleton) : - skeleton(p_skeleton), - key_button(nullptr), - enabled_checkbox(nullptr), - keyable(false), - toggle_enabled(false), - updating(false) { + skeleton(p_skeleton) { undo_redo = EditorNode::get_undo_redo(); } diff --git a/editor/plugins/skeleton_3d_editor_plugin.h b/editor/plugins/skeleton_3d_editor_plugin.h index 7843fc1754..44dc1bc36e 100644 --- a/editor/plugins/skeleton_3d_editor_plugin.h +++ b/editor/plugins/skeleton_3d_editor_plugin.h @@ -47,13 +47,13 @@ class EditorPropertyVector3; class BoneTransformEditor : public VBoxContainer { GDCLASS(BoneTransformEditor, VBoxContainer); - EditorInspectorSection *section; + EditorInspectorSection *section = nullptr; - EditorPropertyVector3 *translation_property; - EditorPropertyVector3 *rotation_property; - EditorPropertyVector3 *scale_property; - EditorInspectorSection *transform_section; - EditorPropertyTransform *transform_property; + EditorPropertyVector3 *translation_property = nullptr; + EditorPropertyVector3 *rotation_property = nullptr; + EditorPropertyVector3 *scale_property = nullptr; + EditorInspectorSection *transform_section = nullptr; + EditorPropertyTransform *transform_property = nullptr; Rect2 background_rects[5]; @@ -62,12 +62,12 @@ class BoneTransformEditor : public VBoxContainer { UndoRedo *undo_redo; - Button *key_button; - CheckBox *enabled_checkbox; + Button *key_button = nullptr; + CheckBox *enabled_checkbox = nullptr; - bool keyable; - bool toggle_enabled; - bool updating; + bool keyable = false; + bool toggle_enabled = false; + bool updating = false; String label; @@ -128,7 +128,6 @@ class Skeleton3DEditor : public VBoxContainer { struct BoneInfo { PhysicalBone3D *physical_bone = nullptr; Transform relative_rest; // Relative to skeleton node - BoneInfo() {} }; EditorNode *editor; @@ -136,20 +135,20 @@ class Skeleton3DEditor : public VBoxContainer { Skeleton3D *skeleton; - Tree *joint_tree; - BoneTransformEditor *rest_editor; - BoneTransformEditor *pose_editor; - BoneTransformEditor *custom_pose_editor; + Tree *joint_tree = nullptr; + BoneTransformEditor *rest_editor = nullptr; + BoneTransformEditor *pose_editor = nullptr; + BoneTransformEditor *custom_pose_editor = nullptr; - MenuButton *options; - EditorFileDialog *file_dialog; + MenuButton *options = nullptr; + EditorFileDialog *file_dialog = nullptr; - UndoRedo *undo_redo; + UndoRedo *undo_redo = nullptr; void _on_click_option(int p_option); void _file_selected(const String &p_file); - EditorFileDialog *file_export_lib; + EditorFileDialog *file_export_lib = nullptr; void update_joint_tree(); void update_editors(); diff --git a/editor/plugins/sprite_2d_editor_plugin.cpp b/editor/plugins/sprite_2d_editor_plugin.cpp index f5fafb68a5..1be6b979b1 100644 --- a/editor/plugins/sprite_2d_editor_plugin.cpp +++ b/editor/plugins/sprite_2d_editor_plugin.cpp @@ -120,7 +120,7 @@ void Sprite2DEditor::_menu_option(int p_option) { switch (p_option) { case MENU_OPTION_CONVERT_TO_MESH_2D: { - debug_uv_dialog->get_ok()->set_text(TTR("Create Mesh2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create Mesh2D")); debug_uv_dialog->set_title(TTR("Mesh2D Preview")); _update_mesh_data(); @@ -129,7 +129,7 @@ void Sprite2DEditor::_menu_option(int p_option) { } break; case MENU_OPTION_CONVERT_TO_POLYGON_2D: { - debug_uv_dialog->get_ok()->set_text(TTR("Create Polygon2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create Polygon2D")); debug_uv_dialog->set_title(TTR("Polygon2D Preview")); _update_mesh_data(); @@ -137,7 +137,7 @@ void Sprite2DEditor::_menu_option(int p_option) { debug_uv->update(); } break; case MENU_OPTION_CREATE_COLLISION_POLY_2D: { - debug_uv_dialog->get_ok()->set_text(TTR("Create CollisionPolygon2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create CollisionPolygon2D")); debug_uv_dialog->set_title(TTR("CollisionPolygon2D Preview")); _update_mesh_data(); @@ -146,7 +146,7 @@ void Sprite2DEditor::_menu_option(int p_option) { } break; case MENU_OPTION_CREATE_LIGHT_OCCLUDER_2D: { - debug_uv_dialog->get_ok()->set_text(TTR("Create LightOccluder2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create LightOccluder2D")); debug_uv_dialog->set_title(TTR("LightOccluder2D Preview")); _update_mesh_data(); @@ -515,7 +515,7 @@ Sprite2DEditor::Sprite2DEditor() { add_child(err_dialog); debug_uv_dialog = memnew(ConfirmationDialog); - debug_uv_dialog->get_ok()->set_text(TTR("Create Mesh2D")); + debug_uv_dialog->get_ok_button()->set_text(TTR("Create Mesh2D")); debug_uv_dialog->set_title("Mesh 2D Preview"); VBoxContainer *vb = memnew(VBoxContainer); debug_uv_dialog->add_child(vb); diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index 69a8a8d92c..b79d829c34 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -74,8 +74,8 @@ void SpriteFramesEditor::_sheet_preview_draw() { } if (frames_selected.size() == 0) { - split_sheet_dialog->get_ok()->set_disabled(true); - split_sheet_dialog->get_ok()->set_text(TTR("No Frames Selected")); + split_sheet_dialog->get_ok_button()->set_disabled(true); + split_sheet_dialog->get_ok_button()->set_text(TTR("No Frames Selected")); return; } @@ -97,8 +97,8 @@ void SpriteFramesEditor::_sheet_preview_draw() { split_sheet_preview->draw_rect(Rect2(x + 5, y + 5, width - 10, height - 10), Color(0, 0, 0, 1), false); } - split_sheet_dialog->get_ok()->set_disabled(false); - split_sheet_dialog->get_ok()->set_text(vformat(TTR("Add %d Frame(s)"), frames_selected.size())); + split_sheet_dialog->get_ok_button()->set_disabled(false); + split_sheet_dialog->get_ok_button()->set_text(vformat(TTR("Add %d Frame(s)"), frames_selected.size())); } void SpriteFramesEditor::_sheet_preview_input(const Ref<InputEvent> &p_event) { @@ -310,7 +310,7 @@ void SpriteFramesEditor::_file_load_request(const Vector<String> &p_path, int p_ dialog->set_title(TTR("Error!")); //dialog->get_cancel()->set_text("Close"); - dialog->get_ok()->set_text(TTR("Close")); + dialog->get_ok_button()->set_text(TTR("Close")); dialog->popup_centered(); return; ///beh should show an error i guess } @@ -361,7 +361,7 @@ void SpriteFramesEditor::_paste_pressed() { dialog->set_text(TTR("Resource clipboard is empty or not a texture!")); dialog->set_title(TTR("Error!")); //dialog->get_cancel()->set_text("Close"); - dialog->get_ok()->set_text(TTR("Close")); + dialog->get_ok_button()->set_text(TTR("Close")); dialog->popup_centered(); return; ///beh should show an error i guess } diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp index 8935b698b6..9894d0e1b0 100644 --- a/editor/plugins/text_editor.cpp +++ b/editor/plugins/text_editor.cpp @@ -563,6 +563,7 @@ TextEditor::TextEditor() { edit_hb = memnew(HBoxContainer); search_menu = memnew(MenuButton); + search_menu->set_shortcut_context(this); edit_hb->add_child(search_menu); search_menu->set_text(TTR("Search")); search_menu->set_switch_on_hover(true); @@ -577,6 +578,7 @@ TextEditor::TextEditor() { search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace_in_files"), REPLACE_IN_FILES); edit_menu = memnew(MenuButton); + edit_menu->set_shortcut_context(this); edit_hb->add_child(edit_menu); edit_menu->set_text(TTR("Edit")); edit_menu->set_switch_on_hover(true); @@ -631,6 +633,7 @@ TextEditor::TextEditor() { set_syntax_highlighter(plain_highlighter); MenuButton *goto_menu = memnew(MenuButton); + goto_menu->set_shortcut_context(this); edit_hb->add_child(goto_menu); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); diff --git a/editor/plugins/texture_editor_plugin.cpp b/editor/plugins/texture_editor_plugin.cpp index f8facb0fd5..9b760c0e50 100644 --- a/editor/plugins/texture_editor_plugin.cpp +++ b/editor/plugins/texture_editor_plugin.cpp @@ -79,6 +79,7 @@ void TextureEditor::_notification(int p_what) { draw_texture_rect(texture, Rect2(ofs_x, ofs_y, tex_width, tex_height)); Ref<Font> font = get_theme_font("font", "Label"); + int font_size = get_theme_font_size("font_size", "Label"); String format; if (Object::cast_to<ImageTexture>(*texture)) { @@ -90,16 +91,16 @@ void TextureEditor::_notification(int p_what) { } String text = itos(texture->get_width()) + "x" + itos(texture->get_height()) + " " + format; - Size2 rect = font->get_string_size(text); + Size2 rect = font->get_string_size(text, font_size); - Vector2 draw_from = size - rect + Size2(-2, font->get_ascent() - 2); + Vector2 draw_from = size - rect + Size2(-2, font->get_ascent(font_size) - 2); if (draw_from.x < 0) { draw_from.x = 0; } - draw_string(font, draw_from + Vector2(2, 2), text, Color(0, 0, 0, 0.5), size.width); - draw_string(font, draw_from - Vector2(2, 2), text, Color(0, 0, 0, 0.5), size.width); - draw_string(font, draw_from, text, Color(1, 1, 1, 1), size.width); + draw_string(font, draw_from + Vector2(2, 2), text, HALIGN_LEFT, size.width, font_size, Color(0, 0, 0, 0.5)); + draw_string(font, draw_from - Vector2(2, 2), text, HALIGN_LEFT, size.width, font_size, Color(0, 0, 0, 0.5)); + draw_string(font, draw_from, text, HALIGN_LEFT, size.width, font_size, Color(1, 1, 1, 1)); } } diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index 932ded6938..e6fb6ba22a 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -78,9 +78,12 @@ void ThemeEditor::_name_menu_about_to_show() { Theme::get_default()->get_font_list(fromtype, &names); break; case 3: - Theme::get_default()->get_color_list(fromtype, &names); + Theme::get_default()->get_font_size_list(fromtype, &names); break; case 4: + Theme::get_default()->get_color_list(fromtype, &names); + break; + case 5: Theme::get_default()->get_constant_list(fromtype, &names); break; } @@ -88,6 +91,7 @@ void ThemeEditor::_name_menu_about_to_show() { theme->get_icon_list(fromtype, &names); theme->get_stylebox_list(fromtype, &names); theme->get_font_list(fromtype, &names); + theme->get_font_size_list(fromtype, &names); theme->get_color_list(fromtype, &names); theme->get_constant_list(fromtype, &names); } @@ -120,6 +124,7 @@ struct _TECategory { Set<RefItem<StyleBox>> stylebox_items; Set<RefItem<Font>> font_items; + Set<Item<int>> font_size_items; Set<RefItem<Texture2D>> icon_items; Set<Item<Color>> color_items; @@ -160,6 +165,15 @@ void ThemeEditor::_save_template_cbk(String fname) { tc.font_items.insert(it); } + List<StringName> font_size_list; + Theme::get_default()->get_font_size_list(E->key(), &font_list); + for (List<StringName>::Element *F = font_size_list.front(); F; F = F->next()) { + _TECategory::Item<int> it; + it.name = F->get(); + it.item = Theme::get_default()->get_font_size(F->get(), E->key()); + tc.font_size_items.insert(it); + } + List<StringName> icon_list; Theme::get_default()->get_icon_list(E->key(), &icon_list); for (List<StringName>::Element *F = icon_list.front(); F; F = F->next()) { @@ -284,6 +298,14 @@ void ThemeEditor::_save_template_cbk(String fname) { file->store_line(E->key() + "." + F->get().name + " = default"); } + if (tc.font_size_items.size()) { + file->store_line("\n; Font Size Items:\n"); + } + + for (Set<_TECategory::Item<int>>::Element *F = tc.font_size_items.front(); F; F = F->next()) { + file->store_line(E->key() + "." + F->get().name + " = default"); + } + if (tc.icon_items.size()) { file->store_line("\n; Icon Items:\n"); } @@ -327,9 +349,12 @@ void ThemeEditor::_dialog_cbk() { theme->set_font(name_edit->get_text(), type_edit->get_text(), Ref<Font>()); break; case 3: - theme->set_color(name_edit->get_text(), type_edit->get_text(), Color()); + theme->set_font_size(name_edit->get_text(), type_edit->get_text(), -1); break; case 4: + theme->set_color(name_edit->get_text(), type_edit->get_text(), Color()); + break; + case 5: theme->set_constant(name_edit->get_text(), type_edit->get_text(), 0); break; } @@ -362,6 +387,13 @@ void ThemeEditor::_dialog_cbk() { } { names.clear(); + Theme::get_default()->get_font_size_list(fromtype, &names); + for (List<StringName>::Element *E = names.front(); E; E = E->next()) { + theme->set_font_size(E->get(), fromtype, Theme::get_default()->get_font_size(E->get(), fromtype)); + } + } + { + names.clear(); Theme::get_default()->get_color_list(fromtype, &names); for (List<StringName>::Element *E = names.front(); E; E = E->next()) { theme->set_color(E->get(), fromtype, Theme::get_default()->get_color(E->get(), fromtype)); @@ -387,9 +419,12 @@ void ThemeEditor::_dialog_cbk() { theme->clear_font(name_edit->get_text(), type_edit->get_text()); break; case 3: - theme->clear_color(name_edit->get_text(), type_edit->get_text()); + theme->clear_font_size(name_edit->get_text(), type_edit->get_text()); break; case 4: + theme->clear_color(name_edit->get_text(), type_edit->get_text()); + break; + case 5: theme->clear_constant(name_edit->get_text(), type_edit->get_text()); break; } @@ -422,6 +457,13 @@ void ThemeEditor::_dialog_cbk() { } { names.clear(); + Theme::get_default()->get_font_size_list(fromtype, &names); + for (List<StringName>::Element *E = names.front(); E; E = E->next()) { + theme->clear_font_size(E->get(), fromtype); + } + } + { + names.clear(); Theme::get_default()->get_color_list(fromtype, &names); for (List<StringName>::Element *E = names.front(); E; E = E->next()) { theme->clear_color(E->get(), fromtype); @@ -465,13 +507,6 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { theme->set_icon(E->get(), type, import ? base_theme->get_icon(E->get(), type) : Ref<Texture2D>()); } - List<StringName> shaders; - base_theme->get_shader_list(type, &shaders); - - for (List<StringName>::Element *E = shaders.front(); E; E = E->next()) { - theme->set_shader(E->get(), type, import ? base_theme->get_shader(E->get(), type) : Ref<Shader>()); - } - List<StringName> styleboxs; base_theme->get_stylebox_list(type, &styleboxs); @@ -486,6 +521,13 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { theme->set_font(E->get(), type, Ref<Font>()); } + List<StringName> font_sizes; + base_theme->get_font_size_list(type, &font_sizes); + + for (List<StringName>::Element *E = font_sizes.front(); E; E = E->next()) { + theme->set_font_size(E->get(), type, base_theme->get_font_size(E->get(), type)); + } + List<StringName> colors; base_theme->get_color_list(type, &colors); @@ -514,7 +556,7 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { if (p_option == POPUP_ADD) { // Add. add_del_dialog->set_title(TTR("Add Item")); - add_del_dialog->get_ok()->set_text(TTR("Add")); + add_del_dialog->get_ok_button()->set_text(TTR("Add")); add_del_dialog->popup_centered(Size2(490, 85) * EDSCALE); base_theme = Theme::get_default(); @@ -522,7 +564,7 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { } else if (p_option == POPUP_CLASS_ADD) { // Add. add_del_dialog->set_title(TTR("Add All Items")); - add_del_dialog->get_ok()->set_text(TTR("Add All")); + add_del_dialog->get_ok_button()->set_text(TTR("Add All")); add_del_dialog->popup_centered(Size2(240, 85) * EDSCALE); base_theme = Theme::get_default(); @@ -534,14 +576,14 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { } else if (p_option == POPUP_REMOVE) { add_del_dialog->set_title(TTR("Remove Item")); - add_del_dialog->get_ok()->set_text(TTR("Remove")); + add_del_dialog->get_ok_button()->set_text(TTR("Remove")); add_del_dialog->popup_centered(Size2(490, 85) * EDSCALE); base_theme = theme; } else if (p_option == POPUP_CLASS_REMOVE) { add_del_dialog->set_title(TTR("Remove All Items")); - add_del_dialog->get_ok()->set_text(TTR("Remove All")); + add_del_dialog->get_ok_button()->set_text(TTR("Remove All")); add_del_dialog->popup_centered(Size2(240, 85) * EDSCALE); base_theme = Theme::get_default(); @@ -860,12 +902,13 @@ ThemeEditor::ThemeEditor() { type_select->add_item(TTR("Icon")); type_select->add_item(TTR("Style")); type_select->add_item(TTR("Font")); + type_select->add_item(TTR("Font Size")); type_select->add_item(TTR("Color")); type_select->add_item(TTR("Constant")); dialog_vbc->add_child(type_select); - add_del_dialog->get_ok()->connect("pressed", callable_mp(this, &ThemeEditor::_dialog_cbk)); + add_del_dialog->get_ok_button()->connect("pressed", callable_mp(this, &ThemeEditor::_dialog_cbk)); file_dialog = memnew(EditorFileDialog); file_dialog->add_filter("*.theme ; " + TTR("Theme File")); diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index 7b516175b2..189e5ec442 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -409,7 +409,7 @@ void TileMapEditor::_sbox_input(const Ref<InputEvent> &p_ie) { // In modern C++ this could have been inside its body. namespace { struct _PaletteEntry { - int id; + int id = 0; String name; bool operator<(const _PaletteEntry &p_rhs) const { @@ -2109,6 +2109,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { paint_button = memnew(Button); paint_button->set_flat(true); paint_button->set_shortcut(ED_SHORTCUT("tile_map_editor/paint_tile", TTR("Paint Tile"), KEY_P)); + paint_button->set_shortcut_context(this); paint_button->set_tooltip(TTR("RMB: Erase")); paint_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_NONE)); paint_button->set_toggle_mode(true); @@ -2117,6 +2118,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { line_button = memnew(Button); line_button->set_flat(true); line_button->set_shortcut(ED_SHORTCUT("tile_map_editor/line_fill", TTR("Line Fill"), KEY_L)); + line_button->set_shortcut_context(this); line_button->set_tooltip(TTR("RMB: Erase")); line_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_LINE_PAINT)); line_button->set_toggle_mode(true); @@ -2125,6 +2127,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { rectangle_button = memnew(Button); rectangle_button->set_flat(true); rectangle_button->set_shortcut(ED_SHORTCUT("tile_map_editor/rectangle_fill", TTR("Rectangle Fill"), KEY_O)); + rectangle_button->set_shortcut_context(this); rectangle_button->set_tooltip(TTR("Shift+LMB: Keep 1:1 proporsions\nRMB: Erase")); rectangle_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_RECTANGLE_PAINT)); rectangle_button->set_toggle_mode(true); @@ -2133,6 +2136,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { bucket_fill_button = memnew(Button); bucket_fill_button->set_flat(true); bucket_fill_button->set_shortcut(ED_SHORTCUT("tile_map_editor/bucket_fill", TTR("Bucket Fill"), KEY_B)); + bucket_fill_button->set_shortcut_context(this); bucket_fill_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_BUCKET)); bucket_fill_button->set_toggle_mode(true); toolbar->add_child(bucket_fill_button); @@ -2140,6 +2144,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { picker_button = memnew(Button); picker_button->set_flat(true); picker_button->set_shortcut(ED_SHORTCUT("tile_map_editor/pick_tile", TTR("Pick Tile"), KEY_I)); + picker_button->set_shortcut_context(this); picker_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_PICKING)); picker_button->set_toggle_mode(true); toolbar->add_child(picker_button); @@ -2147,6 +2152,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { select_button = memnew(Button); select_button->set_flat(true); select_button->set_shortcut(ED_SHORTCUT("tile_map_editor/select", TTR("Select"), KEY_M)); + select_button->set_shortcut_context(this); select_button->connect("pressed", callable_mp(this, &TileMapEditor::_button_tool_select), make_binds(TOOL_SELECTING)); select_button->set_toggle_mode(true); toolbar->add_child(select_button); @@ -2165,15 +2171,16 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { tile_info->set_modulate(Color(1, 1, 1, 0.8)); tile_info->set_mouse_filter(MOUSE_FILTER_IGNORE); tile_info->add_theme_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_theme_font("main", "EditorFonts")); + tile_info->add_theme_font_size_override("font_size", EditorNode::get_singleton()->get_gui_base()->get_theme_font_size("main_size", "EditorFonts")); // The tile info is only displayed after a tile has been hovered. tile_info->hide(); CanvasItemEditor::get_singleton()->add_control_to_info_overlay(tile_info); // Menu. options = memnew(MenuButton); + options->set_shortcut_context(this); options->set_text("TileMap"); options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon("TileMap", "EditorIcons")); - options->set_process_unhandled_key_input(false); toolbar_right->add_child(options); PopupMenu *p = options->get_popup(); @@ -2190,6 +2197,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { rotate_left_button->set_focus_mode(FOCUS_NONE); rotate_left_button->connect("pressed", callable_mp(this, &TileMapEditor::_rotate), varray(-1)); rotate_left_button->set_shortcut(ED_SHORTCUT("tile_map_editor/rotate_left", TTR("Rotate Left"), KEY_A)); + rotate_left_button->set_shortcut_context(this); tool_hb->add_child(rotate_left_button); rotate_right_button = memnew(Button); @@ -2198,6 +2206,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { rotate_right_button->set_focus_mode(FOCUS_NONE); rotate_right_button->connect("pressed", callable_mp(this, &TileMapEditor::_rotate), varray(1)); rotate_right_button->set_shortcut(ED_SHORTCUT("tile_map_editor/rotate_right", TTR("Rotate Right"), KEY_S)); + rotate_right_button->set_shortcut_context(this); tool_hb->add_child(rotate_right_button); flip_horizontal_button = memnew(Button); @@ -2206,6 +2215,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { flip_horizontal_button->set_focus_mode(FOCUS_NONE); flip_horizontal_button->connect("pressed", callable_mp(this, &TileMapEditor::_flip_horizontal)); flip_horizontal_button->set_shortcut(ED_SHORTCUT("tile_map_editor/flip_horizontal", TTR("Flip Horizontally"), KEY_X)); + flip_horizontal_button->set_shortcut_context(this); tool_hb->add_child(flip_horizontal_button); flip_vertical_button = memnew(Button); @@ -2214,6 +2224,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { flip_vertical_button->set_focus_mode(FOCUS_NONE); flip_vertical_button->connect("pressed", callable_mp(this, &TileMapEditor::_flip_vertical)); flip_vertical_button->set_shortcut(ED_SHORTCUT("tile_map_editor/flip_vertical", TTR("Flip Vertically"), KEY_Z)); + flip_vertical_button->set_shortcut_context(this); tool_hb->add_child(flip_vertical_button); clear_transform_button = memnew(Button); @@ -2222,6 +2233,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { clear_transform_button->set_focus_mode(FOCUS_NONE); clear_transform_button->connect("pressed", callable_mp(this, &TileMapEditor::_clear_transform)); clear_transform_button->set_shortcut(ED_SHORTCUT("tile_map_editor/clear_transform", TTR("Clear Transform"), KEY_W)); + clear_transform_button->set_shortcut_context(this); tool_hb->add_child(clear_transform_button); clear_transform_button->set_disabled(true); diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h index f57616db1f..3a4cb22ac1 100644 --- a/editor/plugins/tile_map_editor_plugin.h +++ b/editor/plugins/tile_map_editor_plugin.h @@ -43,7 +43,6 @@ class TileMapEditor : public VBoxContainer { GDCLASS(TileMapEditor, VBoxContainer); enum Tool { - TOOL_NONE, TOOL_PAINTING, TOOL_ERASING, @@ -58,7 +57,6 @@ class TileMapEditor : public VBoxContainer { }; enum Options { - OPTION_COPY, OPTION_ERASE_SELECTION, OPTION_FIX_INVALID, @@ -133,8 +131,6 @@ class TileMapEditor : public VBoxContainer { bool yf = false; bool tr = false; Vector2 ac; - - CellOp() {} }; Map<Point2i, CellOp> paint_undo; @@ -146,8 +142,6 @@ class TileMapEditor : public VBoxContainer { bool flip_v = false; bool transpose = false; Point2i autotile_coord; - - TileData() {} }; List<TileData> copydata; diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index 9c589267fc..900a2c75a0 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -279,6 +279,8 @@ void TileSetEditor::_notification(int p_what) { case NOTIFICATION_READY: { add_theme_constant_override("autohide", 1); // Fixes the dragger always showing up. } break; + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_icon(get_theme_icon("ToolAddNode", "EditorIcons")); @@ -296,8 +298,13 @@ void TileSetEditor::_notification(int p_what) { tools[BITMASK_CLEAR]->set_icon(get_theme_icon("Clear", "EditorIcons")); tools[SHAPE_NEW_POLYGON]->set_icon(get_theme_icon("CollisionPolygon2D", "EditorIcons")); tools[SHAPE_NEW_RECTANGLE]->set_icon(get_theme_icon("CollisionShape2D", "EditorIcons")); - tools[SELECT_PREVIOUS]->set_icon(get_theme_icon("ArrowLeft", "EditorIcons")); - tools[SELECT_NEXT]->set_icon(get_theme_icon("ArrowRight", "EditorIcons")); + if (is_layout_rtl()) { + tools[SELECT_PREVIOUS]->set_icon(get_theme_icon("ArrowLeft", "EditorIcons")); + tools[SELECT_NEXT]->set_icon(get_theme_icon("ArrowRight", "EditorIcons")); + } else { + tools[SELECT_PREVIOUS]->set_icon(get_theme_icon("ArrowRight", "EditorIcons")); + tools[SELECT_NEXT]->set_icon(get_theme_icon("ArrowLeft", "EditorIcons")); + } tools[SHAPE_DELETE]->set_icon(get_theme_icon("Remove", "EditorIcons")); tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_theme_icon("Snap", "EditorIcons")); tools[TOOL_GRID_SNAP]->set_icon(get_theme_icon("SnapGrid", "EditorIcons")); @@ -407,6 +414,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_hb->move_child(tools[SELECT_NEXT], WORKSPACE_CREATE_SINGLE); tools[SELECT_NEXT]->set_flat(true); tools[SELECT_NEXT]->set_shortcut(ED_SHORTCUT("tileset_editor/next_shape", TTR("Next Coordinate"), KEY_PAGEDOWN)); + tools[SELECT_NEXT]->set_shortcut_context(this); tools[SELECT_NEXT]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SELECT_NEXT)); tools[SELECT_NEXT]->set_tooltip(TTR("Select the next shape, subtile, or Tile.")); tools[SELECT_PREVIOUS] = memnew(Button); @@ -414,6 +422,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_hb->move_child(tools[SELECT_PREVIOUS], WORKSPACE_CREATE_SINGLE); tools[SELECT_PREVIOUS]->set_flat(true); tools[SELECT_PREVIOUS]->set_shortcut(ED_SHORTCUT("tileset_editor/previous_shape", TTR("Previous Coordinate"), KEY_PAGEUP)); + tools[SELECT_PREVIOUS]->set_shortcut_context(this); tools[SELECT_PREVIOUS]->set_tooltip(TTR("Select the previous shape, subtile, or Tile.")); tools[SELECT_PREVIOUS]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SELECT_PREVIOUS)); @@ -460,6 +469,16 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_editmode[EDITMODE_ICON]->set_shortcut(ED_SHORTCUT("tileset_editor/editmode_icon", TTR("Icon Mode"), KEY_7)); tool_editmode[EDITMODE_Z_INDEX]->set_shortcut(ED_SHORTCUT("tileset_editor/editmode_z_index", TTR("Z Index Mode"), KEY_8)); + tool_editmode[EDITMODE_REGION]->set_shortcut_context(this); + tool_editmode[EDITMODE_REGION]->set_shortcut_context(this); + tool_editmode[EDITMODE_COLLISION]->set_shortcut_context(this); + tool_editmode[EDITMODE_OCCLUSION]->set_shortcut_context(this); + tool_editmode[EDITMODE_NAVIGATION]->set_shortcut_context(this); + tool_editmode[EDITMODE_BITMASK]->set_shortcut_context(this); + tool_editmode[EDITMODE_PRIORITY]->set_shortcut_context(this); + tool_editmode[EDITMODE_ICON]->set_shortcut_context(this); + tool_editmode[EDITMODE_Z_INDEX]->set_shortcut_context(this); + main_vb->add_child(tool_hb); separator_editmode = memnew(HSeparator); main_vb->add_child(separator_editmode); @@ -500,6 +519,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[SHAPE_NEW_RECTANGLE]->set_button_group(tg); tools[SHAPE_NEW_RECTANGLE]->set_tooltip(TTR("Create a new rectangle.")); tools[SHAPE_NEW_RECTANGLE]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_NEW_RECTANGLE)); + tools[SHAPE_NEW_RECTANGLE]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_new_rectangle", TTR("New Rectangle"), KEY_MASK_SHIFT | KEY_R)); tools[SHAPE_NEW_POLYGON] = memnew(Button); toolbar->add_child(tools[SHAPE_NEW_POLYGON]); @@ -508,6 +528,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[SHAPE_NEW_POLYGON]->set_button_group(tg); tools[SHAPE_NEW_POLYGON]->set_tooltip(TTR("Create a new polygon.")); tools[SHAPE_NEW_POLYGON]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_NEW_POLYGON)); + tools[SHAPE_NEW_POLYGON]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_new_polygon", TTR("New Polygon"), KEY_MASK_SHIFT | KEY_P)); separator_shape_toggle = memnew(VSeparator); toolbar->add_child(separator_shape_toggle); @@ -521,6 +542,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[SHAPE_DELETE] = memnew(Button); tools[SHAPE_DELETE]->set_flat(true); tools[SHAPE_DELETE]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_DELETE)); + tools[SHAPE_DELETE]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_delete", TTR("Delete Selected Shape"), KEY_MASK_SHIFT | KEY_BACKSPACE)); toolbar->add_child(tools[SHAPE_DELETE]); spin_priority = memnew(SpinBox); @@ -1170,11 +1192,12 @@ void TileSetEditor::_on_workspace_overlay_draw() { } String tile_id_name = String::num(t_id, 0) + ": " + tileset->tile_get_name(t_id); Ref<Font> font = get_theme_font("font", "Label"); - region.set_size(font->get_string_size(tile_id_name)); + int font_size = get_theme_font_size("font_size", "Label"); + region.set_size(font->get_string_size(tile_id_name, font_size)); workspace_overlay->draw_rect(region, c); region.position.y += region.size.y - 2; c = Color(0.1, 0.1, 0.1); - workspace_overlay->draw_string(font, region.position, tile_id_name, c); + workspace_overlay->draw_string(font, region.position, tile_id_name, HALIGN_LEFT, -1, font_size, c); } delete tiles; } @@ -2336,8 +2359,8 @@ void TileSetEditor::_set_edited_collision_shape(const Ref<Shape2D> &p_shape) { } void TileSetEditor::_set_snap_step(Vector2 p_val) { - snap_step.x = CLAMP(p_val.x, 0, 256); - snap_step.y = CLAMP(p_val.y, 0, 256); + snap_step.x = CLAMP(p_val.x, 1, 256); + snap_step.y = CLAMP(p_val.y, 1, 256); workspace->update(); } @@ -3597,11 +3620,11 @@ void TileSetEditorPlugin::make_visible(bool p_visible) { if (p_visible) { tileset_editor_button->show(); editor->make_bottom_panel_item_visible(tileset_editor); - get_tree()->connect_compat("idle_frame", tileset_editor, "_on_workspace_process"); + get_tree()->connect("idle_frame", Callable(tileset_editor, "_on_workspace_process")); } else { editor->hide_bottom_panel(); tileset_editor_button->hide(); - get_tree()->disconnect_compat("idle_frame", tileset_editor, "_on_workspace_process"); + get_tree()->disconnect("idle_frame", Callable(tileset_editor, "_on_workspace_process")); } } diff --git a/editor/plugins/version_control_editor_plugin.cpp b/editor/plugins/version_control_editor_plugin.cpp index 5e98b2d98b..7747c740df 100644 --- a/editor/plugins/version_control_editor_plugin.cpp +++ b/editor/plugins/version_control_editor_plugin.cpp @@ -119,19 +119,13 @@ void VersionControlEditorPlugin::_initialize_vcs() { } void VersionControlEditorPlugin::_send_commit_msg() { - String msg = commit_message->get_text(); - if (msg == "") { - commit_status->set_text(TTR("No commit message was provided")); - return; - } - if (EditorVCSInterface::get_singleton()) { if (staged_files_count == 0) { commit_status->set_text(TTR("No files added to stage")); return; } - EditorVCSInterface::get_singleton()->commit(msg); + EditorVCSInterface::get_singleton()->commit(commit_message->get_text()); commit_message->set_text(""); version_control_dock_button->set_pressed(false); @@ -294,6 +288,10 @@ void VersionControlEditorPlugin::_update_commit_status() { staged_files_count = 0; } +void VersionControlEditorPlugin::_update_commit_button() { + commit_button->set_disabled(commit_message->get_text().strip_edges() == ""); +} + void VersionControlEditorPlugin::register_editor() { if (!EditorVCSInterface::get_singleton()) { EditorNode::get_singleton()->add_control_to_dock(EditorNode::DOCK_SLOT_RIGHT_UL, version_commit_dock); @@ -357,7 +355,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_dialog->set_min_size(Size2(400, 100)); version_control_actions->add_child(set_up_dialog); - set_up_ok_button = set_up_dialog->get_ok(); + set_up_ok_button = set_up_dialog->get_ok_button(); set_up_ok_button->set_text(TTR("Close")); set_up_vbc = memnew(VBoxContainer); @@ -463,11 +461,12 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { commit_message->set_v_grow_direction(Control::GrowDirection::GROW_DIRECTION_END); commit_message->set_custom_minimum_size(Size2(200, 100)); commit_message->set_wrap_enabled(true); - commit_message->set_text(TTR("Add a commit message")); + commit_message->connect("text_changed", callable_mp(this, &VersionControlEditorPlugin::_update_commit_button)); commit_box_vbc->add_child(commit_message); commit_button = memnew(Button); commit_button->set_text(TTR("Commit Changes")); + commit_button->set_disabled(true); commit_button->connect("pressed", callable_mp(this, &VersionControlEditorPlugin::_send_commit_msg)); commit_box_vbc->add_child(commit_button); diff --git a/editor/plugins/version_control_editor_plugin.h b/editor/plugins/version_control_editor_plugin.h index 248a1435fd..3f107ddffb 100644 --- a/editor/plugins/version_control_editor_plugin.h +++ b/editor/plugins/version_control_editor_plugin.h @@ -43,7 +43,6 @@ class VersionControlEditorPlugin : public EditorPlugin { public: enum ChangeType { - CHANGE_TYPE_NEW = 0, CHANGE_TYPE_MODIFIED = 1, CHANGE_TYPE_RENAMED = 2, @@ -111,6 +110,7 @@ private: void _clear_file_diff(); void _update_stage_status(); void _update_commit_status(); + void _update_commit_button(); friend class EditorVCSInterface; diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index f3fc22b313..da664109dc 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -49,7 +49,7 @@ struct FloatConstantDef { String name; - float value; + float value = 0; String desc; }; @@ -102,7 +102,6 @@ void VisualShaderGraphPlugin::_bind_methods() { ClassDB::bind_method("disconnect_nodes", &VisualShaderGraphPlugin::disconnect_nodes); ClassDB::bind_method("set_node_position", &VisualShaderGraphPlugin::set_node_position); ClassDB::bind_method("set_node_size", &VisualShaderGraphPlugin::set_node_size); - ClassDB::bind_method("show_port_preview", &VisualShaderGraphPlugin::show_port_preview); ClassDB::bind_method("update_node", &VisualShaderGraphPlugin::update_node); ClassDB::bind_method("update_node_deferred", &VisualShaderGraphPlugin::update_node_deferred); ClassDB::bind_method("set_input_port_default_value", &VisualShaderGraphPlugin::set_input_port_default_value); @@ -121,9 +120,11 @@ void VisualShaderGraphPlugin::set_connections(List<VisualShader::Connection> &p_ } void VisualShaderGraphPlugin::show_port_preview(VisualShader::Type p_type, int p_node_id, int p_port_id) { - if (visual_shader->get_shader_type() == p_type && links.has(p_node_id)) { + if (visual_shader->get_shader_type() == p_type && links.has(p_node_id) && links[p_node_id].output_ports.has(p_port_id)) { for (Map<int, Port>::Element *E = links[p_node_id].output_ports.front(); E; E = E->next()) { - E->value().preview_button->set_pressed(false); + if (E->value().preview_button != nullptr) { + E->value().preview_button->set_pressed(false); + } } if (links[p_node_id].preview_visible && !is_dirty() && links[p_node_id].preview_box != nullptr) { @@ -133,7 +134,7 @@ void VisualShaderGraphPlugin::show_port_preview(VisualShader::Type p_type, int p links[p_node_id].preview_visible = false; } - if (p_port_id != -1) { + if (p_port_id != -1 && links[p_node_id].output_ports[p_port_id].preview_button != nullptr) { if (is_dirty()) { links[p_node_id].preview_pos = links[p_node_id].graph_node->get_child_count(); } @@ -498,16 +499,32 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { if (group_node->is_editable()) { HBoxContainer *hb2 = memnew(HBoxContainer); + String input_port_name = "input" + itos(group_node->get_free_input_port_id()); + String output_port_name = "output" + itos(group_node->get_free_output_port_id()); + + for (int i = 0; i < MAX(vsnode->get_input_port_count(), vsnode->get_output_port_count()); i++) { + if (i < vsnode->get_input_port_count()) { + if (input_port_name == vsnode->get_input_port_name(i)) { + input_port_name = "_" + input_port_name; + } + } + if (i < vsnode->get_output_port_count()) { + if (output_port_name == vsnode->get_output_port_name(i)) { + output_port_name = "_" + output_port_name; + } + } + } + Button *add_input_btn = memnew(Button); add_input_btn->set_text(TTR("Add Input")); - add_input_btn->connect("pressed", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_add_input_port), varray(p_id, group_node->get_free_input_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, "input" + itos(group_node->get_free_input_port_id())), CONNECT_DEFERRED); + add_input_btn->connect("pressed", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_add_input_port), varray(p_id, group_node->get_free_input_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, input_port_name), CONNECT_DEFERRED); hb2->add_child(add_input_btn); hb2->add_spacer(); Button *add_output_btn = memnew(Button); add_output_btn->set_text(TTR("Add Output")); - add_output_btn->connect("pressed", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_add_output_port), varray(p_id, group_node->get_free_output_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, "output" + itos(group_node->get_free_output_port_id())), CONNECT_DEFERRED); + add_output_btn->connect("pressed", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_add_output_port), varray(p_id, group_node->get_free_output_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, output_port_name), CONNECT_DEFERRED); hb2->add_child(add_output_btn); node->add_child(hb2); @@ -584,8 +601,8 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { name_box->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); name_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); name_box->set_text(name_left); - name_box->connect("text_entered", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_change_input_port_name), varray(name_box, p_id, i)); - name_box->connect("focus_exited", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_port_name_focus_out), varray(name_box, p_id, i, false)); + name_box->connect("text_entered", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_change_input_port_name), varray(name_box, p_id, i), CONNECT_DEFERRED); + name_box->connect("focus_exited", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_port_name_focus_out), varray(name_box, p_id, i, false), CONNECT_DEFERRED); Button *remove_btn = memnew(Button); remove_btn->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon("Remove", "EditorIcons")); @@ -625,8 +642,8 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { name_box->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); name_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); name_box->set_text(name_right); - name_box->connect("text_entered", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_change_output_port_name), varray(name_box, p_id, i)); - name_box->connect("focus_exited", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_port_name_focus_out), varray(name_box, p_id, i, true)); + name_box->connect("text_entered", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_change_output_port_name), varray(name_box, p_id, i), CONNECT_DEFERRED); + name_box->connect("focus_exited", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_port_name_focus_out), varray(name_box, p_id, i, true), CONNECT_DEFERRED); OptionButton *type_box = memnew(OptionButton); hb->add_child(type_box); @@ -713,6 +730,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) { } expression_box->add_theme_font_override("font", VisualShaderEditor::get_singleton()->get_theme_font("expression", "EditorFonts")); + expression_box->add_theme_font_size_override("font_size", VisualShaderEditor::get_singleton()->get_theme_font_size("expression_size", "EditorFonts")); expression_box->add_theme_color_override("font_color", text_color); expression_syntax_highlighter->set_number_color(number_color); expression_syntax_highlighter->set_symbol_color(symbol_color); @@ -991,7 +1009,7 @@ String VisualShaderEditor::_get_description(int p_idx) { void VisualShaderEditor::_update_options_menu() { node_desc->set_text(""); - members_dialog->get_ok()->set_disabled(true); + members_dialog->get_ok_button()->set_disabled(true); members->clear(); TreeItem *root = members->create_item(); @@ -1335,29 +1353,57 @@ void VisualShaderEditor::_change_output_port_type(int p_type, int p_node, int p_ undo_redo->commit_action(); } -void VisualShaderEditor::_change_input_port_name(const String &p_text, Object *line_edit, int p_node_id, int p_port_id) { +void VisualShaderEditor::_change_input_port_name(const String &p_text, Object *p_line_edit, int p_node_id, int p_port_id) { VisualShader::Type type = get_current_shader_type(); Ref<VisualShaderNodeGroupBase> node = visual_shader->get_node(type, p_node_id); ERR_FAIL_COND(!node.is_valid()); + String prev_name = node->get_input_port_name(p_port_id); + if (prev_name == p_text) { + return; + } + + LineEdit *line_edit = Object::cast_to<LineEdit>(p_line_edit); + ERR_FAIL_COND(!line_edit); + + String validated_name = visual_shader->validate_port_name(p_text, node.ptr(), p_port_id, false); + if (validated_name == String() || prev_name == validated_name) { + line_edit->set_text(node->get_input_port_name(p_port_id)); + return; + } + undo_redo->create_action(TTR("Change Input Port Name")); - undo_redo->add_do_method(node.ptr(), "set_input_port_name", p_port_id, p_text); + undo_redo->add_do_method(node.ptr(), "set_input_port_name", p_port_id, validated_name); undo_redo->add_undo_method(node.ptr(), "set_input_port_name", p_port_id, node->get_input_port_name(p_port_id)); undo_redo->add_do_method(graph_plugin.ptr(), "update_node", type, p_node_id); undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", type, p_node_id); undo_redo->commit_action(); } -void VisualShaderEditor::_change_output_port_name(const String &p_text, Object *line_edit, int p_node_id, int p_port_id) { +void VisualShaderEditor::_change_output_port_name(const String &p_text, Object *p_line_edit, int p_node_id, int p_port_id) { VisualShader::Type type = get_current_shader_type(); Ref<VisualShaderNodeGroupBase> node = visual_shader->get_node(type, p_node_id); ERR_FAIL_COND(!node.is_valid()); + String prev_name = node->get_output_port_name(p_port_id); + if (prev_name == p_text) { + return; + } + + LineEdit *line_edit = Object::cast_to<LineEdit>(p_line_edit); + ERR_FAIL_COND(!line_edit); + + String validated_name = visual_shader->validate_port_name(p_text, node.ptr(), p_port_id, true); + if (validated_name == String() || prev_name == validated_name) { + line_edit->set_text(node->get_output_port_name(p_port_id)); + return; + } + undo_redo->create_action(TTR("Change Output Port Name")); - undo_redo->add_do_method(node.ptr(), "set_output_port_name", p_port_id, p_text); - undo_redo->add_undo_method(node.ptr(), "set_output_port_name", p_port_id, node->get_output_port_name(p_port_id)); + undo_redo->add_do_method(node.ptr(), "set_output_port_name", p_port_id, validated_name); + undo_redo->add_undo_method(node.ptr(), "set_output_port_name", p_port_id, prev_name); undo_redo->add_do_method(graph_plugin.ptr(), "update_node", type, p_node_id); undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", type, p_node_id); undo_redo->commit_action(); @@ -1452,6 +1498,17 @@ void VisualShaderEditor::_remove_output_port(int p_node, int p_port) { } } + int preview_port = node->get_output_port_for_preview(); + if (preview_port != -1) { + if (preview_port == p_port) { + undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", -1); + undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", preview_port); + } else if (preview_port > p_port) { + undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", preview_port - 1); + undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", preview_port); + } + } + undo_redo->add_do_method(node.ptr(), "remove_output_port", p_port); undo_redo->add_undo_method(node.ptr(), "add_output_port", p_port, (int)node->get_output_port_type(p_port), node->get_output_port_name(p_port)); @@ -1558,8 +1615,8 @@ void VisualShaderEditor::_preview_select_port(int p_node, int p_port) { undo_redo->create_action(p_port == -1 ? TTR("Hide Port Preview") : TTR("Show Port Preview")); undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", p_port); undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", prev_port); - undo_redo->add_do_method(graph_plugin.ptr(), "show_port_preview", (int)type, p_node, p_port); - undo_redo->add_undo_method(graph_plugin.ptr(), "show_port_preview", (int)type, p_node, prev_port); + undo_redo->add_do_method(graph_plugin.ptr(), "update_node", (int)type, p_node); + undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", (int)type, p_node); undo_redo->commit_action(); } @@ -1596,53 +1653,10 @@ void VisualShaderEditor::_uniform_line_edit_focus_out(Object *line_edit, int p_n } void VisualShaderEditor::_port_name_focus_out(Object *line_edit, int p_node_id, int p_port_id, bool p_output) { - VisualShader::Type type = get_current_shader_type(); - - Ref<VisualShaderNodeGroupBase> node = visual_shader->get_node(type, p_node_id); - ERR_FAIL_COND(!node.is_valid()); - - String text = Object::cast_to<LineEdit>(line_edit)->get_text(); - if (!p_output) { - if (node->get_input_port_name(p_port_id) == text) { - return; - } + _change_input_port_name(Object::cast_to<LineEdit>(line_edit)->get_text(), line_edit, p_node_id, p_port_id); } else { - if (node->get_output_port_name(p_port_id) == text) { - return; - } - } - - List<String> input_names; - List<String> output_names; - - for (int i = 0; i < node->get_input_port_count(); i++) { - if (!p_output && i == p_port_id) { - continue; - } - input_names.push_back(node->get_input_port_name(i)); - } - for (int i = 0; i < node->get_output_port_count(); i++) { - if (p_output && i == p_port_id) { - continue; - } - output_names.push_back(node->get_output_port_name(i)); - } - - String validated_name = visual_shader->validate_port_name(text, input_names, output_names); - if (validated_name == "") { - if (!p_output) { - Object::cast_to<LineEdit>(line_edit)->set_text(node->get_input_port_name(p_port_id)); - } else { - Object::cast_to<LineEdit>(line_edit)->set_text(node->get_output_port_name(p_port_id)); - } - return; - } - - if (!p_output) { - _change_input_port_name(validated_name, line_edit, p_node_id, p_port_id); - } else { - _change_output_port_name(validated_name, line_edit, p_node_id, p_port_id); + _change_output_port_name(Object::cast_to<LineEdit>(line_edit)->get_text(), line_edit, p_node_id, p_port_id); } } @@ -1959,6 +1973,8 @@ void VisualShaderEditor::_connection_request(const String &p_from, int p_from_in undo_redo->add_undo_method(visual_shader.ptr(), "disconnect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_do_method(graph_plugin.ptr(), "connect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_undo_method(graph_plugin.ptr(), "disconnect_nodes", type, from, p_from_index, to, p_to_index); + undo_redo->add_do_method(graph_plugin.ptr(), "update_node", (int)type, to); + undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", (int)type, to); undo_redo->commit_action(); } @@ -1975,6 +1991,8 @@ void VisualShaderEditor::_disconnection_request(const String &p_from, int p_from undo_redo->add_undo_method(visual_shader.ptr(), "connect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_do_method(graph_plugin.ptr(), "disconnect_nodes", type, from, p_from_index, to, p_to_index); undo_redo->add_undo_method(graph_plugin.ptr(), "connect_nodes", type, from, p_from_index, to, p_to_index); + undo_redo->add_do_method(graph_plugin.ptr(), "update_node", (int)type, to); + undo_redo->add_undo_method(graph_plugin.ptr(), "update_node", (int)type, to); undo_redo->commit_action(); } @@ -2237,6 +2255,7 @@ void VisualShaderEditor::_notification(int p_what) { } preview_text->add_theme_font_override("font", get_theme_font("expression", "EditorFonts")); + preview_text->add_theme_font_size_override("font_size", get_theme_font_size("expression_size", "EditorFonts")); preview_text->add_theme_color_override("font_color", text_color); syntax_highlighter->set_number_color(number_color); syntax_highlighter->set_symbol_color(symbol_color); @@ -2247,6 +2266,7 @@ void VisualShaderEditor::_notification(int p_what) { syntax_highlighter->add_color_region("//", "", comment_color, true); error_text->add_theme_font_override("font", get_theme_font("status_source", "EditorFonts")); + error_text->add_theme_font_size_override("font_size", get_theme_font_size("status_source_size", "EditorFonts")); error_text->add_theme_color_override("font_color", get_theme_color("error_color", "Editor")); } @@ -2593,12 +2613,12 @@ void VisualShaderEditor::_member_selected() { TreeItem *item = members->get_selected(); if (item != nullptr && item->has_meta("id")) { - members_dialog->get_ok()->set_disabled(false); + members_dialog->get_ok_button()->set_disabled(false); highend_label->set_visible(add_options[item->get_meta("id")].highend); node_desc->set_text(_get_description(item->get_meta("id"))); } else { highend_label->set_visible(false); - members_dialog->get_ok()->set_disabled(true); + members_dialog->get_ok_button()->set_disabled(true); node_desc->set_text(""); } } @@ -3048,9 +3068,9 @@ VisualShaderEditor::VisualShaderEditor() { members_dialog->set_title(TTR("Create Shader Node")); members_dialog->set_exclusive(false); members_dialog->add_child(members_vb); - members_dialog->get_ok()->set_text(TTR("Create")); - members_dialog->get_ok()->connect("pressed", callable_mp(this, &VisualShaderEditor::_member_create)); - members_dialog->get_ok()->set_disabled(true); + members_dialog->get_ok_button()->set_text(TTR("Create")); + members_dialog->get_ok_button()->connect("pressed", callable_mp(this, &VisualShaderEditor::_member_create)); + members_dialog->get_ok_button()->set_disabled(true); members_dialog->connect("cancelled", callable_mp(this, &VisualShaderEditor::_member_cancel)); add_child(members_dialog); @@ -3120,7 +3140,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("InvProjection", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "inv_projection"), "inv_projection", VisualShaderNode::PORT_TYPE_TRANSFORM, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Normal", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "normal"), "normal", VisualShaderNode::PORT_TYPE_VECTOR, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("OutputIsSRGB", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "output_is_srgb"), "output_is_srgb", VisualShaderNode::PORT_TYPE_BOOLEAN, -1, Shader::MODE_SPATIAL)); - add_options.push_back(AddOption("Projection", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "camera"), "projection", VisualShaderNode::PORT_TYPE_TRANSFORM, -1, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("Projection", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "projection"), "projection", VisualShaderNode::PORT_TYPE_TRANSFORM, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Time", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "time"), "time", VisualShaderNode::PORT_TYPE_SCALAR, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("ViewportSize", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "viewport_size"), "viewport_size", VisualShaderNode::PORT_TYPE_VECTOR, -1, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("World", "Input", "All", "VisualShaderNodeInput", vformat(input_param_shader_modes, "world"), "world", VisualShaderNode::PORT_TYPE_TRANSFORM, -1, Shader::MODE_SPATIAL)); @@ -3167,7 +3187,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("View", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "view"), "view", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Albedo", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "albedo"), "albedo", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); - add_options.push_back(AddOption("Attenuation", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "attenuation"), "attenuation", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("Attenuation", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "attenuation"), "attenuation", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Diffuse", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "diffuse"), "diffuse", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("FragCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Light", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light"), "light", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); @@ -3175,7 +3195,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("Metallic", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "metallic"), "metallic", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Roughness", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "roughness"), "roughness", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Specular", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "specular"), "specular", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); - add_options.push_back(AddOption("Transmission", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "transmission"), "transmission", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("Backlight", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "backlight"), "backlight", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("View", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "view"), "view", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Alpha", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "alpha"), "alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_VERTEX, Shader::MODE_SPATIAL)); @@ -3190,33 +3210,38 @@ VisualShaderEditor::VisualShaderEditor() { // CANVASITEM INPUTS + add_options.push_back(AddOption("AtLightPass", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "at_light_pass"), "at_light_pass", VisualShaderNode::PORT_TYPE_BOOLEAN, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("FragCoord", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightPass", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "light_pass"), "light_pass", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("NormalTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "normal_texture"), "normal_texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("PointCoord", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "point_coord"), "point_coord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenPixelSize", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "screen_pixel_size"), "screen_pixel_size", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "screen_texture"), "screen_texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenUV", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "screen_uv"), "screen_uv", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininess", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "specular_shininess"), "specular_shininess", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininessAlpha", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "specular_shininess_alpha"), "specular_shininess_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininessTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "specular_shininess_texture"), "specular_shininess_texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Texture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "texture"), "texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("FragCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("Light", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light"), "light", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_alpha"), "light_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightColor", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_color"), "light_color", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightHeight", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_height"), "light_height", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightUV", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_uv"), "light_uv", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightVector", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_vec"), "light_vec", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("LightColorAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_color_alpha"), "light_color_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("LightPosition", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_position"), "light_position", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("LightVertex", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_vertex"), "light_vertex", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Normal", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "normal"), "normal", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("PointCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "point_coord"), "point_coord", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenUV", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "screen_uv"), "screen_uv", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ShadowAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_alpha"), "shadow_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ShadowColor", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_color"), "shadow_color", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("ShadowVec", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_vec"), "shadow_vec", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininess", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "specular_shininess"), "specular_shininess", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("SpecularShininessAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "specular_shininess_alpha"), "specular_shininess_alpha", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Texture", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "texture"), "texture", VisualShaderNode::PORT_TYPE_SAMPLER, TYPE_FLAGS_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("Extra", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "extra"), "extra", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightPass", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "light_pass"), "light_pass", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("AtLightPass", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "at_light_pass"), "at_light_pass", VisualShaderNode::PORT_TYPE_BOOLEAN, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("Canvas", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "canvas"), "canvas", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("PointSize", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "point_size"), "point_size", VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("Projection", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "projection"), "projection", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("Screen", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "screen"), "screen", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Vertex", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "vertex"), "vertex", VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("World", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "world"), "world", VisualShaderNode::PORT_TYPE_TRANSFORM, TYPE_FLAGS_VERTEX, Shader::MODE_CANVAS_ITEM)); @@ -4037,9 +4062,6 @@ void VisualShaderNodePortPreview::_notification(int p_what) { void VisualShaderNodePortPreview::_bind_methods() { } -VisualShaderNodePortPreview::VisualShaderNodePortPreview() { -} - ////////////////////////////////// String VisualShaderConversionPlugin::converts_to() const { diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h index 73bebcd192..a5983410f9 100644 --- a/editor/plugins/visual_shader_editor_plugin.h +++ b/editor/plugins/visual_shader_editor_plugin.h @@ -56,26 +56,26 @@ class VisualShaderGraphPlugin : public Reference { private: struct InputPort { - Button *default_input_button; + Button *default_input_button = nullptr; }; struct Port { - TextureButton *preview_button; + TextureButton *preview_button = nullptr; }; struct Link { - VisualShader::Type type; - VisualShaderNode *visual_node; - GraphNode *graph_node; - bool preview_visible; - int preview_pos; + VisualShader::Type type = VisualShader::Type::TYPE_MAX; + VisualShaderNode *visual_node = nullptr; + GraphNode *graph_node = nullptr; + bool preview_visible = 0; + int preview_pos = 0; Map<int, InputPort> input_ports; Map<int, Port> output_ports; - VBoxContainer *preview_box; - LineEdit *uniform_name; - OptionButton *const_op; - CodeEdit *expression_edit; - CurveEditor *curve_editor; + VBoxContainer *preview_box = nullptr; + LineEdit *uniform_name = nullptr; + OptionButton *const_op = nullptr; + CodeEdit *expression_edit = nullptr; + CurveEditor *curve_editor = nullptr; }; Ref<VisualShader> visual_shader; @@ -206,16 +206,16 @@ class VisualShaderEditor : public VBoxContainer { String category; String type; String description; - int sub_func; + int sub_func = 0; String sub_func_str; Ref<Script> script; - int mode; - int return_type; - int func; - float value; - bool highend; - bool is_custom; - int temp_idx; + int mode = 0; + int return_type = 0; + int func = 0; + float value = 0; + bool highend = false; + bool is_custom = false; + int temp_idx = 0; AddOption(const String &p_name = String(), const String &p_category = String(), const String &p_sub_category = String(), const String &p_type = String(), const String &p_description = String(), int p_sub_func = -1, int p_return_type = -1, int p_mode = -1, int p_func = -1, float p_value = -1, bool p_highend = false) { name = p_name; @@ -283,8 +283,8 @@ class VisualShaderEditor : public VBoxContainer { static VisualShaderEditor *singleton; struct DragOp { - VisualShader::Type type; - int node; + VisualShader::Type type = VisualShader::Type::TYPE_MAX; + int node = 0; Vector2 from; Vector2 to; }; @@ -354,12 +354,12 @@ class VisualShaderEditor : public VBoxContainer { void _add_input_port(int p_node, int p_port, int p_port_type, const String &p_name); void _remove_input_port(int p_node, int p_port); void _change_input_port_type(int p_type, int p_node, int p_port); - void _change_input_port_name(const String &p_text, Object *line_edit, int p_node, int p_port); + void _change_input_port_name(const String &p_text, Object *p_line_edit, int p_node, int p_port); void _add_output_port(int p_node, int p_port, int p_port_type, const String &p_name); void _remove_output_port(int p_node, int p_port); void _change_output_port_type(int p_type, int p_node, int p_port); - void _change_output_port_name(const String &p_text, Object *line_edit, int p_node, int p_port); + void _change_output_port_name(const String &p_text, Object *p_line_edit, int p_node, int p_port); void _expression_focus_out(Object *code_edit, int p_node); @@ -462,9 +462,9 @@ public: class VisualShaderNodePortPreview : public Control { GDCLASS(VisualShaderNodePortPreview, Control); Ref<VisualShader> shader; - VisualShader::Type type; - int node; - int port; + VisualShader::Type type = VisualShader::Type::TYPE_MAX; + int node = 0; + int port = 0; void _shader_changed(); //must regen protected: void _notification(int p_what); @@ -473,7 +473,6 @@ protected: public: virtual Size2 get_minimum_size() const override; void setup(const Ref<VisualShader> &p_shader, VisualShader::Type p_type, int p_node, int p_port); - VisualShaderNodePortPreview(); }; class VisualShaderConversionPlugin : public EditorResourceConversionPlugin { diff --git a/editor/progress_dialog.h b/editor/progress_dialog.h index 753b6ac955..d8a33cc2cc 100644 --- a/editor/progress_dialog.h +++ b/editor/progress_dialog.h @@ -43,8 +43,8 @@ class BackgroundProgress : public HBoxContainer { _THREAD_SAFE_CLASS_ struct Task { - HBoxContainer *hb; - ProgressBar *progress; + HBoxContainer *hb = nullptr; + ProgressBar *progress = nullptr; }; Map<String, Task> tasks; @@ -70,9 +70,9 @@ class ProgressDialog : public PopupPanel { GDCLASS(ProgressDialog, PopupPanel); struct Task { String task; - VBoxContainer *vb; - ProgressBar *progress; - Label *state; + VBoxContainer *vb = nullptr; + ProgressBar *progress = nullptr; + Label *state = nullptr; }; HBoxContainer *cancel_hb; Button *cancel; diff --git a/editor/project_export.cpp b/editor/project_export.cpp index e8c2b1f954..68710920a5 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -262,13 +262,13 @@ void ProjectExportDialog::_edit_preset(int p_index) { } export_button->set_disabled(true); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); } else { export_error->hide(); export_templates_error->hide(); export_button->set_disabled(false); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } custom_features->set_text(current->get_custom_features()); @@ -586,7 +586,7 @@ void ProjectExportDialog::_delete_preset_confirm() { int idx = presets->get_current(); _edit_preset(-1); export_button->set_disabled(true); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); EditorExport::get_singleton()->remove_export_preset(idx); _update_presets(); } @@ -721,14 +721,19 @@ void ProjectExportDialog::_fill_resource_tree() { } bool ProjectExportDialog::_fill_tree(EditorFileSystemDirectory *p_dir, TreeItem *p_item, Ref<EditorExportPreset> ¤t, bool p_only_scenes) { + p_item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); p_item->set_icon(0, presets->get_theme_icon("folder", "FileDialog")); p_item->set_text(0, p_dir->get_name() + "/"); + p_item->set_editable(0, true); + p_item->set_metadata(0, p_dir->get_path()); bool used = false; + bool checked = true; for (int i = 0; i < p_dir->get_subdir_count(); i++) { TreeItem *subdir = include_files->create_item(p_item); if (_fill_tree(p_dir->get_subdir(i), subdir, current, p_only_scenes)) { used = true; + checked = checked && subdir->is_checked(0); } else { memdelete(subdir); } @@ -750,10 +755,12 @@ bool ProjectExportDialog::_fill_tree(EditorFileSystemDirectory *p_dir, TreeItem file->set_editable(0, true); file->set_checked(0, current->has_export_file(path)); file->set_metadata(0, path); + checked = checked && file->is_checked(0); used = true; } + p_item->set_checked(0, checked); return used; } @@ -775,13 +782,53 @@ void ProjectExportDialog::_tree_changed() { String path = item->get_metadata(0); bool added = item->is_checked(0); - if (added) { - current->add_export_file(path); + if (path.ends_with("/")) { + _check_dir_recursive(item, added); } else { - current->remove_export_file(path); + if (added) { + current->add_export_file(path); + } else { + current->remove_export_file(path); + } + } + _refresh_parent_checks(item); // Makes parent folder checked if all files/folders are checked. +} + +void ProjectExportDialog::_check_dir_recursive(TreeItem *p_dir, bool p_checked) { + for (TreeItem *child = p_dir->get_children(); child; child = child->get_next()) { + String path = child->get_metadata(0); + + child->set_checked(0, p_checked); + if (path.ends_with("/")) { + _check_dir_recursive(child, p_checked); + } else { + if (p_checked) { + get_current_preset()->add_export_file(path); + } else { + get_current_preset()->remove_export_file(path); + } + } } } +void ProjectExportDialog::_refresh_parent_checks(TreeItem *p_item) { + TreeItem *parent = p_item->get_parent(); + if (!parent) { + return; + } + + bool checked = true; + for (TreeItem *child = parent->get_children(); child; child = child->get_next()) { + checked = checked && child->is_checked(0); + if (!checked) { + break; + } + } + parent->set_checked(0, checked); + + _refresh_parent_checks(parent); +} + void ProjectExportDialog::_export_pck_zip() { export_pck_zip->popup_file_dialog(); } @@ -809,19 +856,19 @@ void ProjectExportDialog::_validate_export_path(const String &p_path) { bool invalid_path = (p_path.get_file().get_basename() == ""); // Check if state change before needlessly messing with signals - if (invalid_path && export_project->get_ok()->is_disabled()) { + if (invalid_path && export_project->get_ok_button()->is_disabled()) { return; } - if (!invalid_path && !export_project->get_ok()->is_disabled()) { + if (!invalid_path && !export_project->get_ok_button()->is_disabled()) { return; } if (invalid_path) { - export_project->get_ok()->set_disabled(true); - export_project->get_line_edit()->disconnect_compat("text_entered", export_project, "_file_entered"); + export_project->get_ok_button()->set_disabled(true); + export_project->get_line_edit()->disconnect("text_entered", Callable(export_project, "_file_entered")); } else { - export_project->get_ok()->set_disabled(false); - export_project->get_line_edit()->connect_compat("text_entered", export_project, "_file_entered"); + export_project->get_ok_button()->set_disabled(false); + export_project->get_line_edit()->connect("text_entered", Callable(export_project, "_file_entered")); } } @@ -853,9 +900,9 @@ void ProjectExportDialog::_export_project() { // with _validate_export_path. // FIXME: This is a hack, we should instead change EditorFileDialog to allow // disabling validation by the "text_entered" signal. - if (!export_project->get_line_edit()->is_connected_compat("text_entered", export_project, "_file_entered")) { - export_project->get_ok()->set_disabled(false); - export_project->get_line_edit()->connect_compat("text_entered", export_project, "_file_entered"); + if (!export_project->get_line_edit()->is_connected("text_entered", Callable(export_project, "_file_entered"))) { + export_project->get_ok_button()->set_disabled(false); + export_project->get_line_edit()->connect("text_entered", Callable(export_project, "_file_entered")); } export_project->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); @@ -1137,26 +1184,26 @@ ProjectExportDialog::ProjectExportDialog() { delete_confirm = memnew(ConfirmationDialog); add_child(delete_confirm); - delete_confirm->get_ok()->set_text(TTR("Delete")); + delete_confirm->get_ok_button()->set_text(TTR("Delete")); delete_confirm->connect("confirmed", callable_mp(this, &ProjectExportDialog::_delete_preset_confirm)); // Export buttons, dialogs and errors. updating = false; - get_cancel()->set_text(TTR("Close")); - get_ok()->set_text(TTR("Export PCK/Zip")); + get_cancel_button()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Export PCK/Zip")); export_button = add_button(TTR("Export Project"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "export"); export_button->connect("pressed", callable_mp(this, &ProjectExportDialog::_export_project)); // Disable initially before we select a valid preset export_button->set_disabled(true); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); export_all_dialog = memnew(ConfirmationDialog); add_child(export_all_dialog); export_all_dialog->set_title("Export All"); export_all_dialog->set_text(TTR("Export mode?")); - export_all_dialog->get_ok()->hide(); + export_all_dialog->get_ok_button()->hide(); export_all_dialog->add_button(TTR("Debug"), true, "debug"); export_all_dialog->add_button(TTR("Release"), true, "release"); export_all_dialog->connect("custom_action", callable_mp(this, &ProjectExportDialog::_export_all_dialog_action)); diff --git a/editor/project_export.h b/editor/project_export.h index 026daac2ad..b8ca0dd9f2 100644 --- a/editor/project_export.h +++ b/editor/project_export.h @@ -123,6 +123,8 @@ private: void _fill_resource_tree(); bool _fill_tree(EditorFileSystemDirectory *p_dir, TreeItem *p_item, Ref<EditorExportPreset> ¤t, bool p_only_scenes); void _tree_changed(); + void _check_dir_recursive(TreeItem *p_dir, bool p_checked); + void _refresh_parent_checks(TreeItem *p_item); Variant get_drag_data_fw(const Point2 &p_point, Control *p_from); bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index e3c2ba83f2..ad0c9532d8 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -61,6 +61,7 @@ class ProjectDialog : public ConfirmationDialog { GDCLASS(ProjectDialog, ConfirmationDialog); public: + bool is_folder_empty = true; enum Mode { MODE_NEW, MODE_IMPORT, @@ -159,7 +160,7 @@ private: if (valid_path == "") { set_message(TTR("The path specified doesn't exist."), MESSAGE_ERROR); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } @@ -173,7 +174,7 @@ private: if (valid_install_path == "") { set_message(TTR("The path specified doesn't exist."), MESSAGE_ERROR, INSTALL_PATH); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } } @@ -188,7 +189,7 @@ private: if (!pkg) { set_message(TTR("Error opening package file (it's not in ZIP format)."), MESSAGE_ERROR); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); unzClose(pkg); return ""; } @@ -209,7 +210,7 @@ private: if (ret == UNZ_END_OF_LIST_OF_FILE) { set_message(TTR("Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."), MESSAGE_ERROR); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); unzClose(pkg); return ""; } @@ -218,7 +219,7 @@ private: // check if the specified install folder is empty, even though this is not an error, it is good to check here d->list_dir_begin(); - bool is_empty = true; + is_folder_empty = true; String n = d->get_next(); while (n != String()) { if (!n.begins_with(".")) { @@ -226,17 +227,17 @@ private: // and hidden files/folders to be present. // For instance, this lets users initialize a Git repository // and still be able to create a project in the directory afterwards. - is_empty = false; + is_folder_empty = false; break; } n = d->get_next(); } d->list_dir_end(); - if (!is_empty) { + if (!is_folder_empty) { set_message(TTR("Please choose an empty folder."), MESSAGE_WARNING, INSTALL_PATH); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } @@ -244,21 +245,21 @@ private: set_message(TTR("Please choose a \"project.godot\" or \".zip\" file."), MESSAGE_ERROR); memdelete(d); install_path_container->hide(); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } } else if (valid_path.ends_with("zip")) { set_message(TTR("This directory already contains a Godot project."), MESSAGE_ERROR, INSTALL_PATH); memdelete(d); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return ""; } } else { // check if the specified folder is empty, even though this is not an error, it is good to check here d->list_dir_begin(); - bool is_empty = true; + is_folder_empty = true; String n = d->get_next(); while (n != String()) { if (!n.begins_with(".")) { @@ -266,25 +267,25 @@ private: // and hidden files/folders to be present. // For instance, this lets users initialize a Git repository // and still be able to create a project in the directory afterwards. - is_empty = false; + is_folder_empty = false; break; } n = d->get_next(); } d->list_dir_end(); - if (!is_empty) { - set_message(TTR("Please choose an empty folder."), MESSAGE_ERROR); + if (!is_folder_empty) { + set_message(TTR("The selected path is not empty. Choosing an empty folder is highly recommended."), MESSAGE_WARNING); memdelete(d); - get_ok()->set_disabled(true); - return ""; + get_ok_button()->set_disabled(false); + return valid_path; } } set_message(""); set_message("", MESSAGE_SUCCESS, INSTALL_PATH); memdelete(d); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); return valid_path; } @@ -319,14 +320,14 @@ private: if (p.ends_with("project.godot")) { p = p.get_base_dir(); install_path_container->hide(); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } else if (p.ends_with(".zip")) { install_path->set_text(p.get_base_dir()); install_path_container->show(); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } else { set_message(TTR("Please choose a \"project.godot\" or \".zip\" file."), MESSAGE_ERROR); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); return; } } @@ -337,7 +338,7 @@ private: if (p.ends_with(".zip")) { install_path->call_deferred("grab_focus"); } else { - get_ok()->call_deferred("grab_focus"); + get_ok_button()->call_deferred("grab_focus"); } } @@ -345,14 +346,14 @@ private: String sp = p_path.simplify_path(); project_path->set_text(sp); _path_text_changed(sp); - get_ok()->call_deferred("grab_focus"); + get_ok_button()->call_deferred("grab_focus"); } void _install_path_selected(const String &p_path) { String sp = p_path.simplify_path(); install_path->set_text(sp); _path_text_changed(sp); - get_ok()->call_deferred("grab_focus"); + get_ok_button()->call_deferred("grab_focus"); } void _browse_path() { @@ -416,6 +417,11 @@ private: } } + void _nonempty_confirmation_ok_pressed() { + is_folder_empty = true; + ok_pressed(); + } + void ok_pressed() override { String dir = project_path->get_text(); @@ -454,6 +460,18 @@ private: } else { if (mode == MODE_NEW) { + // Before we create a project, check that the target folder is empty. + // If not, we need to ask the user if they're sure they want to do this. + if (!is_folder_empty) { + ConfirmationDialog *cd = memnew(ConfirmationDialog); + cd->set_title(TTR("Warning: This folder is not empty")); + cd->set_text(TTR("You are about to create a Godot project in a non-empty folder.\nThe entire contents of this folder will be imported as project resources!\n\nAre you sure you wish to continue?")); + cd->get_ok_button()->connect("pressed", callable_mp(this, &ProjectDialog::_nonempty_confirmation_ok_pressed)); + get_parent()->add_child(cd); + cd->popup_centered(); + cd->grab_focus(); + return; + } ProjectSettings::CustomMap initial_settings; if (rasterizer_button_group->get_pressed_button()->get_meta("driver_name") == "Vulkan") { initial_settings["rendering/quality/driver/driver_name"] = "Vulkan"; @@ -666,14 +684,14 @@ public: install_browse->hide(); set_title(TTR("Rename Project")); - get_ok()->set_text(TTR("Rename")); + get_ok_button()->set_text(TTR("Rename")); name_container->show(); status_rect->hide(); msg->hide(); install_path_container->hide(); install_status_rect->hide(); rasterizer_container->hide(); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); ProjectSettings *current = memnew(ProjectSettings); @@ -682,7 +700,7 @@ public: set_message(vformat(TTR("Couldn't load project.godot in project path (error %d). It may be missing or corrupted."), err), MESSAGE_ERROR); status_rect->show(); msg->show(); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); } else if (current->has_setting("application/config/name")) { String proj = current->get("application/config/name"); project_name->set_text(proj); @@ -720,7 +738,7 @@ public: if (mode == MODE_IMPORT) { set_title(TTR("Import Existing Project")); - get_ok()->set_text(TTR("Import & Edit")); + get_ok_button()->set_text(TTR("Import & Edit")); name_container->hide(); install_path_container->hide(); rasterizer_container->hide(); @@ -728,7 +746,7 @@ public: } else if (mode == MODE_NEW) { set_title(TTR("Create New Project")); - get_ok()->set_text(TTR("Create & Edit")); + get_ok_button()->set_text(TTR("Create & Edit")); name_container->show(); install_path_container->hide(); rasterizer_container->show(); @@ -737,7 +755,7 @@ public: } else if (mode == MODE_INSTALL) { set_title(TTR("Install Project:") + " " + zip_title); - get_ok()->set_text(TTR("Install & Edit")); + get_ok_button()->set_text(TTR("Install & Edit")); project_name->set_text(zip_title); name_container->show(); install_path_container->hide(); @@ -786,6 +804,7 @@ public: project_path = memnew(LineEdit); project_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); + project_path->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); pphb->add_child(project_path); install_path_container = memnew(VBoxContainer); @@ -800,6 +819,7 @@ public: install_path = memnew(LineEdit); install_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); + install_path->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); iphb->add_child(install_path); // status icon @@ -938,7 +958,7 @@ public: } break; case NOTIFICATION_DRAW: { if (hover) { - draw_style_box(get_theme_stylebox("hover", "Tree"), Rect2(Point2(), get_size() - Size2(10, 0) * EDSCALE)); + draw_style_box(get_theme_stylebox("hover", "Tree"), Rect2(Point2(), get_size())); } } break; } @@ -964,13 +984,13 @@ public: String path; String icon; String main_scene; - uint64_t last_edited; - bool favorite; - bool grayed; - bool missing; - int version; + uint64_t last_edited = 0; + bool favorite = false; + bool grayed = false; + bool missing = false; + int version = 0; - ProjectListItemControl *control; + ProjectListItemControl *control = nullptr; Item() {} @@ -1056,7 +1076,7 @@ private: }; struct ProjectListComparator { - FilterOption order_option; + FilterOption order_option = FilterOption::EDIT_DATE; // operator< _FORCE_INLINE_ bool operator()(const ProjectList::Item &a, const ProjectList::Item &b) const { @@ -1349,6 +1369,7 @@ void ProjectList::create_project_item_control(int p_index) { vb->add_child(ec); Label *title = memnew(Label(!item.missing ? item.project_name : TTR("Missing Project"))); title->add_theme_font_override("font", get_theme_font("title", "EditorFonts")); + title->add_theme_font_size_override("font_size", get_theme_font_size("title_size", "EditorFonts")); title->add_theme_color_override("font_color", font_color); title->set_clip_text(true); vb->add_child(title); @@ -1375,6 +1396,7 @@ void ProjectList::create_project_item_control(int p_index) { } Label *fpath = memnew(Label(item.path)); + fpath->set_structured_text_bidi_override(Control::STRUCTURED_TEXT_FILE); path_hb->add_child(fpath); fpath->set_h_size_flags(Control::SIZE_EXPAND_FILL); fpath->set_modulate(Color(1, 1, 1, 0.5)); @@ -1705,12 +1727,16 @@ void ProjectList::erase_selected_projects() { void ProjectList::_panel_draw(Node *p_hb) { Control *hb = Object::cast_to<Control>(p_hb); - hb->draw_line(Point2(0, hb->get_size().y + 1), Point2(hb->get_size().x - 10, hb->get_size().y + 1), get_theme_color("guide_color", "Tree")); + if (is_layout_rtl() && get_v_scrollbar()->is_visible_in_tree()) { + hb->draw_line(Point2(get_v_scrollbar()->get_minimum_size().x, hb->get_size().y + 1), Point2(hb->get_size().x, hb->get_size().y + 1), get_theme_color("guide_color", "Tree")); + } else { + hb->draw_line(Point2(0, hb->get_size().y + 1), Point2(hb->get_size().x, hb->get_size().y + 1), get_theme_color("guide_color", "Tree")); + } String key = _projects[p_hb->get_index()].project_key; if (_selected_project_keys.has(key)) { - hb->draw_style_box(get_theme_stylebox("selected", "Tree"), Rect2(Point2(), hb->get_size() - Size2(10, 0) * EDSCALE)); + hb->draw_style_box(get_theme_stylebox("selected", "Tree"), Rect2(Point2(), hb->get_size())); } } @@ -1796,6 +1822,11 @@ void ProjectList::_bind_methods() { void ProjectManager::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_TRANSLATION_CHANGED: + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: { + settings_hb->set_anchors_and_margins_preset(Control::PRESET_TOP_RIGHT); + update(); + } break; case NOTIFICATION_ENTER_TREE: { search_box->set_right_icon(get_theme_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); @@ -1823,7 +1854,7 @@ void ProjectManager::_notification(int p_what) { } } break; case NOTIFICATION_VISIBILITY_CHANGED: { - set_process_unhandled_input(is_visible_in_tree()); + set_process_unhandled_key_input(is_visible_in_tree()); } break; case NOTIFICATION_WM_CLOSE_REQUEST: { _dim_window(); @@ -1862,7 +1893,7 @@ void ProjectManager::_update_project_buttons() { erase_missing_btn->set_disabled(!_project_list->is_any_project_missing()); } -void ProjectManager::_unhandled_input(const Ref<InputEvent> &p_ev) { +void ProjectManager::_unhandled_key_input(const Ref<InputEvent> &p_ev) { Ref<InputEventKey> k = p_ev; if (k.is_valid()) { @@ -2087,7 +2118,7 @@ void ProjectManager::_run_project_confirm() { if (selected_main == "") { run_error_diag->set_text(TTR("Can't run project: no main scene defined.\nPlease edit the project and set the main scene in the Project Settings under the \"Application\" category.")); run_error_diag->popup_centered(); - return; + continue; } const String &selected = selected_list[i].project_key; @@ -2097,7 +2128,7 @@ void ProjectManager::_run_project_confirm() { if (!DirAccess::exists(path.plus_file(ProjectSettings::IMPORTED_FILES_PATH.right(6)))) { run_error_diag->set_text(TTR("Can't run project: Assets need to be imported.\nPlease edit the project to trigger the initial import.")); run_error_diag->popup_centered(); - return; + continue; } print_line("Running project: " + path + " (" + selected + ")"); @@ -2290,8 +2321,8 @@ void ProjectManager::_files_dropped(PackedStringArray p_files, int p_screen) { memdelete(dir); } if (confirm) { - multi_scan_ask->get_ok()->disconnect("pressed", callable_mp(this, &ProjectManager::_scan_multiple_folders)); - multi_scan_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_scan_multiple_folders), varray(folders)); + multi_scan_ask->get_ok_button()->disconnect("pressed", callable_mp(this, &ProjectManager::_scan_multiple_folders)); + multi_scan_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_scan_multiple_folders), varray(folders)); multi_scan_ask->set_text( vformat(TTR("Are you sure to scan %s folders for existing Godot projects?\nThis could take a while."), folders.size())); multi_scan_ask->popup_centered(); @@ -2326,7 +2357,7 @@ void ProjectManager::_on_search_term_changed(const String &p_term) { void ProjectManager::_bind_methods() { ClassDB::bind_method("_exit_dialog", &ProjectManager::_exit_dialog); - ClassDB::bind_method("_unhandled_input", &ProjectManager::_unhandled_input); + ClassDB::bind_method("_unhandled_key_input", &ProjectManager::_unhandled_key_input); ClassDB::bind_method("_update_project_buttons", &ProjectManager::_update_project_buttons); } @@ -2348,12 +2379,24 @@ ProjectManager::ProjectManager() { switch (display_scale) { case 0: { - // Try applying a suitable display scale automatically + // Try applying a suitable display scale automatically. #ifdef OSX_ENABLED editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale()); #else const int screen = DisplayServer::get_singleton()->window_get_current_screen(); - editor_set_scale(DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).x > 2000 ? 2.0 : 1.0); + float scale; + if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) { + // hiDPI display. + scale = 2.0; + } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) { + // Small loDPI display. Use a smaller display scale so that editor elements fit more easily. + // Icons won't look great, but this is better than having editor elements overflow from its window. + scale = 0.75; + } else { + scale = 1.0; + } + + editor_set_scale(scale); #endif } break; @@ -2375,9 +2418,9 @@ ProjectManager::ProjectManager() { case 6: editor_set_scale(2.0); break; - default: { + default: editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale")); - } break; + break; } // Define a minimum window size to prevent UI elements from overlapping or being cut off @@ -2387,10 +2430,13 @@ ProjectManager::ProjectManager() { DisplayServer::get_singleton()->window_set_size(DisplayServer::get_singleton()->window_get_size() * MAX(1, EDSCALE)); } - String cp; - cp += 0xA9; // TRANSLATORS: This refers to the application where users manage their Godot projects. - DisplayServer::get_singleton()->window_set_title(VERSION_NAME + String(" - ") + TTR("Project Manager") + " - " + cp + " 2007-2020 Juan Linietsky, Ariel Manzur & Godot Contributors"); + if (TS->is_locale_right_to_left(TranslationServer::get_singleton()->get_tool_locale())) { + // For RTL languages, embed translated part of the title (using control characters) to ensure correct order. + DisplayServer::get_singleton()->window_set_title(VERSION_NAME + String(" - ") + String::chr(0x202B) + TTR("Project Manager") + String::chr(0x202C) + String::chr(0x200E) + " - " + String::chr(0xA9) + " 2007-2020 Juan Linietsky, Ariel Manzur & Godot Contributors"); + } else { + DisplayServer::get_singleton()->window_set_title(VERSION_NAME + String(" - ") + TTR("Project Manager") + " - " + String::chr(0xA9) + " 2007-2020 Juan Linietsky, Ariel Manzur & Godot Contributors"); + } FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("filesystem/file_dialog/show_hidden_files")); @@ -2522,9 +2568,10 @@ ProjectManager::ProjectManager() { { // Version info and language options - HBoxContainer *settings_hb = memnew(HBoxContainer); + settings_hb = memnew(HBoxContainer); settings_hb->set_alignment(BoxContainer::ALIGN_END); settings_hb->set_h_grow_direction(Control::GROW_DIRECTION_BEGIN); + settings_hb->set_anchors_and_margins_preset(Control::PRESET_TOP_RIGHT); Label *version_label = memnew(Label); String hash = String(VERSION_HASH); @@ -2568,7 +2615,6 @@ ProjectManager::ProjectManager() { settings_hb->add_child(language_btn); center_box->add_child(settings_hb); - settings_hb->set_anchors_and_margins_preset(Control::PRESET_TOP_RIGHT); } if (StreamPeerSSL::is_available()) { @@ -2583,9 +2629,9 @@ ProjectManager::ProjectManager() { { // Dialogs language_restart_ask = memnew(ConfirmationDialog); - language_restart_ask->get_ok()->set_text(TTR("Restart Now")); - language_restart_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_restart_confirm)); - language_restart_ask->get_cancel()->set_text(TTR("Continue")); + language_restart_ask->get_ok_button()->set_text(TTR("Restart Now")); + language_restart_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_restart_confirm)); + language_restart_ask->get_cancel_button()->set_text(TTR("Continue")); add_child(language_restart_ask); scan_dir = memnew(FileDialog); @@ -2597,31 +2643,31 @@ ProjectManager::ProjectManager() { scan_dir->connect("dir_selected", callable_mp(this, &ProjectManager::_scan_begin)); erase_missing_ask = memnew(ConfirmationDialog); - erase_missing_ask->get_ok()->set_text(TTR("Remove All")); - erase_missing_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_erase_missing_projects_confirm)); + erase_missing_ask->get_ok_button()->set_text(TTR("Remove All")); + erase_missing_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_erase_missing_projects_confirm)); add_child(erase_missing_ask); erase_ask = memnew(ConfirmationDialog); - erase_ask->get_ok()->set_text(TTR("Remove")); - erase_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_erase_project_confirm)); + erase_ask->get_ok_button()->set_text(TTR("Remove")); + erase_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_erase_project_confirm)); add_child(erase_ask); multi_open_ask = memnew(ConfirmationDialog); - multi_open_ask->get_ok()->set_text(TTR("Edit")); - multi_open_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_open_selected_projects)); + multi_open_ask->get_ok_button()->set_text(TTR("Edit")); + multi_open_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_open_selected_projects)); add_child(multi_open_ask); multi_run_ask = memnew(ConfirmationDialog); - multi_run_ask->get_ok()->set_text(TTR("Run")); - multi_run_ask->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_run_project_confirm)); + multi_run_ask->get_ok_button()->set_text(TTR("Run")); + multi_run_ask->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_run_project_confirm)); add_child(multi_run_ask); multi_scan_ask = memnew(ConfirmationDialog); - multi_scan_ask->get_ok()->set_text(TTR("Scan")); + multi_scan_ask->get_ok_button()->set_text(TTR("Scan")); add_child(multi_scan_ask); ask_update_settings = memnew(ConfirmationDialog); - ask_update_settings->get_ok()->connect("pressed", callable_mp(this, &ProjectManager::_confirm_update_settings)); + ask_update_settings->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_confirm_update_settings)); add_child(ask_update_settings); npdialog = memnew(ProjectDialog); @@ -2638,7 +2684,7 @@ ProjectManager::ProjectManager() { open_templates = memnew(ConfirmationDialog); open_templates->set_text(TTR("You currently don't have any projects.\nWould you like to explore official example projects in the Asset Library?")); - open_templates->get_ok()->set_text(TTR("Open Asset Library")); + open_templates->get_ok_button()->set_text(TTR("Open Asset Library")); open_templates->connect("confirmed", callable_mp(this, &ProjectManager::_open_asset_library)); add_child(open_templates); } diff --git a/editor/project_manager.h b/editor/project_manager.h index 407dba0c94..0eb063e196 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -74,6 +74,8 @@ class ProjectManager : public Control { ConfirmationDialog *ask_update_settings; ConfirmationDialog *open_templates; + HBoxContainer *settings_hb; + AcceptDialog *run_error_diag; AcceptDialog *dialog_error; ProjectDialog *npdialog; @@ -98,6 +100,7 @@ class ProjectManager : public Control { void _restart_confirm(); void _exit_dialog(); void _confirm_update_settings(); + void _nonempty_confirmation_ok_pressed(); void _load_recent_projects(); void _on_project_created(const String &dir); @@ -109,7 +112,7 @@ class ProjectManager : public Control { void _install_project(const String &p_zip_path, const String &p_title); void _dim_window(); - void _unhandled_input(const Ref<InputEvent> &p_ev); + void _unhandled_key_input(const Ref<InputEvent> &p_ev); void _files_dropped(PackedStringArray p_files, int p_screen); void _on_order_option_changed(int p_idx); diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index d231e3f353..9995c6ad65 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -98,7 +98,8 @@ void ProjectSettingsEditor::_add_setting() { // Initialize the property with the default value for the given type. // The type list starts at 1 (as we exclude Nil), so add 1 to the selected value. Callable::CallError ce; - const Variant value = Variant::construct(Variant::Type(type->get_selected() + 1), nullptr, 0, ce); + Variant value; + Variant::construct(Variant::Type(type->get_selected() + 1), value, nullptr, 0, ce); undo_redo->create_action(TTR("Add Project Setting")); undo_redo->add_do_property(ps, setting, value); @@ -477,6 +478,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { del_confirmation->connect("confirmed", callable_mp(this, &ProjectSettingsEditor::_delete_setting), varray(true)); add_child(del_confirmation); - get_ok()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Close")); set_hide_on_ok(true); } diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index b6bd6345df..847af0f2c2 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -345,7 +345,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: checks20[i]->hide(); } - type = (p_variant.get_type() != Variant::NIL && p_variant.get_type() != Variant::_RID && p_type != Variant::OBJECT) ? p_variant.get_type() : p_type; + type = (p_variant.get_type() != Variant::NIL && p_variant.get_type() != Variant::RID && p_type != Variant::OBJECT) ? p_variant.get_type() : p_type; switch (type) { case Variant::BOOL: { @@ -501,7 +501,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: List<String> names; names.push_back("value:"); config_value_editors(1, 1, 50, names); - value_editor[0]->set_text(String::num(v)); + value_editor[0]->set_text(TS->format_number(String::num(v))); } } break; @@ -1389,6 +1389,7 @@ void CustomPropertyEditor::_draw_easing() { bool flip = hint_text == "attenuation"; Ref<Font> f = easing_draw->get_theme_font("font", "Label"); + int font_size = easing_draw->get_theme_font_size("font_size", "Label"); Color color = easing_draw->get_theme_color("font_color", "Label"); for (int i = 1; i <= points; i++) { @@ -1406,7 +1407,7 @@ void CustomPropertyEditor::_draw_easing() { prev = h; } - f->draw(ci, Point2(10, 10 + f->get_ascent()), String::num(exp, 2), color); + f->draw_string(ci, Point2(10, 10 + f->get_ascent(font_size)), String::num(exp, 2), HALIGN_LEFT, -1, font_size, color); } void CustomPropertyEditor::_text_edit_changed() { @@ -1432,7 +1433,7 @@ void CustomPropertyEditor::_modified(String p_string) { updating = true; switch (type) { case Variant::INT: { - String text = value_editor[0]->get_text(); + String text = TS->parse_number(value_editor[0]->get_text()); Ref<Expression> expr; expr.instance(); Error err = expr->parse(text); @@ -1447,7 +1448,7 @@ void CustomPropertyEditor::_modified(String p_string) { } break; case Variant::FLOAT: { if (hint != PROPERTY_HINT_EXP_EASING) { - String text = value_editor[0]->get_text(); + String text = TS->parse_number(value_editor[0]->get_text()); v = _parse_real_expression(text); emit_signal("variant_changed"); } diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp index 27b11e4fb5..220031d2dc 100644 --- a/editor/property_selector.cpp +++ b/editor/property_selector.cpp @@ -31,6 +31,7 @@ #include "property_selector.h" #include "core/os/keyboard.h" +#include "editor/doc_tools.h" #include "editor/editor_node.h" #include "editor_scale.h" @@ -95,7 +96,7 @@ void PropertySelector::_update_search() { } else if (type != Variant::NIL) { Variant v; Callable::CallError ce; - v = Variant::construct(type, nullptr, 0, ce); + Variant::construct(type, v, nullptr, 0, ce); v.get_property_list(&props); } else { @@ -200,7 +201,7 @@ void PropertySelector::_update_search() { if (type != Variant::NIL) { Variant v; Callable::CallError ce; - v = Variant::construct(type, nullptr, 0, ce); + Variant::construct(type, v, nullptr, 0, ce); v.get_method_list(&methods); } else { Object *obj = ObjectDB::get_instance(script); @@ -320,7 +321,7 @@ void PropertySelector::_update_search() { } } - get_ok()->set_disabled(root->get_children() == nullptr); + get_ok_button()->set_disabled(root->get_children() == nullptr); } void PropertySelector::_confirmed() { @@ -349,7 +350,7 @@ void PropertySelector::_item_selected() { class_type = base_type; } - DocData *dd = EditorHelp::get_doc_data(); + DocTools *dd = EditorHelp::get_doc_data(); String text; if (properties) { @@ -552,8 +553,8 @@ PropertySelector::PropertySelector() { search_box->connect("gui_input", callable_mp(this, &PropertySelector::_sbox_input)); search_options = memnew(Tree); vbc->add_margin_child(TTR("Matches:"), search_options, true); - get_ok()->set_text(TTR("Open")); - get_ok()->set_disabled(true); + get_ok_button()->set_text(TTR("Open")); + get_ok_button()->set_disabled(true); register_text_enter(search_box); set_hide_on_ok(false); search_options->connect("item_activated", callable_mp(this, &PropertySelector::_confirmed)); diff --git a/editor/pvrtc_compress.cpp b/editor/pvrtc_compress.cpp deleted file mode 100644 index 23bcf9540e..0000000000 --- a/editor/pvrtc_compress.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/*************************************************************************/ -/* pvrtc_compress.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "pvrtc_compress.h" - -#include "core/io/resource_loader.h" -#include "core/io/resource_saver.h" -#include "core/os/dir_access.h" -#include "core/os/file_access.h" -#include "core/os/os.h" -#include "editor_settings.h" -#include "scene/resources/texture.h" - -static void (*_base_image_compress_pvrtc2_func)(Image *) = nullptr; -static void (*_base_image_compress_pvrtc4_func)(Image *) = nullptr; - -static void _compress_image(Image::CompressMode p_mode, Image *p_image) { - String ttpath = EditorSettings::get_singleton()->get("filesystem/import/pvrtc_texture_tool"); - - if (ttpath.strip_edges() == "" || !FileAccess::exists(ttpath)) { - switch (p_mode) { - case Image::COMPRESS_PVRTC2: - if (_base_image_compress_pvrtc2_func) { - _base_image_compress_pvrtc2_func(p_image); - } else if (_base_image_compress_pvrtc4_func) { - _base_image_compress_pvrtc4_func(p_image); - } - break; - case Image::COMPRESS_PVRTC4: - if (_base_image_compress_pvrtc4_func) { - _base_image_compress_pvrtc4_func(p_image); - } - break; - default: - ERR_FAIL_MSG("Unsupported Image compress mode used in PVRTC module."); - } - return; - } - - String tmppath = EditorSettings::get_singleton()->get_cache_dir(); - String src_img = tmppath.plus_file("_tmp_src_img.png"); - String dst_img = tmppath.plus_file("_tmp_dst_img.pvr"); - - List<String> args; - args.push_back("-i"); - args.push_back(src_img); - args.push_back("-o"); - args.push_back(dst_img); - args.push_back("-f"); - - switch (p_mode) { - case Image::COMPRESS_PVRTC2: - args.push_back("PVRTC2"); - break; - case Image::COMPRESS_PVRTC4: - args.push_back("PVRTC4"); - break; - case Image::COMPRESS_ETC: - args.push_back("ETC"); - break; - default: - ERR_FAIL_MSG("Unsupported Image compress mode used in PVRTC module."); - } - - if (EditorSettings::get_singleton()->get("filesystem/import/pvrtc_fast_conversion").operator bool()) { - args.push_back("-pvrtcfast"); - } - if (p_image->has_mipmaps()) { - args.push_back("-m"); - } - - // Save source PNG. - Ref<ImageTexture> t = memnew(ImageTexture); - t->create_from_image(Ref<Image>(p_image)); - ResourceSaver::save(src_img, t); - - Error err = OS::get_singleton()->execute(ttpath, args, true); - if (err != OK) { - // Clean up generated files. - DirAccess::remove_file_or_error(src_img); - DirAccess::remove_file_or_error(dst_img); - ERR_FAIL_MSG("Could not execute PVRTC tool: " + ttpath); - } - - t = ResourceLoader::load(dst_img, "Texture2D"); - if (t.is_null()) { - // Clean up generated files. - DirAccess::remove_file_or_error(src_img); - DirAccess::remove_file_or_error(dst_img); - ERR_FAIL_MSG("Can't load back converted image using PVRTC tool."); - } - - p_image->copy_internals_from(t->get_data()); - - // Clean up generated files. - DirAccess::remove_file_or_error(src_img); - DirAccess::remove_file_or_error(dst_img); -} - -static void _compress_pvrtc2(Image *p_image) { - _compress_image(Image::COMPRESS_PVRTC2, p_image); -} - -static void _compress_pvrtc4(Image *p_image) { - _compress_image(Image::COMPRESS_PVRTC4, p_image); -} - -void _pvrtc_register_compressors() { - _base_image_compress_pvrtc2_func = Image::_image_compress_pvrtc2_func; - _base_image_compress_pvrtc4_func = Image::_image_compress_pvrtc4_func; - - Image::_image_compress_pvrtc2_func = _compress_pvrtc2; - Image::_image_compress_pvrtc4_func = _compress_pvrtc4; -} diff --git a/editor/pvrtc_compress.h b/editor/pvrtc_compress.h deleted file mode 100644 index 7b6c17d3c4..0000000000 --- a/editor/pvrtc_compress.h +++ /dev/null @@ -1,38 +0,0 @@ -/*************************************************************************/ -/* pvrtc_compress.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#ifndef PVRTC_COMPRESS_H -#define PVRTC_COMPRESS_H - -#include "core/io/image.h" - -void _pvrtc_register_compressors(); - -#endif // PVRTC_COMPRESS_H diff --git a/editor/quick_open.cpp b/editor/quick_open.cpp index e1308b4895..7ffe5bc9a7 100644 --- a/editor/quick_open.cpp +++ b/editor/quick_open.cpp @@ -107,11 +107,11 @@ void EditorQuickOpen::_update_search() { to_select->set_as_cursor(0); search_options->scroll_to_item(to_select); - get_ok()->set_disabled(false); + get_ok_button()->set_disabled(false); } else { search_options->deselect_all(); - get_ok()->set_disabled(true); + get_ok_button()->set_disabled(true); } } @@ -256,6 +256,6 @@ EditorQuickOpen::EditorQuickOpen() { search_options->add_theme_constant_override("draw_guides", 1); vbc->add_margin_child(TTR("Matches:"), search_options, true); - get_ok()->set_text(TTR("Open")); + get_ok_button()->set_text(TTR("Open")); set_hide_on_ok(false); } diff --git a/editor/quick_open.h b/editor/quick_open.h index 3b199f9561..a507a0da9c 100644 --- a/editor/quick_open.h +++ b/editor/quick_open.h @@ -49,7 +49,7 @@ class EditorQuickOpen : public ConfirmationDialog { struct Entry { String path; - float score; + float score = 0; }; struct EntryComparator { diff --git a/editor/rename_dialog.cpp b/editor/rename_dialog.cpp index 318324e56d..a60937a86b 100644 --- a/editor/rename_dialog.cpp +++ b/editor/rename_dialog.cpp @@ -286,7 +286,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und // ---- Dialog related set_min_size(Size2(383, 0)); - get_ok()->set_text(TTR("Rename")); + get_ok_button()->set_text(TTR("Rename")); Button *but_reset = add_button(TTR("Reset")); eh.errfunc = _error_handler; diff --git a/editor/reparent_dialog.cpp b/editor/reparent_dialog.cpp index 0ff27af7c1..c7f1a1b45d 100644 --- a/editor/reparent_dialog.cpp +++ b/editor/reparent_dialog.cpp @@ -87,7 +87,7 @@ ReparentDialog::ReparentDialog() { //cancel->connect("pressed", this,"_cancel"); - get_ok()->set_text(TTR("Reparent")); + get_ok_button()->set_text(TTR("Reparent")); } ReparentDialog::~ReparentDialog() { diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index add5047c99..72703623ab 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -114,7 +114,12 @@ void SceneTreeDock::_unhandled_key_input(Ref<InputEvent> p_event) { _tool_selected(TOOL_COPY_NODE_PATH); } else if (ED_IS_SHORTCUT("scene_tree/delete", p_event)) { _tool_selected(TOOL_ERASE); + } else { + return; } + + // Tool selection was successful, accept the event to stop propagation. + accept_event(); } void SceneTreeDock::instance(const String &p_file) { @@ -1068,14 +1073,14 @@ void SceneTreeDock::_notification(int p_what) { CanvasItemEditorPlugin *canvas_item_plugin = Object::cast_to<CanvasItemEditorPlugin>(editor_data->get_editor("2D")); if (canvas_item_plugin) { - canvas_item_plugin->get_canvas_item_editor()->connect_compat("item_lock_status_changed", scene_tree, "_update_tree"); - canvas_item_plugin->get_canvas_item_editor()->connect_compat("item_group_status_changed", scene_tree, "_update_tree"); + canvas_item_plugin->get_canvas_item_editor()->connect("item_lock_status_changed", Callable(scene_tree, "_update_tree")); + canvas_item_plugin->get_canvas_item_editor()->connect("item_group_status_changed", Callable(scene_tree, "_update_tree")); scene_tree->connect("node_changed", callable_mp((CanvasItem *)canvas_item_plugin->get_canvas_item_editor()->get_viewport_control(), &CanvasItem::update)); } Node3DEditorPlugin *spatial_editor_plugin = Object::cast_to<Node3DEditorPlugin>(editor_data->get_editor("3D")); - spatial_editor_plugin->get_spatial_editor()->connect_compat("item_lock_status_changed", scene_tree, "_update_tree"); - spatial_editor_plugin->get_spatial_editor()->connect_compat("item_group_status_changed", scene_tree, "_update_tree"); + spatial_editor_plugin->get_spatial_editor()->connect("item_lock_status_changed", Callable(scene_tree, "_update_tree")); + spatial_editor_plugin->get_spatial_editor()->connect("item_group_status_changed", Callable(scene_tree, "_update_tree")); button_add->set_icon(get_theme_icon("Add", "EditorIcons")); button_instance->set_icon(get_theme_icon("Instance", "EditorIcons")); @@ -1270,10 +1275,6 @@ void SceneTreeDock::_fill_path_renames(Vector<StringName> base_path, Vector<Stri } void SceneTreeDock::fill_path_renames(Node *p_node, Node *p_new_parent, List<Pair<NodePath, NodePath>> *p_renames) { - if (!bool(EDITOR_DEF("editors/animation/autorename_animation_tracks", true))) { - return; - } - Vector<StringName> base_path; Node *n = p_node->get_parent(); while (n) { @@ -1352,8 +1353,8 @@ void SceneTreeDock::perform_node_renames(Node *p_base, List<Pair<NodePath, NodeP break; } - // update if the node itself moved up/down the tree hirarchy - if (root_path == F->get().first) { + // update the node itself if it has a valid node path and has not been deleted + if (root_path == F->get().first && p != NodePath() && F->get().second != NodePath()) { NodePath abs_path = NodePath(String(root_path).plus_file(p)).simplified(); NodePath rel_path_new = F->get().second.rel_path_to(abs_path); @@ -1933,23 +1934,6 @@ void SceneTreeDock::_selection_changed() { _update_script_button(); } -Node *SceneTreeDock::_get_selection_group_tail(Node *p_node, List<Node *> p_list) { - Node *tail = p_node; - Node *parent = tail->get_parent(); - - for (int i = p_node->get_index(); i < parent->get_child_count(); i++) { - Node *sibling = parent->get_child(i); - - if (p_list.find(sibling)) { - tail = sibling; - } else { - break; - } - } - - return tail; -} - void SceneTreeDock::_do_create(Node *p_parent) { Object *c = create_dialog->instance_selected(); @@ -1994,6 +1978,9 @@ void SceneTreeDock::_do_create(Node *p_parent) { if (ms.height < 4) { ms.height = 40; } + if (ct->is_layout_rtl()) { + ct->set_position(ct->get_position() - Vector2(ms.x, 0)); + } ct->set_size(ms); } } @@ -2828,8 +2815,8 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel HBoxContainer *filter_hbc = memnew(HBoxContainer); filter_hbc->add_theme_constant_override("separate", 0); - ED_SHORTCUT("scene_tree/rename", TTR("Rename")); - ED_SHORTCUT("scene_tree/batch_rename", TTR("Batch Rename"), KEY_MASK_CMD | KEY_F2); + ED_SHORTCUT("scene_tree/rename", TTR("Rename"), KEY_F2); + ED_SHORTCUT("scene_tree/batch_rename", TTR("Batch Rename"), KEY_MASK_SHIFT | KEY_F2); ED_SHORTCUT("scene_tree/add_child_node", TTR("Add Child Node"), KEY_MASK_CMD | KEY_A); ED_SHORTCUT("scene_tree/instance_scene", TTR("Instance Child Scene")); ED_SHORTCUT("scene_tree/expand_collapse_all", TTR("Expand/Collapse All")); @@ -2958,6 +2945,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel quick_open = memnew(EditorQuickOpen); add_child(quick_open); quick_open->connect("quick_open", callable_mp(this, &SceneTreeDock::_quick_open)); + set_process_unhandled_key_input(true); delete_dialog = memnew(ConfirmationDialog); @@ -2994,7 +2982,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel clear_inherit_confirm = memnew(ConfirmationDialog); clear_inherit_confirm->set_text(TTR("Clear Inheritance? (No Undo!)")); - clear_inherit_confirm->get_ok()->set_text(TTR("Clear")); + clear_inherit_confirm->get_ok_button()->set_text(TTR("Clear")); add_child(clear_inherit_confirm); set_process_input(true); diff --git a/editor/scene_tree_dock.h b/editor/scene_tree_dock.h index c2c877bf68..2b3593358e 100644 --- a/editor/scene_tree_dock.h +++ b/editor/scene_tree_dock.h @@ -55,7 +55,6 @@ class SceneTreeDock : public VBoxContainer { GDCLASS(SceneTreeDock, VBoxContainer); enum Tool { - TOOL_NEW, TOOL_INSTANCE, TOOL_EXPAND_COLLAPSE, @@ -204,7 +203,6 @@ class SceneTreeDock : public VBoxContainer { bool _validate_no_foreign(); void _selection_changed(); void _update_script_button(); - Node *_get_selection_group_tail(Node *p_node, List<Node *> p_list); void _fill_path_renames(Vector<StringName> base_path, Vector<StringName> new_base_path, Node *p_node, List<Pair<NodePath, NodePath>> *p_renames); diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index 3ec012ce3c..685833da55 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -829,10 +829,6 @@ void SceneTreeEditor::set_display_foreign_nodes(bool p_display) { _update_tree(); } -bool SceneTreeEditor::get_display_foreign_nodes() const { - return display_foreign; -} - void SceneTreeEditor::set_valid_types(const Vector<StringName> &p_valid) { valid_types = p_valid; } diff --git a/editor/scene_tree_editor.h b/editor/scene_tree_editor.h index 9373ef41f9..e2bf9bc41d 100644 --- a/editor/scene_tree_editor.h +++ b/editor/scene_tree_editor.h @@ -138,7 +138,6 @@ public: void set_undo_redo(UndoRedo *p_undo_redo) { undo_redo = p_undo_redo; }; void set_display_foreign_nodes(bool p_display); - bool get_display_foreign_nodes() const; void set_marked(const Set<Node *> &p_marked, bool p_selectable = false, bool p_children_selectable = true); void set_marked(Node *p_marked, bool p_selectable = false, bool p_children_selectable = true); diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index b5f11fc6f9..9c3e381dc8 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -522,7 +522,7 @@ void ScriptCreateDialog::_browse_path(bool browse_parent, bool p_save) { if (p_save) { file_browse->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); file_browse->set_title(TTR("Open Script / Choose Location")); - file_browse->get_ok()->set_text(TTR("Open")); + file_browse->get_ok_button()->set_text(TTR("Open")); } else { file_browse->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); file_browse->set_title(TTR("Open Script")); @@ -686,7 +686,7 @@ void ScriptCreateDialog::_update_dialog() { builtin_warning_label->set_visible(is_built_in); if (is_built_in) { - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); parent_name->set_editable(true); parent_search_button->set_disabled(false); parent_browse_button->set_disabled(!can_inherit_from_file); @@ -694,7 +694,7 @@ void ScriptCreateDialog::_update_dialog() { } else if (is_new_script_created) { // New script created. - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); parent_name->set_editable(true); parent_search_button->set_disabled(false); parent_browse_button->set_disabled(!can_inherit_from_file); @@ -704,7 +704,7 @@ void ScriptCreateDialog::_update_dialog() { } else if (load_enabled) { // Script loaded. - get_ok()->set_text(TTR("Load")); + get_ok_button()->set_text(TTR("Load")); parent_name->set_editable(false); parent_search_button->set_disabled(true); parent_browse_button->set_disabled(true); @@ -712,7 +712,7 @@ void ScriptCreateDialog::_update_dialog() { _msg_path_valid(true, TTR("Will load an existing script file.")); } } else { - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); parent_name->set_editable(true); parent_search_button->set_disabled(false); parent_browse_button->set_disabled(!can_inherit_from_file); @@ -721,7 +721,7 @@ void ScriptCreateDialog::_update_dialog() { script_ok = false; } - get_ok()->set_disabled(!script_ok); + get_ok_button()->set_disabled(!script_ok); Callable entered_call = callable_mp(this, &ScriptCreateDialog::_path_entered); if (script_ok) { @@ -878,7 +878,7 @@ ScriptCreateDialog::ScriptCreateDialog() { file_browse->connect("file_selected", callable_mp(this, &ScriptCreateDialog::_file_selected)); file_browse->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); add_child(file_browse); - get_ok()->set_text(TTR("Create")); + get_ok_button()->set_text(TTR("Create")); alert = memnew(AcceptDialog); alert->get_label()->set_autowrap(true); alert->get_label()->set_align(Label::ALIGN_CENTER); diff --git a/editor/script_create_dialog.h b/editor/script_create_dialog.h index 40415ea209..a73be29259 100644 --- a/editor/script_create_dialog.h +++ b/editor/script_create_dialog.h @@ -86,8 +86,8 @@ class ScriptCreateDialog : public ConfirmationDialog { SCRIPT_ORIGIN_EDITOR, }; struct ScriptTemplateInfo { - int id; - ScriptOrigin origin; + int id = 0; + ScriptOrigin origin = ScriptOrigin::SCRIPT_ORIGIN_EDITOR; String dir; String name; String extension; diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index 864e5976b2..a29b6aded7 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -275,8 +275,8 @@ void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column last_wait_for_key = Ref<InputEventKey>(); press_a_key->popup_centered(Size2(250, 80) * EDSCALE); //press_a_key->grab_focus(); - press_a_key->get_ok()->set_focus_mode(Control::FOCUS_NONE); - press_a_key->get_cancel()->set_focus_mode(Control::FOCUS_NONE); + press_a_key->get_ok_button()->set_focus_mode(Control::FOCUS_NONE); + press_a_key->get_cancel_button()->set_focus_mode(Control::FOCUS_NONE); shortcut_configured = item; } else if (p_idx == 1) { //erase @@ -488,7 +488,7 @@ EditorSettingsDialog::EditorSettingsDialog() { timer->set_one_shot(true); add_child(timer); EditorSettings::get_singleton()->connect("settings_changed", callable_mp(this, &EditorSettingsDialog::_settings_changed)); - get_ok()->set_text(TTR("Close")); + get_ok_button()->set_text(TTR("Close")); updating = false; } diff --git a/editor/shader_globals_editor.cpp b/editor/shader_globals_editor.cpp index 915aec6d9a..8345c49a92 100644 --- a/editor/shader_globals_editor.cpp +++ b/editor/shader_globals_editor.cpp @@ -483,5 +483,8 @@ ShaderGlobalsEditor::ShaderGlobalsEditor() { } ShaderGlobalsEditor::~ShaderGlobalsEditor() { + if (is_visible_in_tree()) { + inspector->edit(nullptr); + } memdelete(interface); } diff --git a/editor/translations/af.po b/editor/translations/af.po index 55009e16ae..a42302460b 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -5,12 +5,13 @@ # Ray West <the.raxar@gmail.com>, 2017. # Julius Stopforth <jjstopforth@gmail.com>, 2018. # Isa Tippens <isatippens2@gmail.com>, 2019. +# Henry Geyser <thegoat187@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-03-28 09:36+0000\n" -"Last-Translator: Isa Tippens <isatippens2@gmail.com>\n" +"PO-Revision-Date: 2020-12-01 20:29+0000\n" +"Last-Translator: Henry Geyser <thegoat187@gmail.com>\n" "Language-Team: Afrikaans <https://hosted.weblate.org/projects/godot-engine/" "godot/af/>\n" "Language: af\n" @@ -18,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.6-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -27,7 +28,7 @@ msgstr "Ongeldige tiepe argument om te omskep(), gebruik TYPE_* konstante" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "Verwag 'n string van lengte 1 ('n karakter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -50,72 +51,71 @@ msgstr "Ongeldige operande vir operateur %s, %s en %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "" +msgstr "Ongeldige indeks van tipe %s vir basiese tipe %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Ongeldige benaming van indeks '%s' vir basiese tipe %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "" +msgstr "Ongeldige argument om '%s' te genereer" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Aan roep tot '%s':" #: core/ustring.cpp msgid "B" -msgstr "" +msgstr "B" #: core/ustring.cpp msgid "KiB" -msgstr "" +msgstr "KiB" #: core/ustring.cpp msgid "MiB" -msgstr "" +msgstr "MiB" #: core/ustring.cpp msgid "GiB" -msgstr "" +msgstr "GiB" #: core/ustring.cpp msgid "TiB" -msgstr "" +msgstr "TiB" #: core/ustring.cpp msgid "PiB" -msgstr "" +msgstr "PiB" #: core/ustring.cpp msgid "EiB" -msgstr "" +msgstr "EiB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Bevry" +msgstr "Bevry / Verniet" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Gebalanseer" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "" +msgstr "Spieel" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" -msgstr "" +msgstr "Tyd:" #: editor/animation_bezier_editor.cpp msgid "Value:" -msgstr "" +msgstr "Waarde:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Anim Voeg Sleutel by" +msgstr "Voeg Sleutel Hier" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -123,18 +123,16 @@ msgid "Duplicate Selected Key(s)" msgstr "Dupliseer Seleksie" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Delete Selected Key(s)" -msgstr "Skrap gekose lêers?" +msgstr "Skrap gekose sleutels" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "" +msgstr "Voeg Bezier Punt By" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Move Bezier Points" -msgstr "Skuif Gunsteling Op" +msgstr "Verskuif Bezier Punte" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -145,9 +143,8 @@ msgid "Anim Delete Keys" msgstr "Anim Skrap Sleutels" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Anim Verander Waarde" +msgstr "Anim Verander Sleutelraam Tyd" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" @@ -155,51 +152,44 @@ msgstr "Anim Verander Oorgang" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Anim Verander Transform" +msgstr "Anim Verander Transformasie" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Anim Verander Waarde" +msgstr "Anim Verander Sleutelraam Waarde" #: editor/animation_track_editor.cpp msgid "Anim Change Call" msgstr "Anim Verander Roep" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Anim Verander Waarde" +msgstr "Anim Herhaalde Verandering Van Sleutelraam Tye" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Anim Verander Oorgang" +msgstr "Anim Herhaalde Veranderinde Transisie" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Anim Verander Transform" +msgstr "Anim Herhaalde Verandering van Transformasie" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Anim Verander Waarde" +msgstr "Anim Herhaalde Verandering Van Sleutelraam Waarde" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Anim Verander Roep" +msgstr "Anim Herhaalde Verandering van Roep" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Length" -msgstr "Verander Anim Lente" +msgstr "Verander Animasie Lente" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "" +msgstr "Verander Animasie Omloop" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -1074,14 +1064,18 @@ msgstr "Eienaars van:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Verwyder geselekteerde lêers uit die projek? (geen ontdoen)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Die lêers wat verwyder word, word vereis deur ander hulpbronne sodat hulle " "reg kan werk.\n" @@ -1132,7 +1126,7 @@ msgstr "Verweerde Hulpbron Verkenner" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2389,11 +2383,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2401,7 +2400,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3707,6 +3706,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3761,15 +3770,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Dupliseer" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3800,10 +3800,17 @@ msgid "Collapse All" msgstr "Vervang Alles" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "Dupliseer" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Skuif AutoLaai" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3841,7 +3848,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8415,10 +8425,25 @@ msgstr "Skep Nuwe" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Skep Nuwe" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Skep Intekening" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Skep Intekening" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Skrap gekose lêers?" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9841,6 +9866,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12070,6 +12099,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12333,6 +12366,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12593,6 +12646,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index 346ebd62e0..2bd95e230b 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -16,7 +16,7 @@ # Rached Noureddine <rached.noureddine@gmail.com>, 2018. # Rex_sa <asd1234567890m@gmail.com>, 2017, 2018, 2019. # Wajdi Feki <wajdi.feki@gmail.com>, 2017. -# Omar Aglan <omar.aglan91@yahoo.com>, 2018, 2019. +# Omar Aglan <omar.aglan91@yahoo.com>, 2018, 2019, 2020. # Codes Otaku <ilyas.gamerz@gmail.com>, 2018, 2019. # Takai Eddine Kennouche <takai.kenn@gmail.com>, 2018. # Mohamed El-Baz <albaz2000eg@gmail.com>, 2018. @@ -45,12 +45,13 @@ # ChemicalInk <aladdinalkhafaji@gmail.com>, 2020. # Musab Alasaifer <mousablasefer@gmail.com>, 2020. # Yassine Oudjana <y.oudjana@protonmail.com>, 2020. +# bruvzg <bruvzg13@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-12 00:46+0000\n" -"Last-Translator: Yassine Oudjana <y.oudjana@protonmail.com>\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" +"Last-Translator: Musab Alasaifer <mousablasefer@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -59,12 +60,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "معامل خاطئ لدالة ()Convert, استخدم احدى الثوابت من مجموعة TYPE_*." +msgstr "معامل خاطئ لدالة ()Convert، استخدم احدى الثوابت من مجموعة TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -78,7 +79,7 @@ msgstr "لا يوجد ما يكفي من البايتات من أجل فك ال #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "مدخلات خاطئة i% (لم يتم تمريره) في التعبير" +msgstr "مدخلات خاطئة %i (لم يتم تمريره) في التعبير" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -86,7 +87,7 @@ msgstr "لا يمكن إستخدامه نفسه لأن الحالة فارغة ( #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "معاملات غير صالحة للمشغل s،%s% و s%." +msgstr "معاملات غير صالحة للمشغل %s، %s و %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" @@ -933,9 +934,8 @@ msgid "Signals" msgstr "الإشارات" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "تنقية البلاطات" +msgstr "تنقية الإشارات" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1063,17 +1063,23 @@ msgid "Owners Of:" msgstr "ملاك:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "إمسح الملفات المختارة من المشروع؟ (لا يمكن استعادتها)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"حذف الملفات المختارة من المشروع؟ (لا يمكن استعادتها)\n" +"يمكنك إيجاد الملفات المحذوفة في سلة مهملات النظام حيث يمكنك إسترجاعها." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"الملف الذي يُمسح مطلوب من موارد أخري لكل تعمل جيداً.\n" -"إمسح علي أية حال؟ (لا رجعة)" +"الملفات التي يتم إزالتها مطلوبة من قبل موارد أخرى من اجل ان تعمل.\n" +"هل تريد إزالتها على أي حال؟ (لا تراجع)\n" +"يمكنك العثور على الملفات التي تمت إزالتها في مهملات النظام لاستعادتها." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1117,7 +1123,7 @@ msgstr "متصفح الموارد أورفان" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1398,7 +1404,7 @@ msgstr "إفتح نسق مسار الصوت" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "لا يوجد ملف 's%'." +msgstr "لا يوجد ملف '%s'." #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" @@ -1410,7 +1416,7 @@ msgstr "ملف خطأ، ليس ملف نسق مسار الصوت." #: editor/editor_audio_buses.cpp msgid "Error saving file: %s" -msgstr "خطأ في تحميل الملف: s%" +msgstr "خطأ في تحميل الملف: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -1626,22 +1632,20 @@ msgstr "" "Driver Fallback Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"المنصة المستهدفة تحتاج لتشفير ملمس 'ETC' ل GLES2. قم بتمكين 'Import Etc' في " -"إعدادات المشروع." +"المنصة المستهدفة تحتاج لتشفير ملمس 'PVRTC' ل GLES2. قم بتمكين 'Import Pvrtc' " +"في إعدادات المشروع." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"المنصة المستهدفة تحتاج لتشفير ملمس \"ETC2\" ل GLES3. قم بتمكين 'Import Etc " -"2' في إعدادات المشروع." +"المنصة المستهدفة تحتاج لتشفير ملمس \"ETC2\" او 'PVRTC' ل GLES3. قم بتمكين " +"'Import Etc 2' او 'Import Pvrtc' في إعدادات المشروع." #: editor/editor_export.cpp #, fuzzy @@ -2057,8 +2061,8 @@ msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"لا يوجد حاليا وصف لهذه الخاصية. الرجاء المساعدة من خلال [url][/color/] " -"المساهمة واحد [color=$color][url=$url]!" +"لا يوجد حاليا وصف لهذه الخاصية. الرجاء المساعدة من خلال [color=$color][url=" +"$url]المساهمة واحد [/url][/color]!" #: editor/editor_help.cpp msgid "Method Descriptions" @@ -2268,7 +2272,7 @@ msgstr "خطأ خلال تحميل '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "نهاية ملف غير مرتقبة 's%'." +msgstr "نهاية ملف غير مرتقبة '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." @@ -2329,19 +2333,25 @@ msgid "Error saving TileSet!" msgstr "خطأ في حفظ مجموعة البلاط!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "خطآ في محاولة حفظ النسق!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "تخطي نسق المُحرر الإفتراضي." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "إسم النسق غير موجود!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "إسترجاع النسق الإفتراضي إلي الإعدادات الأساسية." #: editor/editor_node.cpp @@ -3009,7 +3019,7 @@ msgstr "المجتمع" #: editor/editor_node.cpp msgid "About" -msgstr "عن هذا التطبيق" +msgstr "حول" #: editor/editor_node.cpp msgid "Play the project." @@ -3709,6 +3719,16 @@ msgid "Name contains invalid characters." msgstr "الأسم يحتوي علي أحرف غير صالحة." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "إعادة تسمية ملف:" @@ -3756,14 +3776,6 @@ msgstr "تعديل التبعيات..." msgid "View Owners..." msgstr "أظهر المُلاك..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "إعادة تسمية..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "تكرير..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "تحريك إلي..." @@ -3791,11 +3803,17 @@ msgid "Collapse All" msgstr "طوي الكل" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "إعادة التسمية" +msgid "Duplicate..." +msgstr "تكرير..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "نقل التحميل التلقائي" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "إعادة تسمية..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3830,8 +3848,11 @@ msgid "Move" msgstr "تحريك" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "يوجد بالفعل ملف أو مجلد بنفس الاسم في هذا المكان." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "إعادة التسمية" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -4737,7 +4758,7 @@ msgstr "عُقد البداية والنهاية مطلوبة لأجل الان #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." -msgstr "لم يتم تعيين موارد التشغيل في المسار:٪ s." +msgstr "لم يتم تعيين موارد التشغيل في المسار: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -8315,10 +8336,25 @@ msgid "Create a new rectangle." msgstr "إنشاء مستطيل جديد." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "مستطيل الطلاء" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "إنشاء مُضلع جديد." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "تحريك المُضلع" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "حذف المُختار" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "إبقاء المُضلع داخل مستطيل المنطقة." @@ -9795,6 +9831,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12056,6 +12096,10 @@ msgstr "" "مسار حزمة تطوير Android SDK للبُنى المخصوصة، غير صالح في إعدادات المُحرر." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12357,6 +12401,26 @@ msgstr "" "(CPUParticles2D) استخدام لوحة-مادة-العنصر (CanvasItemMaterial) مع تفعيل" "\"الرسوم المتحركة للجزيئات\"." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12694,6 +12758,26 @@ msgstr "" "بواسطة محرك الفيزياء عند التشغيل.\n" "قم بتغيير الحجم في أشكال تصادم الأتباع (Children) بدلاً من ذلك." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12934,6 +13018,15 @@ msgstr "يمكن تعيين المتغيرات فقط في الذروة ." msgid "Constants cannot be modified." msgstr "لا يمكن تعديل الثوابت." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "يوجد بالفعل ملف أو مجلد بنفس الاسم في هذا المكان." + +#~ msgid "Error trying to save layout!" +#~ msgstr "خطآ في محاولة حفظ النسق!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "تخطي نسق المُحرر الإفتراضي." + #~ msgid "Move pivot" #~ msgstr "نقل المحور" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index afb48710bc..2f1a9145e4 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -11,12 +11,14 @@ # Whod <whodizhod@gmail.com>, 2020. # Stoyan <stoyan.stoyanov99@protonmail.com>, 2020. # zooid <the.zooid@gmail.com>, 2020. +# Любомир Василев <lyubomirv@gmx.com>, 2020. +# Ziv D <wizdavid@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-27 18:26+0000\n" -"Last-Translator: zooid <the.zooid@gmail.com>\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" +"Last-Translator: Любомир Василев <lyubomirv@gmx.com>\n" "Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/" "godot/bg/>\n" "Language: bg\n" @@ -24,7 +26,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -888,9 +890,8 @@ msgid "Signals" msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Поставяне на възелите" +msgstr "Филтриране на сигналите" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1014,15 +1015,19 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо)" +"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо)\n" +"Ще можете да ги откриете в кошчето, ако искате да ги възстановите." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1067,7 +1072,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1624,9 +1629,8 @@ msgid "Node Dock" msgstr "Панел за възлите" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem Dock" -msgstr "Показване във файловата система" +msgstr "Панел за файловата система" #: editor/editor_feature_profile.cpp msgid "Import Dock" @@ -1933,7 +1937,7 @@ msgstr "Наследява:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "" +msgstr "Наследява се от:" #: editor/editor_help.cpp msgid "Description" @@ -2248,11 +2252,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2260,7 +2269,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -2386,9 +2395,8 @@ msgid "Can't reload a scene that was never saved." msgstr "Сцена, която никога не е била запазвана, не може да бъде презаредена." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Saved Scene" -msgstr "Запазване на сцената" +msgstr "Презареждане на запазената сцена" #: editor/editor_node.cpp msgid "" @@ -2854,9 +2862,8 @@ msgid "Q&A" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Report a Bug" -msgstr "Повторно внасяне" +msgstr "Докладване на проблем" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3542,6 +3549,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Преименуване на файла:" @@ -3558,9 +3575,8 @@ msgid "Duplicating folder:" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Inherited Scene" -msgstr "Нов скрипт" +msgstr "Нова сцена – наследник" #: editor/filesystem_dock.cpp msgid "Set As Main Scene" @@ -3590,14 +3606,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3625,10 +3633,15 @@ msgid "Collapse All" msgstr "Свиване на всичко" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Преместване в кошчето" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3662,7 +3675,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -4445,7 +4461,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" -msgstr "Указания" +msgstr "Направления" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -4485,9 +4501,8 @@ msgid "Include Gizmos (3D)" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Изтриване на анимацията?" +msgstr "Закачане на AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -4558,9 +4573,8 @@ msgid "Start and end nodes are needed for a sub-transition." msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Обектът не е базиран на ресурсен файл" +msgstr "Няма ресурс, който може да бъде изпълнен, на пътя: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -4611,9 +4625,8 @@ msgstr "Режим на възпроизвеждане:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Изтриване на анимацията?" +msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" @@ -4916,9 +4929,8 @@ msgid "No results for \"%s\"." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Import..." -msgstr "Повторно внасяне..." +msgstr "Внасяне…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Plugins..." @@ -5153,24 +5165,20 @@ msgid "Center" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Left Wide" -msgstr "Изглед Отляво." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Wide" -msgstr "Изглед Отгоре." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Right Wide" -msgstr "Изглед Отдясно." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Wide" -msgstr "Изглед Отдолу." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "VCenter Wide" @@ -5252,9 +5260,8 @@ msgid "Create Custom Bone(s) from Node(s)" msgstr "Възпроизвеждане на сцена по избор" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Bones" -msgstr "Възпроизвеждане на сцена по избор" +msgstr "Изчистване на костите" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -5273,9 +5280,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp -#, fuzzy msgid "Zoom Reset" -msgstr "Оригинално увеличение" +msgstr "Връщане на оригиналния мащаб" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5310,9 +5316,8 @@ msgstr "Режим на завъртане" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Режим на Селектиране" +msgstr "Режим на скалиране" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5478,9 +5483,8 @@ msgid "Center Selection" msgstr "Центриране върху избраното" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Frame Selection" -msgstr "Покажи Селекцията (вмести в целия прозорец)" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" @@ -5515,9 +5519,8 @@ msgid "Auto Insert Key" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Animation Key and Pose Options" -msgstr "Промени Името на Анимацията:" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -5540,9 +5543,8 @@ msgid "Divide grid step by 2" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Pan View" -msgstr "Изглед Отзад." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -5637,9 +5639,8 @@ msgstr "" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Directed Border Pixels" -msgstr "Папки и файлове:" +msgstr "" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5711,9 +5712,8 @@ msgid "Left Linear" msgstr "Линейно" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right Linear" -msgstr "Изглед Отдясно." +msgstr "" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Preset" @@ -5789,9 +5789,8 @@ msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Single Convex Shape" -msgstr "Създай нови възли." +msgstr "Създаване на единична изпъкнала форма" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create multiple convex collision shapes for the scene root." @@ -5802,9 +5801,8 @@ msgid "Couldn't create any collision shapes." msgstr "Не могат да бъдат създадени никакви форми за колизии." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Multiple Convex Shapes" -msgstr "Създай нови възли." +msgstr "Създаване на няколко изпъкнали форми" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -6330,9 +6328,8 @@ msgid "Transform UV Map" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Transform Polygon" -msgstr "Създаване на папка" +msgstr "Преобразуване на полигона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" @@ -6367,22 +6364,20 @@ msgid "Move Points" msgstr "Преместване на точките" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Влачене: завъртане" +msgstr "Command: завъртане" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: преместване на всичко" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: мащабиране" +msgstr "Shift+Command: мащабиране" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl: Завъртане" +msgstr "Ctrl: завъртане" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" @@ -6423,14 +6418,12 @@ msgid "Radius:" msgstr "Радиус:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Полигон -> UV" +msgstr "Копиране на полигона в UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Превръщане в Polygon2D" +msgstr "Копиране на UV в полигона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6694,9 +6687,8 @@ msgid "Copy Script Path" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" -msgstr "История Назад" +msgstr "Назад в историята" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -7018,9 +7010,8 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Create Rest Pose from Bones" -msgstr "Възпроизвеждане на сцена по избор" +msgstr "Създаване на поза на покоя от костите" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" @@ -7087,9 +7078,8 @@ msgid "Scaling: " msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "Добавяне на превод" +msgstr "Транслиране: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -7180,14 +7170,12 @@ msgid "Rear" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Transform with View" -msgstr "Изглед Отдясно." +msgstr "Подравняване на трансформацията с изгледа" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Rotation with View" -msgstr "Изглед Отдясно." +msgstr "Подравняване на ротацията с изгледа" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." @@ -7234,9 +7222,8 @@ msgid "View Information" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View FPS" -msgstr "Преглед на файловете" +msgstr "Показване на кадри/сек" #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" @@ -7247,9 +7234,8 @@ msgid "Audio Listener" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Позволи филтриране" +msgstr "Включване на доплеровия ефект" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7433,9 +7419,8 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Настройки" +msgstr "Настройки…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7502,19 +7487,16 @@ msgid "Nameless gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create Mesh2D" -msgstr "Създайте нов/а %s" +msgstr "Създаване на Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Mesh2D Preview" -msgstr "Преглед" +msgstr "Преглед на Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create Polygon2D" -msgstr "Създаване на папка" +msgstr "Създаване на Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" @@ -7565,9 +7547,8 @@ msgid "Invalid geometry, can't create collision polygon." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create CollisionPolygon2D Sibling" -msgstr "Създаване на папка" +msgstr "Създаване на съседен CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." @@ -7654,9 +7635,8 @@ msgid "New Animation" msgstr "Нова анимация" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Speed:" -msgstr "Скорост (кадри в секунда):" +msgstr "Скорост:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -7794,20 +7774,19 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" -msgstr "" +msgstr "Създаване на празен шаблон" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" -msgstr "" +msgstr "Създаване на празен шаблон за редактора" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "" +msgstr "Създаване от текущата тема на редактора" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Toggle Button" -msgstr "Средно копче" +msgstr "Бутон-превключвател" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled Button" @@ -7911,9 +7890,8 @@ msgid "Color" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme File" -msgstr "Тема" +msgstr "Файл с тема" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -7925,18 +7903,16 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Центрирай върху Селекцията" +msgstr "Изрязване на избраното" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Линейно" +msgstr "Изчертаване на линия" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" @@ -7963,14 +7939,12 @@ msgid "Disable Autotile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Enable Priority" -msgstr "Промени Филтрите" +msgstr "Включване на приоритета" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Filter tiles" -msgstr "Поставяне на възелите" +msgstr "Филтриране на плочките" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Give a TileSet resource to this TileMap to use its tiles." @@ -7997,14 +7971,12 @@ msgid "Pick Tile" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate Left" -msgstr "Режим на Завъртане" +msgstr "Завъртане наляво" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate Right" -msgstr "Завъртане на Полигон" +msgstr "Завъртане надясно" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip Horizontally" @@ -8015,9 +7987,8 @@ msgid "Flip Vertically" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear Transform" -msgstr "Изнасяне към платформа" +msgstr "Изчистване на трансформацията" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet." @@ -8050,32 +8021,28 @@ msgid "New Atlas" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Next Coordinate" -msgstr "Следващ скрипт" +msgstr "Следваща координата" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the next shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Previous Coordinate" -msgstr "Предишен подпрозорец" +msgstr "Предходна координата" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region" -msgstr "Режим на Завъртане" +msgstr "Регион" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision" -msgstr "Промени съществуващ полигон:" +msgstr "Колизия" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8083,34 +8050,28 @@ msgid "Occlusion" msgstr "Приставки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation" -msgstr "Анимационен Възел" +msgstr "Навигация" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask" -msgstr "Режим на Завъртане" +msgstr "Побитова маска" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority" -msgstr "Режим на изнасяне:" +msgstr "Приоритет" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index" -msgstr "Панорамен режим на Отместване (на работния прозорец)" +msgstr "Индекс по Z" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region Mode" -msgstr "Режим на Завъртане" +msgstr "Режим на регион" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision Mode" -msgstr "Промени съществуващ полигон:" +msgstr "Режим на колизии" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8118,53 +8079,56 @@ msgid "Occlusion Mode" msgstr "Приставки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation Mode" -msgstr "Анимационен Възел" +msgstr "Режим на навигация" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask Mode" -msgstr "Режим на Завъртане" +msgstr "Режим на побитова маска" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority Mode" -msgstr "Режим на изнасяне:" +msgstr "Режим на приоритет" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Icon Mode" -msgstr "Панорамен режим на Отместване (на работния прозорец)" +msgstr "Режим на иконки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index Mode" -msgstr "Панорамен режим на Отместване (на работния прозорец)" +msgstr "Режим на индекс по Z" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Paste bitmask." -msgstr "Поставяне на възелите" +msgstr "Поставяне на битова маска." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Erase bitmask." -msgstr "Изтрий точки." +msgstr "Изтриване на побитовата маска." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create a new rectangle." -msgstr "Създай нови възли." +msgstr "Създаване на нов правоъгълник." + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Нов правоъгълник" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create a new polygon." -msgstr "Създай нов полигон от нулата." +msgstr "Създаване на нов полигон." + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Нов полигон" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Изтриване на избраната форма" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." @@ -8184,9 +8148,10 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." -msgstr "Преместване на пътечката нагоре." +msgstr "" +"Преместване на избраната текстура? Това ще премахне всички плочки, които я " +"ползват." #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." @@ -8201,9 +8166,8 @@ msgid "Merge from scene?" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Texture" -msgstr "Внасяне на текстури" +msgstr "Премахване на текстурата" #: editor/plugins/tile_set_editor_plugin.cpp msgid "%s file(s) were not added because was already on the list." @@ -8216,30 +8180,32 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Delete selected Rect." -msgstr "Изтрий избраните файлове?" +msgstr "Изтриване на избрания Rect." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Избиране на текущата папка" +msgstr "" +"Изберете редактираната в момента под-плочка.\n" +"Щракнете върху друга плочка, за да я редактирате." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Delete polygon." -msgstr "Изтриване на анимацията?" +msgstr "Изтриване на полигона." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: Set bit on.\n" "RMB: Set bit off.\n" "Shift+LMB: Set wildcard bit.\n" "Click on another Tile to edit it." -msgstr "Избиране на текущата папка" +msgstr "" +"Ляв бутон: включване на бита.\n" +"Десен бутон: изключване на бита.\n" +"Shift + ляв бутон: включване на бита за заместване.\n" +"Щракнете на друга плочка, за да я редактирате." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8255,35 +8221,32 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its z index.\n" "Click on another Tile to edit it." -msgstr "Избиране на текущата папка" +msgstr "" +"Изберете под-плочка, за да промените индекса ѝ по Z.\n" +"Щракнете на друга плочка, за да я редактирате." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Set Tile Region" -msgstr "Двуизмерна текстура" +msgstr "Задаване на регион от плочки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create Tile" -msgstr "Създаване на папка" +msgstr "Създаване на плочка" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Icon" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Tile Bitmask" -msgstr "Промени Филтрите" +msgstr "Редактиране на побитовата маска на плочката" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Collision Polygon" -msgstr "Промени съществуващ полигон:" +msgstr "Редактиране на полигона за колизии" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8291,38 +8254,32 @@ msgid "Edit Occlusion Polygon" msgstr "Приставки" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Navigation Polygon" -msgstr "Промени съществуващ полигон:" +msgstr "Редактиране на полигона за навигация" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Paste Tile Bitmask" -msgstr "Поставяне на възелите" +msgstr "Поставяне на побитовата маска на плочката" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Clear Tile Bitmask" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Polygon Concave" -msgstr "Преместване на Полигон" +msgstr "Преобразуване на полигона във вдлъбнат" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Polygon Convex" -msgstr "Преместване на Полигон" +msgstr "Преобразуване на полигона в изпъкнал" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Tile" -msgstr "Затваряне на всичко" +msgstr "Премахване на плочката" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Collision Polygon" -msgstr "Преместване на Полигон" +msgstr "Премахване на полигона за колизии" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8330,47 +8287,40 @@ msgid "Remove Occlusion Polygon" msgstr "Преместване на Полигон" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Navigation Polygon" -msgstr "Завъртане на Полигон" +msgstr "Премахване на полигона за навигация" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Tile Priority" -msgstr "Промени Филтрите" +msgstr "Редактиране на приоритета на плочката" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Z Index" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Convex" -msgstr "Преместване на Полигон" +msgstr "Преобразуване в изпъкнал" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Concave" -msgstr "Преместване на Полигон" +msgstr "Преобразуване във вдлъбнат" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create Collision Polygon" -msgstr "Създаване на папка" +msgstr "Създаване на полигон за колизии" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create Occlusion Polygon" -msgstr "Създаване на папка" +msgstr "Създаване на полигон за прикриване" #: editor/plugins/tile_set_editor_plugin.cpp msgid "This property can't be changed." -msgstr "" +msgstr "Това свойство не може да бъде променено." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "TileSet" -msgstr "Файл:" +msgstr "Плочен набор" #: editor/plugins/version_control_editor_plugin.cpp msgid "No VCS addons are available." @@ -8401,18 +8351,16 @@ msgid "Version Control System" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Initialize" -msgstr "Всяка дума с Главна буква" +msgstr "Инициализиране" #: editor/plugins/version_control_editor_plugin.cpp msgid "Staging area" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Detect new changes" -msgstr "Създай нови възли." +msgstr "Засичане на новите промени" #: editor/plugins/version_control_editor_plugin.cpp msgid "Changes" @@ -8423,14 +8371,12 @@ msgid "Modified" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Renamed" -msgstr "Възел" +msgstr "Преименуван" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Deleted" -msgstr "Изтрий" +msgstr "Изтрит" #: editor/plugins/version_control_editor_plugin.cpp msgid "Typechange" @@ -8476,19 +8422,16 @@ msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Output" -msgstr "Любими:" +msgstr "Добавяне на изход" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar" -msgstr "Мащаб:" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector" -msgstr "Инспектор" +msgstr "Вектор" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" @@ -8499,27 +8442,24 @@ msgid "Sampler" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add input port" -msgstr "Любими:" +msgstr "Добавяне на входящ порт" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port type" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на типа на входящия порт" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change output port type" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port name" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на името на входящия порт" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change output port name" @@ -8554,9 +8494,8 @@ msgid "Add Node to Visual Shader" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Възелът е преместен" +msgstr "Възлите са преместени" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -9008,9 +8947,8 @@ msgid "Scalar constant." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar uniform." -msgstr "Изнасяне към платформа" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." @@ -9033,9 +8971,8 @@ msgid "2D texture uniform lookup with triplanar." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform function." -msgstr "Създаване на папка" +msgstr "Функция за трансформация." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9077,19 +9014,16 @@ msgid "Multiplies vector by transform." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform constant." -msgstr "Създаване на папка" +msgstr "Константа за трансформация." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform uniform." -msgstr "Създаване на папка" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector function." -msgstr "Отиди на Ред" +msgstr "Векторна функция." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector operator." @@ -9581,6 +9515,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10133,9 +10071,8 @@ msgid "Batch Rename" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "Замяна: " +msgstr "Замяна:" #: editor/rename_dialog.cpp msgid "Prefix:" @@ -10246,9 +10183,8 @@ msgid "Reset" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "Използване на регулярни изрази" +msgstr "Грешка в регулярния израз:" #: editor/rename_dialog.cpp msgid "At character %s" @@ -10317,9 +10253,8 @@ msgid "Instance Child Scene" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Detach Script" -msgstr "Закачане на скрипт" +msgstr "Разкачане на скрипта" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." @@ -10354,9 +10289,8 @@ msgid "Make node as Root" msgstr "Превръщане на възела в корен" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete %d nodes and any children?" -msgstr "Изтриване на %d възела?" +msgstr "Изтриване на %d възела и дъщерните им елементи?" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" @@ -10500,9 +10434,8 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Създай нови възли." +msgstr "Преместване под нов възел" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10522,9 +10455,8 @@ msgid "Copy Node Path" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete (No Confirm)" -msgstr "Моля, потвърдете..." +msgstr "Изтриване (без потвърждение)" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10573,9 +10505,8 @@ msgid "Button Group" msgstr "Копче 7" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "(Connecting From)" -msgstr "Свързване..." +msgstr "(Свързване от)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" @@ -10600,9 +10531,8 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open Script:" -msgstr "Нова сцена" +msgstr "Отваряне на скрипт:" #: editor/scene_tree_editor.cpp msgid "" @@ -10659,9 +10589,8 @@ msgid "Path is not local." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid base path." -msgstr "Име:" +msgstr "Неправилен базов път." #: editor/script_create_dialog.cpp #, fuzzy @@ -10682,9 +10611,8 @@ msgid "Wrong extension chosen." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Грешка при зареждането на шрифта." +msgstr "Грешка при зареждане на шаблона „%s“" #: editor/script_create_dialog.cpp #, fuzzy @@ -10692,9 +10620,8 @@ msgid "Error - Could not create script in filesystem." msgstr "Неуспешно създаване на папка." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading script from %s" -msgstr "Грешка при зареждането на шрифта." +msgstr "Грешка при зареждане на скрипт от %s" #: editor/script_create_dialog.cpp msgid "Overrides" @@ -10714,9 +10641,8 @@ msgid "Open Script" msgstr "Нова сцена" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, it will be reused." -msgstr "Файлът съществува. Искате ли да го презапишете?" +msgstr "Файлът съществува и ще бъде преизползван." #: editor/script_create_dialog.cpp msgid "Invalid path." @@ -10744,9 +10670,8 @@ msgid "Built-in script (into scene file)." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will create a new script file." -msgstr "Създаване на нов скрипт" +msgstr "Ще създаде нов скиптов файл." #: editor/script_create_dialog.cpp msgid "Will load an existing script file." @@ -10769,14 +10694,12 @@ msgid "Class Name:" msgstr "Клас:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template:" -msgstr "Шаблони" +msgstr "Шаблон:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script:" -msgstr "Нова сцена" +msgstr "Вграден скрипт:" #: editor/script_create_dialog.cpp #, fuzzy @@ -10784,33 +10707,28 @@ msgid "Attach Node Script" msgstr "Нова сцена" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " -msgstr "Затваряне на всичко" +msgstr "Отдалечено " #: editor/script_editor_debugger.cpp msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Warning:" -msgstr "Предупреждения:" +msgstr "Предупреждение:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Error:" -msgstr "Грешки:" +msgstr "Грешка:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Error" -msgstr "Грешки" +msgstr "Грешка в C++" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Error:" -msgstr "Грешки:" +msgstr "Грешка в C++:" #: editor/script_editor_debugger.cpp msgid "C++ Source" @@ -10833,9 +10751,8 @@ msgid "Errors" msgstr "Грешки" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Child process connected." -msgstr "Разкачи" +msgstr "Дъщерният процес е свързан." #: editor/script_editor_debugger.cpp msgid "Copy Error" @@ -11395,14 +11312,12 @@ msgid "Set Variable Type" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Input Port" -msgstr "Любими:" +msgstr "Добавяне на входящ порт" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Output Port" -msgstr "Любими:" +msgstr "Добавяне на изходящ порт" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." @@ -11654,9 +11569,8 @@ msgid "Add Nodes..." msgstr "Добави Възел..." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Function..." -msgstr "Отиди на Ред" +msgstr "Добавяне на функция…" #: modules/visual_script/visual_script_editor.cpp msgid "function_name" @@ -11692,9 +11606,8 @@ msgid "Refresh Graph" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Файл:" +msgstr "" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -11816,6 +11729,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11826,9 +11743,8 @@ msgid "Invalid public key for APK expansion." msgstr "" #: platform/android/export/export.cpp -#, fuzzy msgid "Invalid package name:" -msgstr "невалидно име на Група." +msgstr "Неправилно име на пакет:" #: platform/android/export/export.cpp msgid "" @@ -11939,28 +11855,24 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not write file:" -msgstr "Неуспешно създаване на папка." +msgstr "Файлът не може да бъде записан:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not open template for export:" -msgstr "Неуспешно създаване на папка." +msgstr "Шаблонът не може да се отвори за изнасяне:" #: platform/javascript/export/export.cpp msgid "Invalid export template:" msgstr "" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "Неуспешно създаване на папка." +msgstr "Не може да се прочете персонализирана HTML-обвивка:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "Неуспешно създаване на папка." +msgstr "Не може да се прочете файл с изображение при стартиране:" #: platform/javascript/export/export.cpp #, fuzzy @@ -11968,19 +11880,16 @@ msgid "Using default boot splash image." msgstr "Неуспешно създаване на папка." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package short name." -msgstr "невалидно име на Група." +msgstr "Неправилно кратко име на пакет." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package unique name." -msgstr "невалидно име на Група." +msgstr "Неправилно уникално име на пакет." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package publisher display name." -msgstr "невалидно име на Група." +msgstr "Неправилно име за показване на издателя на пакет." #: platform/uwp/export/export.cpp msgid "Invalid product GUID." @@ -12075,13 +11984,12 @@ msgstr "" "форма." #: scene/2d/collision_shape_2d.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"За да работи CollisionShape2D, е нужно да му се даде форма. Моля, създайте " -"му Shape2D ресурс." +"За да работи CollisionShape2D, е необходимо да се зададе форма. Моля, " +"създайте ресурс с форма за него!" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12095,6 +12003,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -12374,6 +12302,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -12534,7 +12482,7 @@ msgstr "" #: scene/gui/tree.cpp msgid "(Other)" -msgstr "" +msgstr "(Други)" #: scene/main/scene_tree.cpp msgid "" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 9d0dc019e0..4526860a7a 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-22 19:41+0000\n" -"Last-Translator: Sagen Soren <sagensoren03@gmail.com>\n" +"PO-Revision-Date: 2020-11-26 08:43+0000\n" +"Last-Translator: Mokarrom Hossain <mhb2016.bzs@gmail.com>\n" "Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/" "godot/bn/>\n" "Language: bn\n" @@ -23,10 +23,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.3.1\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp +#, fuzzy msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "অবৈধ প্রকার রূপান্তর করার যুক্তি(),use TYPE_* constants." @@ -38,7 +39,7 @@ msgstr "১ (একটি অক্ষর) দৈর্ঘ্য এর স্ #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "বিন্যাস জানার জন্য যথেষ্ট বাইট নেই, অথবা ভুল ফরম্যাট।" +msgstr "ডিকোডিং বাইট, বা অবৈধ বিন্যাসের জন্য পর্যাপ্ত পরিমাণে বাইট নেই।" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -117,14 +118,12 @@ msgid "Value:" msgstr "মান:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "চাবি সন্নিবেশ করুন" +msgstr "চাবি ইন্সার্ট করুন" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Duplicate Selected Key(s)" -msgstr "নির্বাচিত সমূহ অনুলিপি করুন" +msgstr "নির্বাচিত key সমূহ অনুলিপি করুন" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" @@ -147,9 +146,8 @@ msgid "Anim Delete Keys" msgstr "অ্যানিমেশনের (Anim) চাবিগুলো অপসারণ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "অ্যানিমেশন (Anim) ভ্যালু পরিবর্তন করুন" +msgstr "অ্যানিমেশন (Anim)কীফ্রেম time পরিবর্তন করুন" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" @@ -168,34 +166,28 @@ msgid "Anim Change Call" msgstr "অ্যানিমেশন (Anim) কল পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "অ্যানিমেশন (Anim) ভ্যালু পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) কীফ্রেমের সময় পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "অ্যানিমেশন (Anim) ট্র্যানজিশন পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) ট্র্যানজিশন পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "অ্যানিমেশন (Anim) ট্রান্সফর্ম পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) ট্রান্সফর্ম পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "অ্যানিমেশন (Anim) ভ্যালু পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) ভ্যালু পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "অ্যানিমেশন (Anim) কল পরিবর্তন করুন" +msgstr "একাধিক অ্যানিমেশন (Anim) কল পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Length" -msgstr "অ্যানিমেশনের লুপ পরিবর্তন করুন" +msgstr "অ্যানিমেশনের ব্যাপ্তিকাল পরিবর্তন করুন" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -203,51 +195,44 @@ msgid "Change Animation Loop" msgstr "অ্যানিমেশনের লুপ পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "প্রপার্টি:" +msgstr "বৈশিষ্ট্য ট্র্যাক" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" -msgstr "রুপান্তরের ধরণ" +msgstr "3D রূপান্তর ট্র্যাক" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "কল মেথড ট্র্যাক" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "বেজিয়ার কার্ভ ট্র্যাক" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "অডিও প্লেব্যাক ট্র্যাক" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Playback Track" -msgstr "অ্যানিমেশনের চালনা বন্ধ করুন। (S)" +msgstr "অ্যানিমেশন প্লেব্যাক ট্র্যাক" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (frames)" -msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (সময় সেকেন্ডে)।" +msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (ফ্রেমে)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (seconds)" -msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (সময় সেকেন্ডে)।" +msgstr "অ্যানিমেশনের (Animation) দৈর্ঘ্য (সেকেন্ডে)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "অ্যানিমেশন (Anim) ট্র্যাক যোগ করুন" +msgstr "ট্র্যাক যোগ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "অ্যানিমেশন (Animation) জুম (zoom) করুন।" +msgstr "অ্যানিমেশন (Animation) লুপিং" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -255,33 +240,28 @@ msgid "Functions:" msgstr "ফাংশনগুলি:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "অডিও শ্রোতা" +msgstr "অডিও ক্লিপস:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Clips:" -msgstr "ক্লিপসমূহ" +msgstr "অ্যানিমেশন ক্লিপসমূহ :" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Track Path" -msgstr "শ্রেণীবিন্যাস/সারির মান পরিবর্তন করুন" +msgstr "ট্র্যাক পাথ (পথ) পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "বিক্ষেপ-হীন মোড" +msgstr "এই ট্র্যাকটি চালু / বন্ধ টগল করুন।" #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "আপডেট মোড (কীভাবে এই সম্পত্তি সেট করা আছে)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "অ্যানিমেশনের নোড" +msgstr "ইন্টারপোলেশন মোড" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" @@ -293,9 +273,8 @@ msgid "Remove this track." msgstr "নির্বাচিত ট্র্যাক/পথ অপসারণ করুন।" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "X-ফেড/বিলীন সময় (সেঃ):" +msgstr "সময় (সেঃ): " #: editor/animation_track_editor.cpp #, fuzzy @@ -315,13 +294,12 @@ msgid "Trigger" msgstr "ট্রিগার/চালনা করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Capture" -msgstr "গঠনবিন্যাস" +msgstr "ক্যাপচার" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "নিকটতম" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -330,45 +308,40 @@ msgstr "রৈখিক/লিনিয়ার" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "ঘন" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "ক্ল্যাম্প লুপ ইন্টারপ" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Wrap লুপ ইন্টারপ" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "চাবি সন্নিবেশ করুন" +msgstr "চাবি ইন্সার্ট করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "নোড(সমূহ) প্রতিলিপি করুন" +msgstr "কী (সমূহ) প্রতিলিপি করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "নোড(সমূহ) অপসারণ করুন" +msgstr "কী (সমূহ) অপসারণ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Update Mode" -msgstr "অ্যানিমেশনের নাম পরিবর্তন করুন:" +msgstr "অ্যানিমেশন আপডেট মোড পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Interpolation Mode" -msgstr "অ্যানিমেশনের নোড" +msgstr "অ্যানিমেশন ইন্টারপোলেশন মোড পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Loop Mode" -msgstr "অ্যানিমেশনের লুপ পরিবর্তন করুন" +msgstr "অ্যানিমেশনের লুপ মোড পরিবর্তন করুন" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -400,7 +373,7 @@ msgstr "অ্যানিমেশনে (Anim) অন্তর্ভুক্ #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "অ্যানিমেশনপ্লেয়ার নিজেই অ্যানিমেট করতে পারে না, কেবল অন্য প্লেয়ার।" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -415,14 +388,12 @@ msgid "Anim Insert Key" msgstr "অ্যানিমেশনে (Anim) চাবি যোগ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Step" -msgstr "অ্যানিমেশনের FPS পরিবর্তন করুন" +msgstr "অ্যানিমেশনের ধাপ পরিবর্তন করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rearrange Tracks" -msgstr "Autoload সমূহ পুনর্বিন্যস্ত করুন" +msgstr "ট্র্যাকগুলি পুনর্বিন্যস্ত করুন" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." @@ -442,7 +413,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "" +msgstr "একটি অ্যানিমেশন প্লেয়ার নিজেই অ্যানিমেট করতে পারে না, কেবল অন্য প্লেয়ার।" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" @@ -494,9 +465,8 @@ msgid "Anim Move Keys" msgstr "অ্যানিমেশনে (Anim) চাবি/কী-সমুহ সরান" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "রিসোর্সের ক্লীপবোর্ড খালি!" +msgstr "ক্লীপবোর্ড খালি" #: editor/animation_track_editor.cpp #, fuzzy @@ -555,12 +525,12 @@ msgstr "অ্যানিমেশনের তালিকাটি কার #: editor/animation_track_editor.cpp msgid "Seconds" -msgstr "" +msgstr "সেকেন্ড" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "FPS" -msgstr "এফ পি এস" +msgstr "এফপিএস" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -573,9 +543,8 @@ msgid "Edit" msgstr "সম্পাদন করুন (Edit)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "অ্যানিমেশন" +msgstr "অ্যানিমেশন বৈশিষ্ট্য" #: editor/animation_track_editor.cpp #, fuzzy @@ -604,12 +573,10 @@ msgid "Delete Selection" msgstr "নির্বাচিত সমূহ অপসারণ করুন" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "পরবর্তী ধাপে যান" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" msgstr "পূর্ববর্তী ধাপে যান" @@ -1094,14 +1061,18 @@ msgstr "স্বত্বাধিকারীসমূহ:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "নির্বাচিত ফাইলসমূহ প্রকল্প হতে অপসারণ করবেন? (অফেরৎযোগ্য)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "যেসব ফাইল অপসারিত হচ্ছে তারা অন্যান্য রিসোর্স ফাইলের কার্যকররুপে কাজ করার জন্য " "দরকারি।\n" @@ -1152,7 +1123,7 @@ msgstr "মালিকবিহীন রিসোর্সের অনুস #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2452,19 +2423,25 @@ msgid "Error saving TileSet!" msgstr "TileSet সংরক্ষণে সমস্যা হয়েছে!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "লেআউট/নকশা সংরক্ষণের চেষ্টায় সমস্যা হয়েছে!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "এডিটরের সাধারণ লেআউট/নকশা পরিবর্তিত হয়েছে।" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "লেআউট/নকশার নাম পাওয়া যায়নি!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "সাধারণ লেআউট/নকশা আদি সেটিংসে প্রত্যাবর্তিত হয়েছে।" #: editor/editor_node.cpp @@ -3939,6 +3916,16 @@ msgid "Name contains invalid characters." msgstr "গ্রহনযোগ্য অক্ষরসমূহ:" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "Renaming file:" msgstr "চলক/ভেরিয়েবল-এর নামান্তর করুন" @@ -3995,16 +3982,6 @@ msgstr "নির্ভরতাসমূহ সম্পাদন করুন. msgid "View Owners..." msgstr "স্বত্বাধিকারীদের দেখুন..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "পুনঃনামকরণ করুন" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "ডুপ্লিকেট" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "এখানে সরান..." @@ -4037,10 +4014,18 @@ msgid "Collapse All" msgstr "কলাপ্স করুন" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "ডুপ্লিকেট" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Autoload স্থানান্তর করুন" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." msgstr "পুনঃনামকরণ করুন" #: editor/filesystem_dock.cpp @@ -4080,9 +4065,11 @@ msgid "Move" msgstr "সরান" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "গ্রুপের নাম ইতিমধ্যেই আছে!" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "পুনঃনামকরণ করুন" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8937,10 +8924,25 @@ msgstr "নতুন তৈরি করুন" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "রেক্ট্যাঙ্গল পেইন্ট" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "আরম্ভ হতে নতুন polygon তৈরি করুন।" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "পলিগন সরান" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "নির্বাচিত সমূহ অপসারণ করুন" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -10440,6 +10442,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12855,6 +12861,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13133,6 +13143,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -13427,6 +13457,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -13653,6 +13703,16 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "গ্রুপের নাম ইতিমধ্যেই আছে!" + +#~ msgid "Error trying to save layout!" +#~ msgstr "লেআউট/নকশা সংরক্ষণের চেষ্টায় সমস্যা হয়েছে!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "এডিটরের সাধারণ লেআউট/নকশা পরিবর্তিত হয়েছে।" + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "কেন্দ্র স্থানান্তর করুন" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index e930c8ea22..d0921e2a61 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -1041,14 +1041,19 @@ msgid "Owners Of:" msgstr "Propietaris de:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Eliminar els fitxers seleccionats del projecte? (No es pot restaurar)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Els fitxers seleccionats són utilitzats per altres recursos.\n" "Voleu Eliminar-los de totes maneres? (No es pot desfer!)" @@ -1095,7 +1100,7 @@ msgstr "Navegador de Recursos Orfes" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2321,19 +2326,25 @@ msgid "Error saving TileSet!" msgstr "Error en desar el TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error en desar els canvis!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "S'han sobreescrit els Ajustos Predeterminats de l'Editor." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "No s'ha trobat el nom del Disseny!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "S'ha restaurat la configuració predeterminada." #: editor/editor_node.cpp @@ -3736,6 +3747,16 @@ msgid "Name contains invalid characters." msgstr "El Nom conté caràcters que no són vàlids." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Reanomenant fitxer:" @@ -3784,14 +3805,6 @@ msgstr "Edita Dependències..." msgid "View Owners..." msgstr "Mostra Propietaris..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Reanomena..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplica..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mou cap a..." @@ -3819,11 +3832,17 @@ msgid "Collapse All" msgstr "Col·lapsar tot" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Reanomena" +msgid "Duplicate..." +msgstr "Duplica..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Mou l'AutoCàrrega" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Reanomena..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3858,8 +3877,11 @@ msgid "Move" msgstr "Mou" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Ja hi existex un fitxer o directori amb aquest nom." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Reanomena" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8502,11 +8524,26 @@ msgid "Create a new rectangle." msgstr "Crear un nou rectangle." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Pinta Rectangle" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Crear un nou polígon." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Polygon" +msgstr "Mou el Polígon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Elimina Seleccionats" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Keep polygon inside region Rect." msgstr "Mantenir polígon dins de la regió Rect." @@ -10055,6 +10092,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12422,6 +12463,10 @@ msgstr "" "la configuració de l'editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp #, fuzzy msgid "" "Android build template not installed in the project. Install it from the " @@ -12717,6 +12762,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -13045,6 +13110,26 @@ msgstr "" "RigidBody(Caràcter o Rígid). \n" "Modifica la mida de les Formes de Col. lisió Filles." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -13292,6 +13377,15 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Les constants no es poden modificar." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Ja hi existex un fitxer o directori amb aquest nom." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error en desar els canvis!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "S'han sobreescrit els Ajustos Predeterminats de l'Editor." + #~ msgid "Move pivot" #~ msgstr "Moure pivot" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index f5eab2658e..4dd0050197 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -22,12 +22,14 @@ # Zbyněk <zbynek.fiala@gmail.com>, 2020. # Daniel Kříž <Daniel.kriz@protonmail.com>, 2020. # VladimirBlazek <vblazek042@gmail.com>, 2020. +# kubajz22 <til.jakubesko@seznam.cz>, 2020. +# Václav Blažej <vaclavblazej@seznam.cz>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-12 00:46+0000\n" -"Last-Translator: VladimirBlazek <vblazek042@gmail.com>\n" +"PO-Revision-Date: 2020-11-29 08:28+0000\n" +"Last-Translator: Václav Blažej <vaclavblazej@seznam.cz>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" "Language: cs\n" @@ -35,7 +37,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -277,9 +279,8 @@ msgid "Interpolation Mode" msgstr "Interpolační režim" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "Režim ovinuté smyčky (interpolace konce se začátkem ve smyčce)" +msgstr "Režim uzavřené smyčky (Interpolace mezi koncem a začátkem smyčky)" #: editor/animation_track_editor.cpp msgid "Remove this track." @@ -291,11 +292,11 @@ msgstr "Čas (s): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "Přepínací Stopa Povolena" +msgstr "Přepínací stopa povolena" #: editor/animation_track_editor.cpp msgid "Continuous" -msgstr "Nepřetržité" +msgstr "Spojité" #: editor/animation_track_editor.cpp msgid "Discrete" @@ -307,7 +308,7 @@ msgstr "Spoušť" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "Zachytit" +msgstr "Snímat" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -323,9 +324,8 @@ msgid "Cubic" msgstr "Kubická" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clamp Loop Interp" -msgstr "Režim svorkové smyčky" +msgstr "Interpolace smyčky svorkou" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" @@ -398,7 +398,7 @@ msgstr "Animace: Vložit stopu a klíč" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "Animace: vložit klíč" +msgstr "Animace: Vložit klíč" #: editor/animation_track_editor.cpp msgid "Change Animation Step" @@ -406,7 +406,7 @@ msgstr "Změnit krok animace" #: editor/animation_track_editor.cpp msgid "Rearrange Tracks" -msgstr "Přeskupit stopy" +msgstr "Upravit pořadí stop" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." @@ -446,7 +446,7 @@ msgstr "Přidat Bézierovu stopu" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "Cesta stopy není validní, nelze vložit klíč." +msgstr "Cesta stopy není validní, tak nelze přidat klíč." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" @@ -492,8 +492,8 @@ msgstr "Animace: změnit měřítko klíčů" msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" -"Tato možnost nefunguje pro úpravy Beziérovy křivky , protože se jedná pouze " -"o jednu stopu." +"Tato možnost nefunguje pro úpravy Beziérovy křivky, protože se jedná pouze o " +"jednu stopu." #: editor/animation_track_editor.cpp msgid "" @@ -522,9 +522,9 @@ msgid "Warning: Editing imported animation" msgstr "Upozornění: Upravuje se importovaná animace" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select an AnimationPlayer node to create and edit animations." -msgstr "Pro úpravu animací vyberte ze stromu scény uzel AnimationPlayer." +msgstr "" +"Pro přidání a úpravu animací vyberte ze stromu scény uzel AnimationPlayer." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -757,7 +757,7 @@ msgstr "Zvětšit" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Out" -msgstr "Změnšit" +msgstr "Zmenšit" #: editor/code_editor.cpp msgid "Reset Zoom" @@ -797,7 +797,7 @@ msgstr "Připojit ke skriptu:" #: editor/connections_dialog.cpp msgid "From Signal:" -msgstr "Z signálu:" +msgstr "Ze signálu:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." @@ -918,9 +918,8 @@ msgid "Signals" msgstr "Signály" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Filtrovat soubory..." +msgstr "Filtrovat signály" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -992,7 +991,7 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"Scéna '%s' se právě upravuje.\n" +"Scéna \"%s\" se právě upravuje.\n" "Změny se projeví po opětovném načtení." #: editor/dependency_editor.cpp @@ -1000,7 +999,7 @@ msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"Zdroj '%s' se právě používá.\n" +"Zdroj \"%s\" se právě používá.\n" "Změny se projeví po opětovném načtení." #: editor/dependency_editor.cpp @@ -1048,17 +1047,23 @@ msgid "Owners Of:" msgstr "Vlastníci:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Odebrat vybrané soubory z projektu? (Nelze vrátit zpět)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Odebrat vybrané soubory z projektu? (Nelze vrátit zpět)\n" +"Odebrané soubory budou v systémovém koši a obnovit je." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Soubory ke smazání potřebují jiné zdroje ke své činnosti.\n" -"Přesto je chcete smazat? (nelze vrátit zpět)" +"Přesto je chcete smazat? (nelze vrátit zpět)\n" +"Odebrané soubory budou v systémovém koši a obnovit je." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1102,7 +1107,7 @@ msgstr "Průzkumník osiřelých zdrojů" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1164,18 +1169,16 @@ msgid "Gold Sponsors" msgstr "Zlatí sponzoři" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "Stříbrní dárci" +msgstr "Stříbrní sponzoři" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" -msgstr "Bronzoví dárci" +msgstr "Bronzoví sponzoři" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "Malí sponzoři" +msgstr "Mini sponzoři" #: editor/editor_about.cpp msgid "Gold Donors" @@ -1211,7 +1214,7 @@ msgstr "" "Godot Engine závisí na volně dostupných a open source knihovnách od třetích " "stran; všechny jsou kompatibilní s podmínkami jeho MIT licence. Následuje " "plný výčet těchto komponent třetích stran s jejich příslušnými popisy " -"autorských práv a s licenčními podmínkami." +"autorských práv a licenčními podmínkami." #: editor/editor_about.cpp msgid "All Components" @@ -1276,39 +1279,39 @@ msgstr "Přidat efekt" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "Přejmenovat Audio Bus" +msgstr "Přejmenovat zvukovou sběrnici" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" -msgstr "Změnit hlasitost Audio Busu" +msgstr "Změnit hlasitost zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "Hraje pouze tento Audio Bus" +msgstr "Přepnout režim sólo zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "Ztlumit tento Audio Bus" +msgstr "Přepnout ztlumení zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Přepnout bypass efektů na zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Vybrat přenos zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "Přidat Audio Bus efekt" +msgstr "Přidat efekt zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "Přesunout Bus efekt" +msgstr "Přesunout efekt zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "Smazat Bus efekt" +msgstr "Smazat efekt zvukové sběrnice" #: editor/editor_audio_buses.cpp msgid "Drag & drop to rearrange." @@ -1471,7 +1474,7 @@ msgstr "Přejmenovat AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "" +msgstr "Přepnout auto-načítání globálních proměnných" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" @@ -1491,7 +1494,7 @@ msgstr "Přeskupit Autoloady" #: editor/editor_autoload_settings.cpp msgid "Can't add autoload:" -msgstr "" +msgstr "Nelze přidat auto-načítání:" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1516,7 +1519,7 @@ msgstr "Název" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "Singleton (jedináček)" +msgstr "Singleton" #: editor/editor_data.cpp editor/inspector_dock.cpp msgid "Paste Params" @@ -1578,7 +1581,7 @@ msgstr "Ukládám soubor:" #: editor/editor_export.cpp msgid "No export template found at the expected path:" -msgstr "Na očekávané cestě nebyly nalezeny žádné exportní šablony:" +msgstr "Na očekávané cestě nebyly nalezeny žádné šablony exportu:" #: editor/editor_export.cpp msgid "Packing" @@ -1613,34 +1616,31 @@ msgstr "" "Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Cílová platforma vyžaduje kompresi textur 'ETC' pro GLES2. Povolte 'Import " -"Etc' v nastaveních projektu." +"Cílová platforma vyžaduje kompresi textur 'PVRTC' pro GLES2. Povolte 'Import " +"Pvrtc' v nastavení projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Cílová platforma vyžaduje kompresi textur 'ETC2' pro GLES3. Povolte 'Import " -"Etc 2' v nastaveních projektu." +"Cílová platforma vyžaduje kompresi textur 'ETC2' nebo 'PVRTC' pro GLES3. " +"Povolte 'Import Etc 2' nebo 'Import Pvrtc' v nastavení projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Cílová platforma vyžaduje kompresi textur 'ETC' pro použití GLES2 jako " +"Cílová platforma vyžaduje kompresi textur 'PVRTC' pro použití GLES2 jako " "zálohy.\n" -"Povolte 'Import Etc' v nastaveních projektu, nebo vypněte 'Driver Fallback " +"Povolte 'Import Pvrtc' v nastavení projektu, nebo vypněte 'Driver Fallback " "Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -1680,18 +1680,16 @@ msgid "Scene Tree Editing" msgstr "Úpravy stromu scény" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Node Dock" -msgstr "Uzel přesunut" +msgstr "Panel uzlů" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem Dock" msgstr "Souborový systém" #: editor/editor_feature_profile.cpp msgid "Import Dock" -msgstr "Importovat dok" +msgstr "Importovat panel" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" @@ -1772,11 +1770,11 @@ msgstr "Nový" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "Importovat" +msgstr "Import" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" -msgstr "Exportovat" +msgstr "Export" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1795,9 +1793,8 @@ msgid "Erase Profile" msgstr "Smazat profil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Godot Feature Profile" -msgstr "Spravovat exportní šablony" +msgstr "Godot feature profil" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" @@ -1968,7 +1965,7 @@ msgstr "Je nutné použít platnou příponu." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "Sken zdrojů" #: editor/editor_file_system.cpp msgid "" @@ -2066,7 +2063,7 @@ msgstr "" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "Prohledat nápovědu" +msgstr "Hledat v dokumentaci" #: editor/editor_help_search.cpp msgid "Case Sensitive" @@ -2105,9 +2102,8 @@ msgid "Theme Properties Only" msgstr "Pouze vlastnosti motivu" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "Členové" +msgstr "Typ člena" #: editor/editor_help_search.cpp msgid "Class" @@ -2161,7 +2157,7 @@ msgstr "Kopírovat výběr" #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Clear" -msgstr "Vyčistit" +msgstr "Promazat" #: editor/editor_log.cpp msgid "Clear Output" @@ -2291,6 +2287,8 @@ msgid "" "This scene can't be saved because there is a cyclic instancing inclusion.\n" "Please resolve it and then attempt to save again." msgstr "" +"Tato scéna nemůže být uložena, protože obsahuje cyklickou referenci.\n" +"Odstraňte ji, a poté zkuste uložit znovu." #: editor/editor_node.cpp msgid "" @@ -2321,19 +2319,29 @@ msgid "Error saving TileSet!" msgstr "Chyba při ukládání TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Chyba při pokusu uložit rozložení!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Při pokusu o uložení rozložení editoru došlo k chybě.\n" +"Ujistěte se, že cesta k uživatelským datům editoru je zapisovatelná." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Výchozí rozložení editoru přepsáno." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Výchozí rozložení editoru bylo přepsáno.\n" +"Chcete-li obnovit výchozí rozložení do výchozího nastavení, použijte možnost " +"Odstranit rozložení a odstraňte výchozí rozložení." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Jméno rozložení nenalezeno!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "Obnoveno výchozí rozložení na základní nastavení." #: editor/editor_node.cpp @@ -2410,7 +2418,7 @@ msgstr "Rychle otevřít scénu..." #: editor/editor_node.cpp msgid "Quick Open Script..." -msgstr "Rychlé otevření skriptu..." +msgstr "Rychle otevřít skript..." #: editor/editor_node.cpp msgid "Save & Close" @@ -2481,10 +2489,12 @@ msgid "" "The current scene has unsaved changes.\n" "Reload the saved scene anyway? This action cannot be undone." msgstr "" +"Tato scéna obsahuje neuložené změny.\n" +"Přesto znovu načíst? Tuto akci nelze vrátit zpět." #: editor/editor_node.cpp msgid "Quick Run Scene..." -msgstr "Rychlé spuštění scény..." +msgstr "Rychle spustit scénu..." #: editor/editor_node.cpp msgid "Quit" @@ -2604,8 +2614,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Vybraná scéna '%s' neexistuje, vybrat platnou? \n" -"Později to můžete změnit v \"Nastavení projektu\" v kategorii 'application'." +"Vybraná scéna '%s' neexistuje, vybrat platnou?\n" +"Později to můžete změnit v \"Nastavení projektu\" v kategorii 'application'." #: editor/editor_node.cpp msgid "" @@ -2613,6 +2623,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Vybraná scéna '%s' není platný soubor scény. Vybrat jinou?\n" +"Můžete ji později změnit v \"Nastavení projektu\" v kategorii \"aplikace\"." #: editor/editor_node.cpp msgid "Save Layout" @@ -2722,7 +2734,7 @@ msgstr "Nová scéna" #: editor/editor_node.cpp msgid "New Inherited Scene..." -msgstr "Nová odvozená scéna..." +msgstr "Nová zděděná scéna..." #: editor/editor_node.cpp msgid "Open Scene..." @@ -2793,7 +2805,7 @@ msgstr "Exportovat..." #: editor/editor_node.cpp msgid "Install Android Build Template..." -msgstr "" +msgstr "Nainstalovat kompilační šablonu pro Android..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2829,14 +2841,17 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"Pokud je tato možnost povolena, použití one-click deploy způsobí, že se " +"aplikace pokusí připojit k IP tohoto počítače, takže spuštěný projekt může " +"být laděn.\n" +"Tato možnost je určena pro vzdálené ladění (typicky s mobilním zařízením).\n" +"Nemusíte ji povolovat abyste mohli použít lokální ladění GDScriptu." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" -msgstr "Minimální nasazení se síťovým FS" +msgstr "Tenké nasazení pomocí síťového souborového sistému" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, using one-click deploy for Android will only " "export an executable without the project data.\n" @@ -2845,72 +2860,67 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"Když je tato možnost povolena, export nebo nasazení bude vytvářet minimální " -"spustitelný soubor.\n" -"Souborový systém bude poskytnut editorem projektu přes sít.\n" -"Pro nasazení na Android bude použít USB kabel pro dosažení vyššího výkonu. " -"Tato možnost urychluje testování objemných her." +"Když je tato možnost vybrána, Android Quick Deployment exportuje pouze " +"spustitelný soubor bez dat projektu.\n" +"Souborový systém bude z projektu sdílen editorem po síti.\n" +"V systému Android bude nasazení používat kabel USB pro rychlejší výkon. Tato " +"možnost výrazně zrychluje testování velkých her." #: editor/editor_node.cpp msgid "Visible Collision Shapes" msgstr "Viditelné kolizní tvary" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"Kolizní tvary a raycast uzly (pro 2D a 3D) budou viditelné během hry, po " -"aktivaci této volby." +"když je povolena tato volba, tak lze během hry vidět kolizní tvary a raycast " +"uzly (pro 2D a 3D)." #: editor/editor_node.cpp msgid "Visible Navigation" msgstr "Viditelná navigace" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." msgstr "" -"Navigační meshe a polygony budou viditelné během hry, po aktivaci této volby." +"když je povolena tato volba, tak lze během hry vidět navigační meshe a " +"polygony." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Scene Changes" msgstr "Synchronizovat změny scény" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Když je zapnuta tato možnost, všechny změny provedené ve scéně v editoru " -"budou replikovány v běžící hře.\n" -"Při použití se vzdáleným spuštěním je toto více efektivní při použití " -"síťového souborového systému." +"Je-li tato možnost vybrána, budou se všechny změny fáze v editoru opakovat, " +"zatímco hra běží.\n" +"Při vzdáleném použití na zařízení je tato možnost efektivnější, když je " +"povolen síťový souborový systém." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Script Changes" -msgstr "Synchornizace změn skriptu" +msgstr "Synchornizovat změny skriptu" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any script that is saved will be reloaded in " "the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Když je zapnuta tato volba, jakýkoliv skript, který je uložen bude znovu " -"nahrán do spuštěné hry.\n" -"Při použití se vzdáleným spuštěním je toto více efektivní při použití " -"síťového souborového systému." +"Pokud je tato možnost povolena, jakýkoli uložený skript se znovu načte, když " +"je hra spuštěna.\n" +"Při vzdáleném použití na zařízení je tato možnost efektivnější, když je " +"povolen síťový souborový systém." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" @@ -2929,18 +2939,16 @@ msgid "Take Screenshot" msgstr "Vytvořit snímek obrazovky" #: editor/editor_node.cpp -#, fuzzy msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "Otevřít složku s daty a nastavením editoru" +msgstr "Screenshoty jsou uložené v Editor Data/Settings Folder." #: editor/editor_node.cpp msgid "Toggle Fullscreen" msgstr "Přepnout celou obrazovku" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle System Console" -msgstr "Přepnout režim rozdělení" +msgstr "Zapnout/Vypnout systémovou konzoli" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" @@ -2955,13 +2963,12 @@ msgid "Open Editor Settings Folder" msgstr "Otevřít složku s nastavením editoru" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Spravovat exportní šablony" +msgstr "Spravovat funkce editoru..." #: editor/editor_node.cpp msgid "Manage Export Templates..." -msgstr "Spravovat exportní šablony..." +msgstr "Spravovat šablony exportu..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2990,7 +2997,7 @@ msgstr "Nahlásit chybu" #: editor/editor_node.cpp msgid "Send Docs Feedback" -msgstr "" +msgstr "Odeslat zpětnou vazbu dokumentace" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" @@ -3010,7 +3017,7 @@ msgstr "Hrát" #: editor/editor_node.cpp msgid "Pause the scene execution for debugging." -msgstr "" +msgstr "Pozastavit běh scény pro ladění." #: editor/editor_node.cpp msgid "Pause Scene" @@ -3071,7 +3078,7 @@ msgstr "Inspektor" #: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "" +msgstr "Rozšířit spodní panel" #: editor/editor_node.cpp msgid "Output" @@ -3084,6 +3091,7 @@ msgstr "Neukládat" #: editor/editor_node.cpp msgid "Android build template is missing, please install relevant templates." msgstr "" +"Chybí kompilační šablona pro Android, prosím nainstalujte vhodnou šablonu." #: editor/editor_node.cpp msgid "Manage Templates" @@ -3099,6 +3107,13 @@ msgid "" "the \"Use Custom Build\" option should be enabled in the Android export " "preset." msgstr "" +"Tato možnost připraví váš projekt na vaše vlastní sestavení pro Android " +"instalací zdrojové šablony v \"res://android/build\".\n" +"Poté můžete při exportu přidat úpravy a vytvořit si vlastní soubor APK " +"(přidání modulů, změna souboru AndroidManifest.xml, atd.)\n" +"Upozorňujeme, že pokud chcete vytvořit vlastní sestavení namísto použití " +"připraveného souboru APK, měla by být v exportním profilu Androidu povolena " +"možnost \"Použít vlastní sestavení\"." #: editor/editor_node.cpp msgid "" @@ -3107,6 +3122,9 @@ msgid "" "Remove the \"res://android/build\" directory manually before attempting this " "operation again." msgstr "" +"Kompilační šablona pro Android je pro tento projekt již nainstalovaná a " +"nebude přepsána.\n" +"Odstraňte složku \"res://android/build\" před dalším pokusem o tuto operaci." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3174,7 +3192,7 @@ msgstr "Nebyly nalezeny žádné dílčí zdroje." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "" +msgstr "Vytváření náhledu modelu" #: editor/editor_plugin.cpp msgid "Thumbnail..." @@ -3239,7 +3257,7 @@ msgstr "Inkluzivní" #: editor/editor_profiler.cpp msgid "Self" -msgstr "" +msgstr "Tento objekt" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3259,7 +3277,7 @@ msgstr "Editovat text:" #: editor/editor_properties.cpp editor/script_create_dialog.cpp msgid "On" -msgstr "" +msgstr "Zapnout" #: editor/editor_properties.cpp msgid "Layer" @@ -3304,6 +3322,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"Na tomto zdroji nelze vytvořit ViewportTexture, protože není pro scénu " +"lokální.\n" +"Upravte jeho vlastnost \"lokální pro scénu\" (a všechny zdroje, které jej " +"obsahují, až po uzel)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -3314,9 +3336,8 @@ msgid "New Script" msgstr "Nový skript" #: editor/editor_properties.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "Otevřít skript" +msgstr "Rozšířit skript" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" @@ -3374,7 +3395,6 @@ msgid "Add Key/Value Pair" msgstr "Vložte pár klíč/hodnota" #: editor/editor_run_native.cpp -#, fuzzy msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the Export menu or define an existing preset " @@ -3382,7 +3402,8 @@ msgid "" msgstr "" "Nebylo nalezeno žádné spustilené přednastavení pro exportování na tuto " "platformu.\n" -"Přidejte prosím spustitelné přednastavení v exportovacím menu." +"Přidejte prosím spustitelné přednastavení v exportovacím menu nebo definujte " +"existující přednastavení jako spustitelné." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -3409,16 +3430,14 @@ msgid "Did you forget the '_run' method?" msgstr "Nezapoměl jste metodu '_run'?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." msgstr "" -"Podržte Ctrl k uvolnění getteru. Podržte Shift k uvolnění generického " -"podpisu." +"Podržte Ctrl pro zaokrouhlení na celá čísla. Podržte Shift pro přesnější " +"úpravy." #: editor/editor_sub_scene.cpp -#, fuzzy msgid "Select Node(s) to Import" -msgstr "Vyberte uzly (Node) pro import" +msgstr "Vyberte uzly pro import" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" @@ -3451,7 +3470,7 @@ msgstr "Stáhnout" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "Oficiální šablony exportu nejsou k dispozici pro vývojová sestavení." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3499,7 +3518,7 @@ msgstr "Chyba při získávání seznamu zrcadel." #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" -msgstr "" +msgstr "Chyba parsování JSON mirror list. Prosím nahlaste tuto chybu!" #: editor/export_template_manager.cpp msgid "" @@ -3604,9 +3623,8 @@ msgid "SSL Handshake Error" msgstr "Selhání SSL handshaku" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uncompressing Android Build Sources" -msgstr "Dekomprese uživatelského obsahu" +msgstr "Dekomprese zdrojů sestavení pro Android" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3630,7 +3648,7 @@ msgstr "Vybrat soubor šablony" #: editor/export_template_manager.cpp msgid "Godot Export Templates" -msgstr "Exportní šablony Godotu" +msgstr "Šablony exportu Godotu" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -3691,6 +3709,16 @@ msgid "Name contains invalid characters." msgstr "Jméno obsahuje neplatné znaky." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Přejmenovávání souboru:" @@ -3708,7 +3736,7 @@ msgstr "Duplikace složky:" #: editor/filesystem_dock.cpp msgid "New Inherited Scene" -msgstr "Nová odvozená scéna" +msgstr "Nová zděděná scéna" #: editor/filesystem_dock.cpp msgid "Set As Main Scene" @@ -3720,7 +3748,7 @@ msgstr "Otevřít scény" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "Instance:" +msgstr "Instance" #: editor/filesystem_dock.cpp msgid "Add to Favorites" @@ -3738,14 +3766,6 @@ msgstr "Upravit závislosti..." msgid "View Owners..." msgstr "Zobrazit vlastníky..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Přejmenovat..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplikovat..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Přesunout do..." @@ -3773,11 +3793,16 @@ msgid "Collapse All" msgstr "Sbalit vše" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Přejmenovat" +msgid "Duplicate..." +msgstr "Duplikovat..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Přesunout do koše" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Přejmenovat..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3812,8 +3837,11 @@ msgid "Move" msgstr "Přesunout" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Soubor nebo složka se stejným názvem již na tomto místě existuje." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Přejmenovat" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3848,6 +3876,8 @@ msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." msgstr "" +"Zahrnout soubory s následujícími příponami. Přidejte nebo odeberte je v " +"Nastavení projektu." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3911,7 +3941,6 @@ msgid "Groups" msgstr "Skupiny" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" msgstr "Uzly nejsou ve skupině" @@ -3926,7 +3955,7 @@ msgstr "Uzly jsou ve skupině" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Prázdné skupiny budou automaticky odstraněny." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3938,43 +3967,43 @@ msgstr "Spravovat skupiny" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "" +msgstr "Importovat jako jednu scénu" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "" +msgstr "Importovat s oddělenými animacemi" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Importovat s oddělenými materiály" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Importujte s oddělenými objekty" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Importujte s oddělenými objekty a materiály" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "Importujte s oddělenými objekty a animacemi" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "Importujte s oddělenými materiály a animacemi" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "Importujte s oddělenými objekty, materiály a animacemi" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "Importovat jako více scén" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Importovat jako více scén a materiálů" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -3987,18 +4016,17 @@ msgstr "Importuji scénu..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "Generování světelné mapy" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Generování pro síť: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." -msgstr "" +msgstr "Spouštím skript..." #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Couldn't load post-import script:" msgstr "Nepodařilo se načíst post-import script:" @@ -4012,7 +4040,7 @@ msgstr "Chyba při spuštění post-import scriptu:" #: editor/import/resource_importer_scene.cpp msgid "Did you return a Node-derived object in the `post_import()` method?" -msgstr "" +msgstr "Vrátili jste objekt, který dědí z Node metodou `post_import()`?" #: editor/import/resource_importer_scene.cpp msgid "Saving..." @@ -4035,9 +4063,8 @@ msgid "Import As:" msgstr "Importovat jako:" #: editor/import_dock.cpp -#, fuzzy msgid "Preset" -msgstr "Předvolby" +msgstr "Profil" #: editor/import_dock.cpp msgid "Reimport" @@ -4045,17 +4072,18 @@ msgstr "Znovu importovat" #: editor/import_dock.cpp msgid "Save Scenes, Re-Import, and Restart" -msgstr "" +msgstr "Uložit scény, znovu importovat a restartovat" #: editor/import_dock.cpp -#, fuzzy msgid "Changing the type of an imported file requires editor restart." -msgstr "Změna grafického ovladače vyžaduje restart editoru." +msgstr "Změna typu importovaného souboru vyžaduje restart editoru." #: editor/import_dock.cpp msgid "" "WARNING: Assets exist that use this resource, they may stop loading properly." msgstr "" +"VAROVÁNÍ: Existují zdroje, který tento zdroj používají. Může se stát, že se " +"přestanou správně načítat." #: editor/inspector_dock.cpp msgid "Failed to load resource." @@ -4079,9 +4107,8 @@ msgid "Copy Params" msgstr "Kopírovat parametry" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "Schránka zdroje je prázdná!" +msgstr "Editovat schránku zdrojů" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -4089,7 +4116,7 @@ msgstr "Kopírovat zdroj" #: editor/inspector_dock.cpp msgid "Make Built-In" -msgstr "" +msgstr "Vytvořit vestavěný" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4137,7 +4164,7 @@ msgstr "Změny mohou být ztraceny!" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "MultiNode sada" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." @@ -4230,17 +4257,16 @@ msgstr "Načíst..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Move Node Point" -msgstr "Přesunout body" +msgstr "Přesunout body uzlů" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" -msgstr "" +msgstr "Upravit hranice BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Labels" -msgstr "" +msgstr "Upravit popisky BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4250,24 +4276,21 @@ msgstr "Tento typ uzlu nelze použít. Jsou povoleny pouze kořenové uzly." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Node Point" -msgstr "Přidat uzel" +msgstr "Přidat bod uzlu" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Animation Point" -msgstr "Přidat animaci" +msgstr "Přidat bod animace" #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Remove BlendSpace1D Point" -msgstr "Odstranit bod cesty" +msgstr "Odstranit bod BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "" +msgstr "Přesunout bod uzlu BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4277,11 +4300,14 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" +"AnimationTree je neaktviní.\n" +"Aktivujte ho, aby začlo přehrávání. Pokud aktivace nefunguje, tak " +"zkontrolujte varování uzlu." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "" +msgstr "Nastavit blending pozici v prostoru" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4321,34 +4347,31 @@ msgstr "Přidat trojúhelník" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Limits" -msgstr "" +msgstr "Upravit hranice BlendSpace2D" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Labels" -msgstr "" +msgstr "Upravit popisky BlendSpace2D" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Remove BlendSpace2D Point" -msgstr "Odstranit bod cesty" +msgstr "Odstranit bod BlendSpace2D" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Remove BlendSpace2D Triangle" -msgstr "Odstranit proměnnou" +msgstr "Odstranit BlendSpace2D trojúhelník" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D nepatří k AnimationTree uzlu." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "" +msgstr "Neexistují žádné trojúhelníky, takže nemůže nastat žádný blending." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Toggle Auto Triangles" -msgstr "Zobrazit oblíbené" +msgstr "Zapnout/Vypnout automatické trojúhelníky" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." @@ -4360,7 +4383,7 @@ msgstr "Odstranit body a trojúhelníky." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Vygenerovat blend trojúhelníky automaticky (ne manuálně)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4378,7 +4401,7 @@ msgstr "Editovat filtry" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Výstupní uzly nemohou být přidané do blend stromu." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" @@ -4414,7 +4437,7 @@ msgstr "Smazat uzel" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "Odstranit uzel/uzly" +msgstr "Odstranit uzly" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Toggle Filter On/Off" @@ -4426,11 +4449,11 @@ msgstr "Změnit filtr" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." -msgstr "" +msgstr "Není nastavený přehrávač animací, takže nelze získat jména stop." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." -msgstr "" +msgstr "Cesta k přehrávači je nevalidní, takže nelze získat jména stop." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -4438,6 +4461,8 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" +"Přehrávač animací nemá validní cestu ke kořenovému uzlu, takže nelze získat " +"jména stop." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Anim Clips" @@ -4511,7 +4536,7 @@ msgstr "Přejmenovat animaci" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "" +msgstr "Upraveno prolnutí na další" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" @@ -4570,9 +4595,8 @@ msgid "Animation position (in seconds)." msgstr "Pozice animace (v sekundách)." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Scale animation playback globally for the node." -msgstr "Škálovat playback animace globálně pro uzel" +msgstr "Škálovat playback animace globálně pro uzel." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -4595,18 +4619,16 @@ msgid "Display list of animations in player." msgstr "Zobrazit seznam animací v přehrávači." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Autoplay on Load" -msgstr "Autoplay při načtení" +msgstr "Auto-přehrání při načtení" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "" +msgstr "Povolit Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Onion Skinning Options" -msgstr "Možnosti přichytávání" +msgstr "Onion Skinning možnosti" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" @@ -4642,16 +4664,15 @@ msgstr "Pouze rozdíly" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "Vynutit bílou modulaci" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "Zahrnout Gizmos (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "Vložit animaci" +msgstr "Připnout AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -4670,7 +4691,7 @@ msgstr "Chyba!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "" +msgstr "Blend časy:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" @@ -4678,7 +4699,7 @@ msgstr "Další (Automatická řada):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "" +msgstr "Přechodové časy prolnutí animací" #: editor/plugins/animation_state_machine_editor.cpp msgid "Move Node" @@ -4703,7 +4724,7 @@ msgstr "Konec" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Okamžité" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" @@ -4711,7 +4732,7 @@ msgstr "Synchronizovat" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Na konci" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" @@ -4719,12 +4740,11 @@ msgstr "Cestovat" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Pro pod-přechod jsou potřeba začáteční a koncové uzly." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "Není v cestě ke zdroji." +msgstr "Na cestě nebyl nalezen žádný zdrojový playback: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -4736,7 +4756,7 @@ msgstr "Přechod odebrán" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" -msgstr "" +msgstr "Nastavit počáteční uzel (Autoplay)" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4744,6 +4764,9 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Vyberte a přesuňte uzly.\n" +"PTM pro přidání nových uzlů.\n" +"Shift + LTM pro vytváření spojení." #: editor/plugins/animation_state_machine_editor.cpp msgid "Create new nodes." @@ -4760,10 +4783,12 @@ msgstr "Odstranit vybraný uzel nebo přechod." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" +"Přepnout automatické přehrávání této animace při spuštění, restartování nebo " +"přetočení zpět na nulu." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "Nastavit koncovou animaci. Užitečné pro pod-přechody." #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " @@ -4788,25 +4813,24 @@ msgid "Scale:" msgstr "Zvětšení:" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Fade In (s):" -msgstr "Zmizení do (s):" +msgstr "Objevení za (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Fade Out (s):" -msgstr "" +msgstr "Zmizení za (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" -msgstr "" +msgstr "Prolnutí" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix" -msgstr "" +msgstr "Mix" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "Auto-restart:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" @@ -4835,7 +4859,7 @@ msgstr "Prolínání 1:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "" +msgstr "X-Fade čas (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Current:" @@ -4853,7 +4877,7 @@ msgstr "Čistý Auto-Advance" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "" +msgstr "Nastavit auto-krok" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Delete Input" @@ -4909,7 +4933,7 @@ msgstr "Importovat animace..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "Editovat filtry uzlů" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." @@ -4953,14 +4977,13 @@ msgstr "Odpověď nelze uložit na:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Chyba zápisu." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Požadavek se nezdařil, příliš mnoho přesměrování" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Zacyklené přesměrování." @@ -4969,9 +4992,8 @@ msgid "Request failed, timeout" msgstr "Požadavek selhal, vypršel časový limit" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Čas" +msgstr "Čas vypršel." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -5031,11 +5053,11 @@ msgstr "Stahování tohoto assetu právě probíhá!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" -msgstr "" +msgstr "Naposledy upravené" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "" +msgstr "Naposledy neupravené" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (A-Z)" @@ -5087,7 +5109,7 @@ msgstr "Pluginy..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" -msgstr "Řadit:" +msgstr "Řadit podle:" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp @@ -5124,16 +5146,23 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"Nelze určit cestu uložení pro světelnou mapu obrázku.\n" +"Uložte scénu (obrázky se uloží do stejného adresáře) nebo vyberte cestu pro " +"uložení z vlastnosti BakedLightmap." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" +"Žádné sítě k zapečení. Ujistěte se, že obsahují kanál UV2 a že je nastaven " +"příznak \"Zapéct světlo\"." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." msgstr "" +"Při vytváření ligtmap došlo k chybě, ujistěte se, že cesta není pouze pro " +"čtení." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" @@ -5146,7 +5175,7 @@ msgstr "Náhled" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "Nastavení přichycování" +msgstr "Nastavení přichycení" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Offset:" @@ -5158,7 +5187,7 @@ msgstr "Krok mřížky:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Primary Line Every:" -msgstr "" +msgstr "Hlavní řádek každý:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "steps" @@ -5173,9 +5202,8 @@ msgid "Rotation Step:" msgstr "Krok rotace:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Step:" -msgstr "Zvětšení:" +msgstr "Krok škálování:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" @@ -5207,66 +5235,63 @@ msgstr "Vytvořit vodorovná a svislá vodítka" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Nastavit CanvasItem \"%s\" offset pivota na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rotovat CanvasItem" +msgstr "Rotovat %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rotovat CanvasItem" +msgstr "Rotovat CanvasItem \"%s\" na %d stupňů" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Přemístit CanvasItem" +msgstr "Přemístit CanvasItem \"%s\" kotva" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Škálovat Node2D \"%s\" na (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Škálovat Control \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Škálovat CanvasItem" +msgstr "Škálovat %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Škálovat CanvasItem" +msgstr "Škálovat CanvasItem \"%s\" na (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Přemístit CanvasItem" +msgstr "Přemístit %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Přemístit CanvasItem" +msgstr "Přemístit CanvasItem \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." msgstr "" +"Hodnoty ukotvení a okrajů potomků uzlů kontejnerů jsou přepsány jejich " +"rodičem." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Presets for the anchors and margins values of a Control node." -msgstr "" +msgstr "Přednastavení pro hodnoty ukotvení a okrajů Control ulzu." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." msgstr "" +"Když je aktivní, pohybující se Control uzly mění svoje ukotvení, namísto " +"jejich okrajů." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Left" @@ -5302,43 +5327,39 @@ msgstr "Uprostřed dole" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center" -msgstr "" +msgstr "Uprostřed" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Left Wide" -msgstr "Pohled zleva" +msgstr "Vlevo po celé výšce" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Wide" -msgstr "Pohled shora" +msgstr "Nahoře po celé šířce" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Right Wide" -msgstr "Pohled zprava" +msgstr "Vpravo po celé výšce" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Wide" -msgstr "Pohled zdola" +msgstr "Dole po celé šířce" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "VCenter Wide" -msgstr "" +msgstr "Uprostřed po celé výšce" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "HCenter Wide" -msgstr "" +msgstr "Uprostřed po celé šířce" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Full Rect" -msgstr "" +msgstr "Celý obdélník" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Keep Ratio" -msgstr "Ponechat poměr" +msgstr "Zachovat poměr" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5358,6 +5379,8 @@ msgid "" "Game Camera Override\n" "Overrides game camera with editor viewport camera." msgstr "" +"Přepsat herní kameru\n" +"Herní kamera se nahradí kamerou z pohledu editoru." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5365,6 +5388,8 @@ msgid "" "Game Camera Override\n" "No game instance running." msgstr "" +"Přepsat herní kameru\n" +"Není spuštěna žádná instance hry." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5378,28 +5403,25 @@ msgstr "Odemčít vybraný" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Group Selected" -msgstr "Kopírovat výběr" +msgstr "Seskupit vybrané" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Ungroup Selected" -msgstr "Kopírovat výběr" +msgstr "Odskupit vybrané" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "" +msgstr "Vložit pózu" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Guides" msgstr "Vymazat vodítka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Custom Bone(s) from Node(s)" -msgstr "Vytvořit ze scény" +msgstr "Vytvořit vlastní kosti z uzlů" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" @@ -5407,17 +5429,19 @@ msgstr "Vymazat kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "" +msgstr "Vytvořit IK řetěz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "" +msgstr "Zrušit IK řetěz" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Warning: Children of a container get their position and size determined only " "by their parent." msgstr "" +"Varování: Pozici a velikost potomků kontejneru nastavuje pouze jejich " +"nadřazený prvek." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -5441,11 +5465,12 @@ msgstr "Alt+Táhnutí: Přemístit" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" +"Stisknutím klávesy \"V\" se upraví pivot, stisknutím kláves \"Shift+V\" se " +"posune pivot (při pohybu)." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Depth list selection" -msgstr "Alt+Pravé tlačíko myši:" +msgstr "Alt+PTM: Výběr hloubkového seznamu" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5468,63 +5493,60 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" +"Zobrazit seznam objektů v bodě kliknutí\n" +"(stejné jako Alt+PTM v režimu výběru)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "" +msgstr "Kliknutím změníte střed otáčení objektu." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Režim posouvání" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Ruler Mode" msgstr "Režim pravítka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle smart snapping." -msgstr "Přepnout přichycování." +msgstr "Přepnout chytré přichytávání." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Smart Snap" -msgstr "Použít chytré přichycování" +msgstr "Použít chytré přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle grid snapping." -msgstr "Přepnout přichycování." +msgstr "Přepnout mřížkové přichytávání." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Grid Snap" -msgstr "Použít přichycování" +msgstr "Použít mřížkové přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping Options" -msgstr "Možnosti přichytávání" +msgstr "Možnosti přichycení" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "" +msgstr "Použít rotační přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Scale Snap" -msgstr "Použít přichycování" +msgstr "Použít škálovací přichytávání" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "" +msgstr "Přichytávat relativně" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "" +msgstr "Přichytávat na pixely" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Smart Snapping" -msgstr "Chytré přichytávání" +msgstr "Chytré přichcování" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5532,39 +5554,33 @@ msgid "Configure Snap..." msgstr "Nastavení přichytávání..." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Parent" msgstr "Přichytit k rodičovi" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Anchor" -msgstr "Přichytit ke středu uzlu" +msgstr "Přichytit k ukotvení uzlu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Sides" msgstr "Přichytit ke stranám uzlu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Center" msgstr "Přichytit ke středu uzlu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Other Nodes" msgstr "Přichytit k jiným uzlům" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Guides" msgstr "Přichytit k vodítkům" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "Uzamčít vybraný objekt na místě (nemůže být přesunut)." +msgstr "Uzamknout vybraný objekt na místě (nemůže být přesunut)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5574,12 +5590,12 @@ msgstr "Uvolnit vybraný objekt (může být přesunut)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "" +msgstr "Zajistí, aby nebylo možné vybrat potomky objektu." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "" +msgstr "Obnoví, aby bylo možné vybrat potomky objektu." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton Options" @@ -5591,10 +5607,9 @@ msgstr "Zobrazit kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Vytvořit kosti z uzlů" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Custom Bones" msgstr "Vymazat kosti" @@ -5604,9 +5619,8 @@ msgid "View" msgstr "Zobrazení" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Always Show Grid" -msgstr "Zobrazit mřížku" +msgstr "Vždy zobrazit mřížku" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" @@ -5630,7 +5644,7 @@ msgstr "Zobrazit Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Zobrazit ikony skupiny a zámku" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -5642,24 +5656,23 @@ msgstr "Výběr snímku" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" -msgstr "" +msgstr "Náhled měřítka plátna" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Translation mask for inserting keys." -msgstr "" +msgstr "Offset maska pro vkládání klíčů." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation mask for inserting keys." -msgstr "" +msgstr "Rotační maska pro vkládání klíčů." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale mask for inserting keys." -msgstr "" +msgstr "Škálovací maska pro vkládání klíčů." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys (based on mask)." -msgstr "Vložit klíč (existující stopy)" +msgstr "Vložit klíč (založený na masce)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5668,16 +5681,19 @@ msgid "" "Keys are only added to existing tracks, no new tracks will be created.\n" "Keys must be inserted manually for the first time." msgstr "" +"Automaticky vkládat klíče, když je objekt přesunut, otočen nebo zmenšen (na " +"základě masky).\n" +"Klíče se přidávají pouze ke stávajícím cestám, žádné nové cesty se " +"nevytvoří.\n" +"Poprvé musí být klíče vloženy ručně." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Auto Insert Key" -msgstr "Animace: vložit klíč" +msgstr "Automaticky vložit klíč" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Animation Key and Pose Options" -msgstr "Animační klíč vložen." +msgstr "Animační klíč a možnosti pozice" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -5693,16 +5709,15 @@ msgstr "Vymazat pózu" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "" +msgstr "Vynásobit krok mřížky dvěma" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "" +msgstr "Vydělit krok mřížky dvěma" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Pan View" -msgstr "Pohled zezadu" +msgstr "Přesunout pohled" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -5714,7 +5729,7 @@ msgstr "Přidávám %s..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Bez kořenového uzlu nelze vytvořit více uzlů." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -5727,7 +5742,6 @@ msgid "Error instancing scene from %s" msgstr "Chyba instancování scény z %s" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change Default Type" msgstr "Změnit výchozí typ" @@ -5736,6 +5750,8 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" +"Přetažení + Shift: Přidat uzel jako souseda\n" +"Přetažení + Alt: Změnit typu uzlu" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" @@ -5751,7 +5767,7 @@ msgstr "Upravit polygon (Odstranit bod)" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "" +msgstr "Nastavit úchyt" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5762,9 +5778,8 @@ msgstr "Načíst emisní masku" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Restart" -msgstr "Restartovat nyní" +msgstr "Restartovat" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5790,28 +5805,27 @@ msgstr "Emisní maska" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Solid Pixels" -msgstr "" +msgstr "Pevné pixely" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Border Pixels" -msgstr "" +msgstr "Hraniční pixely" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Directed Border Pixels" -msgstr "Složky a soubory:" +msgstr "Pixely ohraničení" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "" +msgstr "Snímání z pixelu" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "" +msgstr "Emisní barvy" #: editor/plugins/cpu_particles_editor_plugin.cpp msgid "CPUParticles" @@ -5820,46 +5834,44 @@ msgstr "CPUParticles (částice)" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "Vytvořit emisní body ze sítě" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "Vytvořit emisní body z uzlu" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Flat 0" -msgstr "Flat0" +msgstr "Plocha 0" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Flat 1" -msgstr "Flat1" +msgstr "Plocha 1" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease In" -msgstr "" +msgstr "Pozvolný vchod" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease Out" -msgstr "" +msgstr "Pozvolný odchod" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "" +msgstr "Plynulý krok" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" -msgstr "" +msgstr "Upravit bod křivky" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "" +msgstr "Upravit tečnu křivky" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Curve Preset" -msgstr "" +msgstr "Načíst předdefinovanou křivku" #: editor/plugins/curve_editor_plugin.cpp msgid "Add Point" @@ -5870,19 +5882,16 @@ msgid "Remove Point" msgstr "Odstranit bod" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left Linear" -msgstr "Lineární" +msgstr "Levé lineární" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right Linear" -msgstr "Pohled zprava" +msgstr "Pravé lineární" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Preset" -msgstr "Načíst preset" +msgstr "Načíst přednastavení" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" @@ -5890,24 +5899,23 @@ msgstr "Odstranit bod křivky" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Přepne lineární tečnu křivky" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "" +msgstr "Podržením Shift změníte tečny jednotlivě" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right click to add point" -msgstr "Pravý klik: Smazat bod" +msgstr "Pravý klik pro přidání bodu" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "" +msgstr "Zapéct GI probe" #: editor/plugins/gradient_editor_plugin.cpp msgid "Gradient Edited" -msgstr "" +msgstr "Gradient upraven" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -5930,49 +5938,44 @@ msgid "Mesh is empty!" msgstr "Mesh je prázdný!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Couldn't create a Trimesh collision shape." -msgstr "Nelze vytvořit složku." +msgstr "Vytvoření Trimesh kolizního tvaru se nezdařilo." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Vytvořit statické Trimesh Body" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" msgstr "Toto v kořenu scény nefunguje!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Trimesh Static Shape" -msgstr "Vytvořit Trimesh Shape" +msgstr "Vytvořit statický Trimesh tvar" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create a single convex collision shape for the scene root." -msgstr "" +msgstr "Pro kořen scény nelze vytvořit jediný konvexní kolizní tvar." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create a single convex collision shape." -msgstr "" +msgstr "Vytvoření jediného konvexního kolizního tvaru se nezdařilo." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Single Convex Shape" -msgstr "Vytvořit Convex Shape" +msgstr "Vytvořit jediný konvexní tvar" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create multiple convex collision shapes for the scene root." -msgstr "" +msgstr "Pro kořen scény nelze vytvořit více konvexních tvarů kolize." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Couldn't create any collision shapes." -msgstr "Nelze vytvořit složku." +msgstr "Nelze vytvořit žádný z konvexních tvarů kolize." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Multiple Convex Shapes" -msgstr "Vytvořit Convex Shape" +msgstr "Vytvořit více konvexních tvarů kolize" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5984,7 +5987,7 @@ msgstr "Obsažená mesh není typu ArrayMesh." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "" +msgstr "Rozbalení UV se nezdařilo, možná je nesprávně síť?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." @@ -6004,7 +6007,7 @@ msgstr "Mesh némá povrch z jakého vytvořit obrysy!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Typ primitivní sítě není PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -6020,7 +6023,7 @@ msgstr "Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "" +msgstr "Vytvořit statické Trimesh tělo" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6028,42 +6031,49 @@ msgid "" "automatically.\n" "This is the most accurate (but slowest) option for collision detection." msgstr "" +"Vytvoří uzel StaticBody a automaticky mu přiřadí kolizní tvar na základě " +"polygonu.\n" +"Toto je nejpřesnější (ale nejpomalejší) možnost detekce kolizí." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "" +msgstr "Vytvořit sourozence Trimesh kolize" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" "Creates a polygon-based collision shape.\n" "This is the most accurate (but slowest) option for collision detection." msgstr "" +"Vytvoří polygonový kolizní tvar.\n" +"Toto je nejpřesnější (ale nejpomalejší) možnost detekce kolizí." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Single Convex Collision Sibling" -msgstr "Vytvořit navigační polygon" +msgstr "Vytvořit jediného konvexního kolizního sourozence" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" "Creates a single convex collision shape.\n" "This is the fastest (but least accurate) option for collision detection." msgstr "" +"Vytvoří jeden konvexní kolizní tvar.\n" +"Toto je nejrychlejší (ale nejméně přesná) možnost detekce kolizí." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Multiple Convex Collision Siblings" -msgstr "Vytvořit navigační polygon" +msgstr "Vytvořit více konvexních kolizních sourozenců" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between the two above options." msgstr "" +"Vytvoří polygonový kolizní tvar.\n" +"Toto je kompromis výkonu a přesnosti z dvou možností uvedených výše." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." -msgstr "" +msgstr "Vytvořit obrysovou mřížku..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6072,6 +6082,10 @@ msgid "" "This can be used instead of the SpatialMaterial Grow property when using " "that property isn't possible." msgstr "" +"Vytvoří statickou obrysovou síť. Obrysové síťi se automaticky převrátí " +"normály.\n" +"To lze použít namísto vlastnosti Grow ve SpatialMaterial, když vlastnost " +"Grow nelze použít." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -6086,9 +6100,8 @@ msgid "Unwrap UV2 for Lightmap/AO" msgstr "Rozbalit UV2 pro Lightmapu/AO" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Outline Mesh" -msgstr "Vytvořit mesh obrysu" +msgstr "Vytvořit síť obrysu" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" @@ -6096,7 +6109,7 @@ msgstr "Velikost obrysu:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" -msgstr "" +msgstr "Ladění UV kanálu" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" @@ -6111,9 +6124,8 @@ msgstr "" "%s" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "Mesh Library" -msgstr "MeshLibrary..." +msgstr "Knihovna síťí" #: editor/plugins/mesh_library_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6155,31 +6167,31 @@ msgstr "Zdroj meshe je neplatný (neobsahuje žádný Mesh zdroj)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "" +msgstr "Zdroj povrchu není nastaven." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "" +msgstr "Zdroj povrchu je neplatný (neplatná cesta)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "" +msgstr "Zdroj povrchu je neplatný (žádná geometrie)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "" +msgstr "Povrch je neplatný (žádné stěny)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "" +msgstr "Vyberte zdrojovou síť:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "Vyberte cílový povrch:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "" +msgstr "Zaplnit povrch" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" @@ -6207,7 +6219,7 @@ msgstr "Osa Z" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" -msgstr "" +msgstr "Osa mřížky nahoru:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" @@ -6236,17 +6248,16 @@ msgid "Convert to CPUParticles" msgstr "Převést na CPUParticles" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" -msgstr "Generování C# projektu..." +msgstr "Generování obdélníku viditelnosti" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "Vygenerovat obdélník viditelnosti" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "" +msgstr "Bod lze vložit pouze do process materiálu ParticlesMaterial" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -6255,60 +6266,59 @@ msgstr "Čas generování (sec):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Stěny geometrie neobsahují žádnou oblast." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "Scéna neobsahuje žádný skript." +msgstr "Geometrie neobsahuje žádné stěny." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" nedědí ze Spatial." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain geometry." -msgstr "" +msgstr "\"%s\" neobsahuje geometrii." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain face geometry." -msgstr "" +msgstr "\"%s\" neobsahuje geometrii stěn." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "" +msgstr "Vytvořit Emitter" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "" +msgstr "Emisní body:" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" -msgstr "" +msgstr "Povrchové body" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" -msgstr "" +msgstr "Povrchové body+Normály (orientované)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "" +msgstr "Hlasitost" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "" +msgstr "Zdroje emisí: " #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "Je vyžadován materiál pro typ \"ParticlesMaterial\"." #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" -msgstr "" +msgstr "Generování AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "" +msgstr "Generovat viditelnostní AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" @@ -6320,11 +6330,11 @@ msgstr "Odstranit bod z křivky" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" -msgstr "" +msgstr "Odstranit odchozí kontrolní bod křivky" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "" +msgstr "Odstranit příchozí kontrolní bod křivky" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6341,11 +6351,11 @@ msgstr "Přesunout bod v křivce" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "Odstranit vnitřní kontrolní bod křivky" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "Přesunout odchozí kontrolní bod křivky" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6354,9 +6364,8 @@ msgstr "Vybrat body" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Shift+Drag: Select Control Points" -msgstr "Shift+Táhnutí:" +msgstr "Shift+Táhnutí: Vybrat kontrolní body" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6374,12 +6383,12 @@ msgstr "Pravý klik: Smazat bod" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "" +msgstr "Vybrat kontrolní body křivky (Shift+Drag)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point (in empty space)" -msgstr "" +msgstr "Přidat bod (na prázdném místě)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6400,12 +6409,12 @@ msgstr "Možnosti" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Zrcadlit úhly úchytů" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Zrcadlit délku úchytů" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -6417,12 +6426,11 @@ msgstr "Nastavit pozici bodu křivky" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" -msgstr "Nastavit křivku na pozici" +msgstr "Nastavit bod do křivky" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "Odstranit signál" +msgstr "Nastavit bod z křivky" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -6433,27 +6441,25 @@ msgid "Remove Path Point" msgstr "Odstranit bod cesty" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Odstranit funkci" +msgstr "Odebrat výstupní kontrolní body" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" -msgstr "" +msgstr "Odebrat vstupní kontrolní body" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" msgstr "Rozdělit segment (v křivce)" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move Joint" -msgstr "Přesunout bod" +msgstr "Přesunout kloub" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "Vlastnost kostry v Polygon2D neukazuje na Skeleton2D uzel" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" @@ -6464,6 +6470,8 @@ msgid "" "No texture in this polygon.\n" "Set a texture to be able to edit UV." msgstr "" +"Tento polygon nemá textury.\n" +"Nastav texturu aby se dalo editovat UV." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -6473,7 +6481,7 @@ msgstr "Vytvořit UV mapu" msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." -msgstr "" +msgstr "Polygon 2D má vnitřní vrcholy, a proto nelze editovat ve viewport." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" @@ -6509,16 +6517,15 @@ msgstr "Transformovat polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" -msgstr "" +msgstr "Změnit hmotnost kostí" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Open Polygon 2D UV editor." -msgstr "Otevřít 2D editor" +msgstr "Otevřít editor 2D UV polygonu." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "" +msgstr "Polygon 2D UV Editor" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" @@ -6541,18 +6548,16 @@ msgid "Move Points" msgstr "Přesunout body" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Táhnutí: Otočit" +msgstr "Příkaz: Otočit" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Přesunout vše" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Změnit měřítko" +msgstr "Shift+Příkaz: Škálovat" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6588,25 +6593,23 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." -msgstr "" +msgstr "Změnit hmotnost se zadanou intenzitou." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Unpaint weights with specified intensity." -msgstr "" +msgstr "Odebrat hmotnost se zadanou intnzitou." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" msgstr "Poloměr:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Vytvořit polygon a UV" +msgstr "Kopírovat polygon do UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Přesunout polygon" +msgstr "Kopírovat UV do polygonu" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6653,9 +6656,8 @@ msgid "Grid Step Y:" msgstr "Krok mřížky Y:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Změnit měřítko mnohoúhelníku" +msgstr "Synchronizovat kosti do polygonu" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -6685,7 +6687,7 @@ msgstr "Vložit zdroj" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" -msgstr "Instance" +msgstr "Instance:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp @@ -6765,20 +6767,22 @@ msgstr "Uložit soubor jako..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "" +msgstr "Neexistuje žádný skript ke spuštění." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "" +msgstr "Načtení skriptu se nezdařilo, zkontrolujte chyby v konzoli." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." -msgstr "" +msgstr "Skript není v režimu nástroje, nelze jej spustit." #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" +"Chcete-li spustit tento skript, musí zdědit EditorScript a musí být nastaven " +"do režimu editoru." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -6983,9 +6987,8 @@ msgid "Clear Recent Scripts" msgstr "Vymazat nedávné skripty" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Connections to method:" -msgstr "Připojit k uzlu:" +msgstr "Připojení k metodě:" #: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" @@ -6993,18 +6996,16 @@ msgstr "Zdroj" #: editor/plugins/script_text_editor.cpp msgid "Target" -msgstr "" +msgstr "Cíl" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." -msgstr "Odpojit '%s' od '%s'" +msgstr "Chybí metoda '%s' napojená na signál '%s' z uzlu '%s' do uzlu '%s'." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "[Ignore]" -msgstr "(ignorovat)" +msgstr "[Ignorovat]" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -7016,16 +7017,16 @@ msgstr "Přejít na funkci" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Sem lze přesunout pouze zdroje ze souborového systému." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." -msgstr "" +msgstr "Nelze zrušit uzly, protože skript \"%s\" se v této scéně nepoužívá." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" -msgstr "" +msgstr "Vyhledat symbol" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -7054,17 +7055,16 @@ msgstr "Zvýrazňovač syntaxe" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Bookmarks" -msgstr "" +msgstr "Záložky" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Breakpoints" -msgstr "Vytvořit body." +msgstr "Breakpointy" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Go To" -msgstr "" +msgstr "Přejít na" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -7106,16 +7106,15 @@ msgstr "Rozložit všechny řádky" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" -msgstr "" +msgstr "Duplikovat dolů" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "" +msgstr "Kompletní symbol" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Změnit měřítko výběru" +msgstr "Vyhodnoť vybraný výraz" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -7142,24 +7141,20 @@ msgid "Contextual Help" msgstr "Kontextová nápověda" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Toggle Bookmark" -msgstr "Přepnout volný pohled" +msgstr "Vypnout/Zapnout záložku" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Bookmark" -msgstr "Přejít na další breakpoint" +msgstr "Přejít na další záložku" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Bookmark" -msgstr "Přejít na předchozí breakpoint" +msgstr "Přejít na předchozí záložku" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Remove All Bookmarks" -msgstr "Odstranit všechny položky" +msgstr "Odstranit všechny zálóžky" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." @@ -7200,16 +7195,15 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Kostra nemá žádné kosti, vytvoř nějaké potomky Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Create Rest Pose from Bones" -msgstr "Vytvořit ze scény" +msgstr "Vytvořit klidovou pózu z kostí" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" -msgstr "" +msgstr "Nastavit kosti podle klidové pózy" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" @@ -7217,11 +7211,11 @@ msgstr "Skeleton2D (Kostra 2D)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Vytvořit klidovou pózu (z kostí)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Umístit kosti do klidové pózy" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7265,7 +7259,7 @@ msgstr "Změnit osu Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Zobrazit transformaci roviny." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7281,7 +7275,7 @@ msgstr "Rotuji %s stupňů." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "" +msgstr "Klíčování je deaktivováno (není vložen žádný klíč)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." @@ -7289,11 +7283,11 @@ msgstr "Animační klíč vložen." #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" -msgstr "" +msgstr "Stoupání" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "Náklon" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -7364,48 +7358,44 @@ msgid "Rear" msgstr "Zadní" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Transform with View" -msgstr "Zarovnat s výhledem" +msgstr "Zarovnat se zobrazením" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Rotation with View" -msgstr "Zarovnat výběr s pohledem" +msgstr "Zarovnat rotaci se zobrazením" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "" +msgstr "Neexistuje žádný rodič, u kterého by se vytvořila instance potomka." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." msgstr "Tato operace vyžaduje jeden vybraný uzel." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Auto Orthogonal Enabled" -msgstr "Ortogonální" +msgstr "Auto-ortogonalizace zapnutá" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "Zobrazit informace" +msgstr "Uzamknout rotaci pohledu" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "" +msgstr "Normální pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "" +msgstr "Drátový pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "" +msgstr "Rentgen pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" -msgstr "" +msgstr "Bezestínový pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" @@ -7413,7 +7403,7 @@ msgstr "Zobrazit prostředí" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Gizmos" -msgstr "" +msgstr "Zobrazit Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" @@ -7429,20 +7419,19 @@ msgstr "Poloviční rozlišení" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "Posluchač zvuku" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Povolit filtrování" +msgstr "Povolit Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" -msgstr "" +msgstr "Filmový náhled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Not available when using the GLES2 renderer." -msgstr "" +msgstr "Není k dispozici při použití vykreslovacího modulu GLES2." #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -7473,20 +7462,20 @@ msgid "Freelook Speed Modifier" msgstr "Rychlost volného pohledu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Slow Modifier" -msgstr "Rychlost volného pohledu" +msgstr "Zpomalení volného pohledu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" -msgstr "Zobrazit informace" +msgstr "Rotace pohledu uzamknuta" #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." msgstr "" +"Poznámka: Zobrazená hodnota FPS pochází z editoru.\n" +"Nelze jej použít jako spolehlivý ukazatel výkonu ve hře." #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -7500,15 +7489,19 @@ msgid "" "Closed eye: Gizmo is hidden.\n" "Half-open eye: Gizmo is also visible through opaque surfaces (\"x-ray\")." msgstr "" +"Kliknutím přepnete mezi stavy viditelnosti.\n" +"\n" +"Otevřené oko: Gizmo je viditelný.\n" +"Zavřené oko: Gizmo je skrytý.\n" +"Polootevřené oko: Gizmo je viditelné přes neprůhledné (rentgenové) povrchy." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes To Floor" -msgstr "Přichytit k mřížce" +msgstr "Přichytit uzly k podlaze" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Nelze najít pevnou podlahu, na kterou by se přichytil výběr." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7522,11 +7515,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Local Space" -msgstr "" +msgstr "Použít místní prostor" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" -msgstr "Použít přichycování" +msgstr "Použít přichycení" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7553,7 +7546,6 @@ msgid "Right View" msgstr "Pohled zprava" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Switch Perspective/Orthogonal View" msgstr "Přepnout perspektivní/ortogonální pohled" @@ -7576,16 +7568,15 @@ msgstr "Přepnout volný pohled" #: editor/plugins/spatial_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform" -msgstr "" +msgstr "Transformace" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Object to Floor" -msgstr "Přichytit k mřížce" +msgstr "Přichytit objekt k podlaze" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." -msgstr "" +msgstr "Transformační dialog..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -7613,7 +7604,7 @@ msgstr "4 výřezy" #: editor/plugins/spatial_editor_plugin.cpp msgid "Gizmos" -msgstr "" +msgstr "Gizmos" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -7625,9 +7616,8 @@ msgstr "Zobrazit mřížku" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Nastavení" +msgstr "Nastavení..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7635,18 +7625,17 @@ msgstr "Nastavení přichycení" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "" +msgstr "Přichycení transformace:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "Přichycení rotaze (stupně):" +msgstr "Přichycení rotace (stupně):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "Přichycení zvětšení (%):" +msgstr "Škálovací přichytávání (%):" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Viewport Settings" msgstr "Nastavení viewportu" @@ -7656,11 +7645,11 @@ msgstr "Perspektivní FOV (stupně):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "" +msgstr "Pohled Z-blízko:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "" +msgstr "Pohled Z-daleko:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" @@ -7692,46 +7681,39 @@ msgstr "Po" #: editor/plugins/spatial_editor_plugin.cpp msgid "Nameless gizmo" -msgstr "" +msgstr "Gizmo beze jména" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create Mesh2D" -msgstr "Vytvořit 2D mesh" +msgstr "Vytvořit Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Mesh2D Preview" -msgstr "Náhled" +msgstr "Náhled Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create Polygon2D" msgstr "Vytvořit Polygon3D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" -msgstr "" +msgstr "Náhled Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create CollisionPolygon2D" -msgstr "Vytvořit navigační polygon" +msgstr "Vytvořit CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "CollisionPolygon2D Preview" -msgstr "Vytvořit navigační polygon" +msgstr "Náhled CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create LightOccluder2D" -msgstr "Vytvořit Occluder Polygon" +msgstr "Vytvořit LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "LightOccluder2D Preview" -msgstr "Vytvořit Occluder Polygon" +msgstr "Náhled LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" @@ -7739,59 +7721,55 @@ msgstr "Sprite je prázdný!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "" +msgstr "Nelze převést sprite pomocí animačních snímků na síť." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "Neplatná geometrie, nelze nahradit sítí." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to Mesh2D" -msgstr "Konvertovat na 2D mesh" +msgstr "Konvertovat na Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." -msgstr "" +msgstr "Neplatná geometrie, nelze vytvořit polygon." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to Polygon2D" -msgstr "Přesunout polygon" +msgstr "Konvertovat na Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." -msgstr "" +msgstr "Neplatná geometrie, nelze vytvořit kolizní polygon." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create CollisionPolygon2D Sibling" -msgstr "Vytvořit navigační polygon" +msgstr "Vytvořit sourozence CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." -msgstr "" +msgstr "Neplatná geometrie, nelze vytvořit light occluder." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create LightOccluder2D Sibling" -msgstr "Vytvořit Occluder Polygon" +msgstr "Vytvořit sourozence LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite" -msgstr "" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Zjednodušení: " #: editor/plugins/sprite_editor_plugin.cpp msgid "Shrink (Pixels): " -msgstr "" +msgstr "Zmenšení (pixely): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " -msgstr "" +msgstr "Zvětšení (pixely): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -7802,23 +7780,20 @@ msgid "Settings:" msgstr "Nastavení:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "No Frames Selected" -msgstr "Výběr snímku" +msgstr "Nebyly vybrány žádné snímky" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Add %d Frame(s)" -msgstr "Přidat snímek" +msgstr "Přidat %d snímků" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" msgstr "Přidat snímek" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Unable to load images" -msgstr "Selhalo nahrání zdroje." +msgstr "Selhalo nahrání obrázků" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -7826,7 +7801,7 @@ msgstr "CHYBA: Nelze načíst zdroj snímku!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "" +msgstr "Schránka zdrojů je prázdná nebo to není textura!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" @@ -7857,9 +7832,8 @@ msgid "New Animation" msgstr "Nová animace" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Speed:" -msgstr "Rychlost (FPS):" +msgstr "Rychlost:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -7870,13 +7844,12 @@ msgid "Animation Frames:" msgstr "Snímky animace:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Add a Texture from File" -msgstr "Přidat uzel(y) ze stromu" +msgstr "Přidat texturu ze souboru" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frames from a Sprite Sheet" -msgstr "" +msgstr "Přidat rámečky ze Sprite Sheet" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" @@ -7899,40 +7872,36 @@ msgid "Select Frames" msgstr "Vybrat snímky" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Horizontal:" -msgstr "Převrátit horizontálně" +msgstr "Horizonálně:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Vertical:" -msgstr "Vrcholy" +msgstr "Vertikálně:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Select/Clear All Frames" -msgstr "Vybrat vše" +msgstr "Vybrat všechny/žádné rámečky" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Create Frames from Sprite Sheet" -msgstr "Vytvořit ze scény" +msgstr "Vytvořit rámečky ze Sprite Sheet" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" -msgstr "" +msgstr "SpriteFrames" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" -msgstr "" +msgstr "Nastavit oblast textury" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Margin" -msgstr "" +msgstr "Nastavit okraj" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" -msgstr "" +msgstr "Režim přichycení:" #: editor/plugins/texture_region_editor_plugin.cpp #: scene/resources/visual_shader.cpp @@ -7941,15 +7910,15 @@ msgstr "Žádné" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" -msgstr "" +msgstr "Přichycení na pixely" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Grid Snap" -msgstr "" +msgstr "Přichycení na mřížku" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" -msgstr "" +msgstr "Automatický řez" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Offset:" @@ -7961,10 +7930,9 @@ msgstr "Krok:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Oddělovač:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "Oblast textury" @@ -8013,71 +7981,64 @@ msgid "Create From Current Editor Theme" msgstr "Vytvořit ze současného motivu editoru" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Toggle Button" -msgstr "Tlačítko myši" +msgstr "Přepínatelné tlačítko" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled Button" -msgstr "Prostřední tlačítko" +msgstr "Deaktivované tlačítko" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" msgstr "Položka" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled Item" -msgstr "Zakázáno" +msgstr "Deaktivovaná položka" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Check Item" -msgstr "Zkontrolovat položku" +msgstr "Zaškrtávátko" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" -msgstr "" +msgstr "Zaškrtávací položka" #: editor/plugins/theme_editor_plugin.cpp msgid "Radio Item" -msgstr "" +msgstr "Položka volby" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Radio Item" -msgstr "" +msgstr "Přepínatelná položka volby" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." -msgstr "" +msgstr "Nazvaný oddělovač" #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" -msgstr "" +msgstr "Podmenu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Položka" +msgstr "Podpoložka 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Položka" +msgstr "Podpoložka 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" -msgstr "" +msgstr "Má" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "" +msgstr "Mnoho" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled LineEdit" -msgstr "Zakázáno" +msgstr "Deaktivovaný LineEdit" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -8092,13 +8053,12 @@ msgid "Tab 3" msgstr "Tab 3" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editable Item" -msgstr "Upravit proměnnou" +msgstr "Upravitelná položka" #: editor/plugins/theme_editor_plugin.cpp msgid "Subtree" -msgstr "" +msgstr "Podstrom" #: editor/plugins/theme_editor_plugin.cpp msgid "Has,Many,Options" @@ -8139,13 +8099,12 @@ msgstr "Opravit neplatné dlaždice" #: editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Vycentrovat výběr" +msgstr "Výběr řezu" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "" +msgstr "Nakreslit TileMap" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Line Draw" @@ -8153,11 +8112,11 @@ msgstr "Nakreslit čáru" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Nakreslit obdélník" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" -msgstr "" +msgstr "Vyplnit barvou" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -8173,37 +8132,39 @@ msgstr "Transponovat" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Disable Autotile" -msgstr "" +msgstr "Deaktivovat Autotile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Enable Priority" -msgstr "Editovat filtry" +msgstr "Zapnout priority" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Filter tiles" -msgstr "Filtrovat soubory..." +msgstr "Filtrovat dlaždice" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Give a TileSet resource to this TileMap to use its tiles." -msgstr "" +msgstr "Přidejte TileSet zdroj tomuto TileMap, aby mohl použít jeho dlaždice." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "" +msgstr "Nakreslit dlaždici" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" +"Shift+LTM: Nakreslit čáru\n" +"Shift+Příkaz+LMB: Nakreslit obdélník" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" +"Shift+LTM: Nakreslit čáru\n" +"Shift+Ctrl+LTM: Nakreslit obdélník" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -8226,14 +8187,12 @@ msgid "Flip Vertically" msgstr "Převrátit vertikálně" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear Transform" -msgstr "Animace: změna transformace" +msgstr "Promazat transformaci" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet." -msgstr "Přidat uzel(y) ze stromu" +msgstr "Přidat textury do TileSet." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected Texture from TileSet." @@ -8249,69 +8208,59 @@ msgstr "Sloučit ze scény" #: editor/plugins/tile_set_editor_plugin.cpp msgid "New Single Tile" -msgstr "" +msgstr "Nová dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "New Autotile" -msgstr "Nový textový soubor" +msgstr "Nové auto-kachličky" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "New Atlas" -msgstr "Nový %s" +msgstr "Nový Atlas" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Next Coordinate" -msgstr "Další skript" +msgstr "Další koordináta" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the next shape, subtile, or Tile." -msgstr "" +msgstr "Vybrat další tvar, dílčí dlaždici nebo dlaždici." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Previous Coordinate" -msgstr "Předchozí skript" +msgstr "Předchozí koordináta" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the previous shape, subtile, or Tile." -msgstr "" +msgstr "Vybrat předchozí tvar, dílčí dlaždici nebo dlaždici." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region" -msgstr "Režim otáčení" +msgstr "Oblast" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision" -msgstr "Interpolační režim" +msgstr "Kolize" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion" -msgstr "Editovat polygon" +msgstr "Okluze" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation" msgstr "Navigace" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask" -msgstr "Režim otáčení" +msgstr "Bitmaska" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority" -msgstr "Expertní režim:" +msgstr "Priority" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index" -msgstr "Index:" +msgstr "Z-Index" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region Mode" @@ -8322,9 +8271,8 @@ msgid "Collision Mode" msgstr "Kolizní režim" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion Mode" -msgstr "Editovat polygon" +msgstr "Režim okluze" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation Mode" @@ -8335,9 +8283,8 @@ msgid "Bitmask Mode" msgstr "Režim bitové masky" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority Mode" -msgstr "Expertní režim:" +msgstr "Prioritní mód" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Icon Mode" @@ -8345,7 +8292,7 @@ msgstr "Režim ikony" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index Mode" -msgstr "" +msgstr "Režim Z-indexu" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." @@ -8360,30 +8307,43 @@ msgid "Erase bitmask." msgstr "Vymazat bitovou masku." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create a new rectangle." -msgstr "Vytvořit nové uzly." +msgstr "Vytvořit nový obdélník." + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nový obdélník" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Vytvořit nový polygon." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nový polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Smazat vybraný tvar" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." -msgstr "" +msgstr "Udržovat mnohoúhelník uvnitř obdélníku." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." -msgstr "" +msgstr "Zapnout přichycení a zobrazit mřížku (konfigurovatelnou v inspektoru)." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display Tile Names (Hold Alt Key)" -msgstr "" +msgstr "Zobrazit názvy dlaždic (podržet Alt)" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Add or select a texture on the left panel to edit the tiles bound to it." msgstr "" +"Přidejte nebo vyberte texturu v levém podokně a upravte k ní připojené " +"dlaždice." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." @@ -8397,7 +8357,7 @@ msgstr "Nevybrali jste texturu k odstranění." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene? This will overwrite all current tiles." -msgstr "" +msgstr "Vytvořit ze scény? Aktuální dlaždice budou přepsány." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" @@ -8409,38 +8369,43 @@ msgstr "Odstranit texturu" #: editor/plugins/tile_set_editor_plugin.cpp msgid "%s file(s) were not added because was already on the list." -msgstr "" +msgstr "%s soubory nebyly přidány, protože již byly v seznamu." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Přetažením úchytů upravte obdélník.\n" +"Kliknutím na jinou dlaždici ji upravíte." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Delete selected Rect." -msgstr "Odstranit vybrané soubory?" +msgstr "Smazat vybraný obdélník." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Vytvořit složku" +msgstr "" +"Vyberte aktuálně upravovanou pod-dlaždici.\n" +"Kliknutím na jinou dlaždici pro její úpravu." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete polygon." msgstr "Smazat polygon." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: Set bit on.\n" "RMB: Set bit off.\n" "Shift+LMB: Set wildcard bit.\n" "Click on another Tile to edit it." -msgstr "Vytvořit složku" +msgstr "" +"LTM: Zapnout bit.\n" +"PTM: Vypnout bit.\n" +"Shift+LTM: Nastavit wildcard bit.\n" +"Klikněte na další Dlaždici pro úpravu." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8448,24 +8413,29 @@ msgid "" "bindings.\n" "Click on another Tile to edit it." msgstr "" +"Vyberte dílčí dlaždici, kterou chcete použít jako ikonu. Bude také použita " +"pro nesprávně nastavené automatické dlaždice.\n" +"Kliknutím na jinou dlaždici ji upravíte." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." msgstr "" +"Vyberte dílčí dlaždici a změňte její prioritu.\n" +"Kliknutím na jinou dlaždici ji upravíte." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select sub-tile to change its z index.\n" "Click on another Tile to edit it." -msgstr "Vytvořit složku" +msgstr "" +"Vybrat pod-dlaždici pro změnu jejího indexu.\n" +"Klikněte na další dlaždici pro úpravu." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Set Tile Region" -msgstr "Oblast textury" +msgstr "Nastavit oblast textury" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Tile" @@ -8473,26 +8443,23 @@ msgstr "Vytvořit dlaždici" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Icon" -msgstr "" +msgstr "Nastavit ikonu dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Bitmask" msgstr "Upravit bitovou masku dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Collision Polygon" -msgstr "Upravit existující polygon:" +msgstr "Upravit polygon kolize" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Occlusion Polygon" -msgstr "Editovat polygon" +msgstr "Editovat okluzní polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Navigation Polygon" -msgstr "Vytvořit navigační polygon" +msgstr "Upravit navigační polygon" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Paste Tile Bitmask" @@ -8500,64 +8467,55 @@ msgstr "Vložit bitovou masku dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Clear Tile Bitmask" -msgstr "" +msgstr "Odebrat bitovou masku dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Polygon Concave" -msgstr "Přesunout polygon" +msgstr "Změnit polygon na konkávní" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Polygon Convex" -msgstr "Přesunout polygon" +msgstr "Změnit polygon na konvexní" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Tile" msgstr "Odstranit dlaždici" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Collision Polygon" -msgstr "Odstranit polygon a bod" +msgstr "Odstranit kolizní polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Occlusion Polygon" -msgstr "Vytvořit Occluder Polygon" +msgstr "Odebrat okluzní polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove Navigation Polygon" -msgstr "Vytvořit navigační polygon" +msgstr "Odstranit navigační polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Tile Priority" -msgstr "Editovat filtry" +msgstr "Upravit prioritu dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Z Index" -msgstr "" +msgstr "Upravit Z Index dlaždice" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Convex" -msgstr "Přesunout polygon" +msgstr "Změnit na konvexní" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Concave" -msgstr "Přesunout polygon" +msgstr "Změnit na konkávní" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Collision Polygon" msgstr "Vytvořit kolizní polygon" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create Occlusion Polygon" -msgstr "Vytvořit Occluder Polygon" +msgstr "Vytvořit okluzní polygon" #: editor/plugins/tile_set_editor_plugin.cpp msgid "This property can't be changed." @@ -8568,92 +8526,80 @@ msgid "TileSet" msgstr "TileSet (Sada dlaždic)" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "No VCS addons are available." -msgstr "Jméno rodiče uzlu, pokud dostupné" +msgstr "K dispozici nejsou žádná VCS rozšíření." #: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Chyba" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "No commit message was provided" -msgstr "Nebylo poskytnuto žádné jméno" +msgstr "Nebyla poskytnuta commit message" #: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" -msgstr "" +msgstr "Zádné soubory nebyly přidány k zápisu" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Commit" -msgstr "Komunita" +msgstr "Commit" #: editor/plugins/version_control_editor_plugin.cpp msgid "VCS Addon is not initialized" -msgstr "" +msgstr "VCS rozšíření nejní inicializováno" #: editor/plugins/version_control_editor_plugin.cpp msgid "Version Control System" -msgstr "" +msgstr "Verzování (VCS)" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Initialize" -msgstr "Velká písmena" +msgstr "Inicializovat" #: editor/plugins/version_control_editor_plugin.cpp msgid "Staging area" -msgstr "" +msgstr "K zápsání" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Detect new changes" -msgstr "Vytvořit nové uzly." +msgstr "Detekovat nové změny" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Changes" -msgstr "Změnit" +msgstr "Změny" #: editor/plugins/version_control_editor_plugin.cpp msgid "Modified" -msgstr "" +msgstr "Úpravy" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Renamed" -msgstr "Přejmenovat" +msgstr "Přejmenování" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Deleted" -msgstr "Odstranit" +msgstr "Odstraněny" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Typechange" -msgstr "Změnit" +msgstr "Změnit typ" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Stage Selected" -msgstr "Smazat vybraný" +msgstr "Připravit vybrané k zapsání" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Stage All" -msgstr "Uložit vše" +msgstr "Připravit k zapsání vše" #: editor/plugins/version_control_editor_plugin.cpp msgid "Add a commit message" -msgstr "" +msgstr "Přidat zprávu commitu" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Commit Changes" -msgstr "Synchornizace změn skriptu" +msgstr "Commitnout změny" #: editor/plugins/version_control_editor_plugin.cpp #: modules/gdnative/gdnative_library_singleton_editor.cpp @@ -8662,15 +8608,15 @@ msgstr "Status" #: editor/plugins/version_control_editor_plugin.cpp msgid "View file diffs before committing them to the latest version" -msgstr "" +msgstr "Podívat se na rozdíly, než se commitnou jako nejnovější verze" #: editor/plugins/version_control_editor_plugin.cpp msgid "No file diff is active" -msgstr "" +msgstr "Žádné aktivní porovnání změn" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect changes in file diff" -msgstr "" +msgstr "Zjistit změny v souborech" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" @@ -8694,79 +8640,67 @@ msgstr "Boolean" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sampler" -msgstr "" +msgstr "Sampler" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add input port" -msgstr "Přidat vstup" +msgstr "Přidat vstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" -msgstr "" +msgstr "Přidat výstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port type" -msgstr "Změnit výchozí typ" +msgstr "Změnit typ vstupního portu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change output port type" -msgstr "Změnit výchozí typ" +msgstr "Změnit typ vystupního portu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port name" -msgstr "Změnit název vstupu" +msgstr "Změnit název vstupního portu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change output port name" -msgstr "Změnit název vstupu" +msgstr "Změnit název výstupního portu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Remove input port" -msgstr "Odstranit bod" +msgstr "Odstranit vstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Remove output port" -msgstr "Odstranit bod" +msgstr "Odstranit výstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Set expression" -msgstr "Změnit výraz" +msgstr "Nastavit výraz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Resize VisualShader node" -msgstr "VisualShader" +msgstr "Škálovat uzel VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" -msgstr "" +msgstr "Nastavit uniformní jméno" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" -msgstr "" +msgstr "Nastavit výchozí vstupní port" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node to Visual Shader" -msgstr "VisualShader" +msgstr "Přidat uzel do VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" msgstr "Uzel přesunut" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Duplicate Nodes" -msgstr "Duplikovat uzel/uzly" +msgstr "Duplikovat uzly" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp @@ -8774,18 +8708,16 @@ msgid "Paste Nodes" msgstr "Vložit uzly" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Delete Nodes" -msgstr "Smazat uzel" +msgstr "Smazat uzly" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Input Type Changed" -msgstr "" +msgstr "Typ vstupu Visual Shader změněn" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Změna transformace" +msgstr "Název UniformRef byl změněn" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -8800,198 +8732,191 @@ msgid "Light" msgstr "Světlo" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Vytvořit uzel" +msgstr "Zobrazit výsledný kód shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Create Shader Node" -msgstr "Vytvořit uzel" +msgstr "Vytvořit shader uzel" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color function." -msgstr "Přejít na funkci" +msgstr "Funkce obarvení." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color operator." -msgstr "" +msgstr "Operátor barvy." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Grayscale function." -msgstr "Vytvořit funkci" +msgstr "Funkce stupně šedi." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts HSV vector to RGB equivalent." -msgstr "" +msgstr "Převede vektor HSV na ekvivalentní RGB." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts RGB vector to HSV equivalent." -msgstr "" +msgstr "Převede vektor RGB na ekvivalentní HSV." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Sepia function." -msgstr "Přejmenovat funkci" +msgstr "Funkce sépie." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Burn operator." -msgstr "" +msgstr "Operátor vypálení." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Darken operator." -msgstr "" +msgstr "Operátor ztmavení." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Difference operator." -msgstr "Pouze rozdíly" +msgstr "Operátor rozdílu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Dodge operator." -msgstr "" +msgstr "Operátor uhnutí." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "HardLight operator." -msgstr "Změnit skalární operátor" +msgstr "Operátor tvrdého světla." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Lighten operator." -msgstr "" +msgstr "Operátor zesvětlení." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Overlay operator." -msgstr "" +msgstr "Operátor překrytí." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Screen operator." -msgstr "" +msgstr "Operátor screen." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "SoftLight operator." -msgstr "" +msgstr "Operátor měkkého světla." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color constant." -msgstr "Konstantní" +msgstr "Konstantní barva." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color uniform." -msgstr "Animace: změna transformace" +msgstr "Uniformní barva." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the boolean result of the %s comparison between two parameters." -msgstr "Vrátí inverzní odmocninu z parametru." +msgstr "Vrátí booleovský výsledek %s porovnání mezi dvěma parametry." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "" +msgstr "Rovnost (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "" +msgstr "Větší než (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "" +msgstr "Větší nebo rovno (>=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided scalars are equal, greater or " "less." msgstr "" +"Vrátí přidružený vektor, pokud jsou dané skaláry stejné, větší nebo menší." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between INF and a scalar " "parameter." -msgstr "" +msgstr "Vrátí booleovský výsledek srovnání mezi INF a skalárním parametrem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between NaN and a scalar " "parameter." -msgstr "" +msgstr "Vrátí booleovský výsledek srovnání mezi NaN a skalárním parametrem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "" +msgstr "Menší než (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "" +msgstr "Menší nebo rovno (<=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "" +msgstr "Není rovno (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided boolean value is true or false." msgstr "" +"Vrátí přidružený vektor, pokud je daná logická hodnota true nebo false." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated scalar if the provided boolean value is true or false." msgstr "" +"Vrátí přidružený skalár, pokud je daná logická hodnota true nebo false." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the boolean result of the comparison between two parameters." -msgstr "Vrátí tangens parametru." +msgstr "Vrátí booleovský výsledek porovnání mezi dvěma parametry." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between INF (or NaN) and a " "scalar parameter." msgstr "" +"Vrátí booleovský výsledek srovnání mezi INF (nebo NaN) a skalárním " +"parametrem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean constant." -msgstr "" +msgstr "Booleovská konstanta." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean uniform." -msgstr "" +msgstr "Bool uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for all shader modes." -msgstr "" +msgstr "Zadejte parametr \"%s\" pro všechny režimy shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Input parameter." -msgstr "Přichytit k rodičovi" +msgstr "Vstupní parametr." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader modes." -msgstr "" +msgstr "Vstupní parametr \"%s\" pro režimy shaderu vrcholů a fragmentů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment and light shader modes." -msgstr "" +msgstr "Zadejte parametr \"%s\" pro fragmentový a světelný shader." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment shader mode." -msgstr "" +msgstr "Vstupní parametr \"%s\" pro režim shaderu fragmentu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for light shader mode." -msgstr "'%s' vstupní parametr pro mód světelného shaderu." +msgstr "\"%s\" vstupní parametr pro mód světelného shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex shader mode." -msgstr "'%s' vstupní parametr pro mód vertexového shaderu." +msgstr "\"%s\" vstupní parametr pro mód vertexového shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader mode." -msgstr "'%s' vstupní parametr pro mód vertexového a fragmentového shaderu." +msgstr "\"%s\" vstupní parametr pro mód vertexového a fragmentového shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." @@ -9184,6 +9109,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"Funkce plynulého přechodu( skalár(edge0), skalár(edge1), skalár(x) ).\n" +"\n" +"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud \"x\" je větší " +"než \"edge1\". V opačném případě vrátí interpolovanou hodnotu mezi 0.0 a 1.0 " +"vypočtenou pomocí Hermitových polynomů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9191,6 +9121,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Skoková funkce( skalár(hrana), skalár(x) ).\n" +"\n" +"Vrátí 0.0, pokud je \"x\" menší než hrana, jinak vrátí 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." @@ -9201,9 +9134,8 @@ msgid "Returns the hyperbolic tangent of the parameter." msgstr "Vrátí hyperbolický tangens parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Finds the truncated value of the parameter." -msgstr "Vrátí absolutní hodnotu parametru." +msgstr "Vrátí zkrácenou hodnotu parametru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds scalar to scalar." @@ -9219,46 +9151,43 @@ msgstr "Vynásobí skalár skalárem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two scalars." -msgstr "" +msgstr "Vrátí zbytek dvou skalárů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts scalar from scalar." -msgstr "" +msgstr "Odečte skalár od skaláru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar constant." -msgstr "Změnit skalární konstantu" +msgstr "Konstantní skalár." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar uniform." -msgstr "Animace: změna transformace" +msgstr "Uniformní skalár." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." -msgstr "" +msgstr "Provést vyhledání kubické textury." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the texture lookup." -msgstr "" +msgstr "Provést vyhledávání textury." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Cubic texture uniform lookup." -msgstr "" +msgstr "Uniformní vyhledání kubické textury." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup." -msgstr "" +msgstr "Uniformní vyhledání 2D textury." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup with triplanar." -msgstr "" +msgstr "Uniformní vyhledání 2D textury s triplanar mapováním." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform function." -msgstr "Transformovat polygon" +msgstr "Funkce transformace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9270,73 +9199,76 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" +"Vypočte dyadický součin dvojice vektorů.\n" +"\n" +"OuterProduct vezme první parametr \"c\" jako vektor sloupce (matice s jedním " +"sloupcem) a druhý parametr \"r\" jako vektor řádku (matice s jedním řádkem) " +"a provede násobení matice \"c * r\", což má za výsledek matici s počtem " +"řádků stejný jako v \"c\" a počet sloupců stejný jako v \"r\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." -msgstr "" +msgstr "Složí transformaci ze čtyř vektorů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes transform to four vectors." -msgstr "" +msgstr "Rozloží transformaci na čtyři vektory." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the determinant of a transform." -msgstr "" +msgstr "Vypočítá determinant transformace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the inverse of a transform." -msgstr "" +msgstr "Počítá inverzní transformaci." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the transpose of a transform." -msgstr "" +msgstr "Vypočítá transpozici tranformace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies transform by transform." -msgstr "" +msgstr "Pronásobí transformaci transformací." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by transform." -msgstr "" +msgstr "Pronásobí vektor transformací." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform constant." -msgstr "Transformace zrušena." +msgstr "Transformační konstanta." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform uniform." -msgstr "Transformace zrušena." +msgstr "Uniformní transformace." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector function." -msgstr "Přejít na funkci..." +msgstr "Vektorová funkce." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector operator." -msgstr "" +msgstr "Vektorový operátor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes vector from three scalars." -msgstr "" +msgstr "Skládá vektor ze tří skalárů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes vector to three scalars." -msgstr "" +msgstr "Rozloží vektor na tři skaláry." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the cross product of two vectors." -msgstr "" +msgstr "Spočítá vektorový produkt dvou vektorů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the distance between two points." -msgstr "" +msgstr "Vrátí vzdálenost mezi dvěma body." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the dot product of two vectors." -msgstr "" +msgstr "Vypočítá skalární součin dvou vektorů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9345,41 +9277,46 @@ msgid "" "incident vector, and Nref, the reference vector. If the dot product of I and " "Nref is smaller than zero the return value is N. Otherwise -N is returned." msgstr "" +"Vrátí vektor, který ukazuje ve stejném směru referenční vektor. Funkce má " +"tři vektorové parametry: orientovaný vektor N, sousední vektor I a " +"referenční vektor Nref. Pokud je skalární součin I a Nref menší než nula, " +"vrátí se N. Jinak se vrátí -N." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the length of a vector." -msgstr "" +msgstr "Spočítá délku vektoru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Linear interpolation between two vectors." -msgstr "" +msgstr "Lineární interpolace mezi dvěma vektory." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Lineární interpolace mezi dvěma skaláry." +msgstr "Lineární interpolace mezi dvěma vektory pomocí skaláru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." -msgstr "" +msgstr "Spočítá normalizovaný vektor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 - vector" -msgstr "" +msgstr "1.0 - vektor" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 / vector" -msgstr "" +msgstr "1.0 / vektor" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the vector that points in the direction of reflection ( a : incident " "vector, b : normal vector )." msgstr "" +"Vrátí vektor směřující ve směru odrazu ( a : vektor dopadu, b : normálový " +"vektor )." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the vector that points in the direction of refraction." -msgstr "" +msgstr "Vrátí vektor ve směru lomu světla." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9389,6 +9326,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"Funkce plynulého přechodu ( vektor(edge0), vektor(edge1), vektor(x) ).\n" +"\n" +"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud x je větší než " +"\"edge1\". V opačném případě vrátí interpolovanou hodnotu mezi 0.0 a 1.0 " +"vypočtenou pomocí Hermitových polynomů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9398,6 +9340,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"Funkce plynulého přechodu( skalár(edge0), skalár(edge1), vektor(x) ).\n" +"\n" +"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud \"x\" je větší " +"než \"edge1\". V opačném případě vrátí interpolovanou hodnotu mezi 0.0 a 1.0 " +"vypočtenou pomocí Hermitových polynomů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9405,6 +9352,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Skoková funkce( vektor(hrana), vektor(x) ).\n" +"\n" +"Vrátí 0.0, pokud je \"x\" menší než \"hrana\", jinak vrátí 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9412,34 +9362,37 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Skoková funkce( skalár(hrana), vektor(x) ).\n" +"\n" +"Vrátí 0.0, pokud je \"x\" menší než \"hrana\", jinak vrátí 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds vector to vector." -msgstr "" +msgstr "Přičte vektor k vektoru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides vector by vector." -msgstr "" +msgstr "Vydělí vektor vektorem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by vector." -msgstr "" +msgstr "Pronásobí vektor vektorem." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two vectors." -msgstr "" +msgstr "Vrátí zbytek po dělení dvou vektorů." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts vector from vector." -msgstr "" +msgstr "Odečte vektor od vektoru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector constant." -msgstr "" +msgstr "Konstantní vektor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector uniform." -msgstr "" +msgstr "Uniformní vektor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9447,12 +9400,17 @@ msgid "" "output ports. This is a direct injection of code into the vertex/fragment/" "light function, do not use it to write the function declarations inside." msgstr "" +"Vlastní výraz v jazyce shaderu Godot s vlastním počtem vstupních a " +"výstupních portů. Toto je přímé vkládání kódu do funkcí vrcholů/fragmentů/" +"osvětlení, nepoužívat k deklaraci funkcí." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." msgstr "" +"Vrátí sklon na základě skalárního součinu normály povrchu a směru pohledu " +"kamery (zde zadejte vstup)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9461,68 +9419,82 @@ msgid "" "it later in the Expressions. You can also declare varyings, uniforms and " "constants." msgstr "" +"Vlastní výraz v jazyce shaderu Godot, který bude umístěn nad výsledek " +"shaderu. Uvnitř můžete vytvořit různé definice funkcí a později je volat " +"pomocí Expressions. Můžete také deklarovat proměnné, \"uniforms\" a " +"konstanty." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Reference na existující uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." -msgstr "" +msgstr "(Pouze pro režim Fragment/Light) Skalární derivace funkce." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Vector derivative function." -msgstr "" +msgstr "(Pouze pro režim Fragment/Light) Vektorová derivace funkce." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." msgstr "" +"(Pouze pro režim Fragment/Light) (Vektor) Derivace podle \"x\" pomocí místní " +"variace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " "differencing." msgstr "" +"(Pouze pro režim Fragment/Light) (Skalární) Derivace podle \"x\" pomocí " +"místní variace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'y' using local " "differencing." msgstr "" +"(Pouze pro režim Fragment/Light) (Vektor) Derivace podle \"y\" pomocí místní " +"variace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " "differencing." msgstr "" +"(Pouze pro režim Fragment/Light) (Skalár) Derivace podle \"y\" pomocí místní " +"variace." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." msgstr "" +"(Pouze pro režim Fragment/Light) (Vektor) Součet absolutní derivace podle \"x" +"\" a \"y\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." msgstr "" +"(Pouze pro režim Fragment/Light) (Skalár) Součet absolutní derivace podle \"x" +"\" a \"y\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" msgstr "VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property" -msgstr "Editovat filtry" +msgstr "Upravit vizuální vlastnost" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Visual Shader Mode Changed" -msgstr "Změny shaderu" +msgstr "Změnit režim vizuálního shaderu" #: editor/project_export.cpp msgid "Runnable" @@ -9537,6 +9509,8 @@ msgid "" "Failed to export the project for platform '%s'.\n" "Export templates seem to be missing or invalid." msgstr "" +"Export projektu pro platformu \"%s\" se nezdařil.\n" +"Zdá se, že šablony exportu chybí nebo jsou neplatné." #: editor/project_export.cpp msgid "" @@ -9544,6 +9518,9 @@ msgid "" "This might be due to a configuration issue in the export preset or your " "export settings." msgstr "" +"Export projektu pro platformu \"%s\" se nezdařil.\n" +"Může to být způsobeno problémem s konfigurací v export profilu nebo v " +"nastavení exportu." #: editor/project_export.cpp msgid "Release" @@ -9554,13 +9531,12 @@ msgid "Exporting All" msgstr "Exportování všeho" #: editor/project_export.cpp -#, fuzzy msgid "The given export path doesn't exist:" -msgstr "Cesta neexistuje." +msgstr "Zadaná cesta pro export neexistuje:" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" -msgstr "Exportní šablony pro tuto platformu chybí nebo jsou poškozené:" +msgstr "Šablony exportu pro tuto platformu chybí nebo jsou poškozené:" #: editor/project_export.cpp msgid "Presets" @@ -9575,6 +9551,8 @@ msgid "" "If checked, the preset will be available for use in one-click deploy.\n" "Only one preset per platform may be marked as runnable." msgstr "" +"Když je zaškrtlé, tak bude profil k dispozici pro rychlé nasazení.\n" +"Pouze jeden profil na platformě může být označen jako spuštěný." #: editor/project_export.cpp msgid "Export Path" @@ -9609,12 +9587,16 @@ msgid "" "Filters to export non-resource files/folders\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" +"Filtry pro export souborů/složek, které nejsou zdroji\n" +"(oddělené čárkou, např. *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "" "Filters to exclude files/folders from project\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" +"Filtry pro vynechání souborů/složek z projektu\n" +"(oddělené čárkou, např. *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "Features" @@ -9678,49 +9660,45 @@ msgstr "Soubor ZIP" #: editor/project_export.cpp msgid "Godot Game Pack" -msgstr "" +msgstr "Hrací balíček Godot" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "Exportní šablony pro tuto platformu chybí:" +msgstr "Šablony exportu pro tuto platformu chybí:" #: editor/project_export.cpp msgid "Manage Export Templates" -msgstr "Spravovat exportní šablony" +msgstr "Spravovat šablony exportu" #: editor/project_export.cpp msgid "Export With Debug" -msgstr "" +msgstr "Exportovat s laděním" #: editor/project_manager.cpp -#, fuzzy msgid "The path specified doesn't exist." -msgstr "Cesta neexistuje." +msgstr "Zadaná cesta neexistuje." #: editor/project_manager.cpp -#, fuzzy msgid "Error opening package file (it's not in ZIP format)." -msgstr "Nepodařilo se otevřít balíček, není ve formátu ZIP." +msgstr "Chyba při otevírání balíčku (není ve formátu ZIP)." #: editor/project_manager.cpp -#, fuzzy msgid "" "Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." -msgstr "Neplatný projektový '.zip' soubor; neobsahuje soubor 'project.godot'." +msgstr "" +"Neplatný soubor projektu \".zip\"; neobsahuje soubor \"project.godot\"." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Zvolte prosím prázdnou složku." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a \"project.godot\" or \".zip\" file." -msgstr "Zvolte prosím soubor 'project.godot' nebo '.zip'." +msgstr "Vyberte prosím soubor \"project.godot\" nebo \".zip\"." #: editor/project_manager.cpp -#, fuzzy msgid "This directory already contains a Godot project." -msgstr "Složka již obsahuje projekt Godotu." +msgstr "Složka již obsahuje Godot projekt." #: editor/project_manager.cpp msgid "New Game Project" @@ -9815,6 +9793,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9929,18 +9911,20 @@ msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" +"Nelze spustit projekt: Musí být importovány zdroje.\n" +"Otevřete projekt, aby se spustilo prvotní importování." #: editor/project_manager.cpp -#, fuzzy msgid "Are you sure to run %d projects at once?" -msgstr "Jste si jisti, že chcete spustit více než jeden projekt?" +msgstr "Jste si jisti, že chcete spustit %d projektů najednou?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove %d projects from the list?\n" "The project folders' contents won't be modified." -msgstr "Odstranit projekt ze seznamu? (Obsah složky zůstane nedotčen)" +msgstr "" +"Odebrat %d projekty ze seznamu?\n" +"Obsah složek projektů zůstane nedotčen." #: editor/project_manager.cpp msgid "" @@ -9951,23 +9935,28 @@ msgstr "" "Obsah složky zůstane nedotčen." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." -msgstr "Odstranit projekt ze seznamu? (Obsah složky zůstane nedotčen)" +msgstr "" +"Odstranit všechny chybějící projekty ze seznamu?\n" +"Obsah složek projektů zůstane nedotčen." #: editor/project_manager.cpp msgid "" "Language changed.\n" "The interface will update after restarting the editor or project manager." msgstr "" +"Jazyk byl změněn.\n" +"Rozhraní se aktualizuje po restartování editoru nebo projektového manažera." #: editor/project_manager.cpp msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" +"Opravdu hledat projekty Godot ve složce %s?\n" +"Může to chvíli trvat." #. TRANSLATORS: This refers to the application where users manage their Godot projects. #: editor/project_manager.cpp @@ -9980,7 +9969,7 @@ msgstr "Projekty" #: editor/project_manager.cpp msgid "Last Modified" -msgstr "" +msgstr "Datum modifikace" #: editor/project_manager.cpp msgid "Scan" @@ -10024,6 +10013,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"Vyhledávací lišta filtruje projekty podle názvu a poslední komponenty " +"cesty.\n" +"Chcete-li filtrovat podle názvu a celé cesty, musí dotaz obsahovat alespoň " +"jeden znak \"/\"." #: editor/project_settings_editor.cpp msgid "Key " @@ -10055,16 +10048,15 @@ msgstr "Akce s názvem \"%s\" již existuje." #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" -msgstr "" +msgstr "Přejmenovat událost vstupní akce" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Změnit hodnotu slovníku" +msgstr "Změnit mrtvou zónu akce" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" -msgstr "" +msgstr "Přidat událost vstupní akce" #: editor/project_settings_editor.cpp msgid "All Devices" @@ -10103,28 +10095,24 @@ msgid "Wheel Down Button" msgstr "Kolečko dolů" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Kolečko nahoru" +msgstr "Levé tlačítko kolečka" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Pravé tlačítko" +msgstr "Pravé tlačítko kolečka" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Tlačítko č. 6" +msgstr "Tlačítko X 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Tlačítko č. 6" +msgstr "Tlačítko X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" -msgstr "" +msgstr "Index osy Joypadu:" #: editor/project_settings_editor.cpp msgid "Axis" @@ -10132,16 +10120,15 @@ msgstr "Osa" #: editor/project_settings_editor.cpp msgid "Joypad Button Index:" -msgstr "" +msgstr "Index tlačítka joysticku:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Erase Input Action" -msgstr "Změnit měřítko výběru" +msgstr "Vymazat vstupní akce" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "" +msgstr "Vymazat událost vstupní akce" #: editor/project_settings_editor.cpp msgid "Add Event" @@ -10149,7 +10136,7 @@ msgstr "Přidat akci" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "Button" +msgstr "Tlačítko" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -10177,7 +10164,7 @@ msgstr "Přidat globální vlastnost" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "" +msgstr "Nejprve vyberte nastavení ze seznamu!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." @@ -10185,7 +10172,7 @@ msgstr "Vlastnost '%s' neexistuje." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "" +msgstr "Nastavení \"%s\" je integrované a nemůže být smazáno." #: editor/project_settings_editor.cpp msgid "Delete Item" @@ -10201,7 +10188,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "" +msgstr "Přidat vstupní akci" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -10212,13 +10199,12 @@ msgid "Settings saved OK." msgstr "Nastavení úspěšně uloženo." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Moved Input Action Event" -msgstr "Změnit měřítko výběru" +msgstr "Přesunutá událost vstupní akce" #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Přepsání vlastnosti" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -10230,32 +10216,31 @@ msgstr "Odstranit překlad" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "" +msgstr "Přidat přemapovanou cestu" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Přidat přemapování zdroje" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "" +msgstr "Změnit jazyk přemapování zdrojů" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "" +msgstr "Odebrat přemapování zdroje" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "" +msgstr "Odebrat možnost přemapování zdroje" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Changed Locale Filter" -msgstr "Změnit typ hodnot pole" +msgstr "Upravený filtr lokalizace" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter Mode" -msgstr "" +msgstr "Změněn režim filtru pro nastavení jazyka" #: editor/project_settings_editor.cpp msgid "Project Settings (project.godot)" @@ -10267,15 +10252,15 @@ msgstr "Všeobecné" #: editor/project_settings_editor.cpp msgid "Override For..." -msgstr "" +msgstr "Přepsání čeho..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "The editor must be restarted for changes to take effect." -msgstr "" +msgstr "Pro projevení změn, je nutné restartovat editor." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "" +msgstr "Mapování vstupů" #: editor/project_settings_editor.cpp msgid "Action:" @@ -10287,7 +10272,7 @@ msgstr "Akce" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Mrtvá zóna" #: editor/project_settings_editor.cpp msgid "Device:" @@ -10319,25 +10304,23 @@ msgstr "Zdroje:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "" +msgstr "Mapování na základě jazyku:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "" +msgstr "Jazyky" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "" +msgstr "Filtr jazyků" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show All Locales" -msgstr "Zobrazit kosti" +msgstr "Zobrazit všechny jazyky" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show Selected Locales Only" -msgstr "Pouze výběr" +msgstr "Zobrazit pouze vybrané jazyky" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -10345,11 +10328,11 @@ msgstr "Režim filtru:" #: editor/project_settings_editor.cpp msgid "Locales:" -msgstr "" +msgstr "Jazyky:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "" +msgstr "Autoload" #: editor/project_settings_editor.cpp msgid "Plugins" @@ -10365,11 +10348,11 @@ msgstr "Nula" #: editor/property_editor.cpp msgid "Easing In-Out" -msgstr "" +msgstr "Hladký vstup-výstup" #: editor/property_editor.cpp msgid "Easing Out-In" -msgstr "" +msgstr "Hladký výstup-vstup" #: editor/property_editor.cpp msgid "File..." @@ -10389,7 +10372,7 @@ msgstr "Vybrat uzel" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "" +msgstr "Chyba při načítání souboru: Žádný zdroj!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -10397,7 +10380,7 @@ msgstr "Vybrat uzel" #: editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "" +msgstr "Bit %d, hodnota %d." #: editor/property_selector.cpp msgid "Select Property" @@ -10416,33 +10399,28 @@ msgid "Batch Rename" msgstr "Dávkové přejmenování" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "Nahradit: " +msgstr "Nahradit:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Prefix:" -msgstr "Prefix" +msgstr "Prefix:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Suffix:" -msgstr "Sufix" +msgstr "Sufix:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Use Regular Expressions" -msgstr "Regulární výrazy" +msgstr "Použít regulární výrazy" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced Options" msgstr "Pokročilé možnosti" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Nahradit" #: editor/rename_dialog.cpp msgid "Node name" @@ -10469,14 +10447,16 @@ msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Sekvenční počítadlo celých čísel.\n" +"Porovnat možnosti počítadla." #: editor/rename_dialog.cpp msgid "Per-level Counter" -msgstr "" +msgstr "Samostatné počítadlo pro každou úroveň" #: editor/rename_dialog.cpp msgid "If set, the counter restarts for each group of child nodes." -msgstr "" +msgstr "Když je zapnuté, počítadlo se resetuje pro každou skupinu potomků." #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -10488,7 +10468,7 @@ msgstr "Krok" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" -msgstr "" +msgstr "Hodnota, o kterou se počítadlo zvýší za každý uzel" #: editor/rename_dialog.cpp msgid "Padding" @@ -10504,23 +10484,23 @@ msgstr "" #: editor/rename_dialog.cpp msgid "Post-Process" -msgstr "" +msgstr "Následné zpracování" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "" +msgstr "Zachovat" #: editor/rename_dialog.cpp msgid "PascalCase to snake_case" -msgstr "PascalCase na snake_case" +msgstr "CamelCase na snake_case" #: editor/rename_dialog.cpp msgid "snake_case to PascalCase" -msgstr "snake_case na PascalCase" +msgstr "snake_case na CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Notace" #: editor/rename_dialog.cpp msgid "To Lowercase" @@ -10535,9 +10515,8 @@ msgid "Reset" msgstr "Resetovat" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "Chyba regulárního výrazu" +msgstr "Chyba regulárního výrazu:" #: editor/rename_dialog.cpp msgid "At character %s" @@ -10545,23 +10524,23 @@ msgstr "Na znaku %s" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "" +msgstr "Změnit rodiče uzlu" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "" +msgstr "Změnit rodiče lokace (Vybrat nového rodiče):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "" +msgstr "Zachovat globální transformaci" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" -msgstr "" +msgstr "Upravit rodiče" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "" +msgstr "Režim spouštění:" #: editor/run_settings_dialog.cpp msgid "Current Scene" @@ -10577,7 +10556,7 @@ msgstr "Argumenty hlavní scény:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "" +msgstr "Nastavení spuštění scény" #: editor/scene_tree_dock.cpp msgid "No parent to instance the scenes at." @@ -10592,19 +10571,19 @@ msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Scénu \"%s\" nelze vytvořit, protože aktuální scéna je jedním z jejích uzlů." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" msgstr "Scéna/Scény instance" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Replace with Branch Scene" -msgstr "Uložit větev jako scénu" +msgstr "Nahradit větev scénou" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "" +msgstr "Přidat instanci scény" #: editor/scene_tree_dock.cpp msgid "Detach Script" @@ -10612,7 +10591,7 @@ msgstr "Odpojit skript" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "" +msgstr "Tuto operaci nelze provést v kořenovém uzlu stromu." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" @@ -10629,23 +10608,23 @@ msgstr "Duplikovat uzel/uzly" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" +"Nadřazené uzly ve zděděné scéně nelze změnit. Pořadí uzlů nelze změnit." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "" +msgstr "Uzel musí patřit do editované scény, aby se stal kořenem." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "" +msgstr "Instance scény se nemohou stát kořenem" #: editor/scene_tree_dock.cpp msgid "Make node as Root" msgstr "Nastavit uzel jako zdrojový" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete %d nodes and any children?" -msgstr "Smazat %d uzlů?" +msgstr "Smazat %d uzlů a všechny potomky?" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" @@ -10653,11 +10632,11 @@ msgstr "Smazat %d uzlů?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "" +msgstr "Smazat kořenový uzel \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "Smazat uzel \"%s\" a jeho potomky?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" @@ -10665,11 +10644,11 @@ msgstr "Smazat uzel \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "" +msgstr "Toto nelze provést s kořenovým uzlem." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "" +msgstr "Tuto operaci nelze provést na instanci scény." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." @@ -10680,17 +10659,21 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Zakázání \"upravitelné instance“ obnoví výchozí nastavení všech vlastností " +"uzlu." #: editor/scene_tree_dock.cpp msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" +"Povolení možnosti \"Načíst jako placeholder\" zakáže možnost \"Upravitelní " +"potomci\" a způsobí, že všechny vlastnosti uzlu budou vráceny na výchozí " +"hodnoty." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Local" -msgstr "Místní" +msgstr "Změnit na lokální" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -10718,11 +10701,11 @@ msgstr "Jiný uzel" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "" +msgstr "Nelze manipulovat s uzly z cizí scény!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "" +msgstr "Nelze pracovat na uzlech, ze kterých dědí aktuální scéna!" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -10733,15 +10716,15 @@ msgid "Remove Node(s)" msgstr "Odstranit uzel/uzly" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Změnit název vstupu" +msgstr "Změnit typ uzlů" #: editor/scene_tree_dock.cpp msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" +"Scénu se nepodařilo uložit. Některé závislosti pravděpodobně nejsou splněny." #: editor/scene_tree_dock.cpp msgid "Error saving scene." @@ -10749,7 +10732,7 @@ msgstr "Chyba při ukládání scény." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "" +msgstr "Chyba ukládání duplikace scény." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" @@ -10757,15 +10740,15 @@ msgstr "Dílčí zdroje" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "" +msgstr "Vymazat dědičnost" #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "" +msgstr "Upravitelní potomci" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "" +msgstr "Načíst jako placeholder" #: editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -10777,24 +10760,25 @@ msgid "" "This is probably because this editor was built with all language modules " "disabled." msgstr "" +"Nelze připojit skript: nejsou zaregistrovány žádné jazyky.\n" +"Je to pravděpodobně proto, že tento editor byl vytvořen s vypnutými " +"jazykovými moduly." #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "Přidat podřízený uzel" +msgstr "Přidat uzel" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Expand/Collapse All" -msgstr "Sbalit vše" +msgstr "Rozbalit/Sbalit vše" #: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Změnit typ" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Přidat/Vytvořit nový uzel" +msgstr "Změnit rodiče na nový uzel" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10825,16 +10809,16 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" +"Přidat instanci scény jako uzel. Pokud neexistuje kořenový uzel, tak vytvoří " +"zděděnou scénu." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach a new or existing script to the selected node." msgstr "Připojit nový, nebo existující skript k vybranému uzlu." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Detach the script from the selected node." -msgstr "Připojit nový, nebo existující skript k vybranému uzlu." +msgstr "Odpojit skript od vybraného uzlu." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -10846,10 +10830,9 @@ msgstr "Místní" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "" +msgstr "Vymazat dědičnost? (Nelze vrátit zpět!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "Přepnout viditelnost" @@ -10858,14 +10841,12 @@ msgid "Unlock Node" msgstr "Odemknout uzel" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Button Group" -msgstr "Tlačítko č. 7" +msgstr "Skupina tlačítek" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "(Connecting From)" -msgstr "Chyba připojení" +msgstr "(Připojování z)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" @@ -10876,18 +10857,24 @@ msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" +"Uzel má %s připojení a %s skupin.\n" +"Kliknutím zobrazíte panel signálů." #: editor/scene_tree_editor.cpp msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" +"Uzel má %s připojení.\n" +"Kliknutím zobrazíte panel signálů." #: editor/scene_tree_editor.cpp msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" +"Uzel je v %s skupinách.\n" +"Kliknutím zobrazíte panel skupin." #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10906,6 +10893,8 @@ msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" +"Děti nelze vybrat.\n" +"Kliknutím umožníte jejich vybrání." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -10916,6 +10905,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer je připnutý.\n" +"Kliknutím odepnete." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -10982,9 +10973,8 @@ msgid "Error loading script from %s" msgstr "Chyba nahrávání skriptu z %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Přepsat" +msgstr "Přepisuje" #: editor/script_create_dialog.cpp msgid "N/A" @@ -11011,23 +11001,20 @@ msgid "Invalid class name." msgstr "Neplatné jméno třídy." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path." -msgstr "Neplatné jméno vlastnosti." +msgstr "Neplatný název nebo cesta zděděné třídy." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script path/name is valid." -msgstr "Skript je validní." +msgstr "Cesta a jméno skriptu jsou validní." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." msgstr "Povoleno: a-z, A-Z, 0-9, _ a ." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in script (into scene file)." -msgstr "Možností scén." +msgstr "Vestavěný skript (v souboru scény)." #: editor/script_create_dialog.cpp msgid "Will create a new script file." @@ -11046,6 +11033,8 @@ msgid "" "Note: Built-in scripts have some limitations and can't be edited using an " "external editor." msgstr "" +"Poznámka: Vestavěné skripty mají určitá omezení a nelze je upravovat pomocí " +"externího editoru." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -11061,7 +11050,7 @@ msgstr "Vestavěný skript:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "" +msgstr "Připojit script k uzlu" #: editor/script_editor_debugger.cpp msgid "Remote " @@ -11101,16 +11090,15 @@ msgstr "Zdroj C++:" #: editor/script_editor_debugger.cpp msgid "Stack Trace" -msgstr "" +msgstr "Trasování zásobníku" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Chyby" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Child process connected." -msgstr "Odpojené uzly" +msgstr "Připojen proces potomka." #: editor/script_editor_debugger.cpp msgid "Copy Error" @@ -11121,21 +11109,20 @@ msgid "Video RAM" msgstr "Video RAM" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Skip Breakpoints" -msgstr "Vytvořit body." +msgstr "Přeskočit breakpointy" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "" +msgstr "Zkontrolovat předchozí instanci" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "" +msgstr "Zkontrolovat následující instanci" #: editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "" +msgstr "Rámce zásobníku" #: editor/script_editor_debugger.cpp msgid "Profiler" @@ -11147,7 +11134,7 @@ msgstr "Síťový profiler" #: editor/script_editor_debugger.cpp msgid "Monitor" -msgstr "" +msgstr "Monitor" #: editor/script_editor_debugger.cpp msgid "Value" @@ -11155,24 +11142,23 @@ msgstr "Hodnota" #: editor/script_editor_debugger.cpp msgid "Monitors" -msgstr "" +msgstr "Monitory" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." -msgstr "" +msgstr "Vyberte jednu nebo více položek ze seznamu pro zobrazení grafu." #: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "" +msgstr "Spotřeba video paměti dle zdroje:" #: editor/script_editor_debugger.cpp msgid "Total:" msgstr "Celkem:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Exportovat profil" +msgstr "Exportovat seznam do CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -11196,38 +11182,35 @@ msgstr "Různé" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "" +msgstr "Klikací ovládací prvek:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "" +msgstr "Typ klikacího prvku:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "" +msgstr "Kořen živých úprav:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "" +msgstr "Nastavit ze stromu" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "" +msgstr "Exportovat měření do CSV" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Erase Shortcut" -msgstr "Zkratky" +msgstr "Smazat zkratky" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Restore Shortcut" -msgstr "Zkratky" +msgstr "Obnovit zkratky" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Change Shortcut" -msgstr "Upravit kotvy" +msgstr "Upravit zkratky" #: editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -11239,7 +11222,7 @@ msgstr "Zkratky" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "Vazba" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" @@ -11247,7 +11230,7 @@ msgstr "Změnit rádius světla" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Změnit úhel vysílání uzlu AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -11259,68 +11242,63 @@ msgstr "Změnit velikost kamery" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier AABB" -msgstr "" +msgstr "Změnit AABB Notifier" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "Změnit částice AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" -msgstr "" +msgstr "Změnit rozsahy Probe" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "" +msgstr "Změnit poloměr Sphere Shape" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Box Shape Extents" -msgstr "" +msgstr "Změnit rozsahy Box Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "" +msgstr "Změnit poloměr Capsule Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "" +msgstr "Změnit výšku Capsule Shape" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Změnit rádius světla" +msgstr "Změnit poloměr Cylinder Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Cylinder Shape Height" -msgstr "" +msgstr "Změnit výšku Cylinder Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" -msgstr "" +msgstr "Změnit délku Ray Shape" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Změnit rádius světla" +msgstr "Změnit poloměr Cylinder" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Změnit velikost kamery" +msgstr "Změnit výšku Cylinder" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Změnit rádius světla" +msgstr "Změnit vnitřní poloměr Torus" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Změnit rádius světla" +msgstr "Změnit vnější poloměr Torus" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "" +msgstr "Vybrat dynamickou knihovnu pro tento záznam" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" @@ -11348,7 +11326,7 @@ msgstr "Dynamická knihovna" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "" +msgstr "Přidat záznam architektury" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" @@ -11356,12 +11334,11 @@ msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" -msgstr "" +msgstr "Zapnutý GDNative Singleton" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Disabled GDNative Singleton" -msgstr "Vypnout aktualizační kolečko" +msgstr "Vypnutý GDNative Singleton" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" @@ -11376,7 +11353,6 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Step argument is zero!" msgstr "Argument kroku je nula!" @@ -11413,30 +11389,28 @@ msgid "Object can't provide a length." msgstr "Objekt nemůže poskytnout délku." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Next Plane" -msgstr "Další záložka" +msgstr "Další rovina" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Plane" -msgstr "Předchozí záložka" +msgstr "Předchozí rovina" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" -msgstr "" +msgstr "Rovina:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" -msgstr "" +msgstr "Další patro" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Floor" -msgstr "" +msgstr "Předchozí patro" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" -msgstr "" +msgstr "Patro:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Delete Selection" @@ -11456,24 +11430,23 @@ msgstr "Vykreslit GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" -msgstr "" +msgstr "Grid Map" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" -msgstr "" +msgstr "Přichytit pohled" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Vypnuto" +msgstr "Vypnout ořezávání" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Oříznout nahoře" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Oříznout dole" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" @@ -11489,36 +11462,35 @@ msgstr "Editovat osu Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" -msgstr "" +msgstr "X otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Y" -msgstr "" +msgstr "Y otočení kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Z" -msgstr "" +msgstr "Z otočení kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Zpětné X otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Zpětné Y otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Zpětné Z otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Zrušit otoční kurzoru" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Paste Selects" -msgstr "Vymazat označené" +msgstr "Vložit výběr" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" @@ -11542,7 +11514,7 @@ msgstr "Filtrovat meshe" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." -msgstr "" +msgstr "Přiřaďte uzlu GridMap zdroj MeshLibrary k použití jeho sítě." #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" @@ -11550,70 +11522,69 @@ msgstr "Název třídy nemůže být rezervované klíčové slovo" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" -msgstr "" +msgstr "Konec zásobníku trasování vnitřní výjimky" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "Zapéct NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "" +msgstr "Vymazat navigační síť." #: modules/recast/navigation_mesh_generator.cpp msgid "Setting up Configuration..." -msgstr "" +msgstr "Nastavuji konfiguraci..." #: modules/recast/navigation_mesh_generator.cpp msgid "Calculating grid size..." -msgstr "" +msgstr "Počítám velikost mřížky..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating heightfield..." -msgstr "" +msgstr "Vytvářím výškové pole..." #: modules/recast/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." -msgstr "" +msgstr "Vyznačuji průchozí trojúhelníky..." #: modules/recast/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "" +msgstr "Konstruuji kompaktní výškové pole..." #: modules/recast/navigation_mesh_generator.cpp msgid "Eroding walkable area..." -msgstr "" +msgstr "Eroduji průchozí oblast..." #: modules/recast/navigation_mesh_generator.cpp msgid "Partitioning..." -msgstr "" +msgstr "Rozděluji..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "" +msgstr "Vytvářím kontury..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "" +msgstr "Vytvářím polymesh..." #: modules/recast/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "" +msgstr "Převádím na nativní navigační mřížku..." #: modules/recast/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "" +msgstr "Nastavení generátoru navigační sítě:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "" +msgstr "Parsuji geometrii..." #: modules/recast/navigation_mesh_generator.cpp msgid "Done!" msgstr "Hotovo!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" @@ -11622,14 +11593,12 @@ msgstr "" "jak správně používat yield!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "Uzel zavolal yield, ale nevrátil stav funkce v první pracovní paměti." #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." @@ -11678,10 +11647,8 @@ msgid "Add Output Port" msgstr "Přidat výstupní port" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "" -"Neplatný název. Nesmí kolidovat s existujícím jménem zabudovaného typu." +msgstr "Nahradit všechny existující vestavěné funkce." #: modules/visual_script/visual_script_editor.cpp msgid "Create a new function." @@ -11765,29 +11732,25 @@ msgstr "" "Podržte %s k uvolnění getteru. Podržte Shift k uvolnění generického podpisu." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Podržte Ctrl k uvolnění getteru. Podržte Shift k uvolnění generického " -"podpisu." +"Podržte Ctrl k vložení getteru. Podržte Shift k vložení generické signatury." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." msgstr "Podržte %s k uvolnění jednoduché reference na uzel." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold Ctrl to drop a simple reference to the node." msgstr "Podržte Ctrl k uvolnění jednoduché reference na uzel." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a Variable Setter." -msgstr "Podržte %s k uvolnění jednoduché reference na uzel." +msgstr "Podržte %s k uvolnění setteru proměnné." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "" +msgstr "Podržte Ctrl k uvolnění setteru proměnné." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" @@ -11802,6 +11765,8 @@ msgid "" "Can't drop properties because script '%s' is not used in this scene.\n" "Drop holding 'Shift' to just copy the signature." msgstr "" +"Nelze uvolnit vlastnosti, protože skript \"%s\" není použit ve scéně.\n" +"Přestaňte držet \"Shift\", pro zkopírování jeho signatury." #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -11832,14 +11797,12 @@ msgid "Disconnect Nodes" msgstr "Odpojit uzly" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Připojit uzly" +msgstr "Připojit data uzlů" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Připojit uzly" +msgstr "Připojit sekvenci uzlů" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -11855,7 +11818,7 @@ msgstr "Změnit velikost komentáře" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "" +msgstr "Nelze zkopírovat uzel funkce." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" @@ -11867,24 +11830,23 @@ msgstr "Vložit VisualScript uzly" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." -msgstr "" +msgstr "Nelze vytvořit funkci s uzlem funkce." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." -msgstr "" +msgstr "Nelze vytvořit funkci uzlů z uzlů více funkcí." #: modules/visual_script/visual_script_editor.cpp msgid "Select at least one node with sequence port." -msgstr "" +msgstr "Vyberte alespoň jeden uzel s portem sekvencí." #: modules/visual_script/visual_script_editor.cpp msgid "Try to only have one sequence input in selection." -msgstr "" +msgstr "Zkus mít ozančenu pouze jednu vstupní sekvenci." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create Function" -msgstr "Přejmenovat funkci" +msgstr "Vytvořit funkci" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" @@ -11907,9 +11869,8 @@ msgid "Editing Signal:" msgstr "Úprava signálu:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Make Tool:" -msgstr "Místní" +msgstr "Editační nástroj:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" @@ -11932,9 +11893,8 @@ msgid "function_name" msgstr "název_funkce" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Select or create a function to edit its graph." -msgstr "Pro úpravu grafu vyber nebo vytvoř funkci" +msgstr "Vyber nebo vytvoř funkci pro úpravu jejího grafu." #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" @@ -12021,41 +11981,40 @@ msgstr "" "posloupnost), nebo řetězec (chyba)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Odstranit VisualScript uzel" +msgstr "Hledat VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Přijmi %d" #: modules/visual_script/visual_script_property_selector.cpp msgid "Set %s" -msgstr "" +msgstr "Nastav %s" #: platform/android/export/export.cpp msgid "Package name is missing." -msgstr "" +msgstr "Chybí jméno balíčku." #: platform/android/export/export.cpp msgid "Package segments must be of non-zero length." -msgstr "" +msgstr "Jméno balíčku musí být neprázdné." #: platform/android/export/export.cpp msgid "The character '%s' is not allowed in Android application package names." -msgstr "" +msgstr "Znak '%s' není povolen v názvu balíčku Android aplikace." #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." -msgstr "" +msgstr "Číslice nemůže být prvním znakem segmentu balíčku." #: platform/android/export/export.cpp msgid "The character '%s' cannot be the first character in a package segment." -msgstr "" +msgstr "Znak '%s' nemůže být prvním znakem segmentu balíčku." #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." -msgstr "" +msgstr "Balíček musí mít alespoň jeden '.' oddělovač." #: platform/android/export/export.cpp msgid "Select device from the list" @@ -12063,90 +12022,113 @@ msgstr "Vyberte zařízení ze seznamu" #: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." -msgstr "" +msgstr "Spustitelný ADB není nakonfigurovaný v Nastavení Editoru." #: platform/android/export/export.cpp msgid "OpenJDK jarsigner not configured in the Editor Settings." -msgstr "" +msgstr "OpenJDK jarsigner není nakonfigurovaný v Nastavení Editoru." #: platform/android/export/export.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" +"Úložiště klíčů k ladění není nakonfigurováno v Nastavení editoru nebo v " +"export profilu." #: platform/android/export/export.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" +"Úložiště klíčů pro vydání je nakonfigurováno nesprávně v profilu exportu." #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." msgstr "" +"Vlastní sestavení vyžaduje správnou cestu k sadě Android SDK v nastavení " +"editoru." #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "" +msgstr "Nesprávná cesta Android SDK pro vlastní sestavení v Nastavení editoru." + +#: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Chybí složka \"platform-tools\"!" #: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" +"Šablona sestavení Androidu není pro projekt nainstalována. Nainstalujte jej " +"z nabídky Projekt." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." -msgstr "" +msgstr "Neplatný veřejný klíč pro rozšíření APK." #: platform/android/export/export.cpp -#, fuzzy msgid "Invalid package name:" -msgstr "Neplatné jméno třídy" +msgstr "Neplatné jméno balíčku:" #: platform/android/export/export.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" +"Neplatný modul \"GodotPaymentV3\" v nastavení projektu \"Android / moduly" +"\" (změněno v Godot 3.2.2).\n" #: platform/android/export/export.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" +"Chcete-li používat doplňky, musí být povoleno \"použít vlastní build\"." #: platform/android/export/export.cpp msgid "" "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" "\"." msgstr "" +"\"Stupně svobody\" je platné pouze v případě, že \"Xr Mode\" je \"Oculus " +"Mobile VR\"." #: platform/android/export/export.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" +"\"Hand Tracking\" je platné pouze v případě, že \"Režim Xr\" má hodnotu " +"\"Oculus Mobile VR\"." #: platform/android/export/export.cpp msgid "" "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" +"\"Focus Awareness\" je platné pouze v případě, že \"Režim Xr\" má hodnotu " +"\"Oculus Mobile VR\"." #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" je validní pouze v případě, že je povolena možnost \"Použít " +"vlastní sestavu\"." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "Neplatné jméno souboru! Android App Bundle vyžaduje příponu *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "Rozšíření APK není kompatibilní s Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Neplatné jméno souboru! Android APK vyžaduje příponu *.apk." #: platform/android/export/export.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" +"Pokus o sestavení z vlastní šablony, ale neexistují pro ni žádné informace o " +"verzi. Přeinstalujte jej z nabídky \"Projekt\"." #: platform/android/export/export.cpp msgid "" @@ -12155,52 +12137,58 @@ msgid "" " Godot Version: %s\n" "Please reinstall Android build template from 'Project' menu." msgstr "" +"Neshoda verzí Android buildu:\n" +" Šablona nainstalována: %s\n" +" Verze Godot: %s\n" +"Přeinstalujte šablonu pro sestavení systému Android z nabídky \"Projekt\"." #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" -msgstr "" +msgstr "Buildování projektu pro Android (gradle)" #: platform/android/export/export.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" +"Buildování projektu pro Android se nezdařilo, zkontrolujte chybový výstup.\n" +"Případně navštivte dokumentaci o build pro Android na docs.godotengine.org." #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Přesunout výstup" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Nelze kopírovat či přejmenovat exportovaný soubor, zkontrolujte výstupy v " +"adresáři projektu gradle." #: platform/iphone/export/export.cpp msgid "Identifier is missing." -msgstr "" +msgstr "Chybí identifikátor." #: platform/iphone/export/export.cpp -#, fuzzy msgid "The character '%s' is not allowed in Identifier." -msgstr "Jméno není platný identifikátor:" +msgstr "Znak '%s' není dovolen v identifikátoru." #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." -msgstr "" +msgstr "App Store Team ID nebyla poskytnuta - projekt nelze konfigurovat." #: platform/iphone/export/export.cpp -#, fuzzy msgid "Invalid Identifier:" -msgstr "Jméno není platný identifikátor:" +msgstr "Neplatný identifikátor:" #: platform/iphone/export/export.cpp msgid "Required icon is not specified in the preset." -msgstr "" +msgstr "V profilu není nastavena požadovaná ikona." #: platform/javascript/export/export.cpp msgid "Stop HTTP Server" -msgstr "" +msgstr "Zastavit HTTP Server" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -12223,34 +12211,28 @@ msgid "Invalid export template:" msgstr "Neplatná šablona pro export:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "Nelze vytvořit složku." +msgstr "Nebylo možné přečíst HTML shell:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "Nelze vytvořit složku." +msgstr "Nebylo možné načíst soubor splash obrázku:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Using default boot splash image." -msgstr "Nelze vytvořit složku." +msgstr "Používám výchozí splash obrázek." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package short name." -msgstr "Neplatné jméno třídy" +msgstr "Neplatné krátké jméno balíčku." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package unique name." -msgstr "Neplatný unikátní název." +msgstr "Neplatný unikátní název balíčku." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package publisher display name." -msgstr "Neplatný unikátní název." +msgstr "Neplatný unikátní název vydavatele balíčku." #: platform/uwp/export/export.cpp msgid "Invalid product GUID." @@ -12293,13 +12275,12 @@ msgid "Invalid splash screen image dimensions (should be 620x300)." msgstr "Neplatné rozměry obrázku uvítací obrazovky (měly by být 620x300)." #: scene/2d/animated_sprite.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" "Aby AnimatedSprite mohl zobrazovat snímky, zdroj SpriteFrames musí být " -"vytvořen nebo nastaven v vlastnosti 'Frames'." +"vytvořen nebo nastaven v vlastnosti \"Frames\"." #: scene/2d/canvas_modulate.cpp msgid "" @@ -12348,30 +12329,53 @@ msgstr "" "jejich tvaru." #: scene/2d/collision_shape_2d.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" -msgstr "CollisionShape2D musí obsahovat tvar. Prosím vytvořte zdrojový tvar." +msgstr "" +"CollisionShape2D funkce musí obsahovat tvar. Prosím vytvořte zdrojový tvar!" #: scene/2d/collision_shape_2d.cpp msgid "" "Polygon-based shapes are not meant be used nor edited directly through the " "CollisionShape2D node. Please use the CollisionPolygon2D node instead." msgstr "" +"Polygonové tvary nejsou určeny k použití nebo úpravám přímo prostřednictvím " +"uzlu CollisionShape2D. Použijte uzel CollisionPolygon2D." #: scene/2d/cpu_particles_2d.cpp msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animace CPUParticles2D vyžaduje použití CanvasItemMaterial se zapnutým " +"\"Particles Animation\"." + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" #: scene/2d/light_2d.cpp -#, fuzzy msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "Textura světla musí být nastavena vlastností 'texture'." +msgstr "Textura tvaru světla musí být nastavena vlastností 'texture'." #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12381,7 +12385,7 @@ msgstr "" #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon." -msgstr "" +msgstr "Stínový polygon pro toto stínítko je prázdný. Nakreslete polygon." #: scene/2d/navigation_polygon.cpp msgid "" @@ -12411,18 +12415,24 @@ msgid "" "Use the CPUParticles2D node instead. You can use the \"Convert to " "CPUParticles\" option for this purpose." msgstr "" +"Grafický ovladač GLES2 nepodporuje částice založené na GPU.\n" +"Použijte uzel CPUParticles2D. Na převod lze použít \"Převést na CPUParticles" +"\"." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" +"Nebyl přiřazen žádný materiál pro zpracování částic, takže nebudou viditelné." #: scene/2d/particles_2d.cpp msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animace Particles2D vyžaduje použití CanvasItemMaterial se zapnutou funkcí " +"\"Animace částic\"." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -12434,6 +12444,9 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Změny velikosti v RigidBody2D (ve znakovém nebo rigidním režimu) budou za " +"běhu přepsány fyzikálním enginem.\n" +"Změňte velikost kolizních tvarů v uzlech potomků." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -12442,65 +12455,68 @@ msgstr "" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Tento Bone2D řetěz by měl končit uzlem Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Uzel Bone2D funguje pouze s nadřazeným uzlem Skeleton2D nebo jiným Bone2D." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Této kosti chybí správná klidová póza. Přejděte na uzel Skeleton2D a " +"nastavte jej." #: scene/2d/tile_map.cpp -#, fuzzy msgid "" "TileMap with Use Parent on needs a parent CollisionObject2D to give shapes " "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D slouží pouze jako kontejner tvarů objektu " -"CollissionObject2D a od něj odvozených uzlů. Použijte ho pouze jako potomka " -"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D a dalších, pro určení " -"jejich tvaru." +"TileMap \"Use Parent\" potřebuje nadřazený CollisionObject2D uzel. Použijte " +"ho pouze jako potomka Area2D, StaticBody2D, RigidBody2D, KinematicBody2D a " +"dalších, pro určení jejich tvaru." #: scene/2d/visibility_notifier_2d.cpp -#, fuzzy msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." msgstr "" -"VisibilityEnable2D funguje nejlépe, když je nastaven jako rodič editované " -"scény." +"VisibilityEnable2D funguje nejlépe, když je přímo pod kořenem aktuálně " +"upravované scény." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "" +msgstr "ARVRCamera musí mít uzel ARVROrigin jako rodiče." #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "" +msgstr "ARVRController musí mít uzel ARVROrigin jako rodiče." #: scene/3d/arvr_nodes.cpp msgid "" "The controller ID must not be 0 or this controller won't be bound to an " "actual controller." msgstr "" +"ID ovladače nemůže být 0, jinak nebude ovladač přiřazen žádnému skutečnému " +"ovladači." #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "" +msgstr "ARVRAnchor musí mít uzel ARVROrigin jako rodiče." #: scene/3d/arvr_nodes.cpp msgid "" "The anchor ID must not be 0 or this anchor won't be bound to an actual " "anchor." msgstr "" +"ID kotvy nemůže být 0, jinak tato kotva nebude přiřazena skutečné kotvě." #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "" +msgstr "ARVROrigin musí mít uzel ARVRCamera jako potomka." #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -12512,19 +12528,19 @@ msgstr "(Zbývající čas: %d:%02d s)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " -msgstr "" +msgstr "Vykreslení mřížek: " #: scene/3d/baked_lightmap.cpp msgid "Plotting Lights:" -msgstr "" +msgstr "Vykreslení světel:" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" -msgstr "" +msgstr "Dokončování vykreslení" #: scene/3d/baked_lightmap.cpp msgid "Lighting Meshes: " -msgstr "" +msgstr "Osvětlení sítí: " #: scene/3d/collision_object.cpp msgid "" @@ -12562,53 +12578,58 @@ msgstr "" "a KinematicBody, abyste jim dali tvar." #: scene/3d/collision_shape.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" "Aby CollisionShape mohl fungovat, musí mu být poskytnut tvar. Vytvořte mu " -"prosím zdroj tvar!" +"prosím zdroj tvar." #: scene/3d/collision_shape.cpp msgid "" "Plane shapes don't work well and will be removed in future versions. Please " "don't use them." msgstr "" +"Tvary Plane nepracují dobře a budou v budoucím vydání odstraněny. " +"Nepoužívejte je." #: scene/3d/collision_shape.cpp msgid "" "ConcavePolygonShape doesn't support RigidBody in another mode than static." -msgstr "" +msgstr "ConcavePolygonShape nepodporuje uzel RigidBody v nestatickém režimu." #: scene/3d/cpu_particles.cpp msgid "Nothing is visible because no mesh has been assigned." -msgstr "" +msgstr "Nic není zobrazeno, protože nebyla přiřazena žádná mřížka." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial whose " "Billboard Mode is set to \"Particle Billboard\"." msgstr "" +"Animace CPUParticles vyžaduje použití SpatialMaterial, jehož režim Billboard " +"je nastaven na \"Particle Billboard\"." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" -msgstr "" +msgstr "Vykreslení sítí" #: scene/3d/gi_probe.cpp msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" +"Video driver GLES2 nepodporuje GIProby.\n" +"Místo toho použijte BakedLightmap." #: scene/3d/interpolated_camera.cpp msgid "" "InterpolatedCamera has been deprecated and will be removed in Godot 4.0." -msgstr "" +msgstr "Uzel InterpolatedCamera je zastaralý a bude odstraněn v Godot 4.0." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." -msgstr "" +msgstr "SpotLight s úhlem širším než 90 stupňů nemůže vrhat stíny." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." @@ -12630,17 +12651,23 @@ msgid "" "Use the CPUParticles node instead. You can use the \"Convert to CPUParticles" "\" option for this purpose." msgstr "" +"Video driver GLES2 nepodporuje částice na GPU.\n" +"Místo toho použijte uzel CPUParticles. K převodu můžete použít \"Převést na " +"CPUParticles\"." #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +"Nic není viditelné, protože mřížky nebyly přiřazeny do vykreslovací fronty." #: scene/3d/particles.cpp msgid "" "Particles animation requires the usage of a SpatialMaterial whose Billboard " "Mode is set to \"Particle Billboard\"." msgstr "" +"Animace částic vyžaduje použití SpatialMaterial, kde režim Billboard je " +"nastaven na \"Částicový billboard\"." #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." @@ -12651,6 +12678,8 @@ msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" +"Vlastnost ROTATION_ORIENTED uzlu PathFollow vyžaduje povolení \"Up Vector\" " +"ve zdroji Curve nadřazeného uzlu Path." #: scene/3d/physics_body.cpp msgid "" @@ -12658,19 +12687,41 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" +"Změny velikosti v RigidBody (ve znakovém nebo rigidním režimu) budou za běhu " +"přepsány fyzikálním enginem.\n" +"Změňte velikost kolizních tvarů v uzlech potomků." + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" #: scene/3d/remote_transform.cpp -#, fuzzy msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." msgstr "" -"Aby ParticleAttractor2D fungoval, musí vlastnost path ukazovat na platný " -"uzel Particles2D." +"Vlastnost \"Remote Path\" musí ukazovat na platný Spatial nebo Spatial-" +"derived uzel." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." -msgstr "" +msgstr "Toto tělo bude ignorováno dokud nenastavíte síť." #: scene/3d/soft_body.cpp msgid "" @@ -12678,16 +12729,15 @@ msgid "" "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Změny velikosti SoftBody budou za běhu přepsány fyzikálním enginem.\n" -"Změňte místo něho velikost kolizních tvarů potomků." +"Změny velikosti v SoftBody budou za běhu přepsány fyzikálním enginem.\n" +"Změňte velikost kolizních tvarů v uzlech potomků." #: scene/3d/sprite_3d.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite3D to display frames." msgstr "" -"Zdroj SpriteFrames musí být vytvořen nebo nastaven ve vlastnosti 'Frames', " +"Zdroj SpriteFrames musí být vytvořen nebo nastaven ve vlastnosti \"Frames\", " "aby mohl AnimatedSprite3D zobrazit rámečky." #: scene/3d/vehicle_body.cpp @@ -12703,6 +12753,8 @@ msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" +"WorldEnvironment vyžaduje nastavenou vlastnost \"Prostředí\", aby měl " +"viditelný efekt." #: scene/3d/world_environment.cpp msgid "" @@ -12716,10 +12768,12 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Tento WorldEnvironment je ignorován. Buď přidejte kameru (pro 3D scény) nebo " +"nastavte plátnu tohoto prostředí Režim pozadí (pro 2D scény)." #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "Na uzlu BlendTree \"%s\" nebyla nalezena animace: \"%s\"" #: scene/animation/animation_blend_tree.cpp msgid "Animation not found: '%s'" @@ -12734,31 +12788,28 @@ msgid "Invalid animation: '%s'." msgstr "Neplatná animace: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Odpojit '%s' od '%s'" +msgstr "Nic není připojeno do vstupu '%s' uzlu '%s'." #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." -msgstr "" +msgstr "Není nastaven žádný kořen grafu AnimationNode." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "Pro úpravu animací vyberte ze stromu scény uzel AnimationPlayer." +msgstr "Cesta k uzlu AnimationPlayer obsahující animace není nastavena." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." -msgstr "" +msgstr "Cesta k AnimationPlayer nevede k uzlu AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "The AnimationPlayer root node is not a valid node." -msgstr "Strom animace je neplatný." +msgstr "Kořenový uzel AnimationPlayer není platný uzel." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." -msgstr "" +msgstr "Podpora tohoto uzlu byla ukončena. Použijte místo něho AnimationTree." #: scene/gui/color_picker.cpp msgid "" @@ -12766,11 +12817,13 @@ msgid "" "LMB: Set color\n" "RMB: Remove preset" msgstr "" +"Barva: #%s\n" +"LTM: Nastavit barvu\n" +"PTM: Odstranit přednastavení" #: scene/gui/color_picker.cpp -#, fuzzy msgid "Pick a color from the editor window." -msgstr "Vyberte barvu z obrazovky." +msgstr "Vyberte barvu z okna editoru." #: scene/gui/color_picker.cpp msgid "HSV" @@ -12794,12 +12847,18 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" +"Kontejner sám o sobě neslouží žádnému účelu, pokud nějaký skript " +"nenakonfiguruje nastavení podřízených uzlů.\n" +"Pokud se chystáte přidat skript, použijte běžný ovládací uzel." #: scene/gui/control.cpp msgid "" "The Hint Tooltip won't be displayed as the control's Mouse Filter is set to " "\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"." msgstr "" +"Tip nápovědy se nezobrazí, protože filtr myši je nastaven na \"Ignorovat\". " +"Chcete-li tento problém vyřešit, nastavte filtr myši na \"Stop\" nebo \"Pass" +"\"." #: scene/gui/dialogs.cpp msgid "Alert!" @@ -12810,7 +12869,6 @@ msgid "Please Confirm..." msgstr "Potvrďte prosím..." #: scene/gui/popup.cpp -#, fuzzy msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " "functions. Making them visible for editing is fine, but they will hide upon " @@ -12821,9 +12879,9 @@ msgstr "" "budou skryty." #: scene/gui/range.cpp -#, fuzzy msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "Pokud má exp_edit hodnotu true, pak min_value musí být > 0." +msgstr "" +"Pokud má \"Exp Edit\" hodnotu true, pak \"Min Value\" musí být větší než 0." #: scene/gui/scroll_container.cpp msgid "" @@ -12831,13 +12889,15 @@ msgid "" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" +"ScrollContainer je navržen tak, aby běžel s jedním ovládacím potomkem.\n" +"Použijte kontejner (VBox, HBox atd.) nebo uzel Control jako potomka a " +"nastavte minimální velikost ručně." #: scene/gui/tree.cpp msgid "(Other)" msgstr "(Ostatní)" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." @@ -12871,9 +12931,8 @@ msgid "Invalid source for shader." msgstr "Neplatný zdroj pro shader." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid comparison function for that type." -msgstr "Neplatný zdroj pro shader." +msgstr "Neplatná funkce pro porovnání tohoto typu." #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -12891,6 +12950,30 @@ msgstr "Odlišnosti mohou být přiřazeny pouze ve vertex funkci." msgid "Constants cannot be modified." msgstr "Konstanty není možné upravovat." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Soubor nebo složka se stejným názvem již na tomto místě existuje." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Chybí složka \"build-tools\"!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Nelze najít nástroj zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Zarovnávání APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Nelze dokončit zarovnání APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Nelze odstranit nezarovnané APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Chyba při pokusu uložit rozložení!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Výchozí rozložení editoru přepsáno." + #~ msgid "Move pivot" #~ msgstr "Přemístit pivot" diff --git a/editor/translations/da.po b/editor/translations/da.po index 86e6965237..b8dfa199e8 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -1081,14 +1081,18 @@ msgstr "Ejere af:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Fjern de valgte filer fra projektet? (ej fortrydes)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "De filer der fjernes er nødvendige for, at andre ressourcer kan fungere.\n" "Fjern dem alligevel? (ej fortrydes)" @@ -1136,7 +1140,7 @@ msgstr "Forældreløs ressource udforsker" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2393,19 +2397,25 @@ msgid "Error saving TileSet!" msgstr "Fejl, kan ikke gemme TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Fejl, under forsøg på at gemme layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Standard editor layout overskrevet." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Layout navn er ikke fundet!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Gendannet standardlayout til grundindstillinger." #: editor/editor_node.cpp @@ -3799,6 +3809,16 @@ msgid "Name contains invalid characters." msgstr "Navnet indeholder ugyldige karakterer." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Omdøb fil:" @@ -3853,15 +3873,6 @@ msgstr "Rediger Afhængigheder..." msgid "View Owners..." msgstr "Vis Ejere..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Omdøb..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Duplikere" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Flyt Til..." @@ -3894,11 +3905,18 @@ msgid "Collapse All" msgstr "Klap alle sammen" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Omdøb" +#, fuzzy +msgid "Duplicate..." +msgstr "Duplikere" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Flyt Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Omdøb..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3937,9 +3955,11 @@ msgid "Move" msgstr "Flyt" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "En fil eller mappe med dette navn findes allerede." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Omdøb" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8595,10 +8615,25 @@ msgstr "Opret Ny %s" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Ny Scene" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Opret Poly" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Rediger Poly" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Slet Valgte" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -10050,6 +10085,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12340,6 +12379,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12621,6 +12664,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -12914,6 +12977,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -13139,6 +13222,16 @@ msgid "Constants cannot be modified." msgstr "Konstanter kan ikke ændres." #, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "En fil eller mappe med dette navn findes allerede." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Fejl, under forsøg på at gemme layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Standard editor layout overskrevet." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Fjern punkt" diff --git a/editor/translations/de.po b/editor/translations/de.po index ef5f8499ef..a7c6f3dddc 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -61,12 +61,13 @@ # Leon Marz <leon.marz@kabelmail.de>, 2020. # Patric Wust <patric.wust@gmx.de>, 2020. # Jonathan Hassel <jonathan.hassel@icloud.com>, 2020. +# Artur Schönfeld <schoenfeld.artur@ymail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-07 14:20+0000\n" -"Last-Translator: Günther Bohn <ciscouser@gmx.de>\n" +"PO-Revision-Date: 2020-12-01 20:29+0000\n" +"Last-Translator: So Wieso <sowieso@dukun.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -74,7 +75,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1088,20 +1089,27 @@ msgid "Owners Of:" msgstr "Besitzer von:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Ausgewählte Dateien aus dem Projekt entfernen? (Kann nicht rückgängig " -"gemacht werden)" +"gemacht werden.)\n" +"Die Dateien können möglicherweise aus dem Papierkorb des Betriebssystems " +"wiederhergestellt werden." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Andere Ressourcen benötigen die zu entfernenden Dateien, um richtig zu " "funktionieren.\n" -"Trotzdem entfernen? (Kann nicht rückgängig gemacht werden)" +"Trotzdem entfernen? (Kann nicht rückgängig gemacht werden.)\n" +"Die Dateien können möglicherweise aus dem Papierkorb des Betriebssystems " +"wiederhergestellt werden." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1146,7 +1154,7 @@ msgstr "Unbenutzte Dateien ansehen" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1656,34 +1664,32 @@ msgstr "" "Fallback Enabled‘ ausschalten." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Die Zielplattform benötigt ‚ETC‘-Texturkompression für GLES2. Bitte in den " -"Projekteinstellungen ‚Import Etc‘ aktivieren." +"Die Zielplattform benötigt ‚PVRTC‘-Texturkompression für GLES2. Bitte in den " +"Projekteinstellungen ‚Import Pvrtc‘ aktivieren." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Die Zielplattform benötigt ‚ETC2‘-Texturkompression für GLES2. Bitte in den " -"Projekteinstellungen aktivieren." +"Die Zielplattform benötigt ‚ETC2‘- oder ‚PVRTC’-Texturkompression für GLES2. " +"Bitte in den Projekteinstellungen ‚Import Etc 2‘ oder ‚Import Pvrtc‘ " +"aktivieren." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Die Zielplattform benötigt ‚ETC‘-Texturkompression für den Treiber-Fallback " -"auf GLES2. \n" -"Bitte ‚Import Etc‘ in den Projekteinstellungen aktivieren oder ‚Driver " +"Die Zielplattform benötigt ‚PVRTC‘-Texturkompression für den Treiber-" +"Fallback auf GLES2. \n" +"Bitte ‚Import Pvrtc‘ in den Projekteinstellungen aktivieren oder ‚Driver " "Fallback Enabled‘ ausschalten." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2369,20 +2375,31 @@ msgid "Error saving TileSet!" msgstr "Fehler beim Speichern des TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Fehler beim Speichern des Layouts!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Ein Fehler ist beim Speichern des Editorlayouts aufgetreten.\n" +"Möglicherweise ist der Ordner für persönliche Einstellungen des Editors " +"nicht schreibbar." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Standard-Editorlayout überschrieben." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Standardlayout wurde überschrieben.\n" +"Um das Standardlayout auf Werkseinstellungen zurückzusetzen, sollte das " +"Standardlayout über die Option „Layout löschen“ gelöscht werden." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Layout-Name nicht gefunden!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Layout wurde auf die Standardeinstellungen zurückgesetzt." +msgid "Restored the Default layout to its base settings." +msgstr "Standardlayout wurde auf Werkseinstellungen zurückgesetzt." #: editor/editor_node.cpp msgid "" @@ -3770,6 +3787,16 @@ msgid "Name contains invalid characters." msgstr "Name enthält ungültige Zeichen." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Benenne Datei um:" @@ -3817,14 +3844,6 @@ msgstr "Abhängigkeiten bearbeiten..." msgid "View Owners..." msgstr "Zeige Besitzer..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Umbenennen..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplizieren..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Verschiebe zu..." @@ -3852,11 +3871,16 @@ msgid "Collapse All" msgstr "Alle einklappen" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Umbenennen" +msgid "Duplicate..." +msgstr "Duplizieren..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "In Papierkorb werfen" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Umbenennen..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3891,10 +3915,11 @@ msgid "Move" msgstr "Verschieben" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" -"Es existiert bereits eine Datei oder ein Ordner an diesem Pfad mit dem " -"angegebenen Namen." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Umbenennen" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5299,50 +5324,43 @@ msgstr "Neue horizontale und vertikale Hilfslinien erstellen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Pivot-Offset des CanvasItems „%s“ auf (%d, %d) setzen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "CanvasItem rotieren" +msgstr "%d CanvasItems rotieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "CanvasItem rotieren" +msgstr "CanvasItem „%s“ auf %d Grad rotieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "CanvasItem verschieben" +msgstr "Anker des CanvasItems „%s“ verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Node2D „%s“ auf (%s, %s) skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Control „%s“ auf (%d, %d) skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "CanvasItem skalieren" +msgstr "%d CanvasItems skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "CanvasItem skalieren" +msgstr "CanvasItem „%s“ auf (%s, %s) skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "CanvasItem verschieben" +msgstr "%d CanvasItems verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "CanvasItem verschieben" +msgstr "CanvasItem „%s“ zu (%d, d%) verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5754,11 +5772,11 @@ msgid "" "Keys are only added to existing tracks, no new tracks will be created.\n" "Keys must be inserted manually for the first time." msgstr "" -"Füge automatisiert Schlüsselbilder ein wenn Objekte verschoben, rotiert oder " -"skaliert werden (basierend auf Maske).\n" +"Füge automatisiert Schlüsselbilder ein, wenn Objekte verschoben, rotiert " +"oder skaliert werden (basierend auf Maske).\n" "Schlüsselbilder werden nur in existierende Spuren eingefügt, es werden keine " "neuen Spuren angelegt.\n" -"Das erste mal müssen Schlüsselbilder manuell eingefügt werden." +"Das erste Mal müssen Schlüsselbilder manuell eingefügt werden." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Auto Insert Key" @@ -6301,7 +6319,7 @@ msgstr "Aufwärts-Achse des Meshs:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" -msgstr "Zufällige Rotation:" +msgstr "Zufälliges Drehen:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" @@ -6309,7 +6327,7 @@ msgstr "Zufälliges Kippen:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "Zufällige Skalierung:" +msgstr "Zufälliges Skalieren:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" @@ -6631,16 +6649,14 @@ msgid "Move Points" msgstr "Punkte Verschieben" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Ziehen = Rotieren" +msgstr "Strg: Rotieren" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Alle verschieben" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" msgstr "Shift+Strg: Skalieren" @@ -6689,14 +6705,12 @@ msgid "Radius:" msgstr "Radius:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Polygon und UV erstellen" +msgstr "Polygon zu UV kopieren" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Zu Polygon2D umwandeln" +msgstr "Polygon zu UV kopieren" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8251,13 +8265,12 @@ msgid "Paint Tile" msgstr "Kachel zeichnen" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Umsch+RMT: Linie zeichnen\n" -"Umsch+Strg+RMT: Rechteck bemalen" +"Umsch+LMT: Linie zeichnen\n" +"Umsch+Strg+LMT: Rechteck bemalen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8412,10 +8425,22 @@ msgid "Create a new rectangle." msgstr "Neues Rechteck erstellen." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Neues Rechteck" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Neues Polygon erstellen." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Neues Polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Ausgewählte Form löschen" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Polygon im Rechteck Bereich halten." @@ -8788,9 +8813,8 @@ msgid "Add Node to Visual Shader" msgstr "Visual Shader-Node hinzufügen" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Node verschoben" +msgstr "Node(s) verschoben" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8810,9 +8834,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Visual-Shader-Eingabetyp geändert" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Uniform-Name festlegen" +msgstr "UniformRef-Name geändert" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9512,9 +9535,8 @@ msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." msgstr "" -"Gibt den Abfall basierend auf dem Punktprodukt der Oberflächennormalen und " -"der Blickrichtung der Kamera zurück (übergeben Sie die zugehörigen Eingaben " -"an diese)." +"Gibt den Abfall abgeleitet aus dem Skalarprodukt zwischen Flächennormale und " +"Kamerablickrichtung zurück (zugeordnete Eingänge müssen übergeben werden)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9531,7 +9553,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Eine Referenz zu einem existierenden Uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9898,6 +9920,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10550,7 +10576,7 @@ msgstr "Aktueller Szenenname" #: editor/rename_dialog.cpp msgid "Root node name" -msgstr "Name des Root-Nodes" +msgstr "Name des Wurzel-Nodes" #: editor/rename_dialog.cpp msgid "" @@ -10758,7 +10784,7 @@ msgstr "Node „%s“ löschen?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "Lässt sich nicht an Root-Node ausführen." +msgstr "Lässt sich nicht an Wurzel-Node ausführen." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." @@ -10924,7 +10950,7 @@ msgid "" "exists." msgstr "" "Instantiiere eine Szenendatei als Node. Erzeugt eine geerbte Szene falls " -"kein Root-Node existiert." +"kein Wurzel-Node existiert." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script to the selected node." @@ -12180,6 +12206,10 @@ msgstr "" "Ungültiger Android-SDK-Pfad für eigene Builds in den Editoreinstellungen." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "‚platform-tools‘-Verzeichnis fehlt!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12232,19 +12262,22 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "„Export AAB“ ist nur gültig wenn „Use Custom Build“ aktiviert ist." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Ungültiger Dateiname. Android App Bundles benötigen .aab als " +"Dateinamenendung." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK-Expansion ist nicht kompatibel mit Android App Bundles." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" +"Ungültiger Dateiname. Android APKs benötigen .apk als Dateinamenendung." #: platform/android/export/export.cpp msgid "" @@ -12283,13 +12316,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Verschiebe Ausgabe" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Exportdatei kann nicht kopiert und umbenannt werden. Fehlermeldungen sollten " +"im Gradle Projektverzeichnis erscheinen." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12479,6 +12514,26 @@ msgstr "" "CPUParticles2D-Animationen benötigen ein CanvasItemMaterial mit der " "Eigenschaft „Particles Animation“ aktiviert." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12822,6 +12877,26 @@ msgstr "" "Die Größe der entsprechenden Collisionshape-Unterobjekte sollte stattdessen " "geändert werden." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13075,6 +13150,32 @@ msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden." msgid "Constants cannot be modified." msgstr "Konstanten können nicht verändert werden." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "Es existiert bereits eine Datei oder ein Ordner an diesem Pfad mit dem " +#~ "angegebenen Namen." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "‚build-tools‘-Verzeichnis fehlt!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Das zipalign Hilfswerkzeug konnte nicht gefunden werden." + +#~ msgid "Aligning APK..." +#~ msgstr "Richte APK aus..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "APK konnte nicht ausgerichtet werden." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Nicht ausgerichtetes APK konnte nicht gelöscht werden." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Fehler beim Speichern des Layouts!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Standard-Editorlayout überschrieben." + #~ msgid "Move pivot" #~ msgstr "Pivotpunkt bewegen" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index f32995d2e6..23a0ea8480 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -995,14 +995,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1047,7 +1050,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2227,11 +2230,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2239,7 +2247,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3518,6 +3526,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3565,14 +3583,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3600,10 +3610,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3637,7 +3652,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8023,10 +8041,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9397,6 +9427,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11554,6 +11588,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11806,6 +11844,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12066,6 +12124,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/el.po b/editor/translations/el.po index b006707169..fde979b618 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -1040,14 +1040,19 @@ msgid "Owners Of:" msgstr "Ιδιοκτήτες του:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Αφαίρεση επιλεγμένων αρχείων από το έργο; (Αδυναμία αναίρεσης)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Τα αρχεία που αφαιρούνται απαιτούνται από άλλους πόρους για να δουλέψουν.\n" "Να αφαιρεθούν; (Αδύνατη η αναίρεση)" @@ -1094,7 +1099,7 @@ msgstr "Εξερευνητής αχρησιμοποίητων πόρων" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2314,19 +2319,25 @@ msgid "Error saving TileSet!" msgstr "Σφάλμα κατά την αποθήκευση TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Σφάλμα κατά την αποθήκευση διάταξης!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Η προεπιλεγμένη διάταξη του editor έχει παρακαμφθεί." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Το όνομα της διάταξης δεν βρέθηκε!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Επαναφορά της προεπιλεγμένης διάταξης στις βασικές ρυθμίσεις." #: editor/editor_node.cpp @@ -3720,6 +3731,16 @@ msgid "Name contains invalid characters." msgstr "Το όνομα περιέχει άκυρους χαρακτήρες." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Μετονομασία αρχείου:" @@ -3767,14 +3788,6 @@ msgstr "Επεξεργασία εξαρτήσεων..." msgid "View Owners..." msgstr "Προβολή ιδιοκτητών..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Μετονομασία..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Αναπαραγωγή..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Μετακίνηση σε..." @@ -3802,11 +3815,17 @@ msgid "Collapse All" msgstr "Σύμπτυξη Όλων" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Μετονομασία" +msgid "Duplicate..." +msgstr "Αναπαραγωγή..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Μετακίνηση AutoLoad" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Μετονομασία..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3841,8 +3860,11 @@ msgid "Move" msgstr "Μετακίνηση" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Υπάρχει ήδη αρχείο ή φάκελος με το ίδιο όνομα στη διαδρομή." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Μετονομασία" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8366,10 +8388,25 @@ msgid "Create a new rectangle." msgstr "Δημιουργία νέου ορθογωνίου." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Χρωματοσμός ορθογωνίου" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Δημιουργία νέου πολυγώνου." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Μετακίνηση πολυγώνου" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Διαγραφή επιλεγμένου" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Διατήρηση πολυγώνου μέσα σε ορθογώνια περιοχή." @@ -9848,6 +9885,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12137,6 +12178,10 @@ msgstr "" "Επεξεργαστή." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12435,6 +12480,26 @@ msgstr "" "Η κίνηση CPUParticles2D απαιτεί την χρήση CanvasItemMaterial με το " "«Particles Animation» ενεργό." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12770,6 +12835,26 @@ msgstr "" "αντικατασταθούνε από την μηχανή φυσικής κατά την εκτέλεση.\n" "Αλλάξτε μέγεθος στα σχήματα σύγκρουσης των παιδιών." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13016,6 +13101,15 @@ msgstr "Τα «varying» μπορούν να ανατεθούν μόνο στη msgid "Constants cannot be modified." msgstr "Οι σταθερές δεν μπορούν να τροποποιηθούν." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Υπάρχει ήδη αρχείο ή φάκελος με το ίδιο όνομα στη διαδρομή." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Σφάλμα κατά την αποθήκευση διάταξης!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Η προεπιλεγμένη διάταξη του editor έχει παρακαμφθεί." + #~ msgid "Move pivot" #~ msgstr "Μετακίνηση πηγαίου σημείου" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index 3e99fade73..c4b2e447f1 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -9,18 +9,19 @@ # Alejandro Sánchez Medina <alejandrosanchzmedina@gmail.com>, 2019. # Sr Half <flavio05@outlook.com>, 2020. # Cristian Yepez <cristianyepez@gmail.com>, 2020. +# BinotaLIU <me@binota.org>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-05-22 21:01+0000\n" -"Last-Translator: Cristian Yepez <cristianyepez@gmail.com>\n" +"PO-Revision-Date: 2020-11-20 23:08+0000\n" +"Last-Translator: BinotaLIU <me@binota.org>\n" "Language-Team: Esperanto <https://hosted.weblate.org/projects/godot-engine/" "godot/eo/>\n" "Language: eo\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -135,56 +136,51 @@ msgstr "Movi Bezier-punktojn" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Animado Duplikati Ŝlosilojn" +msgstr "Duplikati Ŝlosilojn de Animado" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "Animado Forigi Ŝlosilojn" +msgstr "Forigi Ŝlosilojn de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Animado Aliigi Kernakadron Fojon" +msgstr "Aliigi Kernakadron Fojon de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "Animado Aliigi Transiron" +msgstr "Aliigi Transiron de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Animado Aliigi Transformon" +msgstr "Aliigi Transformon de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Animado Aliigi Kernakadron Valoron" +msgstr "Aliigi Kernakadron Valoron de Animado" #: editor/animation_track_editor.cpp msgid "Anim Change Call" -msgstr "Animado Aliigi Alvokon" +msgstr "Aliigi Alvokon de Animado" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Animado Aliigi Kernakadron Fojon" +msgstr "Aliigi Kernakadron Fojon de Animadoj" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Animado Aliigi Transiron" +msgstr "Aliigi Transiron de Animadoj" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Animado Aliigi Transformon" +msgstr "Aliigi Transformon de Animadoj" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Animado Aliigi Kernakadron Valoron" +msgstr "Aliigi Kernakadron Valoron de Animadoj" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Animado Aliigi Alvokon" +msgstr "Aliigi Alvokon de Animadoj" #: editor/animation_track_editor.cpp msgid "Change Animation Length" @@ -1035,14 +1031,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1087,7 +1086,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2292,20 +2291,24 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -#, fuzzy -msgid "Default editor layout overridden." -msgstr "Automatan aranĝon de editilo transpasis." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3627,6 +3630,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3675,14 +3688,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3710,11 +3715,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renomi" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3747,8 +3757,11 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renomi" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8158,10 +8171,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Nova sceno" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Forigi Elektita(j)n Ŝlosilo(j)n" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9540,6 +9567,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "" "Higher visual quality\n" @@ -11734,6 +11765,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11987,6 +12022,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12247,6 +12302,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12452,6 +12527,10 @@ msgid "Constants cannot be modified." msgstr "Konstantoj ne povas esti modifitaj." #, fuzzy +#~ msgid "Default editor layout overridden." +#~ msgstr "Automatan aranĝon de editilo transpasis." + +#, fuzzy #~ msgid "Pack File" #~ msgstr "Malfermi dosieron" diff --git a/editor/translations/es.po b/editor/translations/es.po index ceaf9b9c7b..6920aa1bf7 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -52,12 +52,15 @@ # Jonatan <arandajonatan94@tuta.io>, 2020. # ACM <albertocm@tuta.io>, 2020. # José Manuel Jurado Bujalance <darkbird@vivaldi.net>, 2020. +# Skarline <lihue-molina@hotmail.com>, 2020. +# Oxixes <oxixes@protonmail.com>, 2020. +# David Aroca Rojas <arocarojasdavid@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-15 17:26+0000\n" -"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" +"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -65,7 +68,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -630,7 +633,7 @@ msgstr "Ir al Siguiente Paso" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "Ir al Anterior Paso" +msgstr "Ir al Paso Anterior" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -650,7 +653,7 @@ msgstr "Usar Curvas Bezier" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" -msgstr "Optimizar Animación" +msgstr "Optimizador de Animación" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" @@ -1085,19 +1088,26 @@ msgid "Owners Of:" msgstr "Propietarios De:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"¿Eliminar los archivos seleccionados del proyecto? (No puede ser restaurado)" +"¿Eliminar los archivos seleccionados del proyecto? (irreversible)\n" +"Puedes encontrar los archivos eliminados en la papelera de reciclaje del " +"sistema para restaurarlos." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Otros recursos necesitan los archivos que estás intentando quitar para " "funcionar.\n" -"¿Eliminarlos de todos modos? (irreversible)" +"¿Eliminarlos de todos modos? (irreversible)\n" +"Puedes encontrar los archivos eliminados en la papelera de reciclaje del " +"sistema para restaurarlos." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1141,7 +1151,7 @@ msgstr "Explorador de Recursos Huérfanos" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1651,35 +1661,32 @@ msgstr "" "Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC' para GLES2. " -"Activa 'Import Etc' en Ajustes del Proyecto." +"La plataforma de destino requiere compresión de texturas 'PVRTC' para GLES2. " +"Activa 'Import Pvrtc' en Ajustes del Proyecto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC2' para GLES3. " -"Activa 'Import Etc 2' en Ajustes del Proyecto." +"La plataforma de destino requiere compresión de texturas 'ETC2' o 'PVRTC' " +"para GLES3. Activa 'Import Etc 2' o 'Import Pvrtc' en Ajustes del Proyecto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC' para usar " -"GLES2 como controlador de respaldo.\n" -"Activa 'Import Etc' en Ajustes del Proyecto, o desactiva 'Driver Fallback " -"Enabled'." +"La plataforma del objetivo requiere compresión de texturas 'PVRTC' para el " +"driver fallback de GLES2.\n" +"Activa Import Pvrtc' en la Ajustes del Proyecto, o desactiva 'Driver " +"Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -2364,20 +2371,31 @@ msgid "Error saving TileSet!" msgstr "¡Error al guardar el TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "¡Error al guardar el layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Un error ha ocurrido mientras se intentaba guardar el diseño del editor.\n" +"Asegurate de que se puede escribir en la ubicación de datos del editor del " +"usuario." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Se ha sobreescrito el layout del editor por defecto." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Layout por defecto del editor sobreescrita.\n" +"Para recuperar el layout por defecto, utiliza la opción Eliminar Layout y " +"borra el Layout por defecto." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "¡Nombre de layout no encontrado!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Se restauró el layout por defecto a su configuración básica." +msgid "Restored the Default layout to its base settings." +msgstr "Se restauró el diseño por defecto a su configuración básica." #: editor/editor_node.cpp msgid "" @@ -3770,6 +3788,16 @@ msgid "Name contains invalid characters." msgstr "El nombre contiene caracteres inválidos." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Renombrar archivo:" @@ -3817,14 +3845,6 @@ msgstr "Editar Dependencias..." msgid "View Owners..." msgstr "Ver Propietarios..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renombrar..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicar..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mover a..." @@ -3852,11 +3872,16 @@ msgid "Collapse All" msgstr "Colapsar Todo" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renombrar" +msgid "Duplicate..." +msgstr "Duplicar..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Mover a la papelera" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renombrar..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3891,8 +3916,11 @@ msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renombrar" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5297,50 +5325,43 @@ msgstr "Crear Guías Horizontales y Verticales" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Ajusta el Offset del pivote del CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rotar CanvasItem" +msgstr "Rotar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rotar CanvasItem" +msgstr "Rotar CanvasItem \"%s\" a %d grados" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Mover CanvasItem" +msgstr "Mover Ancla del CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Escalar Node2D \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensionar Control \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Escalar CanvasItem" +msgstr "Escalar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Escalar CanvasItem" +msgstr "Escalar CanvasItem \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Mover CanvasItem" +msgstr "Mover %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Mover CanvasItem" +msgstr "Mover CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5359,8 +5380,8 @@ msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." msgstr "" -"Cuando está activo, el movimiento de los nodos de Control cambian sus " -"anclajes en lugar de sus márgenes." +"Cuando está activo, al mover los nodos de Control se cambian sus anclajes en " +"lugar de sus márgenes." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Left" @@ -6629,18 +6650,16 @@ msgid "Move Points" msgstr "Mover Puntos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Arrastrar: Rotar" +msgstr "Command: Rotar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Mover todos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift + Ctrl: Escalar" +msgstr "Shift+Command: Escalar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6689,14 +6708,12 @@ msgid "Radius:" msgstr "Radio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Crear Polígono y UV" +msgstr "Copiar Polígono a UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Convertir a Polygon2D" +msgstr "Copiar UV al Polígono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8243,13 +8260,12 @@ msgid "Paint Tile" msgstr "Dibujar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift + Clic izq: Dibujar línea\n" -"Shift + Ctrl + Clic izq: Pintar Rectángulo" +"Shift+Clic izq: Dibujar línea\n" +"Shift+Command+Clic der: Pintar Rectángulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8404,10 +8420,22 @@ msgid "Create a new rectangle." msgstr "Cree un nuevo rectángulo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nuevo Rectángulo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Crear un nuevo polígono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nuevo Polígono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Eliminar Formas Seleccionadas" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Mantener el polígono dentro del region Rect." @@ -8766,7 +8794,7 @@ msgstr "Redimensionar nodo VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" -msgstr "Establecer Nombre Uniforme" +msgstr "Establecer Nombre de Uniform" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" @@ -8777,9 +8805,8 @@ msgid "Add Node to Visual Shader" msgstr "Añadir Nodo al Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nodo Movido" +msgstr "Nodo(s) Movido(s)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8799,9 +8826,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Cambiar Tipo de Entrada del Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Establecer Nombre Uniforme" +msgstr "Cambio de Nombre de UniformRef" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9522,7 +9548,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Una referencia a un uniform existente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9890,6 +9916,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11598,7 +11628,7 @@ msgstr "Eliminar Rotación del Cursor" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Paste Selects" -msgstr "Pegar Seleccionados" +msgstr "Pegar Selecciona" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" @@ -12174,6 +12204,10 @@ msgstr "" "Configuración del Editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "¡No se encontró el directorio 'platform-tools'!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12225,18 +12259,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"¡Nombre de archivo inválido! Android App Bundle requiere la extensión *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "La Expansión APK no es compatible con Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk." #: platform/android/export/export.cpp msgid "" @@ -12275,13 +12311,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Moviendo salida" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"No se puede copiar y renombrar el archivo de exportación, comprueba el " +"directorio del proyecto de gradle para ver los resultados." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12483,6 +12521,26 @@ msgstr "" "La animación CPUParticles2D requiere el uso de un CanvasItemMaterial con " "\"Particles Animation\" activado." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12817,6 +12875,26 @@ msgstr "" "anulado por el motor de la física cuando esté ejecutándose.\n" "En su lugar, cambia el tamaño en las formas de colisión de los hijos." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13062,6 +13140,27 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "¡No se encontró el directorio 'build-tools'!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "No se pudo encontrar la herramienta zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Alineando APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "No se pudo completar el alineamiento del APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "¡Error al guardar el layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Se ha sobreescrito el layout del editor por defecto." + #~ msgid "Move pivot" #~ msgstr "Mover pivote" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 899e5e8557..49b2358aed 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -15,11 +15,12 @@ # Francisco José Carllinni <panchopepe@protonmail.com>, 2019. # Nicolas Zirulnik <nicolaszirulnik@gmail.com>, 2020. # Cristian Yepez <cristianyepez@gmail.com>, 2020. +# Skarline <lihue-molina@hotmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-07-31 03:47+0000\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" "Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" @@ -28,12 +29,13 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Argumento de tipo incorrecto en convert(), utilizá constantes TYPE_*." +msgstr "" +"Tipo de argumento inválido para 'convert()', utiliza constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -915,9 +917,8 @@ msgid "Signals" msgstr "Señales" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Filtrar tiles" +msgstr "Filtrar señales" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1045,19 +1046,26 @@ msgid "Owners Of:" msgstr "Dueños De:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"¿Eliminar los archivos seleccionados del proyecto? (No puede ser restaurado)" +"¿Eliminar los archivos seleccionados del proyecto? (irreversible)\n" +"Podés encontrar los archivos eliminados en la papelera de reciclaje del " +"sistema para restaurarlos." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Los archivos que se están removiendo son requeridos por otros recursos para " "funcionar.\n" -"Quitarlos de todos modos? (imposible deshacer)" +"¿Eliminarlos de todos modos? (irreversible)\n" +"Podés encontrar los archivos eliminados en la papelera de reciclaje del " +"sistema para restaurarlos." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1101,7 +1109,7 @@ msgstr "Explorador de Recursos Huérfanos" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1163,14 +1171,12 @@ msgid "Gold Sponsors" msgstr "Sponsor Oro" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "Donantes Plata" +msgstr "Sponsors Plata" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" -msgstr "Donantes Bronce" +msgstr "Sponsors Bronce" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -1612,35 +1618,32 @@ msgstr "" "Respaldo Activado\"." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC' para GLES2. " -"Activá 'Import Etc' en Ajustes del Proyecto." +"La plataforma de destino requiere compresión de texturas 'PVRTC' para GLES2. " +"Activá 'Import Pvrtc' en Ajustes del Proyecto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC2' para GLES3. " -"Activá 'Importar Etc 2' en Ajustes del Proyecto." +"La plataforma de destino requiere compresión de texturas 'ETC2' o 'PVRTC' " +"para GLES3. Activá 'Import Etc 2' o 'Import Pvrtc' en Ajustes del Proyecto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"La plataforma de destino requiere compresión de texturas 'ETC' para usar " -"GLES2 como controlador de respaldo.\n" -"Activá 'Importar Etc' en Ajustes del Proyecto, o desactivá \"Controlador de " -"Respaldo Activado\"." +"La plataforma del objetivo requiere compresión de texturas 'PVRTC' para el " +"driver fallback de GLES2.\n" +"Activá Import Pvrtc' en la Ajustes del Proyecto, o desactiva 'Driver " +"Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1684,9 +1687,8 @@ msgid "Node Dock" msgstr "Dock de Nodos" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem Dock" -msgstr "Sistema de Archivos" +msgstr "Panel de Sistema de Archivos" #: editor/editor_feature_profile.cpp msgid "Import Dock" @@ -2326,20 +2328,31 @@ msgid "Error saving TileSet!" msgstr "Error guardando TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error al tratar de guardar el layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Ocurrió un error mientras se intentaba guardar el layout del editor.\n" +"Chequeá que la ruta de datos de usuario del editor tenga permisos de " +"escritura." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Se ha sobreescrito el layout del editor por defecto." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Se sobreescribió el layout de editor Por Defecto.\n" +"Para restaurar el layout Por Defecto a su configuración de base, usá la " +"opcion Eliminar Layout y eliminá el layout Por Defecto." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nombre de layout no encontrado!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Se restauró el layout por defecto a su configuración básica." +msgid "Restored the Default layout to its base settings." +msgstr "Se restauró el layout Por Defecto a su configuración básica." #: editor/editor_node.cpp msgid "" @@ -2851,14 +2864,18 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"Cuando esta opción está activada, al utilizar el deploy en un click, el " +"ejecutable intentará conectarse a la IP de este equipo para que el proyecto " +"en ejecución pueda ser depurado.\n" +"Esta opción está pensada para ser usada en la depuración remota " +"( normalmente con un dispositivo móvil).\n" +"No es necesario habilitarla para usar el depurador GDScript localmente." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" -msgstr "Deploy Pequeño con recursos en red" +msgstr "Deploy Reducido con el Sistema de Archivos en Red" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, using one-click deploy for Android will only " "export an executable without the project data.\n" @@ -2867,74 +2884,68 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"Cuando esta opción está activa, exportar o hacer deploy producirá un " -"ejecutable mínimo.\n" -"El sistema de archivos sera proveído desde el proyecto por el editor sobre " -"la red.\n" -"En Android, deploy usará el cable USB para mejor performance. Esta opción " -"acelera el testeo para juegos con footprint grande." +"Cuando esta opción está activada, al usar deploy en un click para Android " +"sólo se exportará un ejecutable sin los datos del proyecto.\n" +"El sistema de archivos será proporcionado desde el proyecto por el editor a " +"través de la red.\n" +"En Android, el deploy usará el cable USB para un rendimiento más rápido. " +"Esta opción acelera las pruebas de los proyectos con recursos grandes." #: editor/editor_node.cpp msgid "Visible Collision Shapes" msgstr "Collision Shapes Visibles" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"Los Collision shapes y nodos raycast (para 2D y 3D) serán visibles durante " -"la ejecución del juego cuando esta opción queda activada." +"Cuando esta opción está activada, las formas de colisión y los nodos de " +"raycast (para 2D y 3D) serán visibles en el proyecto en ejecución." #: editor/editor_node.cpp msgid "Visible Navigation" msgstr "Navegación Visible" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." msgstr "" -"Los meshes de navegación y los polígonos serán visibles durante la ejecución " -"del juego si esta opción queda activada." +"Cuando esta opción está activada, las mallas de navegación y los polígonos " +"serán visibles en el proyecto en ejecución." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Scene Changes" msgstr "Sincronizar Cambios de Escena" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Cuando esta opción esté encendida, cualquier cambio hecho a la escena en el " -"editor será replicado en el juego en ejecución.\n" -"Cuando se usa remotamente en un dispositivo, esto es más eficiente con un " -"sistema de archivos remoto." +"Cuando esta opción esté activada, cualquier cambio hecho a la escena en el " +"editor será replicado en el proyecto en ejecución.\n" +"Cuando se usa remotamente en un dispositivo, esto es más eficiente cuando el " +"sistema la opción de sistema de archivos de redes esta activada." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Script Changes" msgstr "Sincronizar Cambios en Scripts" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any script that is saved will be reloaded in " "the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Cuando esta opción está activa, cualquier script que se guarde sera vuelto a " -"cargar en el juego en ejecución.\n" -"Cuando se use remotamente en un dispositivo, esto es más eficiente con un " -"sistema de archivos de red." +"Cuando esta opción está activada, cualquier script que se guarde se " +"recargará en el proyecto en ejecución.\n" +"Cuando se utiliza de forma remota en un dispositivo, esto es más eficiente " +"cuando la opción de sistema de archivos en red está activada." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" @@ -3412,7 +3423,6 @@ msgid "Add Key/Value Pair" msgstr "Agregar Par Clave/Valor" #: editor/editor_run_native.cpp -#, fuzzy msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the Export menu or define an existing preset " @@ -3420,7 +3430,8 @@ msgid "" msgstr "" "No se encontró ningún preset de exportación ejecutable para esta " "plataforma.\n" -"Por favor agregue un preset ejecutable en el menú de exportación." +"Por favor agregá un preset ejecutable en el menú Exportar o definí un preset " +"como ejecutable." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -3731,6 +3742,16 @@ msgid "Name contains invalid characters." msgstr "El nombre indicado contiene caracteres inválidos." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Renombrando archivo:" @@ -3778,14 +3799,6 @@ msgstr "Editar Dependencias..." msgid "View Owners..." msgstr "Ver Dueños..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renombrar..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicar..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mover A..." @@ -3813,11 +3826,16 @@ msgid "Collapse All" msgstr "Colapsar Todos" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renombrar" +msgid "Duplicate..." +msgstr "Duplicar..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Mover a La Papelera" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renombrar..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3852,8 +3870,11 @@ msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renombrar" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5258,50 +5279,43 @@ msgstr "Crear Guías Horizontales y Verticales" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Ajustar el Offfset del Pivote del CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rotar CanvasItem" +msgstr "Rotar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rotar CanvasItem" +msgstr "Rotar CanvasItem \"%s\" a %d grados" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Mover CanvasItem" +msgstr "Mover Ancla del CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Escalar Node2D \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensionar Control \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Escalar CanvasItem" +msgstr "Escalar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Escalar CanvasItem" +msgstr "Escalar CanvasItem \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Mover CanvasItem" +msgstr "Mover %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Mover CanvasItem" +msgstr "Mover CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6584,18 +6598,16 @@ msgid "Move Points" msgstr "Mover Puntos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Arrastrar: Rotar" +msgstr "Command: Rotar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Mover Todos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Escalar" +msgstr "Shift+Command: Escalar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6644,14 +6656,12 @@ msgid "Radius:" msgstr "Radio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Crear Polígono y UV" +msgstr "Copiar Polígono a UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Convertir a Polygon2D" +msgstr "Copiar UV al Polígono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -7878,9 +7888,8 @@ msgid "New Animation" msgstr "Nueva Animación" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Speed:" -msgstr "Velocidad (FPS):" +msgstr "Velocidad:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -8198,13 +8207,12 @@ msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift + Clic izq: Dibujar línea\n" -"Shift + Ctrl + Clic izq: Pintar Rectángulo" +"Shift+Click izq: Dibujar línea\n" +"Shift+Command+Click der: Pintar Rectángulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8359,10 +8367,22 @@ msgid "Create a new rectangle." msgstr "Crear un rectángulo nuevo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nuevo Rectángulo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Crear un nuevo polígono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nuevo Polígono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Eliminar Formas Seleccionadas" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Mantener el polígono dentro del region Rect." @@ -8730,9 +8750,8 @@ msgid "Add Node to Visual Shader" msgstr "Agregar Nodo al Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nodo Movido" +msgstr "Nodo(s) Movido(s)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8752,9 +8771,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Se cambió el Tipo de Entrada de Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Asignar Nombre a Uniform" +msgstr "Nombre de UniformRef Cambiado" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9474,7 +9492,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Una referencia a un uniform existente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9844,6 +9862,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10453,19 +10475,16 @@ msgid "Batch Rename" msgstr "Renombrar en Masa" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "Reemplazar: " +msgstr "Reemplazar:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Prefix:" -msgstr "Prefijo" +msgstr "Prefijo:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Suffix:" -msgstr "Sufijo" +msgstr "Sufijo:" #: editor/rename_dialog.cpp msgid "Use Regular Expressions" @@ -10512,9 +10531,9 @@ msgid "Per-level Counter" msgstr "Contador Por Nivel" #: editor/rename_dialog.cpp -#, fuzzy msgid "If set, the counter restarts for each group of child nodes." -msgstr "Si esta activo el contador reinicia por cada grupo de nodos hijos" +msgstr "" +"Si está activado, el contador se reinicia por cada grupo de nodos hijos." #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -10573,9 +10592,8 @@ msgid "Reset" msgstr "Resetear" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "Error de Expresión Regular" +msgstr "Error de Expresión Regular:" #: editor/rename_dialog.cpp msgid "At character %s" @@ -12131,6 +12149,10 @@ msgstr "" "Configuración del Editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "¡No se encontró el directorio 'platform-tools'!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12182,18 +12204,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"¡Nombre de archivo inválido! Android App Bundle requiere la extensión *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "La Expansión APK no es compatible con Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk." #: platform/android/export/export.cpp msgid "" @@ -12232,13 +12256,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Moviendo salida" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"No se puede copiar y renombrar el archivo de exportación, comprobá el " +"directorio del proyecto de gradle para ver los resultados." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12437,6 +12463,26 @@ msgstr "" "Animar CPUParticles2D requiere el uso de un CanvasItemMaterial con " "\"Particles Animation\" activado." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12701,7 +12747,7 @@ msgstr "" #: scene/3d/interpolated_camera.cpp msgid "" "InterpolatedCamera has been deprecated and will be removed in Godot 4.0." -msgstr "" +msgstr "InterpolatedCamera ha sido deprecado y será eliminado en Godot 4.0." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -12769,6 +12815,26 @@ msgstr "" "sobreescritos por el motor de física al ejecutar.\n" "Cambiá el tamaño de los collision shapes hijos." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13011,6 +13077,15 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Ya hay un archivo o carpeta con el mismo nombre en esta ubicación." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error al tratar de guardar el layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Se ha sobreescrito el layout del editor por defecto." + #~ msgid "Move pivot" #~ msgstr "Mover pivote" diff --git a/editor/translations/et.po b/editor/translations/et.po index 0059926322..9ede0a7465 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-09-01 10:38+0000\n" +"PO-Revision-Date: 2020-12-02 09:52+0000\n" "Last-Translator: StReef <streef.gtx@gmail.com>\n" "Language-Team: Estonian <https://hosted.weblate.org/projects/godot-engine/" "godot/et/>\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1009,14 +1009,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1061,7 +1064,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2274,11 +2277,16 @@ msgid "Error saving TileSet!" msgstr "Viga TileSeti salvestamisel!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Viga paigutuse salvestamisel!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2286,7 +2294,8 @@ msgid "Layout name not found!" msgstr "Paigutuse nime ei leitud!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Taastati vaikepaigutus baasseadetesse." #: editor/editor_node.cpp @@ -2557,7 +2566,7 @@ msgstr "Vaikimisi" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp msgid "Show in FileSystem" -msgstr "" +msgstr "Kuva failikuvajas" #: editor/editor_node.cpp msgid "Play This Scene" @@ -3573,6 +3582,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3620,14 +3639,6 @@ msgstr "Redigeeri sõltuvusi..." msgid "View Owners..." msgstr "Kuva omanikud..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Muuda nime..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplikeeri..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Teisalda..." @@ -3655,11 +3666,16 @@ msgid "Collapse All" msgstr "Ahenda kõik" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Nimeta ümber" +msgid "Duplicate..." +msgstr "Duplikeeri..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Muuda nime..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3692,8 +3708,11 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Nimeta ümber" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3948,7 +3967,7 @@ msgstr "" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Save As..." -msgstr "" +msgstr "Salvest kui..." #: editor/inspector_dock.cpp msgid "Copy Params" @@ -5270,7 +5289,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "" +msgstr "Valimisrežiim" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -5291,17 +5310,17 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode" -msgstr "" +msgstr "Liigutamisrežiim" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode" -msgstr "" +msgstr "Pööramisrežiim" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode" -msgstr "" +msgstr "Skaleerimisrežiim" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5336,7 +5355,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Grid Snap" -msgstr "" +msgstr "Kasuta ruudustiku naksamist" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping Options" @@ -5394,7 +5413,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "" +msgstr "Lukusta valitud objekt praegusele kohale (seda ei saa liigutada)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6542,7 +6561,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "New Text File..." -msgstr "" +msgstr "Uus tekstifail..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6550,7 +6569,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Save File As..." -msgstr "" +msgstr "Salvesta fail kui..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." @@ -6583,7 +6602,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As..." -msgstr "" +msgstr "Salvesta teema kui..." #: editor/plugins/script_editor_plugin.cpp msgid "%s Class Reference" @@ -6637,19 +6656,19 @@ msgstr "Eelmine skript" #: editor/plugins/script_editor_plugin.cpp msgid "File" -msgstr "" +msgstr "Fail" #: editor/plugins/script_editor_plugin.cpp msgid "Open..." -msgstr "" +msgstr "Ava..." #: editor/plugins/script_editor_plugin.cpp msgid "Reopen Closed Script" -msgstr "" +msgstr "Taasava suletud skript" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "" +msgstr "Salvesta kõik" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -7164,11 +7183,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "" +msgstr "Kuva tavaliselt" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "" +msgstr "Kuva traadiraamina" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" @@ -7176,7 +7195,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" -msgstr "" +msgstr "Kuva varjutamata" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" @@ -7192,7 +7211,7 @@ msgstr "Kuva informatsioon" #: editor/plugins/spatial_editor_plugin.cpp msgid "View FPS" -msgstr "" +msgstr "Kuva kaardisagedus" #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" @@ -7200,7 +7219,7 @@ msgstr "Poolresolutioon" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "Heli kuulaja" #: editor/plugins/spatial_editor_plugin.cpp msgid "Enable Doppler" @@ -7286,11 +7305,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Local Space" -msgstr "" +msgstr "Kasuta kohalikku ruumi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" -msgstr "" +msgstr "Kasuta naksamist" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -8078,10 +8097,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Uus stseen" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Kustuta valitud võti (võtmed)" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9454,6 +9487,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9963,7 +10000,7 @@ msgstr "" #: editor/property_editor.cpp msgid "File..." -msgstr "" +msgstr "Fail..." #: editor/property_editor.cpp msgid "Dir..." @@ -10254,7 +10291,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." -msgstr "" +msgstr "Salvesta uus stseen kui..." #: editor/scene_tree_dock.cpp msgid "" @@ -10463,7 +10500,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Open Script:" -msgstr "" +msgstr "Ava skript:" #: editor/scene_tree_editor.cpp msgid "" @@ -10479,7 +10516,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "Sea nähtavus sisse/välja" #: editor/scene_tree_editor.cpp msgid "" @@ -11613,6 +11650,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11865,6 +11906,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12125,6 +12186,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12327,5 +12408,8 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstante ei saa muuta." +#~ msgid "Error trying to save layout!" +#~ msgstr "Viga paigutuse salvestamisel!" + #~ msgid "Not in resource path." #~ msgstr "Ei ole ressursiteel." diff --git a/editor/translations/eu.po b/editor/translations/eu.po index 7e4389b87b..e27515849d 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -1000,15 +1000,20 @@ msgid "Owners Of:" msgstr "Hauen jabeak:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Kendu hautatutako fitxategiak proiektutik? (Ezin izango da berreskuratu)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Kendu beharreko fitxategiak beste baliabide batzuek behar dituzte funtziona " "dezaten.\n" @@ -1056,7 +1061,7 @@ msgstr "Baliabide umezurtzen arakatzailea" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2239,11 +2244,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2251,7 +2261,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3533,6 +3543,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3580,14 +3600,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3615,10 +3627,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3654,7 +3671,10 @@ msgid "Move" msgstr "Mugitu" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8042,10 +8062,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Ezabatu hautatutako gakoak" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9417,6 +9450,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11582,6 +11619,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11834,6 +11875,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12094,6 +12155,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 1ed888fded..f7bef53811 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -17,12 +17,14 @@ # Farshad Faemiyi <ffaemiyi@gmail.com>, 2020. # Pikhosh <pikhosh@gmail.com>, 2020. # MSKF <walkingdeadstudio@outlook.com>, 2020. +# Ahmad Maftoun <CarCedo.Pro@gmail.com>, 2020. +# ItzMiad44909858f5774b6d <maidggg@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-19 21:08+0000\n" -"Last-Translator: Pikhosh <pikhosh@gmail.com>\n" +"PO-Revision-Date: 2020-11-08 10:26+0000\n" +"Last-Translator: MSKF <walkingdeadstudio@outlook.com>\n" "Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/" "godot/fa/>\n" "Language: fa\n" @@ -30,7 +32,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.3.1-dev\n" +"X-Generator: Weblate 4.3.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -443,7 +445,7 @@ msgstr "مسیر قطعه نامعتبر، پس نمیتوان یک کلید #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "آهنگ از نوع مکانی نیست ، نمی تواند کلید را وارد کند" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" @@ -670,11 +672,11 @@ msgstr "افزودن کلیپ آهنگ صوتی" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip Start Offset" -msgstr "" +msgstr "تغییر افکت شروع کلیپ آهنگ صوتی" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip End Offset" -msgstr "" +msgstr "تغییر افست انتهای کلیپ آهنگ صوتی" #: editor/array_property_edit.cpp msgid "Resize Array" @@ -735,7 +737,7 @@ msgstr "استاندارد" #: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "" +msgstr "تغییر پانل اسکریپت ها" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -790,7 +792,7 @@ msgstr "از سیگنال:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." -msgstr "" +msgstr "صحنه شامل هیچ فیلم نامه ای نیست." #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp @@ -833,6 +835,8 @@ msgstr "به تعویق افتاده" msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." msgstr "" +"سیگنال را تعویض می کند ، آن را در یک صف ذخیره می کند و فقط در زمان بیکاری " +"شلیک می کند." #: editor/connections_dialog.cpp msgid "Oneshot" @@ -840,7 +844,7 @@ msgstr "تک نما" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." -msgstr "" +msgstr "سیگنال را پس از اولین انتشار آن قطع می کند." #: editor/connections_dialog.cpp msgid "Cannot connect signal" @@ -907,13 +911,12 @@ msgid "Signals" msgstr "سیگنالها" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "صافی کردن گرهها" +msgstr "صافی کردن گرههاسیگنال ها را فیلتر کنید" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "آیا مطمئن هستید که می خواهید همه اتصالات را از این سیگنال حذف کنید؟" #: editor/connections_dialog.cpp msgid "Disconnect All" @@ -1037,14 +1040,19 @@ msgid "Owners Of:" msgstr "مالکانِ:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "آیا پروندههای انتخاب شده از طرح حذف شوند؟ (نمیتوان بازیابی کرد)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "پروندههایی که میخواهید حذف شوند برای منابع دیگر مورد نیاز هستند تا کار " "کنند.\n" @@ -1092,7 +1100,7 @@ msgstr "پویندهی منبع جدا افتاده" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1154,14 +1162,12 @@ msgid "Gold Sponsors" msgstr "حامیان طلایی (درجه ۲)" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "اهداکنندگان نقرهای" +msgstr "حامیان نقره ای" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" -msgstr "اهداکنندگان برنزی" +msgstr "اهداکنندگان برنزیحامیان مالی" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -1316,7 +1322,6 @@ msgid "Bypass" msgstr "گذرگاه فرعی" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus options" msgstr "گزینه های اتوبوس" @@ -1364,27 +1369,27 @@ msgstr "انتقال صدای خطی" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As..." -msgstr "" +msgstr "ذخیره طرح اتوبوس صوتی به عنوان ..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout..." -msgstr "" +msgstr "مکان برای طرح جدید ..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "" +msgstr "چیدمان اتوبوس صوتی را باز کنید" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "" +msgstr "پرونده '٪ s' وجود ندارد." #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" -msgstr "" +msgstr "چیدمان" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "" +msgstr "پرونده نامعتبر است ، نه طرح اتوبوس صوتی." #: editor/editor_audio_buses.cpp msgid "Error saving file: %s" @@ -1392,11 +1397,11 @@ msgstr "خطای ذخیره کردن پرونده: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "" +msgstr "اتوبوس اضافه کنید" #: editor/editor_audio_buses.cpp msgid "Add a new Audio Bus to this layout." -msgstr "" +msgstr "یک Audio Bus جدید به این طرح اضافه کنید." #: editor/editor_audio_buses.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp @@ -1406,7 +1411,7 @@ msgstr "بارگیری" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "" +msgstr "چیدمان اتوبوس موجود را بارگیری کنید." #: editor/editor_audio_buses.cpp msgid "Save As" @@ -1414,7 +1419,7 @@ msgstr "ذخیره در" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "" +msgstr "این طرح Bus را در یک پرونده ذخیره کنید." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1422,11 +1427,11 @@ msgstr "بارگیری پیش فرض" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "طرح پیش فرض اتوبوس را بارگیری کنید." #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "" +msgstr "طرح جدید اتوبوس ایجاد کنید." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -1467,23 +1472,23 @@ msgstr "تغییر حالت اتماتیک لود عمومی" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "" +msgstr "بارگیری خودکار را انجام دهید" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "" +msgstr "بارگیری خودکار را حذف کنید" #: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp msgid "Enable" -msgstr "" +msgstr "روشن" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "تنظیم مجدد بارهای خودکار" #: editor/editor_autoload_settings.cpp msgid "Can't add autoload:" -msgstr "" +msgstr "اضافه کردن خودکار امکان پذیر نیست:" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1512,19 +1517,19 @@ msgstr "سینگلتون" #: editor/editor_data.cpp editor/inspector_dock.cpp msgid "Paste Params" -msgstr "" +msgstr "چسباندن پارام ها" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "" +msgstr "صحنه به روز می شود" #: editor/editor_data.cpp msgid "Storing local changes..." -msgstr "" +msgstr "ذخیره تغییرات محلی ..." #: editor/editor_data.cpp msgid "Updating scene..." -msgstr "" +msgstr "صحنه به روز می شود ..." #: editor/editor_data.cpp editor/editor_properties.cpp msgid "[empty]" @@ -1532,15 +1537,15 @@ msgstr "[پوچ]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[ذخیره نشده]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first." -msgstr "" +msgstr "لطفاً ابتدا دایرکتوری پایه را انتخاب کنید." #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "" +msgstr "یک فهرست انتخاب کنید" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp editor/project_manager.cpp @@ -1562,7 +1567,7 @@ msgstr "ناتوان در ساختن پوشه." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "" +msgstr "انتخاب کنید" #: editor/editor_export.cpp msgid "Storing File:" @@ -2281,11 +2286,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2293,7 +2303,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3614,6 +3624,16 @@ msgid "Name contains invalid characters." msgstr "کاراکترهای معتبر:" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "Renaming file:" msgstr "تغییر متغیر" @@ -3668,15 +3688,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "تغییر نام..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "انتخاب شده را به دو تا تکثیر کن" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3708,11 +3719,18 @@ msgid "Collapse All" msgstr "بستن" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "تغییر نام" +#, fuzzy +msgid "Duplicate..." +msgstr "انتخاب شده را به دو تا تکثیر کن" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "بارگیری خودکار را انجام دهید" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "تغییر نام..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3749,8 +3767,11 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "تغییر نام" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8337,9 +8358,8 @@ msgid "Occlusion" msgstr "ویرایش سیگنال" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation" -msgstr "گره انیمیشن" +msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask" @@ -8414,10 +8434,25 @@ msgstr "ساختن %s جدید" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "صحنه جدید" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "انتخاب شده را تغییر مقیاس بده" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "ویرایش سیگنال" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "حذف انتخاب شده" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8928,9 +8963,8 @@ msgid "SoftLight operator." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color constant." -msgstr "ثابت" +msgstr "مقدار ثابت رنگ" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8943,15 +8977,15 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "" +msgstr "مساوی (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "" +msgstr "بزرگتر از (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "" +msgstr "بزرگتر یا برابر (=<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8973,15 +9007,15 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "" +msgstr "کمتر از (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "" +msgstr "کمتر یا مساوی (=>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "" +msgstr "نا مساوی (=!)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9017,7 +9051,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Input parameter." -msgstr "" +msgstr "پارامتر ورودی." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader modes." @@ -9668,7 +9702,7 @@ msgstr "" #: editor/project_export.cpp msgid "Features" -msgstr "" +msgstr "ویژگیها" #: editor/project_export.cpp msgid "Custom (comma-separated):" @@ -9871,6 +9905,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10383,7 +10421,7 @@ msgstr "AutoLoad" #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "پلاگین ها" +msgstr "افزونهها" #: editor/property_editor.cpp msgid "Preset..." @@ -12087,11 +12125,11 @@ msgstr "شیء پایه یک گره نیست!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "مسیر به یک گره نمیرسد!" +msgstr "مسیر به یک نود نمیرسد!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "نام دارایی ایندکس نامعتبر 's%' در گره s%." +msgstr "نام دارایی ایندکس نامعتبر 's%' در نود s%." #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " @@ -12129,11 +12167,11 @@ msgstr "حذف گره اسکریپتِ دیداری" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "گرفتن %s" #: modules/visual_script/visual_script_property_selector.cpp msgid "Set %s" -msgstr "" +msgstr "تنظیم %s" #: platform/android/export/export.cpp msgid "Package name is missing." @@ -12188,6 +12226,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12471,6 +12513,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -12765,6 +12827,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -12873,7 +12955,7 @@ msgstr "" #: scene/gui/color_picker.cpp msgid "Pick a color from the editor window." -msgstr "" +msgstr "یک رنگ از پنجره ویرایشگر بردارید" #: scene/gui/color_picker.cpp msgid "HSV" @@ -12925,7 +13007,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "" +msgstr "اگر \"Exp ویرایش\" فعال است, \"حداقل داده\" باید بزرگتر از 0 باشد." #: scene/gui/scroll_container.cpp msgid "" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 6531c986c9..7a47df373d 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-03 15:29+0000\n" +"PO-Revision-Date: 2020-11-29 08:29+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -24,7 +24,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1029,18 +1029,25 @@ msgid "Owners Of:" msgstr "Omistajat kohteelle:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Poista valitut tiedostot projektista? (Ei voida palauttaa)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Poista valitut tiedostot projektista? (ei voida kumota)\n" +"Löydät poistetut tiedostot järjestelmän roskakorista, mikäli haluat " +"palauttaa ne." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Poistettavaksi merkittyjä tiedostoja tarvitaan muiden resurssien " -"toimivuuteen.\n" -"Poistetaanko silti? (ei mahdollisuutta kumota)" +"Poistettavia tiedostoja tarvitaan muiden resurssien toimivuuteen.\n" +"Poistetaanko silti? (ei voida kumota)\n" +"Löydät poistetut tiedostot järjestelmän roskakorista, mikäli haluat " +"palauttaa ne." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1084,7 +1091,7 @@ msgstr "Irrallisten resurssien hallinta" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1595,34 +1602,31 @@ msgstr "" "Enabled' asetus." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"GLES2 tarvitsee kohdealustalla 'ETC' tekstuuripakkausta. Kytke 'Import Etc' " -"päälle projektin asetuksista." +"GLES2 tarvitsee kohdealustalla 'PVRTC' tekstuuripakkausta. Kytke 'Import " +"Pvrtc' päälle projektin asetuksista." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"GLES3 tarvitsee kohdealustalla 'ETC' tekstuuripakkausta. Kytke 'Import Etc " -"2' päälle projektin asetuksista." +"GLES3 tarvitsee kohdealustalla 'ETC2' tai 'PVRTC' tekstuuripakkausta. Kytke " +"'Import Etc 2' tai 'Import Pvrtc' päälle projektin asetuksista." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"GLES2 vara-ajuri tarvitsee kohdealustalla 'ETC' tekstuuripakkausta.\n" -"Kytke 'Import Etc' päälle projektin asetuksista tai poista 'Driver Fallback " -"Enabled' asetus." +"GLES2 vara-ajuri tarvitsee kohdealustalla 'PVRTC' tekstuuripakkausta.\n" +"Kytke 'Import Pvrtc' päälle projektin asetuksista tai poista 'Driver " +"Fallback Enabled' asetus." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -2305,19 +2309,29 @@ msgid "Error saving TileSet!" msgstr "Virhe tallennettaessa laattavalikoimaa!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Virhe tallennettaessa asettelua!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Editorin asettelua tallentaessa tapahtui virhe.\n" +"Varmista, että editorin käyttäjädatapolku on kirjoituskelpoinen." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Editorin oletusasettelu ylikirjoitettu." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Ylikirjoitettiin editorin oletusasettelu.\n" +"Palauttaaksesi oletusasettelun alkuperäisiin asetuksiinsa, käytä Poista " +"asettelu -valintaa ja poista oletusasettelu." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Asettelun nimeä ei löytynyt!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "Palautettiin oletusasettelu alkuperäisiin asetuksiinsa." #: editor/editor_node.cpp @@ -3686,6 +3700,16 @@ msgid "Name contains invalid characters." msgstr "Nimi sisältää virheellisiä kirjainmerkkejä." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Nimetään tiedosto uudelleen:" @@ -3733,14 +3757,6 @@ msgstr "Muokkaa riippuvuuksia..." msgid "View Owners..." msgstr "Tarkastele omistajia..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Nimeä uudelleen..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Kahdenna..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Siirrä..." @@ -3768,11 +3784,16 @@ msgid "Collapse All" msgstr "Tiivistä kaikki" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Nimeä uudelleen" +msgid "Duplicate..." +msgstr "Kahdenna..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Siirrä roskakoriin" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Nimeä uudelleen..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3807,8 +3828,11 @@ msgid "Move" msgstr "Siirrä" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Tästä sijainnista löytyy jo samanniminen tiedosto tai kansio." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Nimeä uudelleen" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5211,50 +5235,43 @@ msgstr "Luo vaaka- ja pystysuorat apuviivat" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Aseta CanvasItem \"%s\" keskiöksi (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Kierrä CanvasItemiä" +msgstr "Kierrä %d CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Kierrä CanvasItemiä" +msgstr "Kierrä CanvasItem \"%s\":ä %d astetta" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Siirrä CanvasItemiä" +msgstr "Siirrä CanvasItem \"%s\":n ankkuri" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Skaalaa Node2D \"%s\" kokoon (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Muuta Control \"%s\" kokoon (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Skaalaa CanvasItemiä" +msgstr "Skaalaa %d CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Skaalaa CanvasItemiä" +msgstr "Skaalaa CanvasItem \"%s\" kokoon (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Siirrä CanvasItemiä" +msgstr "Siirrä %d CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Siirrä CanvasItemiä" +msgstr "Siirrä CanvasItem \"%s\" koordinaattiin (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6535,18 +6552,16 @@ msgid "Move Points" msgstr "Siirrä pisteitä" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Vedä: Kierrä" +msgstr "Komentonäppäin: Kierrä" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Siirrä kaikkia" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Skaalaa" +msgstr "Shift+komentonäppäin: Skaalaa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6594,14 +6609,12 @@ msgid "Radius:" msgstr "Säde:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Luo polygoni ja UV" +msgstr "Kopioi polygoni UV:hen" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Muunna Polygon2D solmuksi" +msgstr "Kopioi UV Polygon solmulle" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8149,13 +8162,12 @@ msgid "Paint Tile" msgstr "Maalaa laatta" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift+Hiiren vasen: Piirrä viiva\n" -"Shift+Ctrl+Hiiren vasen: Suorakaidemaalaus" +"Shift+Hiiren vasen: Viivanpiirto\n" +"Shift+Komentonäppäin+Hiiren vasen: Suorakaidemaalaus" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8310,10 +8322,22 @@ msgid "Create a new rectangle." msgstr "Luo uusi suorakulmio." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Uusi suorakaide" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Luo uusi polygoni." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Uusi polygoni" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Poista valittu muoto" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Pidä polygoni alueen suorakulmion sisällä." @@ -8683,9 +8707,8 @@ msgid "Add Node to Visual Shader" msgstr "Lisää solmu Visual Shaderiin" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Solmu siirretty" +msgstr "Solmu(t) siirretty" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8705,9 +8728,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Visual Shaderin syötteen tyyppi vaihdettu" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Aseta uniformin nimi" +msgstr "UniformRef nimi muutettu" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9420,7 +9442,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Viittaus olemassa olevaan uniformiin." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9789,6 +9811,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12060,6 +12086,10 @@ msgstr "" "asetuksissa." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "'platform-tools' hakemisto puuttuu!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12114,18 +12144,23 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" on käyttökelpoinen vain, kun \"Use Custom Build\" asetus on " +"päällä." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Virheellinen tiedostonimi! Android App Bundle tarvitsee *.aab " +"tiedostopäätteen." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion ei ole yhteensopiva Android App Bundlen kanssa." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" +"Virheellinen tiedostonimi! Android APK tarvitsee *.apk tiedostopäätteen." #: platform/android/export/export.cpp msgid "" @@ -12162,13 +12197,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Siirretään tulostetta" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Vientitiedoston kopiointi ja uudelleennimeäminen ei onnistu, tarkista " +"tulosteet gradle-projektin hakemistosta." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12356,6 +12393,26 @@ msgstr "" "CPUParticles2D animaatio edellyttää CanvasItemMaterial käyttöä niin että " "\"Particles Animation\" on kytketty päälle." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12686,6 +12743,26 @@ msgstr "" "jäykkätilassa) ajon aikana.\n" "Muuta sen sijaan solmun alla olevia törmäysmuotoja." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12927,6 +13004,30 @@ msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa." msgid "Constants cannot be modified." msgstr "Vakioita ei voi muokata." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Tästä sijainnista löytyy jo samanniminen tiedosto tai kansio." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "'build-tools' hakemisto puuttuu!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "zipalign työkalua ei löydy." + +#~ msgid "Aligning APK..." +#~ msgstr "Tasataan APK:ta..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "APK:n tasausta ei saatu suoritettua loppuun." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Tasaamattoman APK:n poisto ei onnistu." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Virhe tallennettaessa asettelua!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Editorin oletusasettelu ylikirjoitettu." + #~ msgid "Move pivot" #~ msgstr "Siirrä keskikohtaa" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index 2db2e9676c..c430475062 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -1009,14 +1009,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1061,7 +1064,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2242,11 +2245,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2254,7 +2262,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3535,6 +3543,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3582,14 +3600,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3617,10 +3627,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3654,7 +3669,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8046,10 +8064,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Burahin ang (mga) Napiling Key" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9422,6 +9453,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11585,6 +11620,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11837,6 +11876,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12097,6 +12156,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 75d4c1cfea..3085e78d7b 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -75,12 +75,14 @@ # Julien Humbert <julroy67@gmail.com>, 2020. # Nathan <bonnemainsnathan@gmail.com>, 2020. # Léo Vincent <l009.vincent@gmail.com>, 2020. +# Joseph Boudou <joseph.boudou@matabio.net>, 2020. +# Vincent Foulon <vincent.foulon80@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-28 11:18+0000\n" -"Last-Translator: Nathan <bonnemainsnathan@gmail.com>\n" +"PO-Revision-Date: 2020-12-10 14:11+0100\n" +"Last-Translator: Rémi Verschelde <akien@godotengine.org>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -88,7 +90,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Poedit 2.4.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1107,19 +1109,26 @@ msgid "Owners Of:" msgstr "Propriétaires de :" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Supprimer les fichiers sélectionnés du projet ? (restauration impossible)" +"Supprimer les fichiers sélectionnés du projet ? (annulation impossible)\n" +"Vous pouvez retrouver les fichiers supprimés dans la corbeille du système " +"pour les restaurer." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Les fichiers qui vont être supprimés sont utilisés par d'autres ressources " "pour leur fonctionnement.\n" -"Les supprimer tout de même ? (annulation impossible)" +"Les supprimer tout de même ? (annulation impossible)\n" +"Vous pouvez retrouver les fichiers supprimés dans la corbeille du système " +"pour les restaurer." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1163,7 +1172,7 @@ msgstr "Explorateur de ressources orphelines" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1674,34 +1683,31 @@ msgstr "" "Fallback Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"La plate-forme cible nécessite une compression de texture 'ETC' pour GLES2. " -"Activez 'Import Etc' dans les paramètres du projet." +"La plate-forme cible nécessite une compression de texture « ETC » pour " +"GLES2. Activez « Import Etc » dans les paramètres du projet." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"La plate-forme cible nécessite une compression de texture 'ETC2' pour GLES3. " -"Activez 'Import Etc 2' dans les Paramètres du projet." +"La plate-forme cible nécessite une compression de texture « ETC2 » pour " +"GLES3. Activez « Import Etc 2 » dans les Paramètres du projet." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"La plate-forme cible nécessite une compression de texture ' ETC ' pour le " +"La plate-forme cible nécessite une compression de texture ' PVRTC ' pour le " "fallback pilote de GLES2.\n" -"Activez 'Import Etc' dans les paramètres du projet, ou désactivez 'Driver " +"Activez 'Import Pvrtc' dans les paramètres du projet, ou désactivez 'Driver " "Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2384,20 +2390,33 @@ msgid "Error saving TileSet!" msgstr "Erreur d'enregistrement du TileSet !" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Erreur d'enregistrement de la disposition !" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Une erreur s'est produite lors de l'enregistrement de la disposition de " +"l'éditeur.\n" +"Assurez-vous que le chemin de données utilisateur de l'éditeur est " +"accessible en écriture." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Disposition de l'éditeur par défaut remplacée." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Mise en page par défaut de l'éditeur modifiée.\n" +"Pour rétablir la mise en page par défaut dans ses paramètres de base, " +"utilisez l'option Supprimer la mise en page et supprimez la mise en page par " +"défaut." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nom de la disposition non trouvé !" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Disposition par défaut remise à zéro." +msgid "Restored the Default layout to its base settings." +msgstr "Disposition par défaut remise à ses paramètres de base." #: editor/editor_node.cpp msgid "" @@ -3796,6 +3815,22 @@ msgid "Name contains invalid characters." msgstr "Le nom contient des caractères invalides." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" +"Les fichiers ou dossiers suivants entrent en conflit avec des éléments de la " +"destination '%s' :\n" +"\n" +"%s\n" +"\n" +"Souhaitez-vous les écraser ?" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Renommer le fichier :" @@ -3843,14 +3878,6 @@ msgstr "Modifier les dépendances…" msgid "View Owners..." msgstr "Voir les propriétaires…" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renommer..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Dupliquer…" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Déplacer vers…" @@ -3878,11 +3905,16 @@ msgid "Collapse All" msgstr "Réduire tout" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renommer" +msgid "Duplicate..." +msgstr "Dupliquer…" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Déplacer vers la corbeille" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renommer..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3917,9 +3949,11 @@ msgid "Move" msgstr "Déplacer" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" -"Il existe déjà un fichier ou un dossier ayant le même nom à cet emplacement." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renommer" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5328,50 +5362,43 @@ msgstr "Créer de nouveaux guides horizontaux et verticaux" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Décalage pivot du CanvasItem « %s » défini à (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Pivoter l'élément de canevas" +msgstr "Pivoter %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Pivoter l'élément de canevas" +msgstr "Pivoter le CanvasItem \"%s\" de %d degrés" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Déplacer l'élément de canevas" +msgstr "Déplacer l'ancre du CanvasItem « %s »" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Mettre à l'échelle le Node2D « %s » vers (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensionner le Contrôle « %s » vers (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Mise à l'échelle de CanvasItem" +msgstr "Mettre à l'échelle le CanvasItem %d" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Mise à l'échelle de CanvasItem" +msgstr "Mettre à l'échelle le CanvasItem « %s » vers (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Déplacer l'élément de canevas" +msgstr "Déplacer %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Déplacer l'élément de canevas" +msgstr "Déplacer le CanvasItem « %s » vers (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6667,18 +6694,16 @@ msgid "Move Points" msgstr "Déplacer de points" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Glisser : tourner" +msgstr "Commande : Rotation" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Maj : Tout déplacer" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Maj+Contrôle : Mettre à l'échelle" +msgstr "Shift + Commande : Mettre à l'échelle" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6726,14 +6751,12 @@ msgid "Radius:" msgstr "Rayon :" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Créer un polygone & UV" +msgstr "Copier le polygone dans l'UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Convertir en Polygon2D" +msgstr "Copier l'UV dans le polygone" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8285,13 +8308,12 @@ msgid "Paint Tile" msgstr "Peindre la tuile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift + Clic gauche : Dessiner une ligne\n" -"Shift + Ctrl + Clic gauche : Dessiner un rectangle" +"Maj + Clic droit : Dessiner une ligne\n" +"Maj + Commande + Clic droit : Dessiner un rectangle" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8446,12 +8468,24 @@ msgid "Create a new rectangle." msgstr "Créer un nouveau rectangle." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nouveau rectangle" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Créer un nouveau polygone." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nouveau polygone" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Supprimer la forme sélectionée" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." -msgstr "Circonscrire le polygone dans le Rect de région." +msgstr "Circonscrire le polygone dans le rectangle de région." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." @@ -8821,9 +8855,8 @@ msgid "Add Node to Visual Shader" msgstr "Ajouter un nœud au Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nœud déplacé" +msgstr "Nœud(s) déplacé(s)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8843,9 +8876,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Type d’entrée Visual Shader changée" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Définir le nom de l'uniforme" +msgstr "Nom UniformRef modifié" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9567,7 +9599,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Une référence à un uniform existant." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9938,6 +9970,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "Non supporté par les drivers de votre carte graphique." + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12227,6 +12263,10 @@ msgstr "" "paramètres de l'éditeur." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Dossier « platform-tools » manquant !" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12279,18 +12319,26 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"« Export AAB » est valide uniquement lorsque l'option « Use Custom Build » " +"est activée." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Nom de fichier invalide ! Le bundle d'application Android nécessite " +"l'extension *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" +"L'expansion de fichier APK n'est pas compatible avec le bundle d'application " +"Android." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" +"Nom de fichier invalide ! Les fichiers APK d'Android nécessitent l'extension " +"*.apk." #: platform/android/export/export.cpp msgid "" @@ -12329,13 +12377,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Déplacement du résultat" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Impossible de copier et de renommer le fichier d'export, vérifiez le dossier " +"du projet gradle pour les journaux." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12534,6 +12584,26 @@ msgstr "" "L'animation de CPUParticles2D a besoin d'un CanvasItemMaterial avec " "« Particles Animation » activé." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "Node A et Node B doivent être des PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "Node A doit être un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "Node B doit être un PhysicsBody2D" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12874,6 +12944,26 @@ msgstr "" "rigide) seront remplacées par le moteur physique lors de l'exécution.\n" "Modifiez la taille dans les formes de collision enfant à la place." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "Node A et Node B doivent être des PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "Node A doit être un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "Node B doit être un PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "Le joint n'est connecté à aucun PhysicsBody" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "Node A et Node B doivent être des PhysicsBody différents" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13121,6 +13211,32 @@ msgstr "Les variations ne peuvent être affectées que dans la fonction vertex." msgid "Constants cannot be modified." msgstr "Les constantes ne peuvent être modifiées." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "Il existe déjà un fichier ou un dossier ayant le même nom à cet " +#~ "emplacement." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Dossier « build-tools » manquant !" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Impossible de trouver l'outil zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Alignement de l'APK…" + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Impossible d'effectuer l'alignement de l'APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Impossible de supprimer l'APK non aligné." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Erreur d'enregistrement de la disposition !" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Disposition de l'éditeur par défaut remplacée." + #~ msgid "Move pivot" #~ msgstr "Déplacer le pivot" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index 17b0134def..971c0b0bec 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -1002,14 +1002,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1054,7 +1057,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2236,11 +2239,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2248,7 +2256,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3528,6 +3536,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3575,14 +3593,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3610,10 +3620,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3647,7 +3662,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8041,10 +8059,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9418,6 +9448,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11582,6 +11616,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11834,6 +11872,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12094,6 +12152,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/he.po b/editor/translations/he.po index 1a4c5ee05d..ebccec8d4b 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -17,12 +17,13 @@ # Ziv D <wizdavid@gmail.com>, 2020. # yariv benj <yariv4400@gmail.com>, 2020. # Guy Dadon <guydadon14@gmail.com>, 2020. +# bruvzg <bruvzg13@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-27 18:26+0000\n" -"Last-Translator: Guy Dadon <guydadon14@gmail.com>\n" +"PO-Revision-Date: 2020-12-03 19:28+0000\n" +"Last-Translator: Ziv D <wizdavid@gmail.com>\n" "Language-Team: Hebrew <https://hosted.weblate.org/projects/godot-engine/" "godot/he/>\n" "Language: he\n" @@ -31,7 +32,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 4.3.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -50,7 +51,7 @@ msgstr "אין מספיק בתים לפענוח בתים, או פורמט לא #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "קלט שגוי %I (לא הועבר) בתוך הביטוי" +msgstr "קלט שגוי %i (לא הועבר) בתוך הביטוי" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -58,7 +59,7 @@ msgstr "'self' לא ניתן לשימוש כי המופע הינו 'null' ( לא #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "אופרנדים לא תקינים לאופרטור %s, %s ו%s." +msgstr "אופרנדים לא תקינים לאופרטור %s, %s ו %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" @@ -70,7 +71,7 @@ msgstr "שם אינדקס לא תקין '%s' לסוג בסיס %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "פרמטרים שגויים לבניית 's%'" +msgstr "פרמטרים שגויים לבניית '%s'" #: core/math/expression.cpp msgid "On call to '%s':" @@ -1040,14 +1041,17 @@ msgstr "" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "להסיר את הקבצים הנבחרים מהמיזם? (אי אפשר לשחזר)" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1094,7 +1098,7 @@ msgstr "דפדפן משאבים יתומים" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1740,7 +1744,7 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." -msgstr "שגיאה בשמירת פרופיל לנתיב 's%'." +msgstr "שגיאה בשמירת פרופיל לנתיב '%s'." #: editor/editor_feature_profile.cpp msgid "Unset" @@ -2046,8 +2050,8 @@ msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"כרגע אין תיאור למאפיין זה. בבקשה עזור לנו על-ידי [/color][/url]כתיבת " -"תיאור[url=$url][color=$color]!" +"כרגע אין תיאור למאפיין זה. בבקשה עזור לנו על-ידי [color=$color][url=" +"$url]כתיבת תיאור[/url][/color]!" #: editor/editor_help.cpp msgid "Method Descriptions" @@ -2058,8 +2062,8 @@ msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"כרגע אין תיאור למתודה זו. בבקשה עזור לנו על-ידי [/url][/color]כתיבת תיאור " -"[color=$color][url=$url]!" +"כרגע אין תיאור למתודה זו. בבקשה עזור לנו על-ידי [color=$color][url=" +"$url]כתיבת תיאור [/url][/color]!" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2248,11 +2252,11 @@ msgstr "שגיאה בעת השמירה." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "לא יכול לפתוח את 's%'. יכול להיות שהקובץ הועבר או נמחק." +msgstr "לא יכול לפתוח את '%s'. יכול להיות שהקובץ הועבר או נמחק." #: editor/editor_node.cpp msgid "Error while parsing '%s'." -msgstr "שגיאה בפענוח 's%'." +msgstr "שגיאה בפענוח '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." @@ -2260,11 +2264,11 @@ msgstr "סוף קובץ בלתי צפוי '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "חסר 's%' או תלות שלו." +msgstr "חסר '%s' או תלות שלו." #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "שגיאה בטעינת 's%'." +msgstr "שגיאה בטעינת '%s'." #: editor/editor_node.cpp msgid "Saving Scene" @@ -2317,19 +2321,25 @@ msgid "Error saving TileSet!" msgstr "שגיאה בשמירת TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "שמירת הפריסה נכשלה!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "ברירת המחדל של עורך הפריסה נדרסה." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "שם הפריסה לא נמצא!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "פריסת ברירת המחדל שוחזרה להגדרות הבסיס." #: editor/editor_node.cpp @@ -3049,7 +3059,7 @@ msgstr "מערכת קבצים" #: editor/editor_node.cpp msgid "Inspector" -msgstr "חוקר" +msgstr "מפקח" #: editor/editor_node.cpp msgid "Expand Bottom Panel" @@ -3673,6 +3683,16 @@ msgid "Name contains invalid characters." msgstr "השם מכיל תווים שגויים." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "שינוי שם הקובץ:" @@ -3724,14 +3744,6 @@ msgstr "עריכת תלויות…" msgid "View Owners..." msgstr "צפייה בבעלים…" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "שינוי שם…" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "שכפול…" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "העברה אל…" @@ -3764,11 +3776,17 @@ msgid "Collapse All" msgstr "לצמצם הכול" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "שינוי שם" +msgid "Duplicate..." +msgstr "שכפול…" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "הזזת טעינה אוטומטית" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "שינוי שם…" #: editor/filesystem_dock.cpp #, fuzzy @@ -3807,9 +3825,11 @@ msgid "Move" msgstr "העברה" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "כבר קיימים קובץ או תיקייה בשם הזה." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "שינוי שם" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -4592,180 +4612,171 @@ msgstr "ניגון ההנפשה שנבחרה מהמיקום הנוכחי. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "מיקום הנפשה (בשניות)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "שינוי קנה מידה לניגון הנפשה באופן גלובלי עבור המפרק." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "" +msgstr "כלי הנפשה" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation" -msgstr "" +msgstr "הנפשה" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "מעברונים" +msgstr "עריכת מעברים..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "חוקר" +msgstr "פתיחה במפקח" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "" +msgstr "הצגת רשימת הנפשות בנגן." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "" +msgstr "הפעלה אוטומטית בטעינה" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "" +msgstr "הפעלת שכבות בצל" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Onion Skinning Options" -msgstr "הגדרות הצמדה" +msgstr "הגדרות שכבות בצל" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" -msgstr "" +msgstr "כיוונים" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" -msgstr "" +msgstr "עבר" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" -msgstr "" +msgstr "עתיד" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "" +msgstr "עומק" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "" +msgstr "צעד 1" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "" +msgstr "2 צעדים" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "" +msgstr "3 צעדים" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "" +msgstr "רק הבדלים" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "אילוץ ציור לבן" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "הכללת גיזמו (3D)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pin AnimationPlayer" -msgstr "שם הנפשה חדשה:" +msgstr "הצמדת AnimationPlayer" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" -msgstr "" +msgstr "יצירת הנפשה חדשה" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "" +msgstr "שם הנפשה:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp msgid "Error!" -msgstr "" +msgstr "שגיאה!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "" +msgstr "זמני מיזוג:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "" +msgstr "הבא (תור אוטומטי):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "" +msgstr "זמני מיזוג בין הנפשות" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Move Node" -msgstr "מצב הזזה (W)" +msgstr "הזזת מפרק" #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition exists!" msgstr "המעברון קיים!" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Add Transition" -msgstr "מעברון" +msgstr "הוספת מעברון" #: editor/plugins/animation_state_machine_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" -msgstr "" +msgstr "הוספת מפרק" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" -msgstr "" +msgstr "סוף" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "מיידי" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "סנכרון" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "בסוף" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "טיול" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "יש צורך במפרקי התחלה וסוף למעברון משנה." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "No playback resource set at path: %s." -msgstr "לא בנתיב המשאב." +msgstr "לא נקבע משאב לניגון בנתיב: %s." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Node Removed" -msgstr "הסרה" +msgstr "הוסר מפרק" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition Removed" -msgstr "מעברון" +msgstr "הוסר מעברון" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" -msgstr "" +msgstr "קביעת מפרק התחלה (ניגון אוטומטי)" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4773,334 +4784,324 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"בחירת והזזת מפרקים.\n" +"RMB להוספת מפרקים חדשים.\n" +"Shift + LMB ליצירת חיבורים." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "יצירת %s חדש" +msgstr "יצירת מפרקים חדשים." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "התחברות למפרק:" +msgstr "חיבור מפרקים." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition." -msgstr "להסיר את הקבצים הנבחרים מהמיזם? (אי אפשר לשחזר)" +msgstr "הסרת מפרק או מעברון שנבחרו." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." -msgstr "" +msgstr "הפעלה/ביטול ניגון אוטומטי של הנפשה זו בהפעלה, הפעלה מחדש או מעבר לאפס." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "קביעת הנפשת הסיום. זה שימושי למעברי משנה." #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " msgstr "מעברון: " #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Play Mode:" -msgstr "מצב גולמי" +msgstr "מצב ניגון:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "AnimationTree" -msgstr "" +msgstr "עץ הנפשה" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" -msgstr "" +msgstr "שם חדש:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "" +msgstr "קנה מידה:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#, fuzzy msgid "Fade In (s):" -msgstr "" +msgstr "דהייה/יות:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#, fuzzy msgid "Fade Out (s):" -msgstr "" +msgstr "עמעום/ים:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" -msgstr "" +msgstr "מיזוג" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix" -msgstr "" +msgstr "עירבוב" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" -msgstr "" +msgstr "התחלה מחדש אוטומטית:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" -msgstr "" +msgstr "התחלה(ות) מחדש:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "" +msgstr "התחלה(ות) מחדש באקראי:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Start!" -msgstr "" +msgstr "התחלה!" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Amount:" -msgstr "" +msgstr "כמות:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" -msgstr "" +msgstr "מיזוג 0:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 1:" -msgstr "" +msgstr "מיזוג 1:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "" +msgstr "זמן עמעום/ים (X-Fade):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Current:" -msgstr "" +msgstr "נוכחי:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Add Input" -msgstr "" +msgstr "הוספת קלט" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "" +msgstr "הפסקת קידום אוטומטי" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "" +msgstr "קביעת קידום אוטומטי" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Delete Input" -msgstr "" +msgstr "מחיקת קלט" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is valid." -msgstr "" +msgstr "עץ הנפשה חוקי." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is invalid." -msgstr "" +msgstr "עץ הנפשה לא חוקי." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation Node" -msgstr "" +msgstr "מפרק הנפשה" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "OneShot Node" -msgstr "" +msgstr "מפרק חד-פעמי" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix Node" -msgstr "" +msgstr "מפרק ערבוב" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend2 Node" -msgstr "" +msgstr "מפרק Blend2" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "מפרק Blend3" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "מפרק Blend4" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "מפרק TimeScale" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "מפרק TimeSeek" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "מפרק מעברון" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Import Animations..." -msgstr "" +msgstr "ייבוא הנפשות..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "" +msgstr "עריכת מסנני המפרק" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." -msgstr "" +msgstr "מסננים..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "" +msgstr "תוכן:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" -msgstr "" +msgstr "הצגת קבצים" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connection error, please try again." -msgstr "" +msgstr "שגיאת חיבור, אנא נסה שוב." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "" +msgstr "לא ניתן להתחבר למארח:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "" +msgstr "אין תגובה מהמארח:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" -msgstr "" +msgstr "לא נמצאה כתובת המארח:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "" +msgstr "בקשה נכשלה, הוחזר קוד:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "הבקשה נכשלה." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "לא ניתן להסיר:" +msgstr "לא ניתן לשמור התגובה ל:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "שגיאת כתיבה." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "" +msgstr "הבקשה נכשלה, יותר מדי הפניות מחדש" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." -msgstr "לולאת הפניות." +msgstr "לולאת הפניות מחדש." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "הבקשה נכשלה." +msgstr "הבקשה נכשלה, עבר הזמן" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "זמן" +msgstr "עבר הזמן." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "" +msgstr "ההאש (hash) שירד לא טוב, כנראה שהקובץ שונה." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "" +msgstr "צפוי:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" -msgstr "" +msgstr "התקבל:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "" +msgstr "בדיקת האש sha256 נכשלה" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "" +msgstr "שגיאת הורדת נכס:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading (%s / %s)..." -msgstr "מתבצעת הורדה" +msgstr "הורדה (%s% / s)..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Downloading..." -msgstr "מתבצעת הורדה" +msgstr "הורדה…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." -msgstr "" +msgstr "מברר כתובת..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" -msgstr "" +msgstr "שגיאה בביצוע בקשה" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" -msgstr "" +msgstr "סרק" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Install..." -msgstr "התקנה" +msgstr "התקנה..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "" +msgstr "ניסיון חוזר" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" -msgstr "" +msgstr "שגיאת הורדה" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "" +msgstr "הורדה של נכס זה כבר מתבצעת!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" -msgstr "" +msgstr "עודכן לאחרונה" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "" +msgstr "הכי פחות מעודכן" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (A-Z)" -msgstr "" +msgstr "שם (א-ת)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (Z-A)" -msgstr "" +msgstr "שם (ת-א)" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "License (A-Z)" -msgstr "רישיון" +msgstr "רישיון (א-ת)" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "License (Z-A)" -msgstr "רישיון" +msgstr "רישיון (ת-א)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" -msgstr "" +msgstr "ראשון" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Previous" -msgstr "הלשונית הקודמת" +msgstr "הקודם" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Next" @@ -5108,59 +5109,56 @@ msgstr "הבא" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "אחרון" #: editor/plugins/asset_library_editor_plugin.cpp msgid "All" -msgstr "" +msgstr "הכל" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "" +msgstr "אין תוצאות עבור \"%s\"." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Import..." -msgstr "ייבוא" +msgstr "ייבוא..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Plugins..." -msgstr "" +msgstr "תוספים..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" -msgstr "" +msgstr "מיון:" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" -msgstr "" +msgstr "קטגוריה:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "" +msgstr "אתר:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "ייבוא" +msgstr "תמיכה" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" -msgstr "" +msgstr "רשמי" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "" +msgstr "בבדיקה" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "טעינה" +msgstr "בטעינה…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "" +msgstr "קובץ ZIP של נכסים" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5168,58 +5166,60 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" +"אין אפשרות לקבוע נתיב שמירה עבור תמונות lightmap.\n" +"שמור/י את הסצינה שלך (כדי שתמונות יישמרו באותה תיקייה), או בחר/י נתיב שמירה " +"ממאפייני BakedLightmap." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." -msgstr "" +msgstr "אין רשתות לאפייה. ודא/י שהם מכילים ערוץ UV2 והדגל 'Bake Light' מאופשר." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." -msgstr "" +msgstr "יצירת תמונות lightmap נכשלה, ודא/י שהנתיב ניתן לכתיבה." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "" +msgstr "אפיית Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Preview" -msgstr "" +msgstr "תצוגה מקדימה" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" -msgstr "" +msgstr "הגדרת הצמדה" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Offset:" -msgstr "" +msgstr "היסט רשת:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Step:" -msgstr "" +msgstr "שלב רשת:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Primary Line Every:" -msgstr "" +msgstr "קו ראשי כל:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "steps" -msgstr "" +msgstr "צעדים" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "" +msgstr "היסט סיבוב:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "" +msgstr "צעד סיבוב:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Step:" -msgstr "יחס מתיחה:" +msgstr "צעד קנה מידה:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" @@ -8443,10 +8443,25 @@ msgstr "יצירת %s חדש" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "סצנה חדשה" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "יצירת מצולע" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "הזזת מצולע" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "מחיקת הנבחר" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9883,6 +9898,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12101,6 +12120,10 @@ msgstr "" "נתיב לא חוקי לערכת פיתוח אנדרואיד עבור בנייה מותאמת אישית בהגדרות העורך." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12386,6 +12409,26 @@ msgstr "" "הנפשת CPUParticles2D מחייבת שימוש ב-CanvasItemMaterial עם \"הנפשת חלקיקים\" " "מאופשרת." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12689,6 +12732,26 @@ msgstr "" "הפיזיקה בזמן ריצה.\n" "במקום זאת יש לשנות את גודל צורות ההתנגשות של הצאצאים." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12921,6 +12984,16 @@ msgid "Constants cannot be modified." msgstr "אי אפשר לשנות קבועים." #, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "כבר קיימים קובץ או תיקייה בשם הזה." + +#~ msgid "Error trying to save layout!" +#~ msgstr "שמירת הפריסה נכשלה!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "ברירת המחדל של עורך הפריסה נדרסה." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "העברה למעלה" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 26513d484f..03fbdc1971 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -11,12 +11,13 @@ # Devashishsingh98 <devashishsingh98@gmail.com>, 2019. # Shirious <sad3119823@gmail.com>, 2020. # Abhay Patel <Traumaticbean@protonmail.com>, 2020. +# Bishwajeet Parhi <bishwajeet.techmaster@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-24 06:48+0000\n" -"Last-Translator: Shirious <sad3119823@gmail.com>\n" +"PO-Revision-Date: 2020-11-20 23:08+0000\n" +"Last-Translator: Bishwajeet Parhi <bishwajeet.techmaster@gmail.com>\n" "Language-Team: Hindi <https://hosted.weblate.org/projects/godot-engine/godot/" "hi/>\n" "Language: hi\n" @@ -24,7 +25,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1029,14 +1030,19 @@ msgid "Owners Of:" msgstr "के स्वामी:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "परियोजना से चयनित फ़ाइलों को हटा दें? (बहाल नहीं किया जा सकता है)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "निकाली गई फ़ाइलों को दूसरे संसाधनों द्वारा उनके लिए काम करने के लिए आवश्यक है\n" "वैसे भी उन्हें निकालें? (कोई पूर्ववत नहीं)" @@ -1083,7 +1089,7 @@ msgstr "अनाथ संसाधन एक्सप्लोरर" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2293,19 +2299,25 @@ msgid "Error saving TileSet!" msgstr "त्रुटि बचत टाइलसेट!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "लेआउट को बचाने की कोशिश कर रहा त्रुटि!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "डिफ़ॉल्ट संपादक लेआउट अभिभूत।" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "लेआउट नाम नहीं मिला!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "आधार सेटिंग्स के लिए डिफ़ॉल्ट लेआउट बहाल।" #: editor/editor_node.cpp @@ -3658,6 +3670,16 @@ msgid "Name contains invalid characters." msgstr "नाम मे अमान्य अक्षर मौजूद." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "फ़ाइल का नाम बदल रहे है:" @@ -3705,14 +3727,6 @@ msgstr "निर्भरित फ़ाइलें संपादित क msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "डुप्लिकेट..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3740,10 +3754,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "डुप्लिकेट..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "औटोलोड हिलाइये" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3777,7 +3797,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -6633,14 +6656,12 @@ msgid "Error Saving" msgstr "लोड होने मे त्रुटि:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error importing theme." -msgstr "लोड होने मे त्रुटि:" +msgstr "थिम लोड होने मे त्रुटि:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error Importing" -msgstr "लोड होने मे त्रुटि:" +msgstr "इंपोर्ट लोड होने मे त्रुटि:" #: editor/plugins/script_editor_plugin.cpp msgid "New Text File..." @@ -6867,9 +6888,8 @@ msgid "Debugger" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" -msgstr "खोज कर:" +msgstr "खोज के परिणाम" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Scripts" @@ -6899,9 +6919,8 @@ msgid "[Ignore]" msgstr "" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "रेखा:" +msgstr "रेखा" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -8218,10 +8237,25 @@ msgstr "एक नया बनाएं" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "नया दृश्य" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "सदस्यता बनाएं" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "सदस्यता बनाएं" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "चयनित फ़ाइलें हटाएं" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8518,9 +8552,8 @@ msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Output" -msgstr "पसंदीदा:" +msgstr "परिणाम डालो" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" @@ -8539,9 +8572,8 @@ msgid "Sampler" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add input port" -msgstr "पसंदीदा:" +msgstr "ऐड इनपुट पोर्ट" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" @@ -9633,6 +9665,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11836,6 +11872,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12095,6 +12135,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12355,6 +12415,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12562,6 +12642,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Error trying to save layout!" +#~ msgstr "लेआउट को बचाने की कोशिश कर रहा त्रुटि!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "डिफ़ॉल्ट संपादक लेआउट अभिभूत।" + #, fuzzy #~ msgid "Add initial export..." #~ msgstr "पसंदीदा:" diff --git a/editor/translations/hr.po b/editor/translations/hr.po index f5d71148a5..c762ff0562 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-10-19 21:08+0000\n" +"PO-Revision-Date: 2020-11-17 11:07+0000\n" "Last-Translator: LeoClose <leoclose575@gmail.com>\n" "Language-Team: Croatian <https://hosted.weblate.org/projects/godot-engine/" "godot/hr/>\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1011,14 +1011,19 @@ msgid "Owners Of:" msgstr "Vlasnici:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Ukloni odabrane datoteke iz projekta? (Neće ih biti moguće vratiti)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Datoteke koje se uklanjaju su nužne drugim resursima kako bi ispravno " "radili.\n" @@ -1066,7 +1071,7 @@ msgstr "Istraživač napuštenih resursa" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1644,15 +1649,15 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" -msgstr "" +msgstr "(Editor Onemogućen, Svojstva Onemogućena)" #: editor/editor_feature_profile.cpp msgid "(Properties Disabled)" -msgstr "" +msgstr "(Svojstva Onemogućena)" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled)" -msgstr "" +msgstr "(Editor Onemogućen)" #: editor/editor_feature_profile.cpp msgid "Class Options:" @@ -1660,15 +1665,15 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" -msgstr "" +msgstr "Omogući Kontekstni Editor" #: editor/editor_feature_profile.cpp msgid "Enabled Properties:" -msgstr "" +msgstr "Omogućena Svojstva:" #: editor/editor_feature_profile.cpp msgid "Enabled Features:" -msgstr "" +msgstr "Omogućene Značajke:" #: editor/editor_feature_profile.cpp msgid "Enabled Classes:" @@ -1676,13 +1681,14 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." -msgstr "" +msgstr "Format datoteke \"%s\" je nevažeći, uvoženje prekinuto." #: editor/editor_feature_profile.cpp msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." msgstr "" +"Profil '% s' već postoji. Prvo ga uklonite prije uvoza, uvoz je prekinut." #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." @@ -1694,54 +1700,54 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Current Profile:" -msgstr "" +msgstr "Trenutni Profil:" #: editor/editor_feature_profile.cpp msgid "Make Current" -msgstr "" +msgstr "Učini Aktualnim" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/version_control_editor_plugin.cpp msgid "New" -msgstr "" +msgstr "Novo" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "" +msgstr "Uvoz" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" -msgstr "" +msgstr "Izvoz" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" -msgstr "" +msgstr "Dostupni Profili:" #: editor/editor_feature_profile.cpp msgid "Class Options" -msgstr "" +msgstr "Opcije Klase" #: editor/editor_feature_profile.cpp msgid "New profile name:" -msgstr "" +msgstr "Novi naziv profila:" #: editor/editor_feature_profile.cpp msgid "Erase Profile" -msgstr "" +msgstr "Brisanje Profila" #: editor/editor_feature_profile.cpp msgid "Godot Feature Profile" -msgstr "" +msgstr "Godot Značajke Profila" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" -msgstr "" +msgstr "Uvoz Profila" #: editor/editor_feature_profile.cpp msgid "Export Profile" -msgstr "" +msgstr "Izvoz Profila" #: editor/editor_feature_profile.cpp msgid "Manage Editor Feature Profiles" @@ -2246,11 +2252,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2258,7 +2269,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3537,6 +3548,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3584,14 +3605,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3619,10 +3632,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Premjesti Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3656,7 +3675,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8045,10 +8067,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Brisanje Odabranih Ključeva" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9428,6 +9463,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11593,6 +11632,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11845,6 +11888,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12105,6 +12168,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index 9f62027231..bd67e49dfd 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -12,12 +12,14 @@ # sztrovacsek <magadeve@gmail.com>, 2019. # Ács Zoltán <acszoltan111@gmail.com>, 2020. # cefrebevalo <szmarci711@gmail.com>, 2020. +# thekeymethod <csokan.andras87@protonmail.ch>, 2020. +# Czmorek Dávid <czmdav.soft@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-22 03:23+0000\n" -"Last-Translator: Ács Zoltán <acszoltan111@gmail.com>\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" +"Last-Translator: Czmorek Dávid <czmdav.soft@gmail.com>\n" "Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/" "godot/hu/>\n" "Language: hu\n" @@ -25,7 +27,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -34,9 +36,8 @@ msgstr "" "Érvénytelen típusargumentum a convert()-hez használjon TYPE_* konstansokat." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Expected a string of length 1 (a character)." -msgstr "Egy hosszúságú karaktersorozat szükséges." +msgstr "Szöveg elvárt hossza 1 ( egy karakter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -58,7 +59,7 @@ msgstr "Érvénytelen operandusok az %s, %s és %s operátorhoz." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "" +msgstr "Érvénytelen %s típusú index %s típusú alaphoz" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" @@ -66,7 +67,7 @@ msgstr "Érvénytelen nevezett index '%s' %s alaptípushoz" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "" +msgstr "Érvénytelen argumentumok a(z) '%s' építőben" #: core/math/expression.cpp msgid "On call to '%s':" @@ -122,127 +123,120 @@ msgstr "Érték:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "Kulcs beszúrása" +msgstr "Kulcs Beszúrása Ide" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" -msgstr "Kiválasztott kulcs(ok) megkettőzése" +msgstr "Kiválasztott Kulcs(ok) Megkettőzése" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "Kiválasztott kulcs(ok) törlése" +msgstr "Kiválasztott Kulcs(ok) Törlése" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "Bézier pont hozzáadása" +msgstr "Bézier Pont Hozzáadása" #: editor/animation_bezier_editor.cpp msgid "Move Bezier Points" -msgstr "Bézier pontok áthelyezése" +msgstr "Bézier Pontok Mozgatása" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Animáció kulcsok megkettőzése" +msgstr "Animáció - Kulcsok Megkettőzése" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "Animáció kulcsok törlése" +msgstr "Animáció - Kulcsok Törlése" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Animáció kulcsképkocka idő változtatás" +msgstr "Animáció - Kulcskép Idő Változtatása" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "Animáció átmenet változtatása" +msgstr "Animáció - Átmenet Változtatása" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "Animáció transzformáció változtatás" +msgstr "Animáció - Transzformáció Változtatása" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Animáció kulcsképkocka érték változtatás" +msgstr "Animáció - Kulcskép Érték Változtatása" #: editor/animation_track_editor.cpp msgid "Anim Change Call" -msgstr "Animáció hívás változtatás" +msgstr "Animáció - Hívás Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Animáció kulcsképkocka idő változtatás" +msgstr "Animáció - Több Kulcskép Idő Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Animáció átmenet változtatása" +msgstr "Animáció - Több Átmenet Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Animáció transzformáció változtatás" +msgstr "Animáció - Több Transzformáció Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Animáció kulcsképkocka érték változtatás" +msgstr "Animáció - Több Kulcskép Érték Változtatása" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Animáció hívás változtatás" +msgstr "Animáció - Több Hívás Változtatása" #: editor/animation_track_editor.cpp msgid "Change Animation Length" -msgstr "Animáció hosszának változtatása" +msgstr "Animáció Hosszának Változtatása" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "Animációs ciklus változtatása" +msgstr "Animáció Ismétlésének Változtatása" #: editor/animation_track_editor.cpp msgid "Property Track" -msgstr "Tulajdonságkövetés" +msgstr "Tulajdonság Sáv" #: editor/animation_track_editor.cpp msgid "3D Transform Track" -msgstr "" +msgstr "3D Transzform Sáv" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "Hívás módszer követése" +msgstr "Metódus Hívás Sáv" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "Bézier görbe nyomvonal" +msgstr "Bézier Görbe Sáv" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Playback Track" -msgstr "Hang lejátszás követése" +msgstr "Hang Lejátszás Sáv" #: editor/animation_track_editor.cpp msgid "Animation Playback Track" -msgstr "" +msgstr "Animáció Lejátszás Sáv" #: editor/animation_track_editor.cpp msgid "Animation length (frames)" -msgstr "Animáció hossza (képkockákban)" +msgstr "Animáció hossza (képkockák)" #: editor/animation_track_editor.cpp msgid "Animation length (seconds)" -msgstr "Animáció hossza (másodpercben)" +msgstr "Animáció hossza (másodpercek)" #: editor/animation_track_editor.cpp msgid "Add Track" -msgstr "Nyomvonal hozzáadása" +msgstr "Sáv Hozzáadása" #: editor/animation_track_editor.cpp msgid "Animation Looping" -msgstr "Animáció ismétlése" +msgstr "Animáció Ismétlése" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -250,39 +244,36 @@ msgid "Functions:" msgstr "Függvények:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Audio Clips:" -msgstr "Audió klipek:" +msgstr "Hang Klipek:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "Animáció klipek:" +msgstr "Animáció Klipek:" #: editor/animation_track_editor.cpp msgid "Change Track Path" -msgstr "" +msgstr "Sáv Útvonal Változtatás" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle this track on/off." -msgstr "A sáv ki/be kapcsolása." +msgstr "Jelen sáv ki/be kapcsolása." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Frissítés Módja (Hogyan van ez a tulajdonság beállítva)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" -msgstr "Interpolációs mód" +msgstr "Interpolálás Módja" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Összefűzés Módja (Vége és kezdete interpolálása ismétlés esetén)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Kiválasztott nyomvonal eltávolítása." +msgstr "Jelen sáv eltávolítása." #: editor/animation_track_editor.cpp msgid "Time (s): " @@ -290,7 +281,7 @@ msgstr "Idő (mp): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "" +msgstr "Sáv Engedélyezés Kapcsolása" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -298,7 +289,7 @@ msgstr "Folyamatos" #: editor/animation_track_editor.cpp msgid "Discrete" -msgstr "Diszkrét" +msgstr "Pontozott" #: editor/animation_track_editor.cpp msgid "Trigger" @@ -323,48 +314,48 @@ msgstr "Köbös" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Átmenet Nélküli Interpoláció" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Folytatólagos Interpoláció" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Kulcs beszúrása" +msgstr "Kulcs Beszúrása" #: editor/animation_track_editor.cpp msgid "Duplicate Key(s)" -msgstr "Kulcs(ok) megkettőzése" +msgstr "Kulcs(ok) Megkettőzése" #: editor/animation_track_editor.cpp msgid "Delete Key(s)" -msgstr "Kulcs(ok) törlése" +msgstr "Kulcs(ok) Törlése" #: editor/animation_track_editor.cpp msgid "Change Animation Update Mode" -msgstr "Animáció frissítés módjának megváltoztatása" +msgstr "Animáció Frissítés Módjának Változtatása" #: editor/animation_track_editor.cpp msgid "Change Animation Interpolation Mode" -msgstr "" +msgstr "Animáció Interpolálás Módjának Változtatása" #: editor/animation_track_editor.cpp msgid "Change Animation Loop Mode" -msgstr "Animáció hurok mód változtatása" +msgstr "Animáció Összefűzés Módjának Változtatása" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "Animáció nyomvonal eltávolítás" +msgstr "Animáció Sáv Eltávolítása" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "ÚJ nyomvonalat hoz létre a következőhöz: %s, és beszúrja a kulcsot?" +msgstr "Létrehoz ÚJ sávot a következőhöz: %s, és beszúrja a kulcsot?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "Létrehoz %d ÚJ nyomvonalat és beszúrja a kulcsokat?" +msgstr "Létrehoz %d ÚJ sávot és beszúrja a kulcsokat?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp @@ -380,36 +371,39 @@ msgstr "Létrehozás" #: editor/animation_track_editor.cpp msgid "Anim Insert" -msgstr "Animáció beszúrása" +msgstr "Animáció - Beszúrás" #: editor/animation_track_editor.cpp -#, fuzzy msgid "AnimationPlayer can't animate itself, only other players." -msgstr "Az AnimationPlayer nem tudja animálni önmagát, csak más játékosokat." +msgstr "" +"AnimationPlayer nem tudja önmagát animálni, csak más AnimationPlayer " +"elemeket." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "Animáció létrehozása és beillesztése" +msgstr "Animáció - Létrehozás és Beillesztés" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" -msgstr "Animáció nyomvonal és kulcs beszúrása" +msgstr "Animáció - Sáv és Kulcs Beszúrása" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "Animáció kulcs beillesztés" +msgstr "Animáció - Kulcs Beszúrása" #: editor/animation_track_editor.cpp msgid "Change Animation Step" -msgstr "Animáció léptékének megváltoztatása" +msgstr "Animáció Léptékének Változtatása" #: editor/animation_track_editor.cpp msgid "Rearrange Tracks" -msgstr "" +msgstr "Sávok Újrarendezése" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." msgstr "" +"A transzform sávok csak a Spatial típusú vagy azt bővítő elemekre " +"vonatkoznak." #: editor/animation_track_editor.cpp msgid "" @@ -418,59 +412,64 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Hang sávok csak a következő típusú node-ra mutathatnak:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Animáció sávok csak AnimationPlayer node-ra mutathatnak." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" +"Egy AnimationPlayer nem tudja önmagát animálni, csak más AnimationPlayer " +"node-okat." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Új sáv hozzáadása nem lehetséges gyökér nélkül" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "" +msgstr "Érvénytelen sáv Bezier számára (nincs megfelelő al-tulajdonság)" #: editor/animation_track_editor.cpp msgid "Add Bezier Track" -msgstr "" +msgstr "Beizer Sáv Hozzáadása" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Sáv elérési útja helytelen, kulcs hozzáadása nem lehetséges." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Sáv típusa nem Spatial, kulcs hozzáadása nem lehetséges" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" -msgstr "" +msgstr "Transzform Sáv Kulcs hozzáadása" #: editor/animation_track_editor.cpp msgid "Add Track Key" -msgstr "Nyomvonal kulcs hozzáadása" +msgstr "Sáv Kulcs Hozzáadása" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Sáv elérési útja helytelen, kulcs hozzáadása nem lehetséges." #: editor/animation_track_editor.cpp msgid "Add Method Track Key" -msgstr "Metódus nyomvonal kulcs beillesztése" +msgstr "Metódus Sáv Kulcs Hozzáadása" #: editor/animation_track_editor.cpp msgid "Method not found in object: " msgstr "A metódus nem található az objektumban: " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Move Keys" -msgstr "Animáció kulcsok mozgatása" +msgstr "Animáció - Kulcsok Mozgatása" #: editor/animation_track_editor.cpp msgid "Clipboard is empty" @@ -478,17 +477,17 @@ msgstr "A vágólap üres" #: editor/animation_track_editor.cpp msgid "Paste Tracks" -msgstr "Nyomvonalak beillesztése" +msgstr "Sávok beillesztése" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Scale Keys" -msgstr "Animáció kulcsok nyújtás" +msgstr "Animáció - Kulcsok Nyújtása" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." msgstr "" +"Ez az opció nem működik Bezier szerkesztésre, mert ez csak egyetlen sáv." #: editor/animation_track_editor.cpp msgid "" @@ -502,6 +501,15 @@ msgid "" "Alternatively, use an import preset that imports animations to separate " "files." msgstr "" +"Ez az animáció egy importált jelenethez tartozik, ezért az importált sávok " +"módosításai nem lesznek mentve.\n" +"\n" +"Egyedi sávok hozzáadásának engedélyezéséhez navigáljon a jelenet importálás " +"beállításaihoz, állítsa be\n" +"\"Animation > Storage\" értékét \"Files\"-ra, engedélyezze a(z) \"Animation " +"> Keep Custom Tracks\" opciót, majd importálja újra.\n" +"Egy másik megoldás, ha olyan import előbeállítást használ, ami az " +"animációkat külön fájlba importálja." #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" @@ -515,11 +523,12 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Csak a fában kiválosztott node-ok sávjainak megjelenítése." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." msgstr "" +"Sávok csoportosítása node-ok szerint, vagy megjelenítés egyszerű listaként." #: editor/animation_track_editor.cpp msgid "Snap:" @@ -554,44 +563,43 @@ msgstr "Animáció tulajdonságok." #: editor/animation_track_editor.cpp msgid "Copy Tracks" -msgstr "Nyomvonalak másolása" +msgstr "Sávok Másolása" #: editor/animation_track_editor.cpp msgid "Scale Selection" -msgstr "Kijelölés átméretezése" +msgstr "Kijelölés Nyújtása" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "Átméretezés a kurzortól" +msgstr "Nyújtás a Kurzortól" #: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "Kijelölés megkettőzése" +msgstr "Kijelölés Megkettőzése" #: editor/animation_track_editor.cpp msgid "Duplicate Transposed" -msgstr "Áthelyezettek megkettőzése" +msgstr "Áthelyezettek Megkettőzése" #: editor/animation_track_editor.cpp msgid "Delete Selection" -msgstr "Kijelölés törlése" +msgstr "Kijelölés Törlése" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" -msgstr "Ugrás a következő lépésre" +msgstr "Ugrás a Következő Lépésre" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "Ugrás az előző lépésre" +msgstr "Ugrás az Előző Lépésre" #: editor/animation_track_editor.cpp msgid "Optimize Animation" -msgstr "Animáció optimalizálása" +msgstr "Animáció Optimalizálása" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation" -msgstr "Animáció tisztítása" +msgstr "Animáció Tisztítása" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" @@ -1037,14 +1045,19 @@ msgid "Owners Of:" msgstr "Tulajdonosai:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Eltávolítja a kiválasztott fájlokat a projektből? (nem visszavonható)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Az eltávolítandó fájlokat szükségelik más források a működésükhöz.\n" "Eltávolítja őket ennek ellenére? (nem visszavonható)" @@ -1091,7 +1104,7 @@ msgstr "Árva Forrás Kezelő" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2293,19 +2306,25 @@ msgid "Error saving TileSet!" msgstr "Hiba TileSet mentésekor!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Hiba történt az elrendezés mentésekor!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Alapértelmezett szerkesztő elrendezés felülírva." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Elrendezés neve nem található!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "" "Az alapértelmezett elrendezés vissza lett állítva az alap beállításokra." @@ -3393,7 +3412,7 @@ msgstr "Nem sikerült a szkript futtatása:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "Nem felejtette el a '_run' metódust?" +msgstr "Elfelejtette a '_run' metódust?" #: editor/editor_spin_slider.cpp msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." @@ -3514,7 +3533,7 @@ msgstr "A kérés sikertelen." #: editor/export_template_manager.cpp msgid "Redirect Loop." -msgstr "Átirányítási Hurok." +msgstr "Ciklus átiránítása." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3676,6 +3695,16 @@ msgid "Name contains invalid characters." msgstr "A név érvénytelen karaktereket tartalmaz." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Fájl átnevezése:" @@ -3723,14 +3752,6 @@ msgstr "Függőségek Szerkesztése..." msgid "View Owners..." msgstr "Tulajdonosok Megtekintése..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Átnevezés..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Megkettőzés..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Áthelyezés..." @@ -3758,11 +3779,17 @@ msgid "Collapse All" msgstr "Összes becsukása" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Átnevezés" +msgid "Duplicate..." +msgstr "Megkettőzés..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "AutoLoad Áthelyezése" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Átnevezés..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3797,8 +3824,11 @@ msgid "Move" msgstr "Áthelyezés" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Ezen a helyen már van azonos nevű fájl vagy mappa." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Átnevezés" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3934,15 +3964,15 @@ msgstr "Importálás Külön Anyagokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "Importálás Külön Objektumokkal" +msgstr "Importálás külön objektumokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "Importálás Külön Objektumokkal És Anyagokkal" +msgstr "Importálás külön objektumokkal és anyagokkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "Importálás Külön Objektumokkal És Animációkkal" +msgstr "Importálás külön objektumokkal és animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" @@ -3950,7 +3980,7 @@ msgstr "Importálás Külön Anyagokkal És Animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "Importálás Külön Objektumokkal, Anyagokkal És Animációkkal" +msgstr "Importálás külön objektumokkal, anyagokkal és animációkkal" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" @@ -4098,15 +4128,15 @@ msgstr "A jelenleg szerkesztett erőforrás elmentése." #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "Ugrás az előzőleg módosított objektumra a történelemben." +msgstr "Ugrás az előzőleg módosított objektumra az előzményekben." #: editor/inspector_dock.cpp msgid "Go to the next edited object in history." -msgstr "Ugrás a következő módosított objektumra a történelemben." +msgstr "Ugrás a következő módosított objektumra az előzményekben." #: editor/inspector_dock.cpp msgid "History of recently edited objects." -msgstr "A nemrég módosított objektumok történelme." +msgstr "A nemrég módosított objektumok előzményei." #: editor/inspector_dock.cpp msgid "Object properties." @@ -4935,7 +4965,7 @@ msgstr "Kérés sikertelen, túl sok átirányítás" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect loop." -msgstr "Hurok átirányítása." +msgstr "Ciklus átirányítása." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, timeout" @@ -5445,8 +5475,8 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" -"Lista mutatási minden objektumról a kattintás helye alatt\n" -"(ugyanaz, mint Alt + Jobb Egérgomb Kiválasztó Módban)." +"Lista megjelenítése minden objektumról a kattintás helyénél\n" +"(ugyanaz, mint Alt + jobb egérgomb kiválasztó módban)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -5532,12 +5562,12 @@ msgstr "Illesztés segédvonalakhoz" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "A kiválasztott objektum zárolása (mozgathatatlanná tétele)." +msgstr "A kiválasztott objektum zárolása (nem lesz mozgatható)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "A kiválasztott objektum feloldása (mozgathatóvá tétele)." +msgstr "A kiválasztott objektum feloldása (mozgatható lesz)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6757,12 +6787,13 @@ msgid "Filter scripts" msgstr "Szkriptek szűrése" #: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "Ábécészerinti rendezés változtatása a metóduslistában." #: editor/plugins/script_editor_plugin.cpp msgid "Filter methods" -msgstr "" +msgstr "Metódusok szűrése" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -6926,7 +6957,7 @@ msgstr "Legutóbbi szkriptek törlése" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" -msgstr "" +msgstr "Kapcsolatok a metódushoz:" #: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" @@ -7228,7 +7259,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "" +msgstr "Rajzolt objektumok" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" @@ -7764,7 +7795,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" -msgstr "" +msgstr "Ciklus" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy @@ -8242,10 +8273,25 @@ msgid "Create a new rectangle." msgstr "Új téglalap létrehozása." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Új Scene" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Új sokszög létrehozása." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Sokszög Mozgatása" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Kijelöltek törlése" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -8454,7 +8500,6 @@ msgid "Version Control System" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Initialize" msgstr "Inicializálás" @@ -8472,7 +8517,7 @@ msgstr "Változások" #: editor/plugins/version_control_editor_plugin.cpp msgid "Modified" -msgstr "" +msgstr "Módosított" #: editor/plugins/version_control_editor_plugin.cpp msgid "Renamed" @@ -9633,6 +9678,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9774,9 +9823,8 @@ msgid "Scan" msgstr "Keresés" #: editor/project_manager.cpp -#, fuzzy msgid "Select a Folder to Scan" -msgstr "Válasszon egy beolvasandó mappát" +msgstr "Válassza ki a mappát a kereséshez" #: editor/project_manager.cpp msgid "New Project" @@ -9796,7 +9844,7 @@ msgstr "Újraindítás most" #: editor/project_manager.cpp msgid "Can't run project" -msgstr "Nem lehet futtatni a projektet" +msgstr "A projekt futtatása nem sikerült" #: editor/project_manager.cpp msgid "" @@ -9817,11 +9865,11 @@ msgstr "Kulcs " #: editor/project_settings_editor.cpp msgid "Joy Button" -msgstr "" +msgstr "Joy gomb" #: editor/project_settings_editor.cpp msgid "Joy Axis" -msgstr "" +msgstr "Joy tengely" #: editor/project_settings_editor.cpp msgid "Mouse Button" @@ -9859,7 +9907,7 @@ msgstr "Eszköz" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." -msgstr "Nyomj meg egy gombot..." +msgstr "Nyomjon le egy billentyűt" #: editor/project_settings_editor.cpp #, fuzzy @@ -9969,7 +10017,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Delete Item" -msgstr "" +msgstr "Elem törlése" #: editor/project_settings_editor.cpp msgid "" @@ -10180,20 +10228,19 @@ msgstr "" #: editor/property_selector.cpp msgid "Select Virtual Method" -msgstr "" +msgstr "Virtuális metódus kiválasztása" #: editor/property_selector.cpp msgid "Select Method" -msgstr "" +msgstr "Metódus kiválasztása" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp msgid "Batch Rename" msgstr "Csoportos átnevezés" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "Csere: " +msgstr "Csere:" #: editor/rename_dialog.cpp msgid "Prefix:" @@ -10304,9 +10351,8 @@ msgid "Reset" msgstr "Visszaállítás" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "Reguláris kifejezés használata" +msgstr "Reguláris Kifejezési Hiba:" #: editor/rename_dialog.cpp #, fuzzy @@ -11129,7 +11175,7 @@ msgstr "" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "Nem alapul szkripten" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a resource file" @@ -11137,19 +11183,21 @@ msgstr "" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "" +msgstr "Érvénytelen példány szótár formátum (hiányzó @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" +"Érvénytelen példány szótár formátum (nem lehet kódot betölteni a @path " +"helyén)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "" +msgstr "Érvénytelen példány szótár formátum (hibás kód a @path helyén)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" -msgstr "" +msgstr "Érvénytelen példány szótár (érvénytelen alosztályok)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." @@ -11445,7 +11493,7 @@ msgstr "A név nem érvényes azonosító:" #: modules/visual_script/visual_script_editor.cpp msgid "Name already in use by another func/var/signal:" -msgstr "" +msgstr "A nevet már használja egy függvény/változó/jelzés:" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Function" @@ -11485,7 +11533,7 @@ msgstr "Kimeneti port eltávolítása" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" -msgstr "Kifejezés módosítása" +msgstr "Kifejezés változtatása" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" @@ -11521,11 +11569,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "" +msgstr "Előre betöltött node hozzáadása" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "" +msgstr "Node(ok) hozzáadása a fáról" #: modules/visual_script/visual_script_editor.cpp msgid "" @@ -11663,11 +11711,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" -msgstr "Kijelöltek törlése" +msgstr "Kiválasztottak törlése" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "" +msgstr "Node típus keresése" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" @@ -11808,6 +11856,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12064,6 +12116,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12324,6 +12396,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12531,6 +12623,15 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Ezen a helyen már van azonos nevű fájl vagy mappa." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Hiba történt az elrendezés mentésekor!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Alapértelmezett szerkesztő elrendezés felülírva." + #~ msgid "Move pivot" #~ msgstr "Forgatási pont áthelyezése" diff --git a/editor/translations/id.po b/editor/translations/id.po index f27203f1d7..1e88404be4 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -27,12 +27,13 @@ # zephyroths <ridho.hikaru@gmail.com>, 2020. # Richard Urban <redasuio1@gmail.com>, 2020. # yusuf afandi <afandi.yusuf.04@gmail.com>, 2020. +# Habib Rohman <revolusi147id@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-03 15:29+0000\n" -"Last-Translator: zephyroths <ridho.hikaru@gmail.com>\n" +"PO-Revision-Date: 2020-11-13 22:59+0000\n" +"Last-Translator: Habib Rohman <revolusi147id@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -40,7 +41,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1051,14 +1052,19 @@ msgid "Owners Of:" msgstr "Pemilik Dari:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Hapus berkas yang dipilih dari proyek? (tidak bisa dibatalkan)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "File-file yang telah dihapus diperlukan oleh resource lain agar mereka dapat " "bekerja.\n" @@ -1106,7 +1112,7 @@ msgstr "Penjelajah Resource Orphan" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1172,7 +1178,6 @@ msgid "Silver Sponsors" msgstr "Donatur Perak" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" msgstr "Donatur Perunggu" @@ -2325,19 +2330,25 @@ msgid "Error saving TileSet!" msgstr "Error menyimpan TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error mencoba untuk menyimpan layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Tata letak baku editor ditimpa." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nama layout tidak ditemukan!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Mengembalikan semula layout default ke pengaturan-pengaturan awal." #: editor/editor_node.cpp @@ -3721,6 +3732,16 @@ msgid "Name contains invalid characters." msgstr "Nama mengandung karakter tidak valid." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Mengubah nama berkas dengan:" @@ -3768,14 +3789,6 @@ msgstr "Sunting Dependensi..." msgid "View Owners..." msgstr "Tampilkan Pemilik Berkas..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Ubah Nama..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Gandakan..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Pindahkan ke..." @@ -3803,11 +3816,17 @@ msgid "Collapse All" msgstr "Lipat Semua" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Ubah Nama" +msgid "Duplicate..." +msgstr "Gandakan..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Pindahkan Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Ubah Nama..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3842,8 +3861,11 @@ msgid "Move" msgstr "Pindahkan" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Sudah ada nama berkas atau folder seperti itu di lokasi ini." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Ubah Nama" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8333,10 +8355,25 @@ msgid "Create a new rectangle." msgstr "Buat persegi panjang baru." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Cat Persegi Panjang" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Buat poligon baru." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Geser Poligon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Hapus yang Dipilih" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Jaga poligon agar tetap di dalam wilayah Rect." @@ -9822,6 +9859,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12105,6 +12146,10 @@ msgstr "" "Editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12394,6 +12439,26 @@ msgstr "" "Animasi CPUParticles2D membutuhkan penggunaan CanvasItemMaterial dengan " "\"Animasi Partikel\" diaktifkan." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12711,6 +12776,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -12953,6 +13038,15 @@ msgstr "Variasi hanya bisa ditetapkan dalam fungsi vertex." msgid "Constants cannot be modified." msgstr "Konstanta tidak dapat dimodifikasi." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Sudah ada nama berkas atau folder seperti itu di lokasi ini." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error mencoba untuk menyimpan layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Tata letak baku editor ditimpa." + #~ msgid "Move pivot" #~ msgstr "Pindahkan poros" diff --git a/editor/translations/is.po b/editor/translations/is.po index 446b94d017..e6f66312bc 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -2,15 +2,15 @@ # Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. -# Jóhannes G. Þorsteinsson <johannesg@johannesg.com>, 2017, 2018. +# Jóhannes G. Þorsteinsson <johannesg@johannesg.com>, 2017, 2018, 2020. # Kaan Gül <qaantum@hotmail.com>, 2018. # Einar Magnús Einarsson <einar.m.einarsson@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-16 11:03+0000\n" -"Last-Translator: Einar Magnús Einarsson <einar.m.einarsson@gmail.com>\n" +"PO-Revision-Date: 2020-11-20 23:08+0000\n" +"Last-Translator: Jóhannes G. Þorsteinsson <johannesg@johannesg.com>\n" "Language-Team: Icelandic <https://hosted.weblate.org/projects/godot-engine/" "godot/is/>\n" "Language: is\n" @@ -18,12 +18,12 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Ógild breyta send til convert(), notaðu TYPE_ * fasti." +msgstr "Ógild breytutegund send til convert(), notaðu TYPE_ * fasta." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -1036,14 +1036,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1089,7 +1092,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2273,11 +2276,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2285,7 +2293,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3570,6 +3578,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3617,15 +3635,6 @@ msgstr "Breyta" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Hreyfimynd Tvöfalda Lykla" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3653,10 +3662,17 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "Hreyfimynd Tvöfalda Lykla" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Hreyfa Viðbótar Lykil" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3690,7 +3706,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8128,10 +8147,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Breyta Viðbót" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Afrita val" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9521,6 +9554,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11704,6 +11741,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11956,6 +11997,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12216,6 +12277,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/it.po b/editor/translations/it.po index 435789e66e..8eefe1b29d 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -59,7 +59,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-28 11:18+0000\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" "Last-Translator: Mirko <miknsop@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" @@ -68,12 +68,12 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Argomento tipo non valido per convert(), usare le costanti TYPE_*." +msgstr "Tipo argomento non valido per convert(), usa le costanti TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -84,8 +84,8 @@ msgstr "Prevista una stringa di lunghezza 1 (un singolo carattere)." #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" -"Non ci sono abbastanza byte per riuscire a decodificarli, oppure il formato " -"non è valido." +"Non ci sono abbastanza byte per decodificarli, oppure il formato non è " +"valido." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -165,23 +165,23 @@ msgstr "Valore:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "Inserisci chiave" +msgstr "Inserisci una chiave" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" -msgstr "Duplicare la(e) chiave selezionata(e)" +msgstr "Duplica le chiavi selezionate" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "Eliminare la(e) chiave(i) selezionata(e)" +msgstr "Elimina le chiavi selezionate" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "Aggiungi punto Bézier" +msgstr "Aggiungi Punto Bezier" #: editor/animation_bezier_editor.cpp msgid "Move Bezier Points" -msgstr "Sposta punto Bézier" +msgstr "Sposta Punti Bezier" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -1080,18 +1080,24 @@ msgid "Owners Of:" msgstr "Proprietari di:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Rimuovere i file selezionati dal progetto? (Non può essere annullato)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Rimuovere i file selezionati dal progetto? (Non può essere annullato)\n" +"Puoi trovare i file rimossi nel cestino di sistema per ripristinarli." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"I file che stanno per essere rimossi sono richiesti da altre risorse perché " -"esse funzionino.\n" -"Rimuoverli comunque? (non annullabile)" +"I file che stanno per essere rimossi sono richiesti per il funzionamento di " +"altre risorse.\n" +"Rimuoverli comunque? (non annullabile)\n" +"Puoi trovare i file rimossi nel cestino di sistema per ripristinarli." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1135,7 +1141,7 @@ msgstr "Esplora risorse orfane" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1646,34 +1652,32 @@ msgstr "" "'Driver Fallback Enabled'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"La piattaforma di destinazione richiede la compressione 'ETC' delle texture " -"per GLES2. Attiva 'Import Etc' nelle impostazioni del progetto." +"La piattaforma di destinazione richiede la compressione 'PVRTC' delle " +"texture per GLES2. Attiva 'Import Pvrtc' nelle impostazioni del progetto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"La piattaforma di destinazione richiede la compressione 'ETC2' delle texture " -"per GLES3. Attiva 'Import Etc 2' nelle impostazioni del progetto." +"La piattaforma di destinazione richiede la compressione 'ETC2' o 'PVRTC' " +"delle texture per GLES3. Attiva 'Import Etc 2' oppure 'Import Pvrtc' nelle " +"impostazioni del progetto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"La piattaforma di destinazione richiede la compressione 'ETC' delle texture " -"per il fallback del driver a GLES2.\n" -"Attivare 'Import Etc' nelle impostazioni del progetto, oppure disattivare " +"La piattaforma di destinazione richiede la compressione 'PVRTC' delle " +"texture per il fallback del driver a GLES2.\n" +"Attiva 'Import Pvrtc' nelle impostazioni del progetto, oppure disattiva " "'Driver Fallback Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2170,6 +2174,7 @@ msgid "Property:" msgstr "Proprietà:" #: editor/editor_inspector.cpp +#, fuzzy msgid "Set" msgstr "Imposta" @@ -2358,20 +2363,31 @@ msgid "Error saving TileSet!" msgstr "Errore di salvataggio del TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Errore nel salvataggio della disposizione!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Si è verificato un errore mentre si stava provando a salvare il layout " +"dell'editor.\n" +"Assicurati che il percorso dati dell'editor dell'utente sia scrivibile." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Disposizione predefinita dell'editor sovrascritta." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Layout predefinito dell'editor sovrascritto.\n" +"Per ripristinare il layout predefinito alle impostazioni di base, usa " +"l'opzione elimina layout ed elimina il layout predefinito." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nome della disposizione non trovato!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Ripristinata la disposizione predefinita alle impostazioni originali." +msgid "Restored the Default layout to its base settings." +msgstr "Ripristinato il layout default alle impostazioni base." #: editor/editor_node.cpp msgid "" @@ -3760,6 +3776,16 @@ msgid "Name contains invalid characters." msgstr "Il nome contiene caratteri non validi." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Rinomina file:" @@ -3807,14 +3833,6 @@ msgstr "Modifica Dipendenze..." msgid "View Owners..." msgstr "Vedi Proprietari..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Rinomina..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplica..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Sposta in..." @@ -3842,11 +3860,16 @@ msgid "Collapse All" msgstr "Comprimi Tutto" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Rinomina" +msgid "Duplicate..." +msgstr "Duplica..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Sposta nel cestino" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Rinomina..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3881,8 +3904,11 @@ msgid "Move" msgstr "Sposta" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "C'è già un file o una cartella con lo stesso nome in questo percorso." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Rinomina" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5288,50 +5314,43 @@ msgstr "Crea Guide Orizzontali e Verticali" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Imposta Pivot Offset CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Ruota CanvasItem" +msgstr "Ruota %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Ruota CanvasItem" +msgstr "Ruota CanvasItem \"%s\" a %d gradi" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Sposta CanvasItem" +msgstr "Sposta Ancora CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Scala Node2D \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Ridimensiona Control \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Scala CanvasItem" +msgstr "Scala %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Scala CanvasItem" +msgstr "Scala CanvasItem \"%s\" a (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Sposta CanvasItem" +msgstr "Sposta %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Sposta CanvasItem" +msgstr "Sposta CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6522,11 +6541,11 @@ msgstr "Rimuovi Punto In-Control" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "Spezza Segmento (in curva)" +msgstr "Dividere segmento (in curva)" #: editor/plugins/physical_bone_plugin.cpp msgid "Move Joint" -msgstr "Sposta articolazione" +msgstr "Spostare il giunto" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" @@ -6535,7 +6554,7 @@ msgstr "La proprietà scheletro del Polygon2D non punta ad un nodo Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" -msgstr "Sincronizza Ossa" +msgstr "Sincronizza ossa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" @@ -6543,51 +6562,51 @@ msgid "" "Set a texture to be able to edit UV." msgstr "" "Nessuna texture in questo poligono.\n" -"Imposta una texture per poter modificare UV." +"Impostare una texture per poter modificare UV." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "Crea UV Map" +msgstr "Creare mappa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." msgstr "" -"Polygon2D possiede vertici interni, non può più essere modificato dalla " -"finestra principale." +"Polygon2D ha vertici interni, quindi non può più essere modificato nella " +"vista." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" -msgstr "Crea Poligono e UV" +msgstr "Crea poligono e UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Internal Vertex" -msgstr "Crea Vertice Interno" +msgstr "Crea vertice interno" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Internal Vertex" -msgstr "Rimuovi Vertice Interno" +msgstr "Rimuovi vertice interno" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Invalid Polygon (need 3 different vertices)" -msgstr "Poligono Non Valido (sono necessari 3 vertici non coincidenti)" +msgstr "Poligono non valido (sono necessari 3 vertici differenti)" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Add Custom Polygon" -msgstr "Aggiungi Poligono Personalizzato" +msgstr "Aggiungi poligono personalizzato" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Custom Polygon" -msgstr "Rimuovi Poligono Personalizzato" +msgstr "Rimuovi poligono personalizzato" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "Trasla UV Map" +msgstr "Trasforma la mappa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform Polygon" -msgstr "Trasforma Poligono" +msgstr "Trasforma il poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" @@ -6595,11 +6614,11 @@ msgstr "Dipingi peso delle ossa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." -msgstr "Apri editor Poligono 2D UV." +msgstr "Apri l'editor UV di Polygon2D." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "Polygon 2D UV Editor" +msgstr "Editor UV Polygon 2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" @@ -6619,21 +6638,19 @@ msgstr "Ossa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Points" -msgstr "Sposta Punti" +msgstr "Sposta punti" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Trascina: Ruota" +msgstr "Command: Ruota" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "Shift: Muovi Tutti" +msgstr "Shift: Muovi tutti" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Scala" +msgstr "Shift+Command: Scala" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6645,15 +6662,15 @@ msgstr "Shift+Ctrl: Scala" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "Sposta Poligono" +msgstr "Sposta poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "Ruota Poligono" +msgstr "Ruota poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "Scala Poligono" +msgstr "Scala poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create a custom polygon. Enables custom polygon rendering." @@ -6671,25 +6688,23 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." -msgstr "Colora i pesi con l'intensità specificata." +msgstr "Dipingi i pesi con l'intensità specificata." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Unpaint weights with specified intensity." -msgstr "Rimuovi i pesi con le intensità specificate." +msgstr "Rimuovi i pesi con l'intensità specificata." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" msgstr "Raggio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Crea Poligono e UV" +msgstr "Copia il poligono su UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Converti in Polygon2D" +msgstr "Copia l'UV sul poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6697,7 +6712,7 @@ msgstr "Cancella UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Settings" -msgstr "Impostazioni Griglia" +msgstr "Impostazioni griglia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Snap" @@ -6713,19 +6728,19 @@ msgstr "Griglia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Show Grid" -msgstr "Mostra Griglia" +msgstr "Mostra la griglia" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" -msgstr "Configura Griglia:" +msgstr "Configura la griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset X:" -msgstr "Offset X Griglia:" +msgstr "Scostamento X della griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset Y:" -msgstr "Offset Y Griglia:" +msgstr "Scostamento Y della griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step X:" @@ -6737,32 +6752,32 @@ msgstr "Passo Y della griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones to Polygon" -msgstr "Sincronizza Ossa a Poligono" +msgstr "Sincronizza le ossa al poligono" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "ERROERE: Impossibile caricare la risorsa!" +msgstr "ERRORE: Non è stato possibile caricare la risorsa!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "Aggiungi Risorsa" +msgstr "Aggiungi risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "Rinomina Risorsa" +msgstr "Rinomina risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "Elimina Risorsa" +msgstr "Elimina risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "Clipboard risorse vuota!" +msgstr "La clipboard delle risorse è vuota!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "Incolla Risorsa" +msgstr "Incolla risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp @@ -6779,11 +6794,11 @@ msgstr "Tipo:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp msgid "Open in Editor" -msgstr "Apri nell Editor" +msgstr "Apri nell'editor" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Load Resource" -msgstr "Carica Risorsa" +msgstr "Carica risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ResourcePreloader" @@ -6795,11 +6810,11 @@ msgstr "AnimationTree non ha nessun percorso impostato ad un AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp msgid "Path to AnimationPlayer is invalid" -msgstr "Percorso per AnimationPlayer non è valido" +msgstr "Il percorso per AnimationPlayer non è valido" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "Elimina File recenti" +msgstr "Elimina i file recenti" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" @@ -6811,11 +6826,11 @@ msgstr "Errore scrittura TextFile:" #: editor/plugins/script_editor_plugin.cpp msgid "Could not load file at:" -msgstr "Impossibile caricare il file:" +msgstr "Non è stato possibile caricare il file a:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" -msgstr "Errore nel salvataggio file!" +msgstr "Errore nel salvataggio del file!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme." @@ -6823,7 +6838,7 @@ msgstr "Errore durante il salvataggio del tema." #: editor/plugins/script_editor_plugin.cpp msgid "Error Saving" -msgstr "Errore di Salvataggio" +msgstr "Errore di salvataggio" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing theme." @@ -6831,19 +6846,19 @@ msgstr "Errore di importazione del tema." #: editor/plugins/script_editor_plugin.cpp msgid "Error Importing" -msgstr "Errore di Importazione" +msgstr "Errore di importazione" #: editor/plugins/script_editor_plugin.cpp msgid "New Text File..." -msgstr "Nuovo Text File…" +msgstr "Nuovo file di testo..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" -msgstr "Apri File" +msgstr "Apri file" #: editor/plugins/script_editor_plugin.cpp msgid "Save File As..." -msgstr "Salva File Come..." +msgstr "Salva file come..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." @@ -6851,7 +6866,8 @@ msgstr "Impossibile ottenere lo script per l'esecuzione." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "Ricaricando lo script fallito, controlla la console per gli errori." +msgstr "" +"Ricaricamento dello script fallito, controlla la console per gli errori." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." @@ -6861,12 +6877,12 @@ msgstr "Lo script non è in modalità tool, non sarà possibile eseguirlo." msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" -"Per eseguire questo script, bisogna ereditare EditorScript ed impostarlo in " -"modalità tool." +"Per eseguire questo script, esso deve ereditare EditorScript ed essere " +"impostato in modalità tool." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" -msgstr "Importa Tema" +msgstr "Importa tema" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -6878,11 +6894,11 @@ msgstr "Errore di salvataggio" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As..." -msgstr "Salva Tema Come..." +msgstr "Salva tema come..." #: editor/plugins/script_editor_plugin.cpp msgid "%s Class Reference" -msgstr "%s Riferimento di Classe" +msgstr "%s Riferimento di classe" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -6896,11 +6912,11 @@ msgstr "Trova precedente" #: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" -msgstr "Filtra script" +msgstr "Filtra gli script" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "Ordina in ordine alfabetico la lista dei metodi." +msgstr "Abilita/Disabilita l'ordinamento alfabetico della lista dei metodi." #: editor/plugins/script_editor_plugin.cpp msgid "Filter methods" @@ -6914,13 +6930,13 @@ msgstr "Ordina" #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "Sposta in su" +msgstr "Sposta su" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "Sposta in giù" +msgstr "Sposta giù" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -6928,7 +6944,7 @@ msgstr "Script successivo" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "Script Precedente" +msgstr "Script precedente" #: editor/plugins/script_editor_plugin.cpp msgid "File" @@ -6948,11 +6964,11 @@ msgstr "Salva tutto" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "Ricarica Soft Script" +msgstr "Ricarica parziale dello script" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" -msgstr "Copia Percorso Script" +msgstr "Copia il percorso dello script" #: editor/plugins/script_editor_plugin.cpp msgid "History Previous" @@ -6960,7 +6976,7 @@ msgstr "Cronologia Precedente" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "Cronologia Successiva" +msgstr "Cronologia successiva" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6969,23 +6985,23 @@ msgstr "Tema" #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme..." -msgstr "Importa Tema..." +msgstr "Importa tema..." #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "Ricarica Tema" +msgstr "Ricarica tema" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "Salva Tema" +msgstr "Salva tema" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" -msgstr "Chiudi Tutto" +msgstr "Chiudi tutto" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "Chiudi Documentazione" +msgstr "Chiudi la documentazione" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" @@ -7010,11 +7026,11 @@ msgstr "Continua" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "Mantieni Debugger Aperto" +msgstr "Mantieni il debugger aperto" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with External Editor" -msgstr "Debug con Editor Esterno" +msgstr "Debug con un editor esterno" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." @@ -7060,7 +7076,7 @@ msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp msgid "Search Results" -msgstr "Cerca Risultati" +msgstr "Cerca risultati" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Scripts" @@ -7082,11 +7098,11 @@ msgstr "Target" msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." msgstr "" -"Manca il metodo '%s' connesso per il segnale '%s' dal nodo '%s' al nodo '%s'." +"Manca il metodo connesso '%s' per il segnale '%s' dal nodo '%s' al nodo '%s'." #: editor/plugins/script_text_editor.cpp msgid "[Ignore]" -msgstr "[ignora]" +msgstr "[Ignora]" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -7104,15 +7120,16 @@ msgstr "Solo le risorse dal filesystem possono essere eliminate." #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." msgstr "" -"Impossibile lasciare i nodi perché lo script '%s' non è usato nella scena." +"Impossibile rilasciare i nodi perché lo script '%s' non è usato in questa " +"scena." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" -msgstr "Ricerca Simbolo" +msgstr "Ricerca simbolo" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" -msgstr "Scegli Colore" +msgstr "Scegli un colore" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Convert Case" @@ -7128,11 +7145,11 @@ msgstr "Minuscolo" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" -msgstr "Rendi prima lettera maiuscola" +msgstr "Rendi la prima lettera maiuscola" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "Evidenziatore di Sintassi" +msgstr "Evidenziatore di sintassi" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -7141,7 +7158,7 @@ msgstr "Segnalibri" #: editor/plugins/script_text_editor.cpp msgid "Breakpoints" -msgstr "Breakpoint" +msgstr "Punti di interruzione" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -7164,27 +7181,27 @@ msgstr "Elimina linea" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" -msgstr "Indenta Sinistra" +msgstr "Indenta a sinistra" #: editor/plugins/script_text_editor.cpp msgid "Indent Right" -msgstr "Indenta Destra" +msgstr "Indenta a destra" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "Commuta commento" +msgstr "Attiva/Disattiva Commento" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "Espandi/comprimi linea" +msgstr "Espandi/Comprimi linea" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "Piegare Tutte le Linee" +msgstr "Comprimi tutte le linee" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "Dispiegare Tutte le Linee" +msgstr "Espandi tutte le linee" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" @@ -7192,7 +7209,7 @@ msgstr "Clona sotto" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "Completa simbolo" +msgstr "Completa il simbolo" #: editor/plugins/script_text_editor.cpp msgid "Evaluate Selection" @@ -7216,7 +7233,7 @@ msgstr "Indenta automaticamente" #: editor/plugins/script_text_editor.cpp msgid "Find in Files..." -msgstr "Cerca nei File..." +msgstr "Trova nei file..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -7224,44 +7241,44 @@ msgstr "Aiuto contestuale" #: editor/plugins/script_text_editor.cpp msgid "Toggle Bookmark" -msgstr "Abilita/Disabilita segnalibri" +msgstr "Abilita/Disabilita i segnalibri" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Bookmark" -msgstr "Va' al segnalibro successivo" +msgstr "Vai al segnalibro successivo" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Bookmark" -msgstr "Va' al segnalibro precedente" +msgstr "Vai al segnalibro precedente" #: editor/plugins/script_text_editor.cpp msgid "Remove All Bookmarks" -msgstr "Rimuovi tutti i Segnalibri" +msgstr "Rimuovi tutti i segnalibri" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." -msgstr "Vai a Funzione..." +msgstr "Vai alla funzione..." #: editor/plugins/script_text_editor.cpp msgid "Go to Line..." -msgstr "Vai a Linea..." +msgstr "Vai alla linea..." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "Commuta breakpoint" +msgstr "Attiva/Disattiva Punto D'Interruzione" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "Rimuovi tutti i breakpoint" +msgstr "Rimuovi tutti i punti di interruzione" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" -msgstr "Vai al breakpoint successivo" +msgstr "Vai al punto di interruzione successivo" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Breakpoint" -msgstr "Vai al breakpoint precedente" +msgstr "Vai al punto di interruzione precedente" #: editor/plugins/shader_editor_plugin.cpp msgid "" @@ -7277,7 +7294,7 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "Questo scheletro non ha ossa, crea dei figli nodo Bone2D." +msgstr "Questo scheletro non ha ossa, crea dei nodi figlio Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Create Rest Pose from Bones" @@ -7289,7 +7306,7 @@ msgstr "Imposta Ossa in Posizione di Riposo" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" -msgstr "Scheletro2D" +msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" @@ -7304,6 +7321,7 @@ msgid "Create physical bones" msgstr "Crea ossa fisiche" #: editor/plugins/skeleton_editor_plugin.cpp +#, fuzzy msgid "Skeleton" msgstr "Scheletro" @@ -7329,19 +7347,19 @@ msgstr "Transform Abortito." #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "Transform Asse-X." +msgstr "Trasformazione asse X." #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "Transform Asse-Y." +msgstr "Trasformazione asse Y." #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "Transform Asse-Z." +msgstr "Trasformazione asse Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Visualizza Tranform del Piano." +msgstr "Visualizza la trasformazione del piano." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7349,7 +7367,7 @@ msgstr "Scalatura: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " -msgstr "Spostamento: " +msgstr "Traslazione: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -7357,11 +7375,11 @@ msgstr "Ruotando di %s gradi." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "Keying disabilitato (nessun key inserito)." +msgstr "Inserimento di chiavi disabilitato (nessuna chiave inserita)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "Key d'Animazione Inserito." +msgstr "Chiave d'animazione inserita." #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" @@ -7373,19 +7391,19 @@ msgstr "Imbardata" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "Oggetti Disegnati" +msgstr "Oggetti disegnati" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" -msgstr "Cambiamenti dei Materiali" +msgstr "Cambiamenti dei materiali" #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" -msgstr "Cambiamenti delle Shader" +msgstr "Cambiamenti degli shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" -msgstr "Cambiamenti delle Superfici" +msgstr "Cambiamenti delle superfici" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" @@ -7397,11 +7415,11 @@ msgstr "Vertici" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "Vista dall'Alto." +msgstr "Vista dall'alto." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "Vista dal Basso." +msgstr "Vista dal basso." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" @@ -7409,7 +7427,7 @@ msgstr "Basso" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "Vista Sinistra." +msgstr "Vista da sinistra." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" @@ -7417,7 +7435,7 @@ msgstr "Sinistra" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "Vista Destra." +msgstr "Vista da destra." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" @@ -7425,7 +7443,7 @@ msgstr "Destra" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "Vista Frontale." +msgstr "Vista frontale." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" @@ -7433,7 +7451,7 @@ msgstr "Fronte" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "Vista dal Retro." +msgstr "Vista dal retro." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" @@ -7441,11 +7459,11 @@ msgstr "Retro" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" -msgstr "Allinea trasformazione con la vista" +msgstr "Allinea la trasformazione con la vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Rotation with View" -msgstr "Allinea rotazione con la vista" +msgstr "Allinea la rotazione con la vista" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." @@ -7651,6 +7669,7 @@ msgstr "Abilita/Disabilita Vista libera" #: editor/plugins/spatial_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Transform" msgstr "Trasforma" @@ -8238,13 +8257,12 @@ msgid "Paint Tile" msgstr "Disegna tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift + LMB: Traccia una linea\n" -"Shift + Ctrl + LMB: Colora il rettangolo" +"Shift + LMB: Disegna Linea\n" +"Shift + Ctrl + LMB: Disegna Rettangolo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8399,10 +8417,22 @@ msgid "Create a new rectangle." msgstr "Crea un nuovo rettangolo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nuovo Rettangolo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Crea un nuovo poligono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nuovo Poligono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Elimina Forma Selezionata" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Mantieni il poligono all'interno dell'area del rettangolo." @@ -8711,8 +8741,9 @@ msgid "Scalar" msgstr "Scalare" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Vector" -msgstr "Vettore" +msgstr "Vector" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" @@ -8775,9 +8806,8 @@ msgid "Add Node to Visual Shader" msgstr "Aggiungi Nodo a Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nodo Spostato" +msgstr "Nodo(i) Spostato(i)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8797,9 +8827,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Tipo di Input Visual Shader Cambiato" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Imposta Nome Uniforme" +msgstr "Nome UniformRef Modificato" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9520,7 +9549,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Un riferimento ad una uniform esistente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9890,6 +9919,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11243,6 +11276,7 @@ msgid "Value" msgstr "Valore" #: editor/script_editor_debugger.cpp +#, fuzzy msgid "Monitors" msgstr "Monitor" @@ -12166,6 +12200,10 @@ msgstr "" "dell'editor non è valido." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Cartella 'platform-tools' inesistente!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12218,18 +12256,19 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" è valido soltanto quanto \"Use Custom Build\" è abilitato." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "Nome file invalido! Il Bundle Android App richiede l'estensione *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "L'estensione APK non è compatibile con il Bundle Android App." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Nome file invalido! L'APK Android richiede l'estensione *.apk." #: platform/android/export/export.cpp msgid "" @@ -12268,13 +12307,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Spostando l'output" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Impossibile copiare e rinominare il file di esportazione, controlla la " +"directory del progetto gradle per gli output." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12477,6 +12518,26 @@ msgstr "" "L'animazione CPUParticles2D richiede l'utilizzo di un CanvasItemMaterial con " "\"Animazione Particelle\" abilitata." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12810,6 +12871,26 @@ msgstr "" "rigide) saranno sovrascritti dal motore fisico quando in esecuzione.\n" "Modifica invece la dimensione in sagome di collisione figlie." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13046,12 +13127,23 @@ msgstr "Assegnazione all'uniforme." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "Varyings può essere assegnato soltanto nella funzione del vertice." +msgstr "" +"Le variabili possono essere assegnate soltanto in funzione del vertice." #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." msgstr "Le constanti non possono essere modificate." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "C'è già un file o una cartella con lo stesso nome in questo percorso." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Errore nel salvataggio della disposizione!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Disposizione predefinita dell'editor sovrascritta." + #~ msgid "Move pivot" #~ msgstr "Sposta pivot" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 8282aa0de2..0ec6a58ed9 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -36,7 +36,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-19 21:08+0000\n" +"PO-Revision-Date: 2020-12-01 20:29+0000\n" "Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" @@ -45,7 +45,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.3.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -54,7 +54,7 @@ msgstr "convert() の引数の型が無効です。TYPE_* 定数を使ってく #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "長さ1の文字列(文字)が必要です。" +msgstr "長さが 1 の文字列 (文字) が必要です。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -68,15 +68,15 @@ msgstr "式中の無効な入力 %i (渡されていません)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "インスタンスがnull(渡されない)であるため、selfは使用できません" +msgstr "インスタンスが null (渡されない) であるため、self は使用できません" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "演算子 %s に対する無効なオペランドです、%s 及び %s。" +msgstr "演算子 %s に対する無効なオペランドです: %s と %s。" #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "タイプ %s のインデックスが無効、これは基底型 %s 用です" +msgstr "型 %s のインデックスが無効、これは基底型 %s 用です" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" @@ -120,7 +120,7 @@ msgstr "EiB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "解放" +msgstr "自由" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -1056,17 +1056,23 @@ msgid "Owners Of:" msgstr "次のオーナー:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "選択したファイルをプロジェクトから削除しますか?(元に戻せません)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"選択したファイルをプロジェクトから削除しますか?(取り消しはできません)\n" +"削除されたファイルは、システムのゴミ箱にあるので復元できます。" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "除去しようとしているファイルは他のリソースの動作に必要です。\n" -"無視して除去しますか?(元に戻せません)" +"無視して除去しますか?(取り消しはできません)\n" +"削除されたファイルは、システムのゴミ箱にあるので復元できます。" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1110,7 +1116,7 @@ msgstr "孤立リソース エクスプローラー" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1619,35 +1625,33 @@ msgstr "" "にしてください。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"対象プラットフォームではGLES2のために'ETC'テクスチャ圧縮が必要です。プロジェ" -"クト設定より 'Import Etc' をオンにしてください。" +"対象プラットフォームではGLES2のために'PVRTC'テクスチャ圧縮が必要です。プロ" +"ジェクト設定より 'Import Pvrtc' をオンにしてください。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"対象プラットフォームではGLES3のために'ETC2'テクスチャ圧縮が必要です。プロジェ" -"クト設定より 'Import Etc 2' をオンにしてください。" +"対象プラットフォームではGLES3のために 'ETC2' あるいは 'PVRTC' テクスチャ圧縮" +"が必要です。プロジェクト設定より 'Import Etc 2' あるいは 'Import Pvrtc' をオ" +"ンにしてください。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"対象プラットフォームではGLES2へフォールバックするために'ETC'テクスチャ圧縮が" -"必要です。\n" -"プロジェクト設定より 'Import Etc' をオンにするか、'Fallback To Gles 2' をオフ" -"にしてください。" +"対象プラットフォームではGLES2へフォールバックするために 'PVRTC' テクスチャ圧" +"縮が必要です。\n" +"プロジェクト設定より 'Import Pvrtc' をオンにするか、'Driver Fallback " +"Enabled' をオフにしてください。" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1700,7 +1704,7 @@ msgstr "インポートドック" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" -msgstr "プロファイル '%s'を消去しますか? (元に戻せません)" +msgstr "プロファイル '%s' を消去しますか?(元に戻せません)" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1982,7 +1986,7 @@ msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" msgstr "" -"ファイル%sをポイントしている異なるタイプの複数のインポータがあります。イン" +"ファイル %s をポイントしている異なるタイプの複数のインポータがあります。イン" "ポートは中断されました" #: editor/editor_file_system.cpp @@ -2330,20 +2334,30 @@ msgid "Error saving TileSet!" msgstr "タイルセットの保存エラー!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "レイアウトの保存エラー!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"エディタのレイアウトを保存しようとした際にエラーが発生しました。\n" +"エディタのユーザーデータ用パスが書き込み可能であることを確認してください。" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "デフォルトのエディタ レイアウトを上書きしました。" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"既定のエディタレイアウトが上書きされました。\n" +"既定のレイアウトを基本設定に戻すには、[レイアウトの削除] オプションを使用し" +"て、既定のレイアウトを削除します。" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "レイアウト名が見つかりません!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "デフォルトのレイアウトを基本設定に戻しました。" +msgid "Restored the Default layout to its base settings." +msgstr "既定のレイアウトを基本設定に戻しました。" #: editor/editor_node.cpp msgid "" @@ -3714,6 +3728,16 @@ msgid "Name contains invalid characters." msgstr "名前に使用できない文字が含まれています。" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "ファイル名を変更:" @@ -3761,14 +3785,6 @@ msgstr "依存関係の編集..." msgid "View Owners..." msgstr "オーナーを見る..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "名前を変更..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "複製..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "移動..." @@ -3796,11 +3812,16 @@ msgid "Collapse All" msgstr "すべて折りたたむ" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "名前の変更" +msgid "Duplicate..." +msgstr "複製..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "ごみ箱へ移動" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "名前を変更..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3835,8 +3856,11 @@ msgid "Move" msgstr "移動" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "このパスには、既に同名のファイルかフォルダがあります。" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "名前の変更" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5232,50 +5256,43 @@ msgstr "水平垂直ガイドを作成" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "CanvasItem \"%s\" の Pivot Offset を (%d, %d) に設定します" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "CanvasItemを回転" +msgstr "%d 個のCanvasItemを回転" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "CanvasItemを回転" +msgstr "CanvasItem \"%s\" を %d 度回転" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "CanvasItemを移動" +msgstr "CanvasItem \"%s\" のアンカーを移動" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Node2D \"%s\" を (%s, %s) にスケールします" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Control \"%s\" を (%d, %d) にリサイズします" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "キャンバスアイテムの拡大/縮小" +msgstr "%d 個の CanvasItem を拡大 / 縮小" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "キャンバスアイテムの拡大/縮小" +msgstr "CanvasItem \"%s\" を (%s, %s) に拡大 / 縮小" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "CanvasItemを移動" +msgstr "%d 個の CanvasItem を移動" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "CanvasItemを移動" +msgstr "CanvasItem \"%s\" を (%d, %d) に移動" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6552,18 +6569,16 @@ msgid "Move Points" msgstr "ポイントを移動" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "ドラッグ: 回転" +msgstr "Command: 回転" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: すべて移動" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: スケール" +msgstr "Shift+Command: スケール" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6610,14 +6625,12 @@ msgid "Radius:" msgstr "半径:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "ポリゴンとUVを生成" +msgstr "PolygonをUVにコピー" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Polygon2Dに変換する" +msgstr "UVをPolygon2Dにコピー" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8166,13 +8179,12 @@ msgid "Paint Tile" msgstr "タイルをペイント" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+左マウスボタン: 直線に描く\n" -"Shift+Ctrl+左マウスボタン: 長方形ペイント" +"Shift+Command+左マウスボタン: 長方形ペイント" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8327,12 +8339,24 @@ msgid "Create a new rectangle." msgstr "新しく長方形を作成。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "新規長方形" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "新規ポリゴンを生成。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "新規ポリゴン" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "選択したシェイプを削除" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." -msgstr "領域Rect内のポリゴンを保持します。" +msgstr "領域 Rect 内のポリゴンを保持します。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." @@ -8700,9 +8724,8 @@ msgid "Add Node to Visual Shader" msgstr "ビジュアルシェーダにノードを追加" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "ノードを移動" +msgstr "ノードの移動" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8722,9 +8745,8 @@ msgid "Visual Shader Input Type Changed" msgstr "ビジュアルシェーダの入力タイプが変更されました" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "統一名を設定" +msgstr "UniformRef の名称変更" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9431,7 +9453,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "既存の uniform への参照です。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9802,6 +9824,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11017,7 +11043,7 @@ msgstr "スクリプトのパス/名前は有効です。" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "使用可能: a-z、A-Z、0-9及び_。" +msgstr "使用可能: a-z、A-Z、0-9、_ 及び ." #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)." @@ -12063,6 +12089,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "エディタ設定のカスタムビルドのAndroid SDKパスが無効です。" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "'platform-tools' ディレクトリがありません!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12117,18 +12147,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Export AAB\" は \"Use Custom Build\" が有効である場合にのみ有効になります。" #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"無効なファイル名です! Android App Bundle には拡張子 *.aab が必要です。" #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion は Android App Bundle とは互換性がありません。" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "無効なファイル名です! Android APKには拡張子 *.apk が必要です。" #: platform/android/export/export.cpp msgid "" @@ -12166,13 +12198,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "出力結果の移動中" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"エクスポートファイルのコピーと名前の変更ができません。出力結果をみるには" +"gradleのプロジェクトディレクトリを確認してください。" #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12335,7 +12369,7 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionShape2Dは、CollisionObject2D派生ノードにコリジョンシェイプを提供する" -"場合にのみ機能します。シェイプを追加する場合は、Area2D、staticBody2D、" +"場合にのみ機能します。シェイプを追加する場合は、Area2D、StaticBody2D、" "RigidBody2D、KinematicBody2Dなどの子として使用してください。" #: scene/2d/collision_shape_2d.cpp @@ -12343,8 +12377,8 @@ msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"関数に対して CollisionShape2D の形状(シェイプ)を指定する必要があります。その" -"ためのシェイプリソースを作成してください!" +"関数に対して CollisionShape2D の形状 (シェイプ) を指定する必要があります。そ" +"のためのシェイプリソースを作成してください!" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12362,6 +12396,26 @@ msgstr "" "CPUParticles2Dアニメーションでは、 \"Particles Animation\" を有効にした" "CanvasItemMaterialを使用する必要があります。" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12385,8 +12439,8 @@ msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"NavigationPolygon リソースを設定または動作するようにこのノード用に作成する必" -"要があります。プロパティを設定するか、ポリゴンを描画してください。" +"このノード用に NavigationPolygon リソースを設定または作成する必要があります。" +"プロパティを設定するか、ポリゴンを描画してください。" #: scene/2d/navigation_polygon.cpp msgid "" @@ -12690,6 +12744,26 @@ msgstr "" "物理エンジンによってオーバーライドされます。\n" "代わりに、子の衝突シェイプのサイズを変更してください。" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12931,6 +13005,30 @@ msgstr "Varying変数は頂点関数にのみ割り当てることができま msgid "Constants cannot be modified." msgstr "定数は変更できません。" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "このパスには、既に同名のファイルかフォルダがあります。" + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "'build-tools' ディレクトリがありません!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "zipalign ツールが見つかりません。" + +#~ msgid "Aligning APK..." +#~ msgstr "APKを最適化..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "APKの最適化を完了できません。" + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "未最適化のAPKを削除できません。" + +#~ msgid "Error trying to save layout!" +#~ msgstr "レイアウトの保存エラー!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "デフォルトのエディタ レイアウトを上書きしました。" + #~ msgid "Move pivot" #~ msgstr "ピボットを移動" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index da05c4d847..ae770dc05a 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -1076,14 +1076,18 @@ msgstr "მფლობელები:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "მოვაშოროთ მონიშნული ფაილები პროექტიდან? (უკან დაბრუნება შეუძლებელია)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "ფაილები რომლებსაც შლით საჭიროა სხვა რესურსებისთვის რომ იმუშაონ.\n" "წავშალოთ ამის მიუხედავად? (შეუძლებელია უკან დაბრუნება)" @@ -1132,7 +1136,7 @@ msgstr "ობოლი რესურსების მაძიებელ #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2350,11 +2354,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2362,7 +2371,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3660,6 +3669,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3710,14 +3729,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3748,10 +3759,15 @@ msgid "Collapse All" msgstr "ყველას ჩანაცვლება" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3786,7 +3802,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8304,10 +8323,25 @@ msgstr "ახალი %s შექმნა" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "ახალი %s შექმნა" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "შექმნა" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "შექმნა" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "წავშალოთ მონიშნული ფაილები?" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9723,6 +9757,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11935,6 +11973,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12194,6 +12236,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12454,6 +12516,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 267d5682be..14f197d86e 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -20,12 +20,13 @@ # Doyun Kwon <caen4516@gmail.com>, 2020. # Jun Hyung Shin <shmishmi79@gmail.com>, 2020. # Yongjin Jo <wnrhd114@gmail.com>, 2020. +# Yungjoong Song <yungjoong.song@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-05 01:02+0000\n" -"Last-Translator: Yongjin Jo <wnrhd114@gmail.com>\n" +"PO-Revision-Date: 2020-10-31 23:15+0000\n" +"Last-Translator: Yungjoong Song <yungjoong.song@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -33,7 +34,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -746,17 +747,17 @@ msgstr "스크립트 패널 토글" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom In" -msgstr "확대" +msgstr "줌 인" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Out" -msgstr "축소" +msgstr "줌 아웃" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "확대/축소 다시 설정" +msgstr "줌 재설정" #: editor/code_editor.cpp msgid "Warnings" @@ -1043,14 +1044,19 @@ msgid "Owners Of:" msgstr "소유자:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "프로젝트에서 선택한 파일을 삭제할까요? (되돌릴 수 없습니다)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "삭제하려는 파일은 다른 리소스가 동작하기 위해 필요한 파일입니다.\n" "무시하고 삭제할까요? (되돌릴 수 없습니다)" @@ -1097,7 +1103,7 @@ msgstr "미사용 리소스 탐색기" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1605,34 +1611,31 @@ msgstr "" "Enabled' 설정을 비활성화 하세요." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"대상 플랫폼에서 GLES2 용 'ETC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " -"'Import Etc' 설정을 켜세요." +"대상 플랫폼에서 GLES2 용 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " +"'Import Pvrt' 를 활성화 하세요." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"대상 플랫폼에서 GLES3 용 'ETC2' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " -"'Import Etc 2' 설정을 켜세요." +"대상 플랫폼은 GLES3 용 'ETC2' 나 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 " +"설정에서 'Import Etc 2' 나 'Import Pvrtc' 를 활성화 하세요." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'ETC' 텍스처 압축이 필요합니" -"다.\n" -"프로젝트 설정에서 'Import Etc' 설정을 활성화 하거나, 'Driver Fallback " +"대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'PVRTC' 텍스처 압축이 필요합" +"니다.\n" +"프로젝트 설정에서 'Import Pvrtc' 설정을 활성화 하거나, 'Driver Fallback " "Enabled' 설정을 비활성화 하세요." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2158,7 +2161,7 @@ msgstr "출력 지우기" #: editor/editor_network_profiler.cpp editor/editor_node.cpp #: editor/editor_profiler.cpp msgid "Stop" -msgstr "중단" +msgstr "정지" #: editor/editor_network_profiler.cpp editor/editor_profiler.cpp #: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp @@ -2311,19 +2314,25 @@ msgid "Error saving TileSet!" msgstr "타일셋 저장 중 오류!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "레이아웃 저장 중 오류!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "기본 편집기 레이아웃을 덮어씁니다." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "레이아웃 이름을 찾을 수 없습니다!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "기본 레이아웃을 초기화하였습니다." #: editor/editor_node.cpp @@ -2822,14 +2831,17 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"이 옵션이 활성화 된 경우 원 클릭 배포를 사용하면 실행중인 프로젝트를 디버깅 " +"할 수 있도록이 컴퓨터의 IP에 연결을 시도합니다.\n" +"이 옵션은 원격 디버깅 (일반적으로 모바일 장치 사용)에 사용하기위한 것입니" +"다.\n" +"GDScript 디버거를 로컬에서 사용하기 위해 활성화 할 필요는 없습니다." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" msgstr "네트워크 파일 시스템을 사용하여 작게 배포" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, using one-click deploy for Android will only " "export an executable without the project data.\n" @@ -2838,60 +2850,55 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"이 설정을 켜면, 내보내거나 배포할 때 최소한의 실행 파일을 만듭니다.\n" -"이 경우, 실행 파일이 네트워크 너머에 있는 편집기의 파일 시스템을 사용합니" -"다.\n" -"Android의 경우, 배포 시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 설정" -"은 용량이 큰 게임의 테스트 배포 속도를 향상시킬 수 있습니다." +"이 옵션을 활성화하고 Android 용 원 클릭 배포를 사용하면 프로젝트 데이터없이 " +"실행 파일만 내 보냅니다.\n" +"파일 시스템은 네트워크를 통해 편집기에 의해 프로젝트에서 제공됩니다.\n" +"Android의 경우, 배포시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 설정" +"은 용량이 큰 게임의 테스트 속도를 향상시킵니다." #: editor/editor_node.cpp msgid "Visible Collision Shapes" msgstr "충돌 모양 보이기" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"이 설정을 켜면 게임을 실행하는 동안 (2D와 3D용) Collision 모양과 Raycast 노드" -"가 보이게 됩니다." +"이 설정을 켜면 프로젝트를 실행하는 동안 (2D와 3D용) Collision 모양과 Raycast " +"노드가 보이게 됩니다." #: editor/editor_node.cpp msgid "Visible Navigation" msgstr "내비게이션 보이기" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." msgstr "" -"이 설정을 켜면, 게임을 실행하는 동안 Navigation 메시와 폴리곤이 보이게 됩니" -"다." +"이 설정을 켜면,프로젝트를 실행하는 동안 Navigation 메시와 폴리곤이 보이게 됩" +"니다." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Scene Changes" -msgstr "씬 변경 사항 동기화" +msgstr "씬 변경사항 동기화" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"이 설정이 활성화된 경우, 편집기에서 씬을 수정하면 실행 중인 게임에도 반영됩니" -"다.\n" -"원격 장치에서 사용중인 경우 네트워크 파일 시스템 기능을 활성화하면 더욱 효율" -"적입니다." +"이 설정이 활성화된 경우, 편집기에서 씬을 수정하면 실행중인 프로젝트에 반영됩" +"니다.\n" +"원격장치에서 사용중인 경우 네트워크 파일 시스템 기능을 활성화하면 더욱 효율적" +"입니다." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Script Changes" -msgstr "스크립트 변경 사항 동기화" +msgstr "스크립트 변경사항 동기화" #: editor/editor_node.cpp #, fuzzy @@ -3005,7 +3012,7 @@ msgstr "디버깅을 하기 위해 씬 실행을 중단합니다." #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "씬 멈추기" +msgstr "씬 일시정지" #: editor/editor_node.cpp msgid "Stop the scene." @@ -3025,7 +3032,7 @@ msgstr "씬을 지정해서 실행합니다" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "맞춤 씬 실행하기" +msgstr "커스텀 씬 실행" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." @@ -3062,7 +3069,7 @@ msgstr "인스펙터" #: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "하단 패널 펼치기" +msgstr "하단 패널 확장" #: editor/editor_node.cpp msgid "Output" @@ -3686,6 +3693,16 @@ msgid "Name contains invalid characters." msgstr "이름에 잘못된 문자가 있습니다." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "파일 이름 바꾸기:" @@ -3733,14 +3750,6 @@ msgstr "종속 관계 편집..." msgid "View Owners..." msgstr "소유자 보기..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "이름 바꾸기..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "복제..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "여기로 이동..." @@ -3768,11 +3777,17 @@ msgid "Collapse All" msgstr "모두 접기" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "이름 바꾸기" +msgid "Duplicate..." +msgstr "복제..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "오토로드 이동" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "이름 바꾸기..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3807,8 +3822,11 @@ msgid "Move" msgstr "이동" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "이 위치에는 같은 이름의 파일이나 폴더가 있습니다." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "이름 바꾸기" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5201,7 +5219,7 @@ msgstr "수평 및 수직 가이드 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "CanvasItem \"%s\" Pivot Offset (%d, %d)로 설정" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5414,12 +5432,12 @@ msgstr "경고: 컨테이너의 자식 규모와 위치는 부모에 의해 결 #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Reset" -msgstr "배율 초기화" +msgstr "줌 초기화" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "선택 모드" +msgstr "모드 선택" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -5440,17 +5458,17 @@ msgstr "Alt+우클릭: 겹친 목록 선택" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode" -msgstr "이동 모드" +msgstr "이동모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode" -msgstr "회전 모드" +msgstr "회전모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode" -msgstr "크기 조절 모드" +msgstr "크기조절 모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -8221,7 +8239,7 @@ msgstr "어클루전" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation" -msgstr "내비게이션" +msgstr "네비게이션" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask" @@ -8284,10 +8302,25 @@ msgid "Create a new rectangle." msgstr "새로운 사각형을 만듭니다." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "사각 영역 칠하기" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "새로운 폴리곤을 만듭니다." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "폴리곤 이동" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "선택 항목 삭제" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "사각형 내부에 폴리곤을 유지." @@ -9379,7 +9412,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "기존 유니폼에 대한 참조입니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9736,6 +9769,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10335,19 +10372,16 @@ msgid "Batch Rename" msgstr "일괄 이름 바꾸기" #: editor/rename_dialog.cpp -#, fuzzy msgid "Replace:" -msgstr "바꾸기: " +msgstr "바꾸기:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Prefix:" -msgstr "접두사" +msgstr "접두사:" #: editor/rename_dialog.cpp -#, fuzzy msgid "Suffix:" -msgstr "접미사" +msgstr "접미사:" #: editor/rename_dialog.cpp msgid "Use Regular Expressions" @@ -10394,9 +10428,8 @@ msgid "Per-level Counter" msgstr "단계별 카운터" #: editor/rename_dialog.cpp -#, fuzzy msgid "If set, the counter restarts for each group of child nodes." -msgstr "설정하면 각 그룹의 자식 노드의 카운터를 다시 시작합니다" +msgstr "설정하면 각 그룹의 자식 노드의 카운터를 다시 시작합니다." #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -10455,9 +10488,8 @@ msgid "Reset" msgstr "되돌리기" #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expression Error:" -msgstr "정규 표현식 오류" +msgstr "정규 표현식 오류:" #: editor/rename_dialog.cpp msgid "At character %s" @@ -11988,6 +12020,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "편집기 설정에서 맞춤 빌드에 잘못된 안드로이드 SDK 경로입니다." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12038,19 +12074,19 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "\"Export AAB\"는 \"Use Custom Build\"가 활성화 된 경우에만 유효합니다." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "잘못된 파일명! Android App Bundle에는 * .aab 확장자가 필요합니다." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK 확장은 Android App Bundle과 호환되지 않습니다." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "잘못된 파일명! Android APK는 *.apk 확장자가 필요합니다." #: platform/android/export/export.cpp msgid "" @@ -12276,6 +12312,26 @@ msgstr "" "CPUParticles2D 애니메이션에는 \"Particles Animation\"이 켜진 " "CanvasItemMaterial을 사용해야 합니다." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12529,7 +12585,7 @@ msgstr "" #: scene/3d/interpolated_camera.cpp msgid "" "InterpolatedCamera has been deprecated and will be removed in Godot 4.0." -msgstr "" +msgstr "InterpolatedCamera는 더 이상 사용되지 않으며 Godot 4.0에서 제거됩니다." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -12593,6 +12649,26 @@ msgstr "" "큰 부담이 됩니다.\n" "대신 자식 충돌 모양의 크기를 변경하세요." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12830,6 +12906,15 @@ msgstr "Varying은 꼭짓점 함수에만 지정할 수 있습니다." msgid "Constants cannot be modified." msgstr "상수는 수정할 수 없습니다." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "이 위치에는 같은 이름의 파일이나 폴더가 있습니다." + +#~ msgid "Error trying to save layout!" +#~ msgstr "레이아웃 저장 중 오류!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "기본 편집기 레이아웃을 덮어씁니다." + #~ msgid "Move pivot" #~ msgstr "피벗 이동" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index ce1f7b4a6a..6dafdd84e0 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -1042,14 +1042,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1094,7 +1097,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2303,11 +2306,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2315,7 +2323,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3621,6 +3629,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3673,15 +3691,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Duplikuoti" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3710,10 +3719,17 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "Duplikuoti" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Mix Nodas" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3749,7 +3765,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8277,10 +8296,25 @@ msgstr "Sukurti Naują" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Sukurti Naują" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Keisti Poligono Skalę" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Keisti Poligono Skalę" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Ištrinti pasirinktus raktažodžius" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9700,6 +9734,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11906,6 +11944,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12165,6 +12207,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12427,6 +12489,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/lv.po b/editor/translations/lv.po index 6fc7c196e7..64a29939e9 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -7,12 +7,13 @@ # Jānis Ondzuls <janisond@inbox.lv>, 2020. # Anonymous <noreply@weblate.org>, 2020. # StiLins <aigars.skilins@gmail.com>, 2020. +# Rihards Kubilis <oldcar@inbox.lv>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-06-04 18:34+0000\n" -"Last-Translator: StiLins <aigars.skilins@gmail.com>\n" +"PO-Revision-Date: 2020-11-15 12:43+0000\n" +"Last-Translator: Rihards Kubilis <oldcar@inbox.lv>\n" "Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/" "godot/lv/>\n" "Language: lv\n" @@ -21,7 +22,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " "19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1032,14 +1033,19 @@ msgid "Owners Of:" msgstr "Īpašnieki:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Vai noņemt izvēlētos failus no projekta? (Netiks atjaunoti)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Faili, kurus Jūs vēlaties noņemt ir nepieciešami citiem resursiem lai tie " "varētu strādāt.\n" @@ -1087,7 +1093,7 @@ msgstr "Bāreņu Resursu Pārlūks" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1996,7 +2002,7 @@ msgstr "" #: editor/editor_help.cpp msgid "Constants" -msgstr "" +msgstr "Konstantes" #: editor/editor_help.cpp msgid "Property Descriptions" @@ -2275,11 +2281,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2287,7 +2298,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3567,6 +3578,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3614,14 +3635,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3649,10 +3662,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3686,7 +3704,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8115,10 +8136,25 @@ msgid "Create a new rectangle." msgstr "Izveidot jaunu taisnstūri." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Izveidot jaunu taisnstūri." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Izveidot jaunu daudzstūri." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Izveidot" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Izdzēst Izvēlēto(ās) Atslēgu(as)" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9517,6 +9553,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11703,6 +11743,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11961,6 +12005,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12221,6 +12285,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/mi.po b/editor/translations/mi.po index cfa15d7032..df5a0dcf55 100644 --- a/editor/translations/mi.po +++ b/editor/translations/mi.po @@ -993,14 +993,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1045,7 +1048,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2225,11 +2228,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2237,7 +2245,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3516,6 +3524,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3563,14 +3581,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3598,10 +3608,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3635,7 +3650,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8021,10 +8039,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9395,6 +9425,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11552,6 +11586,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11804,6 +11842,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12064,6 +12122,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/ml.po b/editor/translations/ml.po index 0fc2207a60..346d52b331 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -1003,14 +1003,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1055,7 +1058,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2237,11 +2240,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2249,7 +2257,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3528,6 +3536,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3575,14 +3593,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3610,10 +3620,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3647,7 +3662,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8037,10 +8055,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "സൂചികകൾ നീക്കം ചെയ്യുക" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9411,6 +9442,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11569,6 +11604,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11821,6 +11860,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12081,6 +12140,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/mr.po b/editor/translations/mr.po index 8a4f7da346..8f588050ab 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -1000,14 +1000,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1052,7 +1055,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2232,11 +2235,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2244,7 +2252,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3523,6 +3531,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3570,14 +3588,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3605,10 +3615,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3642,7 +3657,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8028,10 +8046,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9403,6 +9433,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11560,6 +11594,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11812,6 +11850,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12072,6 +12130,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/ms.po b/editor/translations/ms.po index fcafe6a26c..d00dfd659f 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-15 07:17+0000\n" +"PO-Revision-Date: 2020-12-02 09:52+0000\n" "Last-Translator: Keviindran Ramachandran <keviinx@yahoo.com>\n" "Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/" "ms/>\n" @@ -22,7 +22,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -904,9 +904,8 @@ msgid "Signals" msgstr "Isyarat" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Dari Isyarat:" +msgstr "Tapis isyarat" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1035,18 +1034,26 @@ msgid "Owners Of:" msgstr "Pemilik:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Alih keluar fail terpilih dari projek? (Tidak dapat dipulihkan)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Alih keluar fail terpilih dari projek? (Tidak boleh buat asal)\n" +"Anda boleh mencari fail yang dikeluarkan dalam tong sampah untuk " +"memulihkannya." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Fail yang akan dikeluarkan diperlukan oleh sumber lain agar dapat " "berfungsi.\n" -"Masih mahu keluarkan fail tersebut? (tidak boleh buat asal)" +"Masih mahu keluarkan fail tersebut? (tidak boleh buat asal)\n" +"Anda boleh mencari fail yang dikeluarkan dalam tong sampah untuk " +"memulihkannya." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1090,7 +1097,7 @@ msgstr "Penjelajah Sumber Yatim" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1152,12 +1159,10 @@ msgid "Gold Sponsors" msgstr "Penaja Emas" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" msgstr "Penderma Perak" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" msgstr "Penderma Gangsa" @@ -2314,19 +2319,25 @@ msgid "Error saving TileSet!" msgstr "Ralat semasa menyimpan TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Ralat semasa menyimpan susun atur!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Susun atur lalai telah diganti." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nama susun atur tidak dijumpai!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Tata letak lalai telah dipulihkan ke tetapan asas." #: editor/editor_node.cpp @@ -3626,6 +3637,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3673,14 +3694,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3708,10 +3721,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Pindah Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3745,7 +3764,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8151,10 +8173,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Semua Pilihan" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Padam Kunci Terpilih" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9532,6 +9568,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11700,6 +11740,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11952,6 +11996,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12212,6 +12276,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12414,6 +12498,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Error trying to save layout!" +#~ msgstr "Ralat semasa menyimpan susun atur!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Susun atur lalai telah diganti." + #~ msgid "Move Anim Track Up" #~ msgstr "Ubah Trek Anim Ke Atas" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index f8862919b2..b1bb5ead4b 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -1088,14 +1088,18 @@ msgstr "Eiere Av:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Fjerne valgte filer fra prosjektet? (kan ikke angres)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Filene som fjernes kreves for at andre ressurser skal virke.\n" "Fjern dem likevel? (kan ikke angres)" @@ -1144,7 +1148,7 @@ msgstr "Foreldreløs ressursutforsker" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2439,19 +2443,25 @@ msgid "Error saving TileSet!" msgstr "Error ved lagring av TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error ved lagring av layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Standard editor layout overskrevet." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Layoutnavn ikke funnet!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Gjenoppretter standard layout til grunninnstillinger." #: editor/editor_node.cpp @@ -3879,6 +3889,16 @@ msgid "Name contains invalid characters." msgstr "Navn inneholder ugyldige tegn." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Endrer filnavn:" @@ -3933,15 +3953,6 @@ msgstr "Endre Avhengigheter..." msgid "View Owners..." msgstr "Vis Eiere..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Endre Navn..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Duplisér" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Flytt Til..." @@ -3974,11 +3985,18 @@ msgid "Collapse All" msgstr "Kollaps alle" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Endre navn" +#, fuzzy +msgid "Duplicate..." +msgstr "Duplisér" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Flytt Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Endre Navn..." #: editor/filesystem_dock.cpp #, fuzzy @@ -4017,9 +4035,11 @@ msgid "Move" msgstr "Flytt" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "En fil eller mappe med dette navnet eksisterer allerede." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Endre navn" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8782,10 +8802,25 @@ msgstr "Lag ny %s" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Ny Scene" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Lag en ny polygon fra bunnen." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Flytt Polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Slett Valgte" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -10241,6 +10276,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12561,6 +12600,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12826,6 +12869,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -13086,6 +13149,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13296,6 +13379,16 @@ msgid "Constants cannot be modified." msgstr "Konstanter kan ikke endres." #, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "En fil eller mappe med dette navnet eksisterer allerede." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error ved lagring av layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Standard editor layout overskrevet." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Flytt Pivot" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index f8289c4c55..2b0d754edd 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -47,7 +47,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-08-28 13:09+0000\n" +"PO-Revision-Date: 2020-11-29 08:28+0000\n" "Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" @@ -56,7 +56,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -940,9 +940,8 @@ msgid "Signals" msgstr "Signalen" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Filter tegels" +msgstr "Signalen filteren" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1071,20 +1070,27 @@ msgid "Owners Of:" msgstr "Eigenaren van:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Geselecteerde bestanden uit het project verwijderen? (Kan niet ongedaan " -"gemaakt worden)" +"gemaakt worden)\n" +"De bestanden kunnen mogelijk vanuit de prullenbak van het systeem hersteld " +"worden." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "De bestanden die verwijderd worden zijn nodig om andere bronnen te laten " "werken.\n" -"Toch verwijderen? (Onomkeerbaar)" +"Toch verwijderen? (Onomkeerbaar)\n" +"De bestanden kunnen mogelijk vanuit de prullenbak van het systeem hersteld " +"worden." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1128,7 +1134,7 @@ msgstr "Weesbronnen bekijken" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1190,14 +1196,12 @@ msgid "Gold Sponsors" msgstr "Gouden Sponsors" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" -msgstr "Zilveren Donors" +msgstr "Zilveren Sponsoren" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" -msgstr "Bronzen Donors" +msgstr "Bronzen Sponsoren" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -1710,9 +1714,8 @@ msgid "Node Dock" msgstr "Knooptabblad" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem Dock" -msgstr "Bestandssysteem" +msgstr "Bestandssysteempaneel" #: editor/editor_feature_profile.cpp msgid "Import Dock" @@ -2350,20 +2353,30 @@ msgid "Error saving TileSet!" msgstr "Error bij het opslaan van TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Fout bij het opslaan van indeling!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Fout tijdens het opslaan van de editorindeling.\n" +"Zorg dat er naar het pad voor editorgebruikgegevens beschrijfbaar is." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Standaardeditorindeling overschreven." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Standaardindeling overschreven.\n" +"Om de oorspronkelijke instellingen van de standaardindeling te herstellen, " +"moet je de standaardindeling verwijderen met de optie 'Indeling verwijderen'." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Indelingsnaam niet gevonden!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Standaardindeling teruggezet naar basisinstellingen." +msgid "Restored the Default layout to its base settings." +msgstr "Standaardindeling teruggezet naar oorspronkelijke instellingen." #: editor/editor_node.cpp msgid "" @@ -2856,7 +2869,7 @@ msgstr "Debuggen" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Opstarten met debugging op afstand" +msgstr "Uitrollen met debugging op afstand" #: editor/editor_node.cpp msgid "" @@ -2867,11 +2880,15 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"Als deze optie geactiveerd is, zal één-klik uitrol het programma proberen " +"een verbinding te sarten met het IP-adres van deze computer.\n" +"Deze optie is bedoeld om op afstand fouten op te sporen (gewoonlijk met een " +"mobiel toestel).\n" +"Je hebt dit niet nodig om het draaiende programma lokaal te inspecteren." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" -msgstr "Klein uitvoerbaar bestand opstarten met netwerk bestandsserver" +msgstr "Kleine uitrol met netwerkbestandssysteem" #: editor/editor_node.cpp #, fuzzy @@ -2917,12 +2934,10 @@ msgstr "" "deze optie aanstaat." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Scene Changes" -msgstr "Scèneveranderingen synchroniseren" +msgstr "Veranderingen in de scène synchroniseren" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" @@ -2930,14 +2945,13 @@ msgid "" "filesystem option is enabled." msgstr "" "Wanneer deze optie aanstaat, wordt elke verandering gemaakt in de editor " -"toegepast op het draaiend spel.\n" +"toegepast op het lopende spel.\n" "Wanneer dit op afstand wordt gebruikt op een andere machine, is dit " "efficiënter met het netwerk bestandssysteem." #: editor/editor_node.cpp -#, fuzzy msgid "Synchronize Script Changes" -msgstr "Scriptveranderingen synchroniseren" +msgstr "Veranderingen in scripts synchroniseren" #: editor/editor_node.cpp #, fuzzy @@ -3744,6 +3758,16 @@ msgid "Name contains invalid characters." msgstr "Naam bevat ongeldige tekens." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Bestand hernoemen:" @@ -3791,14 +3815,6 @@ msgstr "Afhankelijkheden aanpassen..." msgid "View Owners..." msgstr "Bekijk eigenaren..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Hernoemen..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Dupliceren..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Verplaats Naar..." @@ -3826,11 +3842,16 @@ msgid "Collapse All" msgstr "Alles inklappen" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Naam wijzigen" +msgid "Duplicate..." +msgstr "Dupliceren..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Naar prullenbak verplaatsen" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Hernoemen..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3865,8 +3886,11 @@ msgid "Move" msgstr "Verplaatsen" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Er is al een bestand of map met dezelfde naam op dit pad." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Naam wijzigen" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5269,27 +5293,24 @@ msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "CanvasItem roteren" +msgstr "%d CanvasItems roteren" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "CanvasItem roteren" +msgstr "CanvasItem \"%s\" roteren tot %d graden" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Verplaats CanvasItem" +msgstr "Verplaats Anker van CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Node2D \"%s\" verschalen naar (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Control \"%s\" vergrootten tot (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -7889,9 +7910,8 @@ msgid "New Animation" msgstr "Niewe animatie" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Speed:" -msgstr "Snelheid (FPS):" +msgstr "Snelheid:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" @@ -8370,10 +8390,25 @@ msgid "Create a new rectangle." msgstr "Creëer nieuwe driehoek." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Teken Driehoek" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Nieuwe veelhoek aanmaken." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Beweeg Polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Geselecteerde Verwijderen" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Houd de veelhoek binnen het rechthoekige gebied." @@ -9862,6 +9897,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12138,6 +12177,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "Ongeldig Android SDK pad voor custom build in Editor Settings." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12434,6 +12477,26 @@ msgstr "" "CPUParticles2D vereist een CanvasItemMaterial met \"Particles Animation\" " "ingeschakeld." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12764,6 +12827,26 @@ msgstr "" "overschreven worden door de physics engine als het spel start.\n" "Verander in plaats daarvan de grootte van CollisionShapes in de kinderen." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13005,6 +13088,15 @@ msgstr "Varyings kunnen alleen worden toegewezenin vertex functies." msgid "Constants cannot be modified." msgstr "Constanten kunnen niet worden aangepast." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Er is al een bestand of map met dezelfde naam op dit pad." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Fout bij het opslaan van indeling!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Standaardeditorindeling overschreven." + #~ msgid "Move pivot" #~ msgstr "Draaipunt verplaatsen" diff --git a/editor/translations/or.po b/editor/translations/or.po index 1144d93efd..ba12c5c7eb 100644 --- a/editor/translations/or.po +++ b/editor/translations/or.po @@ -999,14 +999,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1051,7 +1054,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2231,11 +2234,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2243,7 +2251,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3522,6 +3530,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3569,14 +3587,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3604,10 +3614,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3641,7 +3656,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8027,10 +8045,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9401,6 +9431,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11558,6 +11592,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11810,6 +11848,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12070,6 +12128,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 114e37d50a..3e67b723b5 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -44,12 +44,13 @@ # Roman Skiba <romanskiba0@gmail.com>, 2020. # Piotr Grodzki <ziemniakglados@gmail.com>, 2020. # Dzejkop <jakubtrad@gmail.com>, 2020. +# Mateusz Grzonka <alpinus4@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-27 18:26+0000\n" -"Last-Translator: Tomek <kobewi4e@gmail.com>\n" +"PO-Revision-Date: 2020-12-01 20:29+0000\n" +"Last-Translator: Mateusz Grzonka <alpinus4@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" "Language: pl\n" @@ -58,7 +59,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3.2-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1067,17 +1068,23 @@ msgid "Owners Of:" msgstr "Właściciele:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Usunąć wybrane pliki z projektu? (Nie można ich przywrócić)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Usunąć wybrane pliki z projektu? (nie można tego cofnąć)\n" +"Możesz znaleźć usunięte pliki w systemowym koszu, by je przywrócić." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Usuwany plik jest wymagany przez inne zasoby do działania.\n" -"Usunąć mimo to? (Nie można tego cofnąć)" +"Usuwane pliki są wymagane przez inne zasoby, żeby mogły one działać.\n" +"Usunąć mimo to? (nie można tego cofnąć)\n" +"Możesz znaleźć usunięte pliki w systemowym koszu, by je przywrócić." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1121,7 +1128,7 @@ msgstr "Eksplorator osieroconych zasobów" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1630,34 +1637,31 @@ msgstr "" "Enabled\"." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Platforma docelowa wymaga dla GLES2 kompresji tekstur \"ETC\". Włącz " -"\"Import Etc\" w Ustawieniach Projektu." +"Platforma docelowa wymaga dla GLES2 kompresji tekstur \"PVRTC\". Włącz " +"\"Import Pvrtc\" w Ustawieniach Projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Platforma docelowa wymaga dla GLES3 kompresji tekstur \"ETC2\". Włącz " -"\"Import Etc 2\" w Ustawieniach Projektu." +"Platforma docelowa wymaga dla GLES3 kompresji tekstur \"ETC2\" lub \"PVRTC" +"\". Włącz \"Import Etc 2\" lub \"Import Pvrtc\" w Ustawieniach Projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Platforma docelowa wymaga kompresji tekstur \"ETC\", by sterownik awaryjny " +"Platforma docelowa wymaga kompresji tekstur \"PVRTC\", by sterownik awaryjny " "GLES2 mógł zadziałać.\n" -"Włącz \"Import Etc\" w Ustawieniach Projektu lub wyłącz \"Driver Fallback " +"Włącz \"Import Pvrtc\" w Ustawieniach Projektu lub wyłącz \"Driver Fallback " "Enabled\"." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2335,20 +2339,30 @@ msgid "Error saving TileSet!" msgstr "Błąd podczas zapisywania TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Błąd podczas zapisu układu!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Wystąpił błąd podczas próby zapisu układu edytora.\n" +"Upewnij się, że ścieżka ustawień użytkownika edytora ma możliwość zapisu." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Domyślny układ edytora został nadpisany." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Domyślny układ edytora nadpisany.\n" +"By przywrócić Domyślny układ do bazowych ustawień, użyj opcji Usuń układ i " +"usuń Domyślny układ." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nie znaleziono nazwy układu!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Przywrócono domyślny układ do ustawień bazowych." +msgid "Restored the Default layout to its base settings." +msgstr "Przywrócono Domyślny układ do ustawień bazowych." #: editor/editor_node.cpp msgid "" @@ -3720,6 +3734,16 @@ msgid "Name contains invalid characters." msgstr "Nazwa zawiera niedozwolone znaki." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Zmiana nazwy pliku:" @@ -3767,14 +3791,6 @@ msgstr "Edytuj zależności..." msgid "View Owners..." msgstr "Pokaż właścicieli..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Zmień nazwę..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplikuj..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Przenieś do..." @@ -3802,11 +3818,16 @@ msgid "Collapse All" msgstr "Zwiń wszystko" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Zmień nazwę" +msgid "Duplicate..." +msgstr "Duplikuj..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Przenieś do kosza" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Zmień nazwę..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3841,8 +3862,11 @@ msgid "Move" msgstr "Przenieś" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "W tej lokalizacji istnieje już plik lub folder o podanej nazwie." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Zmień nazwę" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5244,50 +5268,43 @@ msgstr "Utwórz poziomą i pionową prowadnicę" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Ustaw Pivot Offset dla CanvasItem \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Obróć CanvasItem" +msgstr "Obróć %d węzłów CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Obróć CanvasItem" +msgstr "Obróć CanvasItem \"%s\" do %d stopni" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Przesuń CanvasItem" +msgstr "Przesuń Anchor dla CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Przeskaluj Node2D \"%s\" do (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Zmień rozmiar Control \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Skaluj CanvasItem" +msgstr "Przeskaluj %d węzłów CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Skaluj CanvasItem" +msgstr "Przeskaluj CanvasItem \"%s\" do (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Przesuń CanvasItem" +msgstr "Przesuń %d węzłów CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Przesuń CanvasItem" +msgstr "Przesuń CanvasItem \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6569,18 +6586,16 @@ msgid "Move Points" msgstr "Przesuń punkty" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Przeciągnij: Obróć" +msgstr "Command: Obróć" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Przesuń wszystko" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Skaluj" +msgstr "Shift+Command: Skaluj" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6627,14 +6642,12 @@ msgid "Radius:" msgstr "Promień:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Utwórz wielokąt i UV" +msgstr "Kopiuj wielokąt do UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Zamień na Polygon2D" +msgstr "Kopiuj UV do wielokąta" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8182,13 +8195,12 @@ msgid "Paint Tile" msgstr "Maluj kafelek" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+LPM: Rysowanie linii\n" -"Shift+Ctrl+LPM: Malowanie prostokąta" +"Shift+Command+LPM: Malowanie prostokąta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8343,10 +8355,22 @@ msgid "Create a new rectangle." msgstr "Utwórz nowy prostokąt." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Nowy prostokąt" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Utwórz nowy wielokąt." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Nowy Wielokąt" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Usuń Zaznaczony Kształt" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Trzymaj wielokąt wewnątrz regionu Prostokąta." @@ -8714,9 +8738,8 @@ msgid "Add Node to Visual Shader" msgstr "Dodaj Węzeł do Wizualnego Shadera" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Węzeł przesunięty" +msgstr "Węzeł/y przesunięte" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8736,9 +8759,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Typ wejścia shadera wizualnego zmieniony" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Ustaw nazwę uniformu" +msgstr "Nazwa UniformRef zmieniona" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9455,7 +9477,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Referencja do istniejącego uniformu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9822,6 +9844,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12091,6 +12117,10 @@ msgstr "" "Edytora." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Folder \"platform-tools\" nie istnieje!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12143,18 +12173,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Eksportuj AAB\" jest ważne tylko gdy \"Use Custom Build\" jest włączone." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Nieprawidłowa nazwa pliku! Android App Bundle wymaga rozszerzenia *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion nie jest kompatybilne z Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Nieprawidłowa nazwa pliku! APK Androida wymaga rozszerzenia *.apk." #: platform/android/export/export.cpp msgid "" @@ -12191,13 +12223,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Przesuwam wyjście" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Nie udało się skopiować i przemianować pliku eksportu, sprawdź folder " +"projektu gradle po informacje." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12394,6 +12428,26 @@ msgstr "" "Animacja CPUParticles2D wymaga użycia CanvasItemMaterial z włączonym " "\"Particles Animation\"." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12725,6 +12779,26 @@ msgstr "" "nadpisane przez silnik fizyki podczas działania.\n" "Zamiast tego, zmień rozmiary kształtów kolizji w węzłach podrzędnych." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12964,6 +13038,30 @@ msgstr "Varying może być przypisane tylko w funkcji wierzchołków." msgid "Constants cannot be modified." msgstr "Stałe nie mogą być modyfikowane." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "W tej lokalizacji istnieje już plik lub folder o podanej nazwie." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Brakuje folderu \"build-tools\"!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Nie udało się znaleźć narzędzia zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Uzgadnianie APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Nie udało się ukończyć uzgadniania APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Nie udało się usunąć nieuzgodnionego APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Błąd podczas zapisu układu!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Domyślny układ edytora został nadpisany." + #~ msgid "Move pivot" #~ msgstr "Przesuń oś" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index b66652b18b..ca0f2d5f7e 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -1043,14 +1043,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1095,7 +1098,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2311,11 +2314,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2323,7 +2331,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3639,6 +3647,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp #, fuzzy msgid "Renaming file:" msgstr "Rename Variable" @@ -3690,14 +3708,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3725,10 +3735,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Forge yer Node!" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3765,7 +3781,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8307,10 +8326,25 @@ msgstr "Yar, Blow th' Selected Down!" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Yar, Blow th' Selected Down!" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Ye be fixin' Signal:" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9728,6 +9762,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11988,6 +12026,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12247,6 +12289,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12507,6 +12569,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/pt.po b/editor/translations/pt.po index e22a5e7818..b675b90e75 100644 --- a/editor/translations/pt.po +++ b/editor/translations/pt.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-19 21:08+0000\n" +"PO-Revision-Date: 2020-12-01 20:29+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/" "godot/pt/>\n" @@ -31,7 +31,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -695,7 +695,7 @@ msgstr "Mudar valor do Array" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "Vai para linha" +msgstr "Vai para Linha" #: editor/code_editor.cpp msgid "Line Number:" @@ -740,7 +740,7 @@ msgstr "Padrão" #: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "Alternar painel de Scripts" +msgstr "Alternar Painel de Scripts" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -1043,18 +1043,24 @@ msgid "Owners Of:" msgstr "Proprietários de:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Remover ficheiros selecionados do Projeto? (Sem desfazer)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Remover ficheiros selecionados do Projeto? (sem desfazer)\n" +"Pode encontrar os ficheiros removidos na Reciclagem do sistema." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Os ficheiros a serem removidos são necessários para que outros recursos " "funcionem.\n" -"Remover mesmo assim? (sem anular)" +"Remover mesmo assim? (sem desfazer)\n" +"Pode encontrar os ficheiros removidos na Reciclagem do sistema." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1098,7 +1104,7 @@ msgstr "Explorador de Recursos Órfãos" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1327,7 +1333,7 @@ msgstr "Opções de barramento" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "Duplicado" +msgstr "Duplicar" #: editor/editor_audio_buses.cpp msgid "Reset Volume" @@ -1608,35 +1614,32 @@ msgstr "" "Recurso ativo'." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Plataforma Alvo exige compressão de textura 'ETC' para GLES2. Ative " -"'Importar Etc' nas Configurações do Projeto." +"Plataforma Alvo exige compressão de textura 'PVRTC' para GLES2. Ative " +"'Importar Pvrtc' nas Configurações do Projeto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Plataforma Alvo exige compressão de textura 'ETC2' para GLES3. Ative " -"'Importar Etc 2' nas Configurações do Projeto." +"Plataforma Alvo exige compressão de textura 'ETC2' ou 'PVRTC' para GLES3. " +"Ative 'Importar Etc 2' ou 'Importar Pvrtc' nas Configurações do Projeto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Plataforma Alvo exige compressão de textura 'ETC' para o driver de recurso " +"Plataforma Alvo exige compressão de textura 'PVRTC' para o driver de recurso " "em GLES2.\n" -"Ative 'Importar Etc' nas Configurações do Projeto, ou desative 'Driver de " -"Recurso ativo'." +"Ative 'Importar Pvrtc' nas Configurações do Projeto, ou desative 'Driver de " +"Recurso Ativo'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1888,19 +1891,19 @@ msgstr "Subir" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "Alternar Ficheiros escondidos" +msgstr "Alternar Ficheiros Escondidos" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "Alternar favorito" +msgstr "Alternar Favorito" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "Alternar modo" +msgstr "Alternar Modo" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "Focar Caminho" +msgstr "Caminho de Foco" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" @@ -2317,20 +2320,30 @@ msgid "Error saving TileSet!" msgstr "Erro ao guardar TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Erro ao tentar guardar o Modelo!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Ocorreu um erro ao tentar guardar o layout do editor.\n" +"Confirme que o caminho dos dados do utilizador é gravável." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "O modelo do editor predefinido foi substituído." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Layout predefinido do editor anulado.\n" +"Para restaurar o layout predefinido nas configurações base, use a opção " +"Apagar Layout e remova o layout Predefinido." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nome do Modelo não encontrado!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Modelo predefinido restaurado para as configurações base." +msgid "Restored the Default layout to its base settings." +msgstr "Modelo Predefinido restaurado para as configurações base." #: editor/editor_node.cpp msgid "" @@ -2683,7 +2696,7 @@ msgstr "Posição do Painel" #: editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "Modo livre de distrações" +msgstr "Modo Livre de Distrações" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." @@ -2814,7 +2827,7 @@ msgstr "Explorador de Recursos Órfãos..." #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "Sair para a lista de Projetos" +msgstr "Sair para a Lista de Projetos" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/project_export.cpp @@ -2843,7 +2856,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network Filesystem" -msgstr "Distribuição pequena com Sistema de Ficheiros em Rede" +msgstr "Pequena Distribuição com Sistema de Ficheiros de Rede" #: editor/editor_node.cpp msgid "" @@ -2869,8 +2882,8 @@ msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"Com esta opção ativa, formas de colisão e nós raycast (para 2D e 3D) serão " -"visíveis no projeto em execução." +"Quando esta opção está ativada, as formas de colisões e nós raycast (para 2D " +"e 3D) serão visíveis no projeto em execução." #: editor/editor_node.cpp msgid "Visible Navigation" @@ -2930,7 +2943,7 @@ msgstr "Apresentação do Editor" #: editor/editor_node.cpp msgid "Take Screenshot" -msgstr "Captura do ecrã" +msgstr "Captura do Ecrã" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." @@ -3000,7 +3013,7 @@ msgstr "Comunidade" #: editor/editor_node.cpp msgid "About" -msgstr "Sobre Nós" +msgstr "Sobre" #: editor/editor_node.cpp msgid "Play the project." @@ -3163,7 +3176,7 @@ msgstr "Abrir Editor 3D" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "Abrir Editor de Scripts" +msgstr "Abrir Editor de Script" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" @@ -3708,6 +3721,16 @@ msgid "Name contains invalid characters." msgstr "O nome contém caracteres inválidos." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Mudar nome do Ficheiro:" @@ -3755,14 +3778,6 @@ msgstr "Editar Dependências..." msgid "View Owners..." msgstr "Ver proprietários..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renomear..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicar..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mover para..." @@ -3790,11 +3805,16 @@ msgid "Collapse All" msgstr "Colapsar Tudo" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renomear" +msgid "Duplicate..." +msgstr "Duplicar..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Mover para Reciclagem" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renomear..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3829,8 +3849,11 @@ msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Já existe um ficheiro ou pasta com o mesmo nome nesta localização." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renomear" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5226,50 +5249,43 @@ msgstr "Criar Guias Horizontais e Verticais" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Definir CanvasItem \"%s\" Pivot Offset para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rodar CanvasItem" +msgstr "Rodar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rodar CanvasItem" +msgstr "Rodar CanvasItem \"%s\" para %d graus" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Mover CanvasItem" +msgstr "Mover CanvasItem \"%s\" Âncora" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Escalar Node2D \"%s\" para (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensionar Controlo \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Escalar CanvasItem" +msgstr "Escalar %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Escalar CanvasItem" +msgstr "Escalar CanvasItem \"%s\" para (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Mover CanvasItem" +msgstr "Mover %d CanvasItems" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Mover CanvasItem" +msgstr "Mover CanvasItem \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5450,7 +5466,7 @@ msgstr "Reposição do Zoom" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "Modo seleção" +msgstr "Modo Seleção" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -5472,12 +5488,12 @@ msgstr "Alt+RMB: seleção da lista de profundidade" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode" -msgstr "Modo mover" +msgstr "Modo Mover" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode" -msgstr "Modo rodar" +msgstr "Modo Rodar" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5621,7 +5637,7 @@ msgstr "Mostrar Grelha Sempre" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" -msgstr "Mostrar ajudantes" +msgstr "Mostrar Ajudantes" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Rulers" @@ -5629,7 +5645,7 @@ msgstr "Mostrar réguas" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Guides" -msgstr "Mostrar guias" +msgstr "Mostrar Guias" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Origin" @@ -5645,7 +5661,7 @@ msgstr "Mostrar Grupo e Bloquear Ícones" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "Centrar seleção" +msgstr "Centrar Seleção" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" @@ -5702,7 +5718,7 @@ msgstr "Copiar pose" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "Limpar pose" +msgstr "Limpar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6545,18 +6561,16 @@ msgid "Move Points" msgstr "Mover Ponto" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Arrastar: Rotação" +msgstr "Comando: Rodar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Mover tudo" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Escalar" +msgstr "Shift+Comando: Escalar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6605,14 +6619,12 @@ msgid "Radius:" msgstr "Raio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Criar Polígono & UV" +msgstr "Copiar Polígono para UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Converter para Polygon2D" +msgstr "Copiar UV para Polígono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6867,7 +6879,7 @@ msgstr "Reabrir Script Fechado" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "Guardar tudo" +msgstr "Guardar Tudo" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -6916,11 +6928,11 @@ msgstr "Executar" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "Passar dentro" +msgstr "Passar Dentro" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "Passar sobre" +msgstr "Passar Sobre" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" @@ -7077,11 +7089,11 @@ msgstr "Cortar" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Select All" -msgstr "Selecionar tudo" +msgstr "Selecionar Tudo" #: editor/plugins/script_text_editor.cpp msgid "Delete Line" -msgstr "Apagar linha" +msgstr "Apagar Linha" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -7093,7 +7105,7 @@ msgstr "Indentar à direita" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "Alternar comentário" +msgstr "Alternar Comentário" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" @@ -7109,11 +7121,11 @@ msgstr "Mostrar todas as linhas" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" -msgstr "Clonar abaixo" +msgstr "Clonar Abaixo" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "Completar símbolo" +msgstr "Completar Símbolo" #: editor/plugins/script_text_editor.cpp msgid "Evaluate Selection" @@ -7121,7 +7133,7 @@ msgstr "Avaliar Seleção" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "Apagar espaços nos limites" +msgstr "Apagar Espaços nos Limites" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Spaces" @@ -7133,7 +7145,7 @@ msgstr "Converter Indentação em Tabulação" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "Indentação automática" +msgstr "Indentação Automática" #: editor/plugins/script_text_editor.cpp msgid "Find in Files..." @@ -7141,7 +7153,7 @@ msgstr "Localizar em Ficheiros..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "Ajuda contextual" +msgstr "Ajuda Contextual" #: editor/plugins/script_text_editor.cpp msgid "Toggle Bookmark" @@ -7174,7 +7186,7 @@ msgstr "Alternar Breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "Remover todos os Breakpoints" +msgstr "Remover Todos os Breakpoints" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" @@ -7438,35 +7450,35 @@ msgstr "Não disponível para o renderizador GLES2." #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "Vista livre esquerda" +msgstr "Freelook Esquerda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "Vista livre direita" +msgstr "Freelook Direita" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "Vista livre frente" +msgstr "Freelook Frente" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "Vista livre trás" +msgstr "Freelook Trás" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "Vista livre cima" +msgstr "Freelook Cima" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Down" -msgstr "Vista livre baixo" +msgstr "Freelook Baixo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "Modificador de velocidade Freelook" +msgstr "Freelook Modificador de Velocidade" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Slow Modifier" -msgstr "Modificador de Velocidade Freelook" +msgstr "Freelook Modificador de Lentidão" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -7527,27 +7539,27 @@ msgstr "Usar Ajuste" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "Vista de fundo" +msgstr "Vista de Fundo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "Vista de topo" +msgstr "Vista de Topo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "Vista de trás" +msgstr "Vista de Trás" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "Vista de frente" +msgstr "Vista de Frente" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" -msgstr "Vista esquerda" +msgstr "Vista Esquerda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "Vista direita" +msgstr "Vista Direita" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal View" @@ -7559,11 +7571,11 @@ msgstr "Inserir Chave de Animação" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" -msgstr "Focar na origem" +msgstr "Focar na Origem" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "Focar na seleção" +msgstr "Focar na Seleção" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" @@ -8095,7 +8107,7 @@ msgstr "Ficheiro Tema" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" -msgstr "Apagar seleção" +msgstr "Apagar Seleção" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Fix Invalid Tiles" @@ -8120,7 +8132,7 @@ msgstr "Pintar retângulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" -msgstr "Preencher" +msgstr "Balde de Enchimento" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -8155,13 +8167,12 @@ msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+LMB: Desenho de Linha\n" -"Shift+Ctrl+LMB: Pintura de Retângulo" +"Shift+Comando+LMB: Pintura de Retângulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8316,10 +8327,22 @@ msgid "Create a new rectangle." msgstr "Criar novo retângulo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Novo Retângulo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Criar um novo polígono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Novo Polígono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Apagar Forma Selecionada" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Manter polígono dentro da região Rect." @@ -8687,9 +8710,8 @@ msgid "Add Node to Visual Shader" msgstr "Adicionar Nó ao Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nó Movido" +msgstr "Nó(s) Movido(s)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8709,9 +8731,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Alterado Tipo de Entrada do Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Definir Nome do Uniform" +msgstr "Nome de UniformRef Alterado" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9424,7 +9445,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Uma referência para um uniforme existente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9561,15 +9582,15 @@ msgstr "Recursos" #: editor/project_export.cpp msgid "Export all resources in the project" -msgstr "Exportar todos os recursos do Projeto" +msgstr "Exportar todos os recursos do projeto" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "Exportar cenas (e dependências) selecionadas" +msgstr "Exportar cenas selecionadas (e dependências)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" -msgstr "Exportar recursos (e dependências) selecionados" +msgstr "Exportar recursos selecionados (e dependências)" #: editor/project_export.cpp msgid "Export Mode:" @@ -9791,6 +9812,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10395,7 +10420,7 @@ msgstr "Selecione Método" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp msgid "Batch Rename" -msgstr "Renomear em massa" +msgstr "Renomear em Massa" #: editor/rename_dialog.cpp msgid "Replace:" @@ -11613,7 +11638,7 @@ msgstr "" #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " -msgstr "O nó retornou uma sequência de saída (output) incorreta: " +msgstr "O nó retornou uma sequência de saída incorreta: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" @@ -11907,7 +11932,7 @@ msgstr "Selecionar ou criar uma função para editar o gráfico." #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" -msgstr "Apagar Selecionados" +msgstr "Apagar Selecionado" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" @@ -11931,7 +11956,7 @@ msgstr "Atualizar Gráfico" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" -msgstr "Editar Membros" +msgstr "Editar Membro" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -12064,6 +12089,10 @@ msgstr "" "Configurações." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Diretoria 'platform-tools' em falta!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12116,18 +12145,21 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"Exportar AAB\" só é válido quando \"Usar Compilação Personalizada\" está " +"ativa." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Nome de ficheiro inválido! O Pacote Android App exige a extensão *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "Expansão APK não compatível com Pacote Android App." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Nome de ficheiro inválido! APK Android exige a extensão *.apk." #: platform/android/export/export.cpp msgid "" @@ -12164,13 +12196,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "A mover saída" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Incapaz de copiar e renomear ficheiro de exportação, verifique diretoria de " +"projeto gradle por resultados." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12363,6 +12397,26 @@ msgstr "" "Animação CPUParticles2D requer o uso de um CanvasItemMaterial com " "\"Particles Animation\" ativada." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12687,6 +12741,26 @@ msgstr "" "reescritas pelo motor de física na execução.\n" "Mude antes o tamanho das formas de colisão filhas." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12927,6 +13001,30 @@ msgstr "Variações só podem ser atribuídas na função vértice." msgid "Constants cannot be modified." msgstr "Constantes não podem ser modificadas." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Já existe um ficheiro ou pasta com o mesmo nome nesta localização." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Diretoria 'build-tools' em falta!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Incapaz de localizar a ferramenta zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "A alinhar APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Incapaz de completar o alinhamento APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Incapaz de apagar o APK não-alinhado." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Erro ao tentar guardar o Modelo!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "O modelo do editor predefinido foi substituído." + #~ msgid "Move pivot" #~ msgstr "Mover pivô" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 1b81b4f77f..90d332c743 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -101,12 +101,15 @@ # Jairo Tuboi <tuboi.jairo@gmail.com>, 2020. # Felipe Fetter <felipetfetter@gmail.com>, 2020. # Rafael Henrique Capati <rhcapati@gmail.com>, 2020. +# NogardRyuu <nogardryuu@gmail.com>, 2020. +# Elton <eltondeoliveira@outlook.com>, 2020. +# ThiagoCTN <thiagocampostn@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2020-10-05 01:02+0000\n" -"Last-Translator: Rafael Henrique Capati <rhcapati@gmail.com>\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" +"Last-Translator: ThiagoCTN <thiagocampostn@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -114,7 +117,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1123,18 +1126,26 @@ msgid "Owners Of:" msgstr "Donos De:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Remover arquivos selecionados do projeto? (irreversível)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Remover arquivos selecionados do projeto? (irreversível)\n" +"Você pode encontrar os arquivos removidos na lixeira e restaurá-los caso " +"seja necessário." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Os arquivos sendo removidos são requeridos por outros recursos para que " "funcionem.\n" -"Removê-los mesmo assim? (irreversível)" +"Removê-los mesmo assim? (irreversível)\n" +"Você pode encontrar os arquivos removidos na lixeira e restaurá-los caso " +"necessário." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1162,7 +1173,7 @@ msgstr "Consertar Dependências" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "Erros ao carregar!" +msgstr "Erro ao carregar!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" @@ -1178,7 +1189,7 @@ msgstr "Explorador de Recursos Órfãos" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1687,35 +1698,33 @@ msgstr "" "Fallback Enabled' (Recuperação de driver ativada)." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"A plataforma alvo requer compressão de texturas 'ETC' para GLES2. Habilite " -"'Import Etc' nas Configurações de Projeto." +"A plataforma alvo requer compressão de texturas 'PVRTC' para GLES2. Habilite " +"'Importar Pvrtc' nas Configurações de Projeto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"A plataforma de destino requer compactação de textura 'ETC2' para GLES3. " -"Ativar 'Importar Etc 2' nas Configurações do Projeto." +"A plataforma de destino requer compactação de textura 'ETC2' ou 'PVRTC' para " +"GLES3. Ativar 'Importar Etc 2' ou 'Importar Pvrtc' nas Configurações do " +"Projeto." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"A plataforma de destino requer compactação de textura 'ETC' para o driver " +"A plataforma de destino requer compressão de textura 'PVRTC' para o driver " "retornar ao GLES2.\n" -"Ativar 'Importar Etc' em Configurações do Projeto ou desabilitar 'Driver " -"Fallback Enabled' (Recuperação de driver ativada)." +"Habilite 'Importar Pvrtc' em Configurações do Projeto ou desabilite 'Driver " +"Reserva Ativado'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -2396,20 +2405,30 @@ msgid "Error saving TileSet!" msgstr "Erro ao salvar TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Erro ao salvar o layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Ocorreu um erro ao tentar salvar o layout do editor.\n" +"Certifique-se de que o caminho de dados do usuário do editor seja gravável." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Layout padrão do editor sobrescrito." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Layout do editor padrão substituído.\n" +"Para restaurar o layout padrão para suas configurações básicas, use a opção " +"Excluir layout e exclua o layout padrão." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Nome do layout não encontrado!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Layout padrão restaurado às configurações base." +msgid "Restored the Default layout to its base settings." +msgstr "Layout padrão restaurado às configurações básicas." #: editor/editor_node.cpp msgid "" @@ -3791,6 +3810,16 @@ msgid "Name contains invalid characters." msgstr "Nome contém caracteres inválidos." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Renomear arquivo:" @@ -3838,14 +3867,6 @@ msgstr "Editar Dependências..." msgid "View Owners..." msgstr "Visualizar Proprietários..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Renomear..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicar..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mover Para..." @@ -3873,11 +3894,16 @@ msgid "Collapse All" msgstr "Recolher Tudo" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Renomear" +msgid "Duplicate..." +msgstr "Duplicar..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Mover para o Lixo" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Renomear..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3912,8 +3938,11 @@ msgid "Move" msgstr "Mover" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Já há uma pasta ou arquivo neste caminho com o nome especificado." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Renomear" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5317,50 +5346,43 @@ msgstr "Criar Guias Horizontais e Verticais" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Definir Deslocamento do Pivô do CanvasItem \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Rotacionar CanvasItem" +msgstr "Rotacionar %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Rotacionar CanvasItem" +msgstr "Rotacionar CanvasItem \"%s\" para %d graus" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Mover CanvaItem" +msgstr "Mover Âncora do CanvaItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Dimensionar Node2D \"%s\" para (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Redimensinar Controle \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Tamanho CanvasItem" +msgstr "Dimensionar %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Tamanho CanvasItem" +msgstr "Redimensionar CanvasItem \"%s\" para (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Mover CanvaItem" +msgstr "Mover %d CanvaItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Mover CanvaItem" +msgstr "Mover CanvaItem \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6641,18 +6663,16 @@ msgid "Move Points" msgstr "Mover pontos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Arrastar: Rotacionar" +msgstr "Command: Rotacionar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Mover Todos" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Escala" +msgstr "Shift+Command: Redimensionar" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6701,14 +6721,12 @@ msgid "Radius:" msgstr "Raio:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Criar Polígono & UV" +msgstr "Copiar Polígono para UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Converter para Polígono2D" +msgstr "Copiar UV para Polígono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8253,13 +8271,12 @@ msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+LMB: Desenhar Linha\n" -"Shift+Ctrl+LMB: Pintar Retângulo" +"Shift+Command+LMB: Pintar Retângulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8271,7 +8288,7 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "Pegar Tile" +msgstr "Escolher Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Left" @@ -8414,10 +8431,22 @@ msgid "Create a new rectangle." msgstr "Criar um novo retângulo." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Novo Retângulo" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Criar um novo polígono." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Novo Polígono" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Excluir Formas Selecionados" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Mantenha o polígono dentro da região Rect." @@ -8784,9 +8813,8 @@ msgid "Add Node to Visual Shader" msgstr "Adicionar Nó ao Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Nó Movido" +msgstr "Node(s) Movidos" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -9523,8 +9551,9 @@ msgstr "" "uniformes e constantes." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "A reference to an existing uniform." -msgstr "" +msgstr "Uma referência a um uniforme existente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9891,6 +9920,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12168,6 +12201,10 @@ msgstr "" "do Editor." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12462,6 +12499,26 @@ msgstr "" "A animação CPUParticles2D requer o uso de um CanvasItemMaterial com " "\"Animação de partículas\" ativada." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12790,6 +12847,26 @@ msgstr "" "sobrescritas pelo motor de física ao executar.\n" "Ao invés disso, altere o tamanho nas formas de colisão filhas." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13033,6 +13110,15 @@ msgstr "Variáveis só podem ser atribuídas na função de vértice." msgid "Constants cannot be modified." msgstr "Constantes não podem serem modificadas." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Já há uma pasta ou arquivo neste caminho com o nome especificado." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Erro ao salvar o layout!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Layout padrão do editor sobrescrito." + #~ msgid "Move pivot" #~ msgstr "Mover Pivô" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index 1bdb567685..95bca8b085 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -1042,14 +1042,19 @@ msgid "Owners Of:" msgstr "Stăpâni La:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Ștergeți fișierele selectate din proiect? (Acțiune ireversibilă)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Fișierele în proces de ștergere sunt necesare pentru alte resurse ca ele să " "sa funcționeze.\n" @@ -1097,7 +1102,7 @@ msgstr "Explorator de Resurse Orfane" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2322,19 +2327,25 @@ msgid "Error saving TileSet!" msgstr "Eroare la salvarea TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Eroare la încercarea de a salva schema!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Schemă implicită de editor suprascrisă." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Numele schemei nu a fost găsit!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "S-a restaurat schema implictă la setările de bază." #: editor/editor_node.cpp @@ -3696,6 +3707,16 @@ msgid "Name contains invalid characters." msgstr "Numele furnizat conține caractere nevalide." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Redenumind fișierul:" @@ -3743,14 +3764,6 @@ msgstr "Editează Dependințele..." msgid "View Owners..." msgstr "Vizualizează Proprietarii..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Redenumește..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplicați..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Mută În..." @@ -3778,11 +3791,17 @@ msgid "Collapse All" msgstr "Reduceți Toate" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Redenumește" +msgid "Duplicate..." +msgstr "Duplicați..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Mutați Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Redenumește..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3817,8 +3836,11 @@ msgid "Move" msgstr "Mută" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Există deja un fișier sau un dosar cu același nume în această locație." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Redenumește" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8445,10 +8467,25 @@ msgstr "Creați un dreptunghi nou." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Scenă Nouă" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Creează un nou poligon de la zero." #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Deplasare poligon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Ştergeți Cheile Selectate" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9868,6 +9905,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12108,6 +12149,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12366,6 +12411,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12626,6 +12691,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12831,6 +12916,16 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "Există deja un fișier sau un dosar cu același nume în această locație." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Eroare la încercarea de a salva schema!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Schemă implicită de editor suprascrisă." + #, fuzzy #~ msgid "Move pivot" #~ msgstr "Mută Pivot" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index d261bb8832..7a6d423212 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -88,11 +88,12 @@ # NeoLan Qu <it.bulla@mail.ru>, 2020. # Nikita Epifanov <nikgreens@protonmail.com>, 2020. # Cube Show <griiv.06@gmail.com>, 2020. +# Roman Tolkachyov <roman@tolkachyov.name>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-15 23:15+0000\n" +"PO-Revision-Date: 2020-12-01 20:29+0000\n" "Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" @@ -102,7 +103,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1112,17 +1113,23 @@ msgid "Owners Of:" msgstr "Владельцы:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Удалить выбранные файлы из проекта? (Нельзя восстановить)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Удалить выбранные файлы из проекта? (Нельзя восстановить)\n" +"Вы можете найти удалённые файлы в Корзине, чтобы восстановить их." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Удаляемый файл требуется для правильной работы других ресурсов.\n" -"Всё равно удалить его? (Нельзя отменить!)" +"Удаляемые файлы требуются для правильной работы других ресурсов.\n" +"Всё равно удалить их? (Нельзя отменить!)\n" +"Вы можете найти удалённые файлы в Корзине, чтобы восстановить их." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1166,7 +1173,7 @@ msgstr "Обзор подключённых ресурсов" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1674,33 +1681,31 @@ msgstr "" "Enabled»." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Целевая платформа требует сжатие текстур «ETC» для GLES2. Включите «Import " -"Etc» в Настройках проекта." +"Целевая платформа требует сжатие текстур «PVRTC» для GLES2. Включите «Import " +"Pvrtc» в Настройках проекта." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Целевая платформа требует компрессию текстур «ETC2» для GLES2. Включите " -"«Import Etc 2» в Настройках проекта." +"Целевая платформа требует компрессию текстур «ETC2» или «PVRTC» для GLES3. " +"Включите «Import Etc 2» или «Import Pvrtc» в Настройках проекта." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Целевая платформа требует сжатия текстур «ETC» для отката драйвера к GLES2.\n" -"Включите «Import Etc» в Настройках проекта или отключите «Driver Fallback " +"Целевая платформа требует сжатия текстур «PVRTC» для отката драйвера к " +"GLES2.\n" +"Включите «Import Pvrtc» в Настройках проекта или отключите «Driver Fallback " "Enabled»." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -2384,20 +2389,30 @@ msgid "Error saving TileSet!" msgstr "Ошибка сохранения набора тайлов!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Ошибка при попытке сохранить макет!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Произошла ошибка при попытке сохранить макет редактора.\n" +"Убедитесь, что путь к пользовательским данным редактора доступен для записи." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Переопределить макет по умолчанию." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Макет редактора по умолчанию перезаписан.\n" +"Чтобы восстановить базовые настройки макета по умолчанию, воспользуйтесь " +"опцией «Удалить макет» и удалите макет по умолчанию." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Название макета не найдено!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Вернуть макет по умолчанию к стандартному." +msgid "Restored the Default layout to its base settings." +msgstr "Макет по умолчанию восстановлен к его базовым настройкам." #: editor/editor_node.cpp msgid "" @@ -3772,6 +3787,16 @@ msgid "Name contains invalid characters." msgstr "Имя содержит недопустимые символы." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Переименование файла:" @@ -3819,14 +3844,6 @@ msgstr "Редактировать зависимости..." msgid "View Owners..." msgstr "Просмотреть владельцев..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Переименовать..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Дублировать..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Переместить в..." @@ -3854,11 +3871,16 @@ msgid "Collapse All" msgstr "Свернуть все" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Переименовать" +msgid "Duplicate..." +msgstr "Дублировать..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Удалить в Корзину" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Переименовать..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3893,8 +3915,11 @@ msgid "Move" msgstr "Переместить" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "По этому пути уже существует файл или папка с указанным именем." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Переименовать" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5292,50 +5317,43 @@ msgstr "Создать горизонтальные и вертикальные #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Задать Pivot Offset узла CanvasItem «%s» в (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Вращать CanvasItem" +msgstr "Вращать %d узлов CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Вращать CanvasItem" +msgstr "Повернуть узел CanvasItem «%s» на %d градусов" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Переместить CanvasItem" +msgstr "Передвинуть якорь узла CanvasItem «%s»" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Масштабировать узел Node2D «%s» в (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Изменить размер узла Control «%s» на (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Вращать CanvasItem" +msgstr "Масштабировать %d узлов CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Вращать CanvasItem" +msgstr "Масштабировать узел CanvasItem «%s» в (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Переместить CanvasItem" +msgstr "Передвинуть %d узлов CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Переместить CanvasItem" +msgstr "Передвинуть CanvasItem «%s» в (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6612,18 +6630,16 @@ msgid "Move Points" msgstr "Передвинуть точки" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Тащить: Поворот" +msgstr "Command: Повернуть" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Передвинуть все" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Масштаб" +msgstr "Shift+Command: Масштаб" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6671,14 +6687,12 @@ msgid "Radius:" msgstr "Радиус:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Создать полигон и UV" +msgstr "Копировать полигон в UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Преобразовать в Polygon2D" +msgstr "Копировать UV в полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8228,13 +8242,12 @@ msgid "Paint Tile" msgstr "Покрасить тайл" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+ЛКМ: Нарисовать линию\n" -"Shift+Ctrl+ЛКМ: Нарисовать прямоугольник" +"Shift+Command+ЛКМ: Нарисовать прямоугольник" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8389,10 +8402,22 @@ msgid "Create a new rectangle." msgstr "Создать новый прямоугольник." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Новый прямоугольник" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Создать новый полигон." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Новый полигон" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Удалить выбранную форму" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Держать полигон внутри области Rect." @@ -8760,9 +8785,8 @@ msgid "Add Node to Visual Shader" msgstr "Добавить узел в визуальный шейдер" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Узел перемещён" +msgstr "Узел(узлы) перемещён(ны)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8782,9 +8806,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Изменен тип ввода визуального шейдера" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Задать имя uniform" +msgstr "Имя UniformRef изменено" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9499,7 +9522,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Ссылка на существующий uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9867,6 +9890,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -10654,7 +10681,7 @@ msgstr "Дополнить сценой(ами)" #: editor/scene_tree_dock.cpp msgid "Replace with Branch Scene" -msgstr "Сохранить ветку как сцену" +msgstr "Заменить на сцену-ветку" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" @@ -10867,11 +10894,11 @@ msgstr "Соединить со сценой" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" -msgstr "Сохранить ветку, как сцену" +msgstr "Сохранить ветку как сцену" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" -msgstr "Копировать путь ноды" +msgstr "Копировать путь узла" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" @@ -11988,7 +12015,7 @@ msgstr "Удалить выделенное" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "Найти тип нода" +msgstr "Найти тип узла" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" @@ -12139,6 +12166,10 @@ msgstr "" "редактора." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Директория «platform-tools» отсутствует!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12190,18 +12221,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"«Export AAB» действителен только при включённой опции «Использовать " +"пользовательскую сборку»." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "Неверное имя файла! Android App Bundle требует расширения *.aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion несовместимо с Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Неверное имя файла! Android APK требует расширения *.apk." #: platform/android/export/export.cpp msgid "" @@ -12238,13 +12271,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Перемещение выходных данных" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Невозможно скопировать и переименовать файл экспорта, проверьте диекторию " +"проекта gradle на наличие выходных данных." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12432,6 +12467,26 @@ msgstr "" "Анимация CPUParticles2D требует использования CanvasItemMaterial с " "включённой опцией «Particles Animation»." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12758,6 +12813,26 @@ msgstr "" "переопределены движком при запуске.\n" "Измените размер дочерней формы коллизии." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13000,6 +13075,30 @@ msgstr "Изменения могут быть назначены только msgid "Constants cannot be modified." msgstr "Константы не могут быть изменены." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "По этому пути уже существует файл или папка с указанным именем." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Директория «build-tools» отсутствует!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Не удалось найти инструмент zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Выравнивание APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Невозможно завершить выравнивание APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Не удалось удалить невыровненный APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Ошибка при попытке сохранить макет!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Переопределить макет по умолчанию." + #~ msgid "Move pivot" #~ msgstr "Переместить опорную точку" diff --git a/editor/translations/si.po b/editor/translations/si.po index 87851aa75a..e1675c412f 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -1022,14 +1022,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1074,7 +1077,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2255,11 +2258,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2267,7 +2275,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3548,6 +3556,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3595,14 +3613,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3630,10 +3640,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3667,7 +3682,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8092,10 +8110,23 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "තෝරාගත් යතුරු මකා දමන්න" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9478,6 +9509,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11652,6 +11687,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11904,6 +11943,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12164,6 +12223,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index cedcac1f60..db612cbd65 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -1027,14 +1027,19 @@ msgid "Owners Of:" msgstr "Majitelia:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Odstrániť vybraté súbory z projektu? (nedá sa vrátiť späť)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Súbory ktoré budú odstránené vyžadujú ďalšie zdroje, aby mohli pracovať.\n" "Odstrániť aj napriek tomu? (nedá sa vrátiť späť)" @@ -1081,7 +1086,7 @@ msgstr "Orphan Resource Explorer" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2298,19 +2303,25 @@ msgid "Error saving TileSet!" msgstr "Error pri ukladaní TileSet-u!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Error pri ukladaní layout-i!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Predvolený editor layout je prepísaný." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Meno Layout-u sa nenašlo!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Obnovené predvolené rozloženie na základné nastavenia." #: editor/editor_node.cpp @@ -3680,6 +3691,16 @@ msgid "Name contains invalid characters." msgstr "Meno obsahuje neplatné písmená." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Zostávajúce súbory:" @@ -3727,14 +3748,6 @@ msgstr "Editovať Závislosti..." msgid "View Owners..." msgstr "Zobraziť Majiteľov..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Premenovať..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Duplikovať..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Presunúť Do..." @@ -3762,11 +3775,17 @@ msgid "Collapse All" msgstr "Collapse All" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Premenovať" +msgid "Duplicate..." +msgstr "Duplikovať..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Presunúť AutoLoad-y" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Premenovať..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3801,8 +3820,11 @@ msgid "Move" msgstr "Presunúť" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Už tu je súbor alebo priečinok pomenovaný rovnako." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Premenovať" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8330,10 +8352,25 @@ msgstr "Vytvoriť adresár" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Nová Scéna" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Vytvoriť adresár" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Signály:" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Zmazať označené kľúč(e)" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9770,6 +9807,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12002,6 +12043,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12267,6 +12312,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -12536,6 +12601,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12741,6 +12826,15 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Už tu je súbor alebo priečinok pomenovaný rovnako." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Error pri ukladaní layout-i!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Predvolený editor layout je prepísaný." + #~ msgid "Move pivot" #~ msgstr "Presunúť pivot" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 5f0f2941a8..0326de6a9f 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -1084,14 +1084,18 @@ msgstr "Lastniki:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Odstranim izbrane datoteke iz projekta? (brez vrnitve)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Izbrisane datoteke so potrebne za delovanje drugih virov.\n" "Ali jih vseeno odstranim? (brez vrnitve)" @@ -1140,7 +1144,7 @@ msgstr "Raziskovalec Osamljenih Virov" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2410,19 +2414,25 @@ msgid "Error saving TileSet!" msgstr "Napaka pri shranjevanju PloščnegaNiza!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Napaka pri shranjevanju postavitev!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Privzeti urejevalnik postavitev je bil prepisan." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Ime postavitve ni mogoče najti!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Privzeta postavitev je bila ponastavljena na osnovne nastaviteve." #: editor/editor_node.cpp @@ -3819,6 +3829,16 @@ msgid "Name contains invalid characters." msgstr "Ime vsebuje neveljavne znake." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Preimenovanje Datoteke:" @@ -3871,14 +3891,6 @@ msgstr "Uredi Odvisnosti..." msgid "View Owners..." msgstr "Poglej Lastnike..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Preimenuj..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Podvoji..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Premakni V..." @@ -3911,11 +3923,17 @@ msgid "Collapse All" msgstr "Skrči vse" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Preimenuj" +msgid "Duplicate..." +msgstr "Podvoji..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Premakni SamodejnoNalaganje" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Preimenuj..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3954,9 +3972,11 @@ msgid "Move" msgstr "Premakni" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "Datoteka ali mapa s tem imenom že obstaja." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Preimenuj" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8658,10 +8678,25 @@ msgstr "Ustvari Nov %s" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Nov Prizor" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Ustvarite Poligon" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Uredi Poligon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Izbriši Izbrano" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -10110,6 +10145,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12390,6 +12429,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12664,6 +12707,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12929,6 +12992,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13148,6 +13231,16 @@ msgid "Constants cannot be modified." msgstr "Konstante ni možno spreminjati." #, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Datoteka ali mapa s tem imenom že obstaja." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Napaka pri shranjevanju postavitev!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Privzeti urejevalnik postavitev je bil prepisan." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Premakni Točko" diff --git a/editor/translations/sq.po b/editor/translations/sq.po index fcc1ee403d..434fd72854 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -1026,14 +1026,18 @@ msgstr "Pronarët e:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Hiq skedarët e zgjedhur nga projekti? (pa kthim pas)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Skedarët që do të hiqen janë të kërkuara nga resurse të tjera në mënyrë që " "ato të funksionojnë.\n" @@ -1082,7 +1086,7 @@ msgstr "Eksploruesi I Resurseve Pa Zotërues" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2349,19 +2353,25 @@ msgid "Error saving TileSet!" msgstr "Gabim gjatë ruajtjes së TileSet-it!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Gabim duke provuar të ruaj faqosjen!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Faqosja e parazgjedhur e editorit u mbishkel." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Emri i faqosjes nuk u gjet!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Riktheu faqosjen e parazgjedhur në opsionet bazë." #: editor/editor_node.cpp @@ -3759,6 +3769,16 @@ msgid "Name contains invalid characters." msgstr "Emri permban karaktere të pasakta." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Duke riemërtuar skedarin:" @@ -3811,14 +3831,6 @@ msgstr "Modifiko Varësitë..." msgid "View Owners..." msgstr "Shiko Pronarët..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Riemërto..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Dyfisho..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Lëviz në..." @@ -3847,11 +3859,17 @@ msgid "Collapse All" msgstr "Mbyll të Gjitha" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Riemërto" +msgid "Duplicate..." +msgstr "Dyfisho..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Lëviz Autoload-in" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Riemërto..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3889,10 +3907,11 @@ msgid "Move" msgstr "Lëviz" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "" -"Ekziston që më parë një skedar ose folder me të njëjtin emër në këtë " -"vendndodhje." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Riemërto" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8368,10 +8387,25 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Rectangle" +msgstr "Skenë e Re" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Krijo një Poligon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Fshi Çelësat e Zgjedhur" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9768,6 +9802,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11991,6 +12029,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12245,6 +12287,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12505,6 +12567,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12707,6 +12789,17 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "" +#~ "Ekziston që më parë një skedar ose folder me të njëjtin emër në këtë " +#~ "vendndodhje." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Gabim duke provuar të ruaj faqosjen!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Faqosja e parazgjedhur e editorit u mbishkel." + #, fuzzy #~ msgid "Add initial export..." #~ msgstr "Shto te të preferuarat" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 68cddb924c..d5b4d28f95 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -1139,14 +1139,18 @@ msgstr "Власници:" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Обриши одабране датотеке из пројекта? (НЕМА ОПОЗИВАЊА)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Жељене датотеке за брисање су потребне за рад других ресурса.\n" "Ипак их обриши? (НЕМА ОПОЗИВАЊА)" @@ -1196,7 +1200,7 @@ msgstr "Преглед повезаних ресурса" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2528,19 +2532,25 @@ msgid "Error saving TileSet!" msgstr "Грешка при чувању TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Грешка при чувању распореда!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Уобичајен распоред је преуређен." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Име распореда није пронађен!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Постави подразумевани изглед на почетну вредност." #: editor/editor_node.cpp @@ -4011,6 +4021,16 @@ msgid "Name contains invalid characters." msgstr "Дато име садржи неважећа слова." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Преименовање датотеке:" @@ -4065,15 +4085,6 @@ msgstr "Измени зависности..." msgid "View Owners..." msgstr "Погледај власнике..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Преименуј..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Дуплирај" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Помери у..." @@ -4106,11 +4117,18 @@ msgid "Collapse All" msgstr "Умањи све" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Преименуј" +#, fuzzy +msgid "Duplicate..." +msgstr "Дуплирај" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Помери аутоматско учитавање" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Преименуј..." #: editor/filesystem_dock.cpp #, fuzzy @@ -4149,9 +4167,11 @@ msgid "Move" msgstr "Помери" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "Датотека или директоријум са овим именом већ постоји." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Преименуј" #: editor/filesystem_dock.cpp #, fuzzy @@ -9144,11 +9164,26 @@ msgstr "Направи нов" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Цртање правоугаоником" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Направи нови полигон од почетка." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Polygon" +msgstr "Помери полигон" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Обриши одабрани Кључ/еве" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Keep polygon inside region Rect." msgstr "Задржи многоугао унутар региона Четвороугла." @@ -10895,6 +10930,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "" "Higher visual quality\n" @@ -13591,6 +13630,10 @@ msgstr "" "Неважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp #, fuzzy msgid "" "Android build template not installed in the project. Install it from the " @@ -13913,6 +13956,26 @@ msgstr "" "ПроцесорЧестице2Д анимација захтева коришћење ПлатноПредметМатеријала са " "омогућеном \"Анимациом Честица\"." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp #, fuzzy msgid "" @@ -14281,6 +14344,26 @@ msgstr "" "Промена величине у ТврдомТелу (у карактеру или трвдом моду) ће бити " "преписана од стране физичког мотора у раду." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -14560,6 +14643,16 @@ msgid "Constants cannot be modified." msgstr "Константе није могуће мењати." #, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Датотека или директоријум са овим именом већ постоји." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Грешка при чувању распореда!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Уобичајен распоред је преуређен." + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Помери пивот" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index acd02840c7..3343da96fc 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -1031,14 +1031,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1083,7 +1086,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2269,11 +2272,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2281,7 +2289,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3565,6 +3573,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3612,14 +3630,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3647,10 +3657,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3684,7 +3699,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8149,10 +8167,25 @@ msgstr "Napravi" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Napravi" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Napravi" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Napravi" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Izbriši označeni ključ(eve)" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9554,6 +9587,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11741,6 +11778,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11993,6 +12034,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12253,6 +12314,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 86a496279a..faab1ec8ed 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -19,12 +19,14 @@ # André Andersson <andre.eric.andersson@gmail.com>, 2020. # Andreas Westrell <andreas.westrell@gmail.com>, 2020. # Gustav Andersson <gustav.andersson96@outlook.com>, 2020. +# Shaggy <anton_christoffersson@hotmail.com>, 2020. +# Marcus Toftedahl <marcus.toftedahl@his.se>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-29 09:14+0000\n" -"Last-Translator: Gustav Andersson <gustav.andersson96@outlook.com>\n" +"PO-Revision-Date: 2020-11-04 02:39+0000\n" +"Last-Translator: Marcus Toftedahl <marcus.toftedahl@his.se>\n" "Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/" "godot/sv/>\n" "Language: sv\n" @@ -32,7 +34,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.3.2-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -913,9 +915,8 @@ msgid "Signals" msgstr "Signaler" #: editor/connections_dialog.cpp -#, fuzzy msgid "Filter signals" -msgstr "Filtrera Filer..." +msgstr "Filtrera signaler" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -1043,14 +1044,19 @@ msgid "Owners Of:" msgstr "Ägare av:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Ta bort valda filer från projektet? (Kan ej återställas)" #: editor/dependency_editor.cpp +#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "Filerna som tas bort krävs av andra resurser för att de ska fungera.\n" "Ta bort dem ändå? (går inte ångra)" @@ -1089,9 +1095,8 @@ msgid "Permanently delete %d item(s)? (No undo!)" msgstr "Ta bort %d sak(er) permanent? (Går inte ångra!)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Show Dependencies" -msgstr "Beroenden" +msgstr "Visa Beroenden" #: editor/dependency_editor.cpp msgid "Orphan Resource Explorer" @@ -1099,7 +1104,7 @@ msgstr "Föräldralös Resursutforskare" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1161,12 +1166,10 @@ msgid "Gold Sponsors" msgstr "Guldsponsorer" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Sponsors" msgstr "Silverdonatorer" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Sponsors" msgstr "Bronsdonatorer" @@ -1308,9 +1311,8 @@ msgid "Delete Bus Effect" msgstr "Ta bort Buss-Effekt" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Drag & drop to rearrange." -msgstr "Ljud-Buss, dra och släpp för att ändra ordning." +msgstr "Dra och släpp för att ändra ordning." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1370,12 +1372,10 @@ msgid "Move Audio Bus" msgstr "Flytta Ljud-Buss" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save Audio Bus Layout As..." msgstr "Spara Ljud-Buss Layout Som..." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Location for New Layout..." msgstr "Plats för Ny Layout..." @@ -1615,6 +1615,10 @@ msgid "" "Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" +"Målplattformen kräver 'ETC' texturkomprimering så GLES2 kan användas som " +"reserv grafik drivare.\n" +"Aktivera 'Import Etc' i Projektinställningarna eller deaktivera 'Driver " +"Fallback Enabled'." #: editor/editor_export.cpp #, fuzzy @@ -1655,7 +1659,7 @@ msgstr "Mallfil hittades inte:" #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." -msgstr "" +msgstr "Anpassad release mall hittades inte." #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" @@ -1663,7 +1667,7 @@ msgstr "Mallfil hittades inte:" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." -msgstr "" +msgstr "Den inbäddade PCK får inte vara större än 4 GiB på 32 bitars exporter." #: editor/editor_feature_profile.cpp #, fuzzy @@ -1706,7 +1710,7 @@ msgstr "Ersätt Alla" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" -msgstr "" +msgstr "Profilen måste ha ett giltigt filnamn och får inte innehålla '.'" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1715,7 +1719,7 @@ msgstr "En fil eller mapp med detta namn finns redan." #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" -msgstr "" +msgstr "(Editor inaktiverad, Egenskaper inaktiverad)" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1734,7 +1738,7 @@ msgstr "Beskrivning:" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" -msgstr "" +msgstr "Aktivera kontextuell redigerare" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1743,7 +1747,7 @@ msgstr "Egenskaper" #: editor/editor_feature_profile.cpp msgid "Enabled Features:" -msgstr "" +msgstr "Aktivera funktioner:" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1752,13 +1756,15 @@ msgstr "Sök Klasser" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." -msgstr "" +msgstr "Fil '%s''s format är ogiltig, import avbruten" #: editor/editor_feature_profile.cpp msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." msgstr "" +"Profilen '%s' finns redan. Ta bort den före du importerar. Importeringen " +"avbruten." #: editor/editor_feature_profile.cpp #, fuzzy @@ -1816,7 +1822,7 @@ msgstr "Radera punkter" #: editor/editor_feature_profile.cpp msgid "Godot Feature Profile" -msgstr "" +msgstr "Godot funktions profil" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1970,11 +1976,11 @@ msgstr "Växla Dolda Filer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." -msgstr "" +msgstr "sortera objekt som ett rutnät av bilder." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a list." -msgstr "" +msgstr "Visa objekt som lista." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -2369,11 +2375,16 @@ msgid "Error saving TileSet!" msgstr "Fel vid sparande av TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Fel vid försök att spara layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2381,7 +2392,7 @@ msgid "Layout name not found!" msgstr "Layoutnamn hittades inte!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3757,6 +3768,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Byter namn på filen:" @@ -3812,16 +3833,6 @@ msgstr "" msgid "View Owners..." msgstr "Visa Ägare..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "Byt namn..." - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "Duplicera" - #: editor/filesystem_dock.cpp #, fuzzy msgid "Move To..." @@ -3855,11 +3866,19 @@ msgid "Collapse All" msgstr "Stäng Alla" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Byt namn" +#, fuzzy +msgid "Duplicate..." +msgstr "Duplicera" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Flytta Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." +msgstr "Byt namn..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3896,9 +3915,11 @@ msgid "Move" msgstr "Flytta" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "There is already file or folder with the same name in this location." -msgstr "En fil eller mapp med detta namn finns redan." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Byt namn" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8542,10 +8563,25 @@ msgstr "Skapa Ny" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Ny Scen" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Skapa Prenumeration" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Redigera Polygon" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Ta bort valda nycklar" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9990,6 +10026,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12275,6 +12315,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12542,6 +12586,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12821,6 +12885,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp #, fuzzy msgid "" @@ -13033,6 +13117,13 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "En fil eller mapp med detta namn finns redan." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Fel vid försök att spara layout!" + +#, fuzzy #~ msgid "Move pivot" #~ msgstr "Flytta Upp" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index 233ec40229..c89be893b8 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -1027,14 +1027,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1079,7 +1082,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2261,11 +2264,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2273,7 +2281,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3555,6 +3563,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3602,15 +3620,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate..." -msgstr "அசைவூட்டு போலிபச்சாவிகள்" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3638,10 +3647,17 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +#, fuzzy +msgid "Duplicate..." +msgstr "அசைவூட்டு போலிபச்சாவிகள்" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "சேர் முக்கியப்புள்ளியை நகர்த்து" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3675,7 +3691,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8092,10 +8111,24 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "அனைத்து தேர்வுகள்" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "அனைத்து தேர்வுகள்" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9476,6 +9509,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11650,6 +11687,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11902,6 +11943,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12162,6 +12223,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/te.po b/editor/translations/te.po index 8d4a4192e8..806a6bb133 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -1002,14 +1002,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1054,7 +1057,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2234,11 +2237,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2246,7 +2254,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3525,6 +3533,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3572,14 +3590,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3607,10 +3617,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3644,7 +3659,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8030,10 +8048,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9405,6 +9435,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11562,6 +11596,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11814,6 +11852,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12074,6 +12132,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/th.po b/editor/translations/th.po index 4f0cf780a4..1a36ecf42b 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -7,12 +7,13 @@ # Thanachart Monpassorn <nunf_2539@hotmail.com>, 2020. # Anonymous <noreply@weblate.org>, 2020. # Lon3r <mptube.p@gmail.com>, 2020. +# Kongfa Warorot <gongpha@hotmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-15 17:26+0000\n" -"Last-Translator: Thanachart Monpassorn <nunf_2539@hotmail.com>\n" +"PO-Revision-Date: 2020-12-01 20:29+0000\n" +"Last-Translator: Kongfa Warorot <gongpha@hotmail.com>\n" "Language-Team: Thai <https://hosted.weblate.org/projects/godot-engine/godot/" "th/>\n" "Language: th\n" @@ -20,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1020,17 +1021,23 @@ msgid "Owners Of:" msgstr "เจ้าของของ:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "ลบไฟล์ที่เลือกออกจากโปรเจกต์? (กู้คืนไม่ได้)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"ลบไฟล์ที่เลือกออกจากโปรเจกต์? (ย้อนกลับไม่ได้)\n" +"คุณสามารถหาไฟล์ที่ลบได้จากถังขยะเพื่อที่จะกู้คืน" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"ไฟล์ที่กำลังจะลบ จำเป็นสำหรับใช้งานโดยทรัพยากรอันอื่น\n" -"จะทำการลบหรือไม่? (คืนกลับไม่ได้)" +"ไฟล์ที่กำลังจะลบ ถูกใช้งานโดยทรัพยากรอันอื่น\n" +"จะทำการลบหรือไม่? (ย้อนกลับไม่ได้)\n" +"คุณสามารถหาไฟล์ที่ลบแล้วในถังขยะเพื่อที่จะกู้คืน" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1074,7 +1081,7 @@ msgstr "ทรัพยากรที่ไม่ได้ใช้" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1165,7 +1172,7 @@ msgstr "ผู้บริจาค" #: editor/editor_about.cpp msgid "License" -msgstr "สัญญาอนุญาต" +msgstr "ลิขสิทธิ์" #: editor/editor_about.cpp msgid "Third-party Licenses" @@ -1580,33 +1587,30 @@ msgstr "" "เปิด 'Import Etc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC' สำหรับ GLES2 เปิด 'Import Etc' " +"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC' สำหรับ GLES2 กรุณาเปิด 'Import Etc' " "ในตั้งค่าโปรเจ็ค" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC2' สำหรับ GLES3 เปิด 'Import Etc 2' " -"ในตั้งค่าโปรเจ็ค" +"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC2' สำหรับ GLES3 กรุณาเปิด 'Import Etc " +"2' หรือ 'Import Pvrtc' ในตั้งค่าโปรเจ็ค" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'ETC' สำหรับการกลับมาใช้ GLES2\n" -"เปิด 'Import Etc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'" +"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'PVRTC' สำหรับการกลับมาใช้ GLES2\n" +"เปิด 'Import Pvrtc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -2274,20 +2278,29 @@ msgid "Error saving TileSet!" msgstr "ผิดพลาดขณะบันทึกไทล์เซต!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "ผิดพลาดขณะบันทึกเลย์เอาต์!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"เกิดข้อผิดพลาดขณะกำลังบันทึกเลเอาต์ของเอดิเตอร์\n" +"ตรวจสอบให้แน่ใจว่าที่อยู่ข้อมูลผู้ใช้เอดิเตอร์สามารถแก้ไขได้" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "แทนที่เลย์เอาต์เริ่มต้น" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"เลเอาต์เอดิเตอร์ดั้งเดิมถูกเขียนทับ\n" +"เพื่อที่จะกู้คืนเลเอาต์ดั้งเดิมไปยังการตั้งค่าพื้นฐาน ใช้การตั้งค่า Delete Layout และลบเลเอาต์ตั้งเดิม" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "ไม่พบชื่อเลย์เอาต์!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "คืนเลย์เอาต์เป็นค่าเริ่มต้น" +msgid "Restored the Default layout to its base settings." +msgstr "คืนเลย์เอาต์ดั้งเดิมไปยังการตั้งค่าพื้นฐาน" #: editor/editor_node.cpp msgid "" @@ -3622,6 +3635,16 @@ msgid "Name contains invalid characters." msgstr "อักษรบางตัวใช้ไม่ได้" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "เปลี่ยนชื่อไฟล์:" @@ -3669,14 +3692,6 @@ msgstr "แก้ไขการอ้างอิง..." msgid "View Owners..." msgstr "ดูเจ้าของ..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "เปลี่ยนชื่อ..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "ทำซ้ำ..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "ย้ายไป..." @@ -3704,11 +3719,16 @@ msgid "Collapse All" msgstr "ยุบเข้า" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "เปลี่ยนชื่อ" +msgid "Duplicate..." +msgstr "ทำซ้ำ..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "ย้ายไปถังขยะ" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "เปลี่ยนชื่อ..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3743,8 +3763,11 @@ msgid "Move" msgstr "ย้าย" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "มีไฟล์หรือโฟลเดอร์ชื่อเดียวกันอยู่แล้ว" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "เปลี่ยนชื่อ" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5125,50 +5148,43 @@ msgstr "สร้างเส้นไกด์แนวตั้งและแ #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "ตั้งออฟเซ็ตจุดหมุน CanvasItem \"%s\" ไปยัง (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "หมุน CanvasItem" +msgstr "หมุน %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "หมุน CanvasItem" +msgstr "หมุน CanvasItem \"%s\" ไปที่ %d องศา" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "เลื่อน CanvasItem" +msgstr "เลื่อนจุดยึด CanvasItem \"%s\"" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "ปรับขนาด Node2D \"%s\" ไปยัง (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "ปรับขนาด Control \"%s\" ไปยัง (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "ขนาด CanvasItem" +msgstr "ปรับขนาด %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "ขนาด CanvasItem" +msgstr "ปรับขนาด CanvasItem \"%s\" ไปยัง (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "เลื่อน CanvasItem" +msgstr "เลื่อน %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "เลื่อน CanvasItem" +msgstr "เลื่อน CanvasItem \"%s\" ไปยัง (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6431,16 +6447,14 @@ msgid "Move Points" msgstr "ย้ายจุด" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "ลาก: หมุน" +msgstr "ctrl: หมุน" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: ย้ายทั้งหมด" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" msgstr "Shift+Ctrl: ปรับขนาด" @@ -6489,14 +6503,12 @@ msgid "Radius:" msgstr "รัศมี:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "สร้าง Polygon และ UV" +msgstr "คัดลอกโพลีกอนไปยังยูวี" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "แปลงเป็น Polygon2D" +msgstr "คัดลอกยูวีไปยังโพลีกอน" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -7168,7 +7180,7 @@ msgstr "แทรกคีย์แอนิเมชัน" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" -msgstr "เสียงสูงต่ำ" +msgstr "Pitch" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" @@ -8036,13 +8048,12 @@ msgid "Paint Tile" msgstr "วาดไทล์" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift+LMB: วาดเส้น\n" -"Shift+Ctrl+LMB: วาดสี่เหลี่ยม" +"Shift+คลิกซ้าย: วาดเส้น\n" +"Shift+Ctrl+คลิกซ้าย: วาดสี่เหลี่ยม" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8197,10 +8208,22 @@ msgid "Create a new rectangle." msgstr "สร้างสี่เหลี่ยมใหม่" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "สี่เหลี่ยมใหม่" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "สร้างรูปหลายเหลี่ยมใหม่" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "รูปหลายเหลี่ยมใหม่" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "ลบรูปร่างที่เลือก" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "ให้รูปหลายเหลี่ยมอยู่ในขอบเขตของสี่เหลี่ยม" @@ -8564,9 +8587,8 @@ msgid "Add Node to Visual Shader" msgstr "เพิ่มโหนดไปยังเวอร์ชวลเชดเดอร์" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "ย้ายโหนดเรียบร้อย" +msgstr "เลื่อนโหนดแล้ว" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8586,9 +8608,8 @@ msgid "Visual Shader Input Type Changed" msgstr "เปลี่ยนชนิดของอินพุตเวอร์ชวลเชดเดอร์" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "ตั้งชื่อยูนิฟอร์ม" +msgstr "เปลี่ยนชื่อ UniformRef แล้ว" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9285,7 +9306,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "การอ้างอิงถึงยูนิฟอร์มที่มีอยู่" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9637,6 +9658,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11859,6 +11884,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "ที่อยู่ Android SDK ผิดพลาดสำหรับการสร้างแบบกำหนดเองในการตั้งค่าเอดิเตอร์" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "ไดเร็กทอรี 'platform-tools' หายไป!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11904,19 +11933,19 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่อเปิดใช้งาน \"Use Custom Build\"" #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "ชื่อไฟล์ผิดพลาด! แอนดรอยด์แอปบันเดิลจำเป็นต้องมีนามสกุล *.aab" #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "การขยาย APK เข้ากันไม่ได้กับแอนดรอยด์แอปบันเดิล" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "ชื่อไฟล์ผิดพลาด! แอนดรอยด์ APK จำเป็นต้องมีนามสกุล *.apk" #: platform/android/export/export.cpp msgid "" @@ -11951,13 +11980,14 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "กำลังย้ายเอาต์พุต" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"ไม่สามารถคัดลอกและเปลี่ยนชื่อไฟล์ส่งออก ตรวจสอบไดเร็กทอรีโปรเจ็กต์ gradle สำหรับเอาต์พุต" #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12139,6 +12169,26 @@ msgstr "" "แอนิเมชัน CPUParticles2D จำเป็นต้องใช้ CanvasItemMaterial โดยเปิดการทำงาน " "\"Particles Animation\"" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12433,6 +12483,26 @@ msgstr "" "จะถูกแทนที่โดยเอ็นจิ้นฟิสิกส์เมื่อทำงาน\n" "เปลี่ยนขนาดในขอบเขตการชนลูกแทน" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12659,6 +12729,30 @@ msgstr "Varyings สามารถกำหนดในังก์ชันเ msgid "Constants cannot be modified." msgstr "ค่าคงที่ไม่สามารถแก้ไขได้" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "มีไฟล์หรือโฟลเดอร์ชื่อเดียวกันอยู่แล้ว" + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "ไดเร็กทอรี 'build-tools' หายไป!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "ไม่สามารถหา zipalign tool" + +#~ msgid "Aligning APK..." +#~ msgstr "จัดเรียง APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "ไม่สามารถจัดเรียง APK ได้สำเร็จ" + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "ไม่สามารถลบ APK ที่ยังไม่จัดเรียง" + +#~ msgid "Error trying to save layout!" +#~ msgstr "ผิดพลาดขณะบันทึกเลย์เอาต์!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "แทนที่เลย์เอาต์เริ่มต้น" + #~ msgid "Move pivot" #~ msgstr "ย้ายจุดหมุน" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 91dd17c218..0d0c2ff2ee 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -59,8 +59,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-12 09:28+0000\n" -"Last-Translator: Suleyman Poyraz <zaryob.dev@gmail.com>\n" +"PO-Revision-Date: 2020-11-29 08:29+0000\n" +"Last-Translator: Zsosu Ktosu <zktosu@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" @@ -68,7 +68,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1078,17 +1078,25 @@ msgid "Owners Of:" msgstr "Şunların sahipleri:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Seçili dosyaları projeden kaldır? (Geri alınamaz)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"Seçilen dosyalar kaldırılsın mı? (geri alınamaz)\n" +"Kaldırılan dosyaları sistemin geri dönüşüm kutusunda bulabilir ve geri " +"yükleyebilirsiniz." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Kaldırılmakta olan dosyalar başka kaynakların çalışması için gerekli.\n" -"Yine de kaldırmak istiyor musunuz? (geri alınamaz)" +"Diğer kimi dosyaların çalışması için kaldırdığınız dosyalar gerekli " +"görülmekte.\n" +"Yine de kaldırılsın mı? (geri alınamaz)\n" +"Kaldırılan dosyaların sistemin geri dönüşüm kutusunda bulabilirsiniz." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1132,7 +1140,7 @@ msgstr "Orphan Kaynak Araştırıcı" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1642,16 +1650,14 @@ msgstr "" "Fallback Enabled' seçeneğini devre dışı bırakın." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Hedef platform GLES2 için 'ETC' doku sıkıştırma gerekiyor. Proje " -"Ayarları'nda 'Import Etc' etkinleştirin." +"Hedef platform GLES2 için 'PVRTC' sıkıştırma biçimini gerektirmekte.. Proje " +"Ayarlarındaki 'Pvrtc içe aktar' seçeneğini etkinleştirin." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." @@ -1660,7 +1666,6 @@ msgstr "" "Ayarları'nda 'Import Etc 2' etkinleştirin." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" @@ -2145,7 +2150,7 @@ msgstr "Metot" #: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp msgid "Signal" -msgstr "Sinyaller" +msgstr "Sinyal" #: editor/editor_help_search.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" @@ -2349,19 +2354,29 @@ msgid "Error saving TileSet!" msgstr "TileSet kaydedilirken hata!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Yerleşim Düzeni kaydedilmeye çalışılırken hata!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Düzenleyici arayüzünü kaydederken hata meydana geldi.\n" +"Düzenleyici için kullanıcı veri yolunun yazma izninin olduğundan emin olunuz." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Varsayılan düzenleyici yerleşim düzeni geçersiz kılındı." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Varsayılan arayüz değiştirildi.\n" +"Varsayılan arayüz temel ayarlarını geri yüklemek için, Arayüz silme " +"seçeneğini kullanarak Varsayılan Arayüz'ü silin." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Yerleşim Düzeni adı bulunamadı!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "Varsayılan yerleşim düzeni temel ayarlarına geri döndürüldü." #: editor/editor_node.cpp @@ -3738,6 +3753,16 @@ msgid "Name contains invalid characters." msgstr "İsim geçersiz karkterler içeriyor." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Dosya yeniden-adlandırma:" @@ -3785,14 +3810,6 @@ msgstr "Bağımlılıkları Düzenle..." msgid "View Owners..." msgstr "Sahipleri Görüntüle..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Yeniden Adlandır..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Çoğalt..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Şuraya Taşı..." @@ -3820,11 +3837,16 @@ msgid "Collapse All" msgstr "Hepsini Daralt" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Yeniden Adlandır" +msgid "Duplicate..." +msgstr "Çoğalt..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Çöpe At" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Yeniden Adlandır..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3859,8 +3881,11 @@ msgid "Move" msgstr "Taşı" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Bu konumda zaten aynı ada sahip bir dosya veya klasör var." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Yeniden Adlandır" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -4564,7 +4589,7 @@ msgstr "Sonraki Değişeni Karıştır" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "Oluşturma Süresini Değiştir" +msgstr "Harmanlama Süresini Değiştir" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -5261,50 +5286,43 @@ msgstr "Yeni yatay ve dikey kılavuzlar oluştur" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "CanvasItem \"%s\" Pivot Ofset'i (%d, %d) olarak ayarlayın" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "CanvasItem Döndür" +msgstr "CanvasItems'i %d döndür" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "CanvasItem Döndür" +msgstr "CanvasItem \"% s\"'i %d dereceye döndürün" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "CanvasItem Taşı" +msgstr "CanvasItem \"%s\" Bağlayıcısını Taşı" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Node2D \"%s\"'i (%s, %s)'a boyutlandır" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "\"%s\" denetimini (%d, %d)'a boyutlandır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "CanvasItem Esnet" +msgstr "CanvasItems'i %d boyutlandır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "CanvasItem Esnet" +msgstr "CanvasItem \"%s\" öğesini (%s,%s) olarak boyutlandır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "CanvasItem Taşı" +msgstr "CanvasItems'i %d kadar taşı" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "CanvasItem Taşı" +msgstr "CanvasItem \"%s\" öğesini (%d,%d) konumuna taşı" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6581,18 +6599,16 @@ msgid "Move Points" msgstr "Noktaları Taşı" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Sürükle: Döndürür" +msgstr "Ctrl: Döndür" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "ÜstKrkt: Tümünü Taşı" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "ÜstKrkt+Ctrl: Ölçek" +msgstr "ÜstKrkt+Ctrl: Ölçeklendir" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6639,14 +6655,12 @@ msgid "Radius:" msgstr "Yarıçap:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Çokgen & UV Oluştur" +msgstr "Çokgeni UV'ye kopyala" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Çokgen2D'ye dönüştür" +msgstr "UV'yi çokgene kopyala" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8193,13 +8207,12 @@ msgid "Paint Tile" msgstr "Karo Boya" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+SFT: Çizgi Çiz\n" -"Shift+Ctrl+SFT: Dkidörtgen Boya" +"Shift+Ctrl+SFT: Dolu Dkidörtgen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8354,10 +8367,22 @@ msgid "Create a new rectangle." msgstr "Yeni dikdörtgen oluştur." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Dolu Dikdörtgen" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Yeni bir çokgen oluşturun." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Yeni Çokgen" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Seçilen Şekli Sil" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Çokgeni Dikdörtgen bölgesinde tut." @@ -8728,9 +8753,8 @@ msgid "Add Node to Visual Shader" msgstr "Visual Shader'a düğüm ekle" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Düğüm Taşındı" +msgstr "Düğüm(ler) Taşındı" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8750,9 +8774,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Visual Shader giriş Türü Değişti" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Uniform ismi ayarla" +msgstr "UniformRef Adı Değiştirildi" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9462,7 +9485,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Varolan bir üniformaya bir referans." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9829,6 +9852,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12091,6 +12118,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "Editör Ayarlarında özel derleme için geçersiz Android SDK yolu." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Eksik 'platform araçları' dizini!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12143,18 +12174,20 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"\"AAB Dışa Aktar\" yalnızca \"Özel Yapı Kullan\" etkinleştirildiğinde " +"geçerlidir." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "Geçersiz dosya adı! Android Uygulama Paketi *.aab uzantısı gerektirir." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Genişletme, Android Uygulama Paketi ile uyumlu değildir." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "Geçersiz dosya adı! Android APK, * .apk uzantısını gerektirir." #: platform/android/export/export.cpp msgid "" @@ -12192,13 +12225,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Çıktı taşınıyor" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Dışa aktarma dosyası kopyalanamıyor ve yeniden adlandırılamıyor, çıktılar " +"için gradle proje dizinini kontrol edin." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12387,6 +12422,26 @@ msgstr "" "CPUParçacık2B animasyonu \"Parçacık Animasyonu\" seçimi etkin olarak " "CanvasÖgesiMalzemesi kullanımı gerektirir." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12718,6 +12773,26 @@ msgstr "" "çalıştığında geçersiz kılınacak.\n" "Boyu değişikliğini bunun yerine çocuk çarpışma şekilleri içinden yapın." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12960,6 +13035,30 @@ msgstr "varyings yalnızca vertex işlevinde atanabilir." msgid "Constants cannot be modified." msgstr "Sabit değerler değiştirilemez." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Bu konumda zaten aynı ada sahip bir dosya veya klasör var." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Eksik 'inşa-araçları' dizini!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Zipalign aracı bulunamıyor." + +#~ msgid "Aligning APK..." +#~ msgstr "APK hizalanıyor ..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "APK hizalaması tamamlanamıyor." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Hizalanmamış APK silinemiyor." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Yerleşim Düzeni kaydedilmeye çalışılırken hata!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Varsayılan düzenleyici yerleşim düzeni geçersiz kılındı." + #~ msgid "Move pivot" #~ msgstr "Merkezi Taşı" diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po index 1a370d7ef9..b9c48c5b34 100644 --- a/editor/translations/tzm.po +++ b/editor/translations/tzm.po @@ -1000,14 +1000,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1052,7 +1055,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2232,11 +2235,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2244,7 +2252,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3523,6 +3531,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3570,14 +3588,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3605,10 +3615,15 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3642,7 +3657,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8028,10 +8046,22 @@ msgid "Create a new rectangle." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9402,6 +9432,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11559,6 +11593,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11811,6 +11849,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12071,6 +12129,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index d1a9f9132c..dd03dac3cf 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -15,11 +15,12 @@ # Tymofij Lytvynenko <till.svit@gmail.com>, 2020. # Vladislav Glinsky <cl0ne@mithril.org.ua>, 2020. # Микола Тимошенко <9081@ukr.net>, 2020. +# Miroslav <zinmirx@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-09-29 09:14+0000\n" +"PO-Revision-Date: 2020-11-29 08:29+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" @@ -29,7 +30,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1047,19 +1048,24 @@ msgid "Owners Of:" msgstr "Власники:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Вилучити позначені файли з проєкту? (Вилучені файли не вдасться відновити)" +"Вилучити позначені файли з проєкту? (без можливості скасувати)\n" +"Вилучені файли можна буде знайти і відновити у теці смітника системи." #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"Файли, що видаляються, вимагаються іншими ресурсами, щоб вони могли " -"працювати.\n" -"Видалити їх у будь-якому разі? (скасування неможливе)" +"Файли, які ви вилучаєте, потрібні для забезпечення працездатності інших " +"ресурсів.\n" +"Вилучити їх попри це? (без скасування)\n" +"Вилучені файли можна знайти і відновити у теці смітника системи." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1103,7 +1109,7 @@ msgstr "Огляд підключених ресурсів" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1611,33 +1617,32 @@ msgstr "" "«Увімкнено резервні драйвери»." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"Платформа призначення потребує стискання текстур «ETC» для GLES2. Увімкніть " -"пункт «Імпортувати ETC» у параметрах проєкту." +"Платформа призначення потребує стискання текстур «PVRTC» для GLES2. " +"Увімкніть пункт «Імпортувати Pvrtc» у параметрах проєкту." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"Платформа призначення потребує стискання текстур «ETC2» для GLES3. Увімкніть " -"пункт «Імпортувати ETC 2» у параметрах проєкту." +"Платформа призначення потребує стискання текстур «ETC2» або «PVRTC» для " +"GLES3. Увімкніть пункт «Імпортувати ETC 2» або «Імпортувати Pvrtc» у " +"параметрах проєкту." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"Платформа призначення потребує стискання текстур «ETC» для GLES2.\n" -"Увімкніть пункт «Імпортувати ETC» у параметрах проєкту або вимкніть пункт " +"Платформа призначення потребує стискання текстур «PVRTC» для резервного " +"варіанта драйверів GLES2.\n" +"Увімкніть пункт «Імпортувати Pvrtc» у параметрах проєкту або вимкніть пункт " "«Увімкнено резервні драйвери»." #: editor/editor_export.cpp platform/android/export/export.cpp @@ -1771,7 +1776,7 @@ msgstr "Новий" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "Імпортувати" +msgstr "Імпорт" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" @@ -2320,20 +2325,30 @@ msgid "Error saving TileSet!" msgstr "Помилка збереження набору тайлів!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Помилка при спробі зберегти компонування!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"Під час спроби зберегти компонування редактора сталася помилка.\n" +"Переконайтеся, що каталог даних користувача є придатним до запису." #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Типове компонування редактора перевизначено." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"Параметри типового компонування редактора перевизначено.\n" +"Щоб відновити початкові параметри типово компонування, скористайтеся пунктом " +"«Вилучити компонування» для вилучення типового компонування." #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Назву компонування не знайдено!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "Відновлено типове компонування за базовими параметрами." +msgid "Restored the Default layout to its base settings." +msgstr "Відновлено початкові параметри типового компонування." #: editor/editor_node.cpp msgid "" @@ -3715,6 +3730,16 @@ msgid "Name contains invalid characters." msgstr "Назва містить некоректні символи." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Перейменування файлу:" @@ -3762,14 +3787,6 @@ msgstr "Редагувати залежності..." msgid "View Owners..." msgstr "Переглянути власників..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Перейменувати..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Дублювати..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Перемістити до..." @@ -3797,11 +3814,16 @@ msgid "Collapse All" msgstr "Згорнути все" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Перейменувати" +msgid "Duplicate..." +msgstr "Дублювати..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "Пересунути до смітника" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Перейменувати..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3836,8 +3858,11 @@ msgid "Move" msgstr "Перемістити" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "У вказаному каталозі вже міститься тека або файл із вказано назвою." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Перейменувати" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -5241,50 +5266,43 @@ msgstr "Створити горизонтальні та вертикальні #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "Встановити зсув бази CanvasItem «%s» у (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "Обертати CanvasItem" +msgstr "Обертати %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "Обертати CanvasItem" +msgstr "Обернути CanvasItem «%s» на %d градусів" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "Пересунути CanvasItem" +msgstr "Пересунути прив'язку CanvasItem «%s»" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "Масштабувати Node2D «%s» до (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "Змінити розміри елемента керування «%s» до (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "Масштабувати CanvasItem" +msgstr "Масштабувати %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "Масштабувати CanvasItem" +msgstr "Масштабувати CanvasItem «%s» до (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "Пересунути CanvasItem" +msgstr "Пересунути %d CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "Пересунути CanvasItem" +msgstr "Пересунути CanvasItem «%s» до (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6564,18 +6582,16 @@ msgid "Move Points" msgstr "Перемістити точки" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "Перетягування: Поворот" +msgstr "Command: Обертати" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: Перемістити всі" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: Масштаб" +msgstr "Shift+Command: Масштабувати" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6623,14 +6639,12 @@ msgid "Radius:" msgstr "Радіус:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "Створити полігон і UV" +msgstr "Копіювати полігон до UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "Перетворити на Polygon2D" +msgstr "Копіювати UV до полігона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -8181,13 +8195,12 @@ msgid "Paint Tile" msgstr "Намалювати плитку" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+ліва кнопка: малювати лінію\n" -"Shift+Ctrl+ліва кнопка: малювати прямокутник" +"Shift+Command+ліва кнопка: малювати прямокутник" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8342,10 +8355,22 @@ msgid "Create a new rectangle." msgstr "Створити прямокутник." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "Новий прямокутник" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "Створити новий полігон." #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "Новий полігон" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "Вилучити позначену форму" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "Утримувати полігон всередині Rect області." @@ -8718,9 +8743,8 @@ msgid "Add Node to Visual Shader" msgstr "Додати вузол до візуального шейдера" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" -msgstr "Пересунуто вузол" +msgstr "Пересунуто вузли" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" @@ -8740,9 +8764,8 @@ msgid "Visual Shader Input Type Changed" msgstr "Змінено тип введення для візуального шейдера" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "Встановити однорідну назву" +msgstr "Змінено однорідну назву" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9460,7 +9483,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "Посилання на наявну однорідність." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9826,6 +9849,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12102,6 +12129,10 @@ msgstr "" "редактора." #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "Не знайдено каталогу «platform-tools»!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12156,18 +12187,23 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"Пункт «Експортувати AAB» є чинним, лише якщо увімкнено «Використовувати " +"нетипове збирання»." #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"Некоректна назва файла! Пакет програми Android повинен мати суфікс назви *." +"aab." #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "Розширення APK є несумісним із Android App Bundle." #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" +"Некоректна назва файла! Пакунок Android APK повинен мати суфікс назви *.apk." #: platform/android/export/export.cpp msgid "" @@ -12207,13 +12243,15 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "Пересування виведених даних" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" +"Не вдалося скопіювати і перейменувати файл експортованих даних. Виведені " +"дані можна знайти у каталозі проєкту gradle." #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12410,6 +12448,26 @@ msgstr "" "Анімація CPUParticles2D потребує використання CanvasItemMaterial із " "увімкненим параметром «Анімація часток»." +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12743,6 +12801,26 @@ msgstr "" "фізичним рушієм під час роботи.\n" "Замість цієї зміни, вам варто змінити розміри дочірніх форм зіткнення." +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12987,6 +13065,30 @@ msgstr "Змінні величини можна пов'язувати лише msgid "Constants cannot be modified." msgstr "Сталі не можна змінювати." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "У вказаному каталозі вже міститься тека або файл із вказано назвою." + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "Не знайдено каталогу «build-tools»!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "Не вдалося знайти програму zipalign." + +#~ msgid "Aligning APK..." +#~ msgstr "Вирівнюємо APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "Не вдалося завершити вирівнювання APK." + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "Не вдалося вилучити невирівняний APK." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Помилка при спробі зберегти компонування!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Типове компонування редактора перевизначено." + #~ msgid "Move pivot" #~ msgstr "Пересунути опорну точку" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 0daae77789..a87c4865c2 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -1020,14 +1020,17 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1072,7 +1075,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2279,11 +2282,16 @@ msgid "Error saving TileSet!" msgstr "" #: editor/editor_node.cpp -msgid "Error trying to save layout!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2291,7 +2299,7 @@ msgid "Layout name not found!" msgstr "" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "" #: editor/editor_node.cpp @@ -3589,6 +3597,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "" @@ -3641,14 +3659,6 @@ msgstr "" msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "" - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "" - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" @@ -3678,10 +3688,16 @@ msgid "Collapse All" msgstr "" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "ایکشن منتقل کریں" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp @@ -3715,7 +3731,10 @@ msgid "Move" msgstr "" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp @@ -8223,10 +8242,25 @@ msgstr "سب سکریپشن بنائیں" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "سب سکریپشن بنائیں" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9639,6 +9673,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -11856,6 +11894,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12109,6 +12151,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12369,6 +12431,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 446a1ce2fa..f08207bd30 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -1043,14 +1043,18 @@ msgid "Owners Of:" msgstr "Sở hữu của:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" +#, fuzzy +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "Gỡ bỏ các tệp đã chọn trong dự án? (Không thể khôi phục)" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1096,7 +1100,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2334,19 +2338,25 @@ msgid "Error saving TileSet!" msgstr "Lỗi khi lưu các TileSet!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "Lỗi khi cố gắng lưu bố cục!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "Bố cục trình biên tập mặc định bị ghi đè." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "Tên bố cục không tìm thấy!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +#, fuzzy +msgid "Restored the Default layout to its base settings." msgstr "Đã khôi phục bố cục mặc định cho các thiết lập." #: editor/editor_node.cpp @@ -3692,6 +3702,16 @@ msgid "Name contains invalid characters." msgstr "Tên có chứa kí tự không hợp lệ." #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "Đổi tên tệp tin:" @@ -3740,14 +3760,6 @@ msgstr "Chỉnh sửa các phần phụ thuộc..." msgid "View Owners..." msgstr "Xem các scene sở hữu..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "Đổi tên..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "Nhân đôi..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "Di chuyển đến..." @@ -3776,11 +3788,17 @@ msgid "Collapse All" msgstr "Thu gọn Tất cả" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "Đổi tên" +msgid "Duplicate..." +msgstr "Nhân đôi..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "Di chuyển Nút" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "Đổi tên..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3815,8 +3833,11 @@ msgid "Move" msgstr "Di chuyển" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "Đã có tệp tin hoặc thư mục cùng tên tại vị trí này." +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "Đổi tên" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -8371,10 +8392,25 @@ msgstr "Tạo hình chữ nhật mới." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "Tạo Cảnh Mới" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "Tạo" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "Tạo" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "Xoá lựa chọn" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -9809,6 +9845,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12086,6 +12126,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12356,6 +12400,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12616,6 +12680,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12827,6 +12911,15 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Không thể chỉnh sửa hằng số." +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "Đã có tệp tin hoặc thư mục cùng tên tại vị trí này." + +#~ msgid "Error trying to save layout!" +#~ msgstr "Lỗi khi cố gắng lưu bố cục!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "Bố cục trình biên tập mặc định bị ghi đè." + #~ msgid "Move pivot" #~ msgstr "Di chuyển trục" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 4ce2d7c14d..bd6c730382 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -71,11 +71,13 @@ # MintSoda <lionlxh@qq.com>, 2020. # Gardner Belgrade <hapenia@sina.com>, 2020. # godhidden <z2zz2zz@yahoo.com>, 2020. +# BinotaLIU <me@binota.org>, 2020. +# TakWolf <takwolf@foxmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2020-10-18 14:21+0000\n" +"PO-Revision-Date: 2020-11-29 08:29+0000\n" "Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" @@ -84,7 +86,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.3.1-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -93,17 +95,17 @@ msgstr "convert() 的参数类型无效,请使用 TYPE_* 常量。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "仅需要长度为1的字符串(1字符)。" +msgstr "应为长度 1 的字符串(1 字符)。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "没有足够的字节来解码,或格式无效。" +msgstr "没有足够的字节可解码或格式无效。" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "表达式中包含的%i无效(未传递)" +msgstr "表达式的输入 %i 无效(未传递)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -111,7 +113,7 @@ msgstr "实例为 null(未传递),无法使用 self" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "操作符 %s 的操作数 %s 和 %s 无效。" +msgstr "运算符 %s 的操作数 %s 和 %s 无效。" #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" @@ -127,7 +129,7 @@ msgstr "构造 '%s' 的参数无效" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "在调用'%s'时:" +msgstr "在调用 '%s' 时:" #: core/ustring.cpp msgid "B" @@ -260,7 +262,7 @@ msgstr "属性轨道" #: editor/animation_track_editor.cpp msgid "3D Transform Track" -msgstr "3D变换轨道" +msgstr "3D 变换轨道" #: editor/animation_track_editor.cpp msgid "Call Method Track" @@ -317,7 +319,7 @@ msgstr "切换当前轨道开关。" #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "更新模式(如何设置此属性)" +msgstr "更新模式(属性设置方法)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" @@ -337,7 +339,7 @@ msgstr "时间(秒): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "启用轨道切换" +msgstr "启用/禁用轨道" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -411,7 +413,7 @@ msgstr "是否为 %s 新建轨道并插入关键帧?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "是否新建%d个轨道并插入关键帧?" +msgstr "是否新建 %d 个轨道并插入关键帧?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp @@ -431,7 +433,7 @@ msgstr "插入动画" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "动画播放器不能对自己做动画,只有其它播放器才可以。" +msgstr "AnimationPlayer 不能动画化自己,只可动画化其它 Player。" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -455,7 +457,7 @@ msgstr "重新排列轨道" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "变换轨迹仅应用基于Spatial节点的节点。" +msgstr "变换轨迹仅应用到基于 Spatial 节点。" #: editor/animation_track_editor.cpp msgid "" @@ -471,7 +473,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "动画轨迹只能指向AnimationPlayer节点。" +msgstr "动画轨迹只能指向 AnimationPlayer 节点。" #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." @@ -479,7 +481,7 @@ msgstr "动画播放器不能动画化自己,只能动画化其他播放器。 #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "无法在没有root的情况下新建轨道" +msgstr "没有根节点时无法添加新轨道" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" @@ -495,7 +497,7 @@ msgstr "轨道路径无效,因此无法添加键。" #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "轨道不是Spatial类型,无法插入帧" +msgstr "轨道不是 Spatial 类型,无法插入帧" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" @@ -536,7 +538,7 @@ msgstr "缩放动画关键帧" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "此选项不适用于贝塞尔编辑,因为它只是单个轨道。" +msgstr "由于只有单一轨道,因此该选项不适用于贝塞尔编辑。" #: editor/animation_track_editor.cpp msgid "" @@ -553,8 +555,8 @@ msgstr "" "此动画属于导入的场景,因此不会保存对导入轨道的更改。\n" "\n" "要启用添加自定义轨道的功能,可以在场景的导入设置中将\n" -"“Animation > Storage”设为“ Files”,启用“Animation > Keep Custom Tracks”,然后" -"重新导入。\n" +"“Animation > Storage” 设为 “ Files”,并启用 “Animation > Keep Custom " +"Tracks”,然后重新导入。\n" "或者也可以使用将动画导入为单独文件的导入预设。" #: editor/animation_track_editor.cpp @@ -563,7 +565,7 @@ msgstr "警告:正在编辑导入的动画" #: editor/animation_track_editor.cpp msgid "Select an AnimationPlayer node to create and edit animations." -msgstr "选择一个AnimationPlayer节点以创建和编辑动画。" +msgstr "选择一个 AnimationPlayer 节点以创建和编辑动画。" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -571,7 +573,7 @@ msgstr "仅显示在树中选择的节点的轨道。" #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "按节点分组或将它们显示为普通列表。" +msgstr "按节点分组或将节点显示为普通列表。" #: editor/animation_track_editor.cpp msgid "Snap:" @@ -711,7 +713,7 @@ msgstr "复制" #: editor/animation_track_editor.cpp msgid "Select All/None" -msgstr "全选/取消" +msgstr "全选/取消" #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" @@ -747,19 +749,19 @@ msgstr "行号:" #: editor/code_editor.cpp msgid "%d replaced." -msgstr "已替换%d处。" +msgstr "已替换 %d 处。" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." -msgstr "%d 匹配。" +msgstr "%d 个匹配。" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d matches." -msgstr "%d 匹配项。" +msgstr "%d 个匹配。" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" -msgstr "大小写匹配" +msgstr "区分大小写" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" @@ -784,7 +786,7 @@ msgstr "标准" #: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "切换脚本面板" +msgstr "开启/关闭脚本面板" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -822,7 +824,7 @@ msgstr "方法名称必须是一个有效的标识符。" msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." -msgstr "找不到目标方法。请指定一个有效的方法或者把脚本附加到目标节点。" +msgstr "找不到目标方法。请指定一个有效的方法或把脚本附加到目标节点。" #: editor/connections_dialog.cpp msgid "Connect to Node:" @@ -918,15 +920,15 @@ msgstr "信号:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "连接“%s”到“%s”" +msgstr "连接 “%s” 到 “%s”" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "将“%s”从“%s”断开" +msgstr "将 “%s” 从 “%s” 断开" #: editor/connections_dialog.cpp msgid "Disconnect all from signal: '%s'" -msgstr "断开所有与信号“%s”的连接" +msgstr "断开所有与信号 “%s” 的连接" #: editor/connections_dialog.cpp msgid "Connect..." @@ -947,7 +949,7 @@ msgstr "编辑连接:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "你确定要从信号“%s”中移除所有连接吗?" +msgstr "确定要从信号 “%s” 中移除所有连接吗?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -959,7 +961,7 @@ msgstr "筛选信号" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "你确定要从该广播信号中移除所有连接吗?" +msgstr "确定要从该信号中移除所有连接吗?" #: editor/connections_dialog.cpp msgid "Disconnect All" @@ -975,7 +977,7 @@ msgstr "跳转到方法" #: editor/create_dialog.cpp msgid "Change %s Type" -msgstr "更改%s类型" +msgstr "更改 %s 类型" #: editor/create_dialog.cpp editor/project_settings_editor.cpp msgid "Change" @@ -983,7 +985,7 @@ msgstr "更改" #: editor/create_dialog.cpp msgid "Create New %s" -msgstr "新建%s" +msgstr "创建 %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1027,7 +1029,7 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"场景“%s”正被修改。\n" +"场景 “%s” 正被修改。\n" "修改只有在重新加载后才能生效。" #: editor/dependency_editor.cpp @@ -1035,7 +1037,7 @@ msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"资源“%s”正在使用中。\n" +"资源 “%s” 正在使用中。\n" "修改只有在重新加载后才能生效。" #: editor/dependency_editor.cpp @@ -1083,17 +1085,23 @@ msgid "Owners Of:" msgstr "拥有者:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "是否从项目中删除选定文件?(无法恢复)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"是否从项目中删除所选文件?(无法撤销)\n" +"你可以在系统回收站中恢复被删除的文件。" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" "要删除的文件被其他资源所依赖。\n" -"仍然要删除吗?(无法撤销)" +"仍然要删除吗?(无法撤销)\n" +"你可以在系统回收站中恢复被删除的文件。" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1125,7 +1133,7 @@ msgstr "加载出错!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "永久删除选中的%d条项目吗?(此操作无法撤销!)" +msgstr "要永久删除选中的 %d 条项目吗?(此操作无法撤销!)" #: editor/dependency_editor.cpp msgid "Show Dependencies" @@ -1137,7 +1145,7 @@ msgstr "孤立资源浏览器" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1153,19 +1161,19 @@ msgstr "没有显式从属关系的资源:" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "修改字典的键" +msgstr "修改字典键" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" -msgstr "改变字典的值" +msgstr "改变字典值" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "Godot社区致谢!" +msgstr "Godot 社区感谢你!" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "Godot引擎贡献者" +msgstr "Godot Engine 贡献者" #: editor/editor_about.cpp msgid "Project Founders" @@ -1184,7 +1192,7 @@ msgstr "项目管理员 " #: editor/editor_about.cpp msgid "Developers" -msgstr "开发者" +msgstr "开发人员" #: editor/editor_about.cpp msgid "Authors" @@ -1241,8 +1249,8 @@ msgid "" "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot引擎依赖多个第三方免费开源代码库,这些库全部兼容MIT许可证的条款。以下是" -"所有此类第三方组件及其各自版权声明和许可条款的详尽列表。" +"Godot 引擎依赖多个第三方免费开源代码库,这些库全部兼容 MIT 许可证的条款。以下" +"是所有此类第三方组件及其各自版权声明和许可条款的详尽列表。" #: editor/editor_about.cpp msgid "All Components" @@ -1258,7 +1266,7 @@ msgstr "许可证" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in ZIP format." -msgstr "打开压缩文件时出错,非ZIP格式。" +msgstr "打开包文件时出错,非 ZIP 格式。" #: editor/editor_asset_installer.cpp msgid "%s (Already Exists)" @@ -1274,7 +1282,7 @@ msgstr "以下文件无法从包中提取:" #: editor/editor_asset_installer.cpp msgid "And %s more files." -msgstr "以及其它%s个文件。" +msgstr "以及其它 %s 个文件。" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" @@ -1315,15 +1323,15 @@ msgstr "修改音频总线音量" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "开关音频总线独奏" +msgstr "开/关音频总线独奏" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "开关音频总线静音" +msgstr "静音/取消静音音频总线" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "开关音频总线旁通效果" +msgstr "开启/关闭音频总线旁通效果" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" @@ -1416,7 +1424,7 @@ msgstr "打开音频总线布局" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "文件“%s”不存在。" +msgstr "文件 “%s” 不存在。" #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" @@ -1478,7 +1486,7 @@ msgstr "有效字符:" #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing engine class name." -msgstr "与引擎内置类型名称冲突。" +msgstr "与引擎内置类名称冲突。" #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing built-in type name." @@ -1490,27 +1498,27 @@ msgstr "与已存在的全局常量名称冲突。" #: editor/editor_autoload_settings.cpp msgid "Keyword cannot be used as an autoload name." -msgstr "该名称已被用作其他 autoload 占用。" +msgstr "关键字不可用作 Autoload 名称。" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "Autoload '%s'已存在!" +msgstr "Autoload '%s' 已存在!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "重命名自动加载脚本" +msgstr "重命名 Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "切换全局AutoLoad" +msgstr "开启/关闭全局 AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "移动Autoload" +msgstr "移动 Autoload" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "移除Autoload" +msgstr "移除 Autoload" #: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp msgid "Enable" @@ -1518,15 +1526,15 @@ msgstr "启用" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "重排序Autoload" +msgstr "重排序 Autoload" #: editor/editor_autoload_settings.cpp msgid "Can't add autoload:" -msgstr "无法加载autoload:" +msgstr "无法加载 Autoload:" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "添加自动加载" +msgstr "添加 Autoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp @@ -1559,11 +1567,11 @@ msgstr "更新场景" #: editor/editor_data.cpp msgid "Storing local changes..." -msgstr "保存修改中..." +msgstr "保存本地更改..." #: editor/editor_data.cpp msgid "Updating scene..." -msgstr "更新场景中..." +msgstr "更新场景..." #: editor/editor_data.cpp editor/editor_properties.cpp msgid "[empty]" @@ -1575,7 +1583,7 @@ msgstr "[未保存]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first." -msgstr "请先选择一个目录。" +msgstr "请先选择一个基础目录。" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1585,7 +1593,7 @@ msgstr "选择目录" #: editor/filesystem_dock.cpp editor/project_manager.cpp #: scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "新建文件夹" +msgstr "创建文件夹" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp @@ -1619,13 +1627,14 @@ msgstr "打包中" msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." -msgstr "目标平台需要GLES2的“ETC”纹理压缩。在项目设置中启用“导入Etc”。" +msgstr "目标平台需要 GLES2 的 “ETC” 纹理压缩。在项目设置中启用 “Import Etc”。" #: editor/editor_export.cpp msgid "" "Target platform requires 'ETC2' texture compression for GLES3. Enable " "'Import Etc 2' in Project Settings." -msgstr "目标平台需要GLES3的“ETC2”纹理压缩。在项目设置中启用“导入Etc 2”。" +msgstr "" +"目标平台需要 GLES3 的 “ETC2” 纹理压缩。在项目设置中启用 “Import Etc 2”。" #: editor/editor_export.cpp msgid "" @@ -1634,33 +1643,33 @@ msgid "" "Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"目标平台需要“ETC”纹理压缩,以便驱动程序回退到GLES2。\n" -"在项目设置中启用“导入Etc”,或禁用“启用驱动程序回退”。" +"目标平台需要 “ETC” 纹理压缩,以便驱动程序回退到 GLES2。\n" +"在项目设置中启用 “Import Etc”,或禁用 “Driver Fallback Enabled”。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." -msgstr "目标平台需要GLES2的“ETC”纹理压缩。在项目设置中启用“导入Etc”。" +msgstr "" +"目标平台需要 GLES2 的 “PVRTC” 纹理压缩。在项目设置中启用 “Import Pvrtc”。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." -msgstr "目标平台需要GLES3的“ETC2”纹理压缩。在项目设置中启用“导入Etc 2”。" +msgstr "" +"目标平台需要 GLES3 的 “ETC2” 或 “PVRTC” 纹理压缩。在项目设置中启用 “Import " +"Etc 2” 或 “Import Pvrtc”。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"目标平台需要“ETC”纹理压缩,以便驱动程序回退到GLES2。\n" -"在项目设置中启用“导入Etc”,或禁用“启用驱动程序回退”。" +"目标平台需要 “PVRTC” 纹理压缩,以便驱动程序回退到 GLES2。\n" +"在项目设置中启用 “Import Pvrtc”,或禁用 “Driver Fallback Enabled”。" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1680,11 +1689,11 @@ msgstr "找不到模板文件:" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." -msgstr "以32位平台导出时,内嵌的PCK不能大于4GB。" +msgstr "以 32 位平台导出时,内嵌的 PCK 不能大于 4GB。" #: editor/editor_feature_profile.cpp msgid "3D Editor" -msgstr "3D编辑器" +msgstr "3D 编辑器" #: editor/editor_feature_profile.cpp msgid "Script Editor" @@ -1712,11 +1721,11 @@ msgstr "导入面板" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" -msgstr "是否删除配置文件“%s”?(无法撤销)" +msgstr "是否删除配置文件 “%s”?(无法撤销)" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" -msgstr "配置文件必须是有效的文件名,并且不能包含“.”" +msgstr "配置文件必须是有效的文件名,并且不能包含 “.”" #: editor/editor_feature_profile.cpp msgid "Profile with this name already exists." @@ -1756,17 +1765,17 @@ msgstr "启用的类:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." -msgstr "文件“%s”的格式无效,导入中止。" +msgstr "文件 “%s” 的格式无效,导入中止。" #: editor/editor_feature_profile.cpp msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." -msgstr "配置文件“%s”已存在。在导入之前先删除它,导入已中止。" +msgstr "配置文件 “%s” 已存在。在导入之前先删除该配置文件,导入已中止。" #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." -msgstr "将配置文件保存到路径“%s”时出错。" +msgstr "将配置文件保存到路径 “%s” 时出错。" #: editor/editor_feature_profile.cpp msgid "Unset" @@ -1774,7 +1783,7 @@ msgstr "未设置" #: editor/editor_feature_profile.cpp msgid "Current Profile:" -msgstr "当前配置文件:" +msgstr "当前配置文件:" #: editor/editor_feature_profile.cpp msgid "Make Current" @@ -1813,7 +1822,7 @@ msgstr "删除配置文件" #: editor/editor_feature_profile.cpp msgid "Godot Feature Profile" -msgstr "Godot功能配置文件" +msgstr "Godot 功能配置文件" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" @@ -1867,11 +1876,11 @@ msgstr "所有可用类型" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "所有文件(*)" +msgstr "所有文件 (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "打开单个文件" +msgstr "打开文件" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" @@ -1950,7 +1959,7 @@ msgstr "刷新文件。" #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." -msgstr "(取消)收藏当前文件夹。" +msgstr "收藏/取消收藏当前文件夹。" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Toggle the visibility of hidden files." @@ -1958,11 +1967,11 @@ msgstr "切换隐藏文件的可见性。" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." -msgstr "以网格缩略图形式查看所有项。" +msgstr "以网格缩略图查看项目。" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a list." -msgstr "以列表的形式查看所有项。" +msgstr "以列表查看项目。" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -1990,11 +1999,11 @@ msgstr "扫描源文件" msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" -msgstr "不同类型的%s 文件存在多种导入方式,自动导入失败" +msgstr "文件 %s 有不同类型的多个导入器,已中止导入" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "正在(重新)导入素材" +msgstr "正在导入或重新导入素材" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" @@ -2192,7 +2201,7 @@ msgstr "开始" #: editor/editor_network_profiler.cpp msgid "%s/s" -msgstr "%s/s" +msgstr "%s/秒" #: editor/editor_network_profiler.cpp msgid "Down" @@ -2208,23 +2217,23 @@ msgstr "节点" #: editor/editor_network_profiler.cpp msgid "Incoming RPC" -msgstr "传入RPC" +msgstr "传入 RPC" #: editor/editor_network_profiler.cpp msgid "Incoming RSET" -msgstr "传入RSET" +msgstr "传入 RSET" #: editor/editor_network_profiler.cpp msgid "Outgoing RPC" -msgstr "传出RPC" +msgstr "传出 RPC" #: editor/editor_network_profiler.cpp msgid "Outgoing RSET" -msgstr "传出RSET" +msgstr "传出 RSET" #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "新建窗口" +msgstr "新窗口" #: editor/editor_node.cpp msgid "Imported resources can't be saved." @@ -2233,7 +2242,7 @@ msgstr "导入的资源无法保存。" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: scene/gui/dialogs.cpp msgid "OK" -msgstr "确定" +msgstr "好" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" @@ -2243,7 +2252,7 @@ msgstr "保存资源出错!" msgid "" "This resource can't be saved because it does not belong to the edited scene. " "Make it unique first." -msgstr "无法保存此资源,因为它不属于已编辑的场景。首先使它唯一化。" +msgstr "无法保存此资源,因为此资源不属于已编辑的场景。请先唯一化此资源。" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." @@ -2255,7 +2264,7 @@ msgstr "无法以可写模式打开文件:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "未知的文件类型请求:" +msgstr "请求文件的类型未知:" #: editor/editor_node.cpp msgid "Error while saving." @@ -2263,23 +2272,23 @@ msgstr "保存出错。" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "无法打开“%s”。文件可能已被移动或删除。" +msgstr "无法打开 “%s”。文件可能已被移动或删除。" #: editor/editor_node.cpp msgid "Error while parsing '%s'." -msgstr "解析“%s”时出错。" +msgstr "解析 “%s” 时出错。" #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "文件“%s”意外结束。" +msgstr "文件 “%s” 意外结束。" #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "“%s”或其依赖项缺失。" +msgstr "“%s” 或其依赖项缺失。" #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "加载“%s”时出错。" +msgstr "加载 “%s” 时出错。" #: editor/editor_node.cpp msgid "Saving Scene" @@ -2302,18 +2311,18 @@ msgid "" "This scene can't be saved because there is a cyclic instancing inclusion.\n" "Please resolve it and then attempt to save again." msgstr "" -"无法保存此场景,因为包含循环实例化。\n" -"请解决它,然后尝试再次保存。" +"场景包含循环实例化,无法保存。\n" +"请解决此问题后尝试再次保存。" #: editor/editor_node.cpp msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." -msgstr "无法保存场景,依赖项(实例或基类)验证失败。" +msgstr "无法保存场景。可能是因为依赖项(实例或继承)无法满足。" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "无法覆盖仍处于打开状态的场景!" +msgstr "无法覆盖仍处于打开状态的场景!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -2332,20 +2341,29 @@ msgid "Error saving TileSet!" msgstr "保存图块集时出错!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "保存布局出错!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"保存编辑器布局时出错。\n" +"请确认编辑器的用户数据路径可写。" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "覆盖编辑器默认布局。" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"已覆盖默认编辑器布局。\n" +"如需恢复默认布局至原始内容,可使用删除布局选项将默认布局删除。" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "布局名称未找到!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." -msgstr "重置为默认布局设置。" +msgid "Restored the Default layout to its base settings." +msgstr "已将默认布局恢复为原始内容。" #: editor/editor_node.cpp msgid "" @@ -2353,8 +2371,8 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"此资源属于已导入的场景, 因此它不可编辑。\n" -"请阅读与导入场景相关的文档, 以便更好地理解此工作流。" +"此资源属于已导入的场景,不可编辑。\n" +"请阅读与导入场景相关的文档,以更佳理解此工作流。" #: editor/editor_node.cpp msgid "" @@ -2362,13 +2380,13 @@ msgid "" "Changes to it won't be kept when saving the current scene." msgstr "" "这个资源属于实例或继承的场景。\n" -"保存当前场景时不会保留对它的更改。" +"保存当前场景时不会保留更改。" #: editor/editor_node.cpp msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." -msgstr "此资源已导入,因此无法编辑。在“导入”面板中更改设置,然后重新导入。" +msgstr "此资源已导入,因此无法编辑。在导入面板中更改设置并重新导入。" #: editor/editor_node.cpp msgid "" @@ -2377,9 +2395,9 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"场景已被导入, 对它的更改将不会保留。\n" -"对其进行实例化或继承将允许对其进行更改。\n" -"请阅读与导入场景相关的文档, 以便更好地理解此工作流。" +"场景已被导入,所做的更改将不会保留。\n" +"请实例化或继承该场景以允许对其进行更改。\n" +"请阅读与导入场景相关的文档,以更佳理解此工作流。" #: editor/editor_node.cpp msgid "" @@ -2388,11 +2406,11 @@ msgid "" "this workflow." msgstr "" "这是远程对象,因此不会保留对其的更改。\n" -"请阅读与调试相关的文档,以更好地了解此工作流程。" +"请阅读与调试相关的文档,以更佳理解此工作流。" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "没有设置要执行的场景。" +msgstr "没有设置要运行的场景。" #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -2424,7 +2442,7 @@ msgstr "保存并关闭" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "是否在关闭前保存对“%s”的更改?" +msgstr "是否在关闭前保存对 “%s” 的更改?" #: editor/editor_node.cpp msgid "Saved %s modified resource(s)." @@ -2432,7 +2450,7 @@ msgstr "已保存 %s 个修改后的资源。" #: editor/editor_node.cpp msgid "A root node is required to save the scene." -msgstr "保存场景需要根节点。" +msgstr "必须有根节点才可保存场景。" #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2452,7 +2470,7 @@ msgstr "此场景尚未保存。是否在运行前保存?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "此操作必须在打开一个场景后才能执行。" +msgstr "必须先打开一个场景才能完成此操作。" #: editor/editor_node.cpp msgid "Export Mesh Library" @@ -2460,7 +2478,7 @@ msgstr "导出网格库" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "需要有根节点才能完成此操作。" +msgstr "必须有根节点才能完成此操作。" #: editor/editor_node.cpp msgid "Export Tile Set" @@ -2468,7 +2486,7 @@ msgstr "导出图块集" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "此操作必须先选择一个节点才能执行。" +msgstr "必须先选择节点才能完成此操作。" #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" @@ -2476,7 +2494,7 @@ msgstr "当前场景尚未保存。是否仍要打开?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "无法重新加载未保存的场景。" +msgstr "无法重新加载从未保存过的场景。" #: editor/editor_node.cpp msgid "Reload Saved Scene" @@ -2512,17 +2530,17 @@ msgstr "保存后退出" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "以下场景在退出前保存更改吗?" +msgstr "退出前要保存以下场景更改吗?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" -msgstr "在打开项目管理器之前保存更改吗?" +msgstr "打开项目管理器前要保存下列场景更改吗?" #: editor/editor_node.cpp msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." -msgstr "该选项已废弃。必须强制刷新的情况现在被视为 bug。请报告。" +msgstr "该选项已废弃。必须强制刷新的情况现在被视为 Bug,请报告。" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -2538,37 +2556,37 @@ msgstr "重新打开关闭的场景" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." -msgstr "无法在“%s”上启用加载项插件:配置解析失败。" +msgstr "无法在 “%s” 上启用加载项插件:配置解析失败。" #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." -msgstr "无法在“res://addons/%s”中找到插件的脚本字段。" +msgstr "无法在 “res://addons/%s” 中找到加载项插件的脚本字段。" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "无法从路径中加载插件脚本:“%s”。" +msgstr "无法从路径 “%s” 中加载加载项脚本。" #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." -msgstr "无法从路径加载插件脚本:“%s”脚本看上去似乎有代码错误,请检查其语法。" +msgstr "无法从路径 “%s” 加载加载项脚本:脚本似乎有代码错误,请检查其语法。" #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." -msgstr "无法从路径加载插件脚本:“%s”基类型不是 EditorPlugin。" +msgstr "无法从路径 “%s” 加载加载项脚本:基类型不是 EditorPlugin。" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." -msgstr "无法从路径加载插件脚本:“%s”脚本不在工具模式下。" +msgstr "无法从路径 “%s” 加载插件脚本:脚本不在工具模式下。" #: editor/editor_node.cpp msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" -"场景“%s”是自动导入的,因此无法修改。\n" +"场景 “%s” 是自动导入的,因此无法修改。\n" "若要对其进行更改,可以新建继承场景。" #: editor/editor_node.cpp @@ -2576,12 +2594,12 @@ msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"加载场景出错,场景必须放在项目目录下。请尝试使用“导入”打开该场景,然后再在项" -"目目录下保存。" +"加载场景出错,场景必须放在项目目录下。请尝试使用 “导入” 打开该场景,然后再保" +"存到项目目录下。" #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "场景“%s”的依赖已被破坏:" +msgstr "场景 “%s” 的依赖已被破坏:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" @@ -2594,7 +2612,7 @@ msgid "" "category." msgstr "" "尚未定义主场景,是否选择一个?\n" -"你可以稍后在“项目设置”的“application”分类下修改。" +"稍后也可在 “项目设置” 的 “application” 分类下修改。" #: editor/editor_node.cpp msgid "" @@ -2602,8 +2620,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"所选场景“%s”不存在,是否选择有效的场景?\n" -"请在“项目设置”的“application”分类下设置选择主场景。" +"所选场景 “%s” 不存在,是否选择有效的场景?\n" +"稍后也可在 “项目设置” 的 “application” 分类下设置主场景。" #: editor/editor_node.cpp msgid "" @@ -2611,8 +2629,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"选中的“%s”场景并非场景文件,请选择有效的场景。\n" -"你可以在“项目设置”的“application”分类下更换主场景。" +"选中的 “%s” 场景并非场景文件,请选择有效的场景。\n" +"稍后也可在 “项目设置” 的 “application” 分类下更换主场景。" #: editor/editor_node.cpp msgid "Save Layout" @@ -2638,31 +2656,31 @@ msgstr "运行此场景" #: editor/editor_node.cpp msgid "Close Tab" -msgstr "关闭标签页" +msgstr "关闭选项卡" #: editor/editor_node.cpp msgid "Undo Close Tab" -msgstr "撤销关闭标签页" +msgstr "撤销关闭选项卡" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" -msgstr "关闭其他标签页" +msgstr "关闭其他选项卡" #: editor/editor_node.cpp msgid "Close Tabs to the Right" -msgstr "关闭右侧标签页" +msgstr "关闭右侧选项卡" #: editor/editor_node.cpp msgid "Close All Tabs" -msgstr "关闭全部标签" +msgstr "关闭全部选项卡" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "切换场景标签页" +msgstr "切换场景选项卡" #: editor/editor_node.cpp msgid "%d more files or folders" -msgstr "其它 %d 个文件或文件夹" +msgstr "其它 %d 个文件和文件夹" #: editor/editor_node.cpp msgid "%d more folders" @@ -2682,7 +2700,7 @@ msgstr "专注模式" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." -msgstr "切换专注模式。" +msgstr "进入/离开专注模式。" #: editor/editor_node.cpp msgid "Add a new scene." @@ -2694,7 +2712,7 @@ msgstr "场景" #: editor/editor_node.cpp msgid "Go to previously opened scene." -msgstr "前往上一个打开的场景。" +msgstr "转到上一个打开的场景。" #: editor/editor_node.cpp msgid "Copy Text" @@ -2702,11 +2720,11 @@ msgstr "复制文本" #: editor/editor_node.cpp msgid "Next tab" -msgstr "下一标签" +msgstr "下一个选项卡" #: editor/editor_node.cpp msgid "Previous tab" -msgstr "上一标签" +msgstr "上一个选项卡" #: editor/editor_node.cpp msgid "Filter Files..." @@ -2829,10 +2847,10 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" -"启用该选项时,一键部署后的可执行文件将尝试连接到这台电脑的IP以便调试所运行的" -"工程。\n" -"该选项意在进行远程调试(尤其是移动设备)。\n" -"在本地使用GDScript调试器无需启用。" +"启用该选项时,一键部署后的可执行文件将尝试连接到这台电脑的 IP 以便调试所运行" +"的项目。\n" +"该选项用于进行远程调试(尤其是移动设备)。\n" +"在本地使用 GDScript 调试器时无需启用。" #: editor/editor_node.cpp msgid "Small Deploy with Network Filesystem" @@ -2847,10 +2865,10 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"启用该选项时,一键部署到Android时所导出的可执行文件将不包含工程数据。\n" -"文件系统将由编辑器基于工程通过网络提供。\n" -"在Android平台,部署将通过USB线缆进行以提高性能。如果工程中包含较大的素材,该" -"选项会提高测试速度。" +"启用该选项时,一键部署到 Android 时所导出的可执行文件将不包含项目数据。\n" +"文件系统将由编辑器基于项目通过网络提供。\n" +"在 Android 平台,部署将通过 USB 线缆进行以提高性能。如果项目中包含较大的素" +"材,该选项可提高测试速度。" #: editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -2860,7 +2878,7 @@ msgstr "显示碰撞区域" msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." -msgstr "启用该选项时,碰撞区域和光线投射节点(2D和3D)将在工程运行时可见。" +msgstr "启用该选项时,碰撞区域和光线投射节点(2D 和 3D)将在项目运行时可见。" #: editor/editor_node.cpp msgid "Visible Navigation" @@ -2870,7 +2888,7 @@ msgstr "显示导航" msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." -msgstr "启用该选项时,导航网格和多边形将在工程运行时可见。" +msgstr "启用该选项时,导航网格和多边形将在项目运行时可见。" #: editor/editor_node.cpp msgid "Synchronize Scene Changes" @@ -2883,7 +2901,7 @@ msgid "" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"启用该选项时,在编辑器中对场景的任何修改都会被应用于正在运行的工程中。\n" +"启用该选项时,在编辑器中对场景的任何修改都会被应用于正在运行的项目中。\n" "当使用于远程设备时,启用网络文件系统能提高编辑效率。" #: editor/editor_node.cpp @@ -2897,7 +2915,7 @@ msgid "" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"启用该选项时,保存的任何脚本都会被正在运行的工程重新加载。\n" +"启用该选项时,任何保存的脚本都会被正在运行的项目重新加载。\n" "当使用于远程设备时,启用网络文件系统能提高编辑效率。" #: editor/editor_node.cpp editor/script_create_dialog.cpp @@ -2918,27 +2936,27 @@ msgstr "截屏" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "截图将保存在编辑器数据/设置文件夹中。" +msgstr "截图将保存在编辑器数据或设置文件夹中。" #: editor/editor_node.cpp msgid "Toggle Fullscreen" -msgstr "全屏模式" +msgstr "进入/离开全屏模式" #: editor/editor_node.cpp msgid "Toggle System Console" -msgstr "系统命令行模式" +msgstr "打开/关闭系统命令行" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" -msgstr "打开“编辑器数据/设置”文件夹" +msgstr "打开 “编辑器数据/设置” 文件夹" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "打开编辑器数据文件夹" +msgstr "打开 “编辑器数据” 文件夹" #: editor/editor_node.cpp msgid "Open Editor Settings Folder" -msgstr "打开“编辑器设置”文件夹" +msgstr "打开 “编辑器设置” 文件夹" #: editor/editor_node.cpp msgid "Manage Editor Features..." @@ -2995,7 +3013,7 @@ msgstr "运行" #: editor/editor_node.cpp msgid "Pause the scene execution for debugging." -msgstr "暂停运行场景,以便进行调试。" +msgstr "暂停运行场景以进行调试。" #: editor/editor_node.cpp msgid "Pause Scene" @@ -3052,7 +3070,7 @@ msgstr "文件系统" #: editor/editor_node.cpp msgid "Inspector" -msgstr "属性" +msgstr "属性检查器" #: editor/editor_node.cpp msgid "Expand Bottom Panel" @@ -3084,11 +3102,12 @@ msgid "" "the \"Use Custom Build\" option should be enabled in the Android export " "preset." msgstr "" -"通过将源模板安装到“res://android/build”,将为自定义Android构建设置项目。\n" -"然后,您可以应用修改并在导出时构建自己的自定义APK(添加模块,更改" -"AndroidManifest.xml等)。\n" -"请注意,为了进行自定义构建而不是使用预先构建的APK,应在Android导出预设中启" -"用“使用自定义构建”选项。" +"通过将源模板安装到 “res://android/build” ,将为自定义 Android 构建设置项" +"目。\n" +"然后,可以应用修改并在导出时构建自己的自定义 APK(添加模块、更改 " +"AndroidManifest.xml 等)。\n" +"请注意,要使用自定义构建而不是使用预先构建的APK,需在 Android 导出预设中启用 " +"“使用自定义构建” 选项。" #: editor/editor_node.cpp msgid "" @@ -3097,12 +3116,12 @@ msgid "" "Remove the \"res://android/build\" directory manually before attempting this " "operation again." msgstr "" -"Android构建模板已安装在此项目中,并且不会被覆盖。\n" -"再次尝试执行此操作之前,请手动删除“res://android/build”目录。" +"Android 构建模板已安装在此项目中,将不会被覆盖。\n" +"再次尝试执行此操作之前,请手动删除 “res://android/build” 目录。" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "从ZIP文件中导入模板" +msgstr "从 ZIP 文件中导入模板" #: editor/editor_node.cpp msgid "Template Package" @@ -3134,11 +3153,11 @@ msgstr "选择" #: editor/editor_node.cpp msgid "Open 2D Editor" -msgstr "打开2D编辑器" +msgstr "打开 2D 编辑器" #: editor/editor_node.cpp msgid "Open 3D Editor" -msgstr "打开3D编辑器" +msgstr "打开 3D 编辑器" #: editor/editor_node.cpp msgid "Open Script Editor" @@ -3182,7 +3201,7 @@ msgstr "编辑插件" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "已安装插件:" +msgstr "已安装插件:" #: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp msgid "Update" @@ -3227,15 +3246,15 @@ msgstr "物理帧 %" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "包含" +msgstr "全部" #: editor/editor_profiler.cpp msgid "Self" -msgstr "自身" +msgstr "仅自己" #: editor/editor_profiler.cpp msgid "Frame #:" -msgstr "帧号:" +msgstr "帧 #:" #: editor/editor_profiler.cpp msgid "Time" @@ -3259,7 +3278,7 @@ msgstr "层" #: editor/editor_properties.cpp msgid "Bit %d, value %d" -msgstr "第%d位,值为%d" +msgstr "第 %d 位,值为 %d" #: editor/editor_properties.cpp msgid "[Empty]" @@ -3271,7 +3290,7 @@ msgstr "指定..." #: editor/editor_properties.cpp msgid "Invalid RID" -msgstr "无效的RID" +msgstr "无效的 RID" #: editor/editor_properties.cpp msgid "" @@ -3284,7 +3303,7 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" -"无法在保存为文件的资源上创建视图纹理。\n" +"无法在保存为文件的资源上创建 ViewportTexture。\n" "资源需要属于场景。" #: editor/editor_properties.cpp @@ -3294,8 +3313,8 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" -"无法在此资源上创建视图纹理,因为它未设置为本地到场景。\n" -"请打开上面的“本地到场景”属性(以及包含它的所有资源到节点)。" +"无法在此资源上创建 ViewportTexture,因为这个资源未设置对应的本地场景。\n" +"请打开资源上的 “Local to Scene” 属性(以及到节点内所有包含该资源的资源)。" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -3311,11 +3330,11 @@ msgstr "扩展脚本" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" -msgstr "新建%s" +msgstr "新建 %s" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Make Unique" -msgstr "转换为独立资源" +msgstr "唯一化" #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp @@ -3333,11 +3352,11 @@ msgstr "粘贴" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Convert To %s" -msgstr "转换为%s" +msgstr "转换为 %s" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" -msgstr "选定的不是Viewport节点!" +msgstr "选定节点不是 Viewport!" #: editor/editor_properties_array_dict.cpp msgid "Size: " @@ -3362,7 +3381,7 @@ msgstr "新建值:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "添加键/值对" +msgstr "添加键值对" #: editor/editor_run_native.cpp msgid "" @@ -3375,31 +3394,31 @@ msgstr "" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "在_run()方法中填写您的逻辑代码。" +msgstr "在 _run() 方法中填写逻辑代码。" #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "已经存在一个正在编辑的场景。" +msgstr "已存在一个正在编辑的场景。" #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "无法实例化脚本:" +msgstr "无法实例化脚本:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "您是否遗漏了tool关键字?" +msgstr "是否遗漏了 tool 关键字?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "无法执行脚本:" +msgstr "无法运行脚本:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "您是否遗漏了_run()方法?" +msgstr "是否遗漏了 _run() 方法?" #: editor/editor_spin_slider.cpp msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." -msgstr "按住Ctrl键来四舍五入至整数。 按住Shift键获取更精确的变化。" +msgstr "按住 Ctrl 键来取整。 按住 Shift 键获取更精确的变化。" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3452,23 +3471,23 @@ msgstr "检索镜像,请等待..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "是否移除版本为“%s”的模板?" +msgstr "是否移除模板版本 “%s”?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "无法打开ZIP导出模板。" +msgstr "无法打开 ZIP 导出模板。" #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates: %s." -msgstr "模板文件:%s 中的 version.txt 格式无效。" +msgstr "模板中的 version.txt 格式无效:%s。" #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "模板中没有找到version.txt文件。" +msgstr "模板中没有找到 version.txt。" #: editor/export_template_manager.cpp msgid "Error creating path for templates:" -msgstr "创建模板文件路径出错:" +msgstr "创建模板路径出错:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3484,7 +3503,7 @@ msgstr "获取镜像列表时出错。" #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" -msgstr "解析镜像列表JSON时出错。请提交此问题!" +msgstr "解析镜像列表 JSON 时出错。请提交此问题!" #: editor/export_template_manager.cpp msgid "" @@ -3534,11 +3553,11 @@ msgid "" "The problematic templates archives can be found at '%s'." msgstr "" "模板安装失败。\n" -"有问题的模板文档在“%s”。" +"有问题的模板文档在 “%s”。" #: editor/export_template_manager.cpp msgid "Error requesting URL:" -msgstr "请求URL时出错:" +msgstr "请求 URL 时出错:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3588,7 +3607,7 @@ msgstr "SSL 握手错误" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" -msgstr "无压缩的Android Build资源" +msgstr "解压 Android Build 资源" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3636,11 +3655,11 @@ msgstr "状态:导入文件失败。请手动修复文件后重新导入。" #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "无法移动/重命名根资源。" +msgstr "无法移动或重命名根资源。" #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "无法将文件夹移动到其自身。" +msgstr "无法将文件夹移动到文件夹自己内。" #: editor/filesystem_dock.cpp msgid "Error moving:" @@ -3671,6 +3690,16 @@ msgid "Name contains invalid characters." msgstr "名称包含无效字符。" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "重命名文件:" @@ -3680,7 +3709,7 @@ msgstr "重命名文件夹:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" -msgstr "拷贝文件:" +msgstr "复制文件:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" @@ -3700,7 +3729,7 @@ msgstr "打开场景" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "创建实例节点" +msgstr "实例" #: editor/filesystem_dock.cpp msgid "Add to Favorites" @@ -3718,14 +3747,6 @@ msgstr "编辑依赖..." msgid "View Owners..." msgstr "查看所有者..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "重命名为..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "拷贝..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "移动..." @@ -3753,19 +3774,24 @@ msgid "Collapse All" msgstr "全部折叠" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "重命名" +msgid "Duplicate..." +msgstr "重复..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "移动至回收站" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "重命名为..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" -msgstr "上一个文件夹/文件" +msgstr "上一个文件夹或文件" #: editor/filesystem_dock.cpp msgid "Next Folder/File" -msgstr "下一个文件夹/文件" +msgstr "下一个文件夹或文件" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" @@ -3792,8 +3818,11 @@ msgid "Move" msgstr "移动" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "当前位置已存在相同名字的文件或文件夹。" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "重命名" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3809,7 +3838,7 @@ msgstr "创建脚本" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp msgid "Find in Files" -msgstr "跨文件查找" +msgstr "在文件中查找" #: editor/find_in_files.cpp msgid "Find:" @@ -3827,7 +3856,7 @@ msgstr "筛选:" msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." -msgstr "包含下列扩展名的文件。可在项目设置中增加或移除。" +msgstr "包含下列扩展名的文件。可在项目设置中添加或移除。" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3876,11 +3905,11 @@ msgstr "分组名称已存在。" #: editor/groups_editor.cpp msgid "Invalid group name." -msgstr "组名无效。" +msgstr "分组名称无效。" #: editor/groups_editor.cpp msgid "Rename Group" -msgstr "重命名组" +msgstr "重命名分组" #: editor/groups_editor.cpp msgid "Delete Group" @@ -3917,43 +3946,43 @@ msgstr "管理分组" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "导入为独立场景" +msgstr "导入为单一场景" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "与独立的动画一同导入" +msgstr "与动画分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "导入独立材质" +msgstr "与材质分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "导入独立物体" +msgstr "与对象分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "导入独立物体 + 材质" +msgstr "与对象 + 材质分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "导入独立的物体和动画" +msgstr "与对象 + 动画分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "与独立的材质和动画一同导入" +msgstr "与材质 + 动画分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "使用单独的对象 + 材质 + 动画导入" +msgstr "与对象 + 材质 + 动画分开导入" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "导入多个场景" +msgstr "导入为多个场景" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "导入多个场景 + 材质" +msgstr "导入为多个场景 + 材质" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -3962,7 +3991,7 @@ msgstr "导入场景" #: editor/import/resource_importer_scene.cpp msgid "Importing Scene..." -msgstr "导入场景..." +msgstr "导入场景中..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -3970,7 +3999,7 @@ msgstr "正在生成光照贴图" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "正在生成Mesh: " +msgstr "正在生成网格: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -3990,7 +4019,7 @@ msgstr "后处理脚本运行发生错误:" #: editor/import/resource_importer_scene.cpp msgid "Did you return a Node-derived object in the `post_import()` method?" -msgstr "你是否在 `post_import()` 方法中返回了 Node 衍生对象?" +msgstr "有在 `post_import()` 方法中返回继承了 Node 的对象吗?" #: editor/import/resource_importer_scene.cpp msgid "Saving..." @@ -3998,15 +4027,15 @@ msgstr "保存中..." #: editor/import_dock.cpp msgid "%d Files" -msgstr "%d个文件" +msgstr "%d 个文件" #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "设置为“%s”的默认值" +msgstr "设置为 “%s” 的默认值" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "清除默认'%s'" +msgstr "清除 “%s” 的默认值" #: editor/import_dock.cpp msgid "Import As:" @@ -4116,15 +4145,15 @@ msgstr "多节点组" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." -msgstr "选择一个节点以编辑其信号和组。" +msgstr "选择一个节点以编辑其信号和分组。" #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" -msgstr "编辑一个插件" +msgstr "编辑插件" #: editor/plugin_config_dialog.cpp msgid "Create a Plugin" -msgstr "创建一个插件" +msgstr "创建插件" #: editor/plugin_config_dialog.cpp msgid "Plugin Name:" @@ -4210,11 +4239,11 @@ msgstr "移动节点" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" -msgstr "更改混合空间1D限制" +msgstr "更改 BlendSpace1D 限制" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Labels" -msgstr "更改混合空间1D标签" +msgstr "更改 BlendSpace1D 标签" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4234,11 +4263,11 @@ msgstr "添加动画点" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Remove BlendSpace1D Point" -msgstr "移除混合空间1D顶点" +msgstr "移除 BlendSpace1D 顶点" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "移动混合空间1D节点顶点" +msgstr "移动 BlendSpace1D 节点顶点" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4259,7 +4288,7 @@ msgstr "在此空间下设置位置混合状态" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "选择并移动点,使用 RMB 创建点。" +msgstr "选择并移动点,使用鼠标右键创建点。" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp @@ -4294,19 +4323,19 @@ msgstr "添加三角面" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Limits" -msgstr "更改混合空间2D限制" +msgstr "更改 BlendSpace2D 限制" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Labels" -msgstr "更改混合空间2D标签" +msgstr "更改 BlendSpace2D 标签" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Point" -msgstr "移除混合空间2D顶点" +msgstr "移除 BlendSpace2D 顶点" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Triangle" -msgstr "移除混合空间2D三角形" +msgstr "移除 BlendSpace2D 三角形" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." @@ -4318,11 +4347,11 @@ msgstr "不存在任何三角形,因此不会有任何混效果合产生。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Toggle Auto Triangles" -msgstr "切换自动三角形" +msgstr "打开/关闭自动三角形" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "通过连接点创建三角形。" +msgstr "通过连接点来创建三角形。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Erase points and triangles." @@ -4330,12 +4359,12 @@ msgstr "擦除点和三角形。" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "自动创建混合三角形(非手动)" +msgstr "自动生成混合三角形(而非手动)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend:" -msgstr "混合:" +msgstr "混合:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Parameter Changed" @@ -4352,7 +4381,7 @@ msgstr "输出节点不能被添加到混合树。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" -msgstr "在合成树中添加节点" +msgstr "添加节点到 BlendTree" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Node Moved" @@ -4400,7 +4429,7 @@ msgstr "没有设置动画播放器,因此无法获取轨道名称。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." -msgstr "无效的播放器路劲设置,因此无法获取轨道名称。" +msgstr "播放器路径设置无效,无法获取轨道名称。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -4442,7 +4471,7 @@ msgstr "启用筛选" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "切换AutoPlay" +msgstr "打开/关闭自动播放" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" @@ -4501,7 +4530,7 @@ msgstr "没有需要复制的动画!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation resource on clipboard!" -msgstr "剪切板中不存在动画资源!" +msgstr "剪贴板中不存在动画资源!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -4513,7 +4542,7 @@ msgstr "粘贴动画" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation to edit!" -msgstr "没有动画需要编辑!" +msgstr "没有动画能编辑!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -4537,11 +4566,11 @@ msgstr "从当前位置播放选中动画(D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "动画位置(单位:秒)。" +msgstr "动画位置(秒)。" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "节点全局缩放动画播放。" +msgstr "为节点全局缩放动画播放。" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -4569,7 +4598,7 @@ msgstr "加载后自动播放" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "启用洋葱皮(Onion Skinning)" +msgstr "启用洋葱皮" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning Options" @@ -4589,23 +4618,23 @@ msgstr "未来" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "Depth(深度)" +msgstr "深度" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "1步" +msgstr "1 步" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "2步" +msgstr "2 步" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "3步" +msgstr "3 步" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "仅不同" +msgstr "仅差异" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" @@ -4613,7 +4642,7 @@ msgstr "强制用白色调和" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "包括3D控制器" +msgstr "包括 Gizmo (3D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pin AnimationPlayer" @@ -4636,11 +4665,11 @@ msgstr "错误!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "混合时间:" +msgstr "混合时间:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "接下来(自动排列):" +msgstr "接下来(自动队列):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" @@ -4665,11 +4694,11 @@ msgstr "添加节点" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" -msgstr "终点" +msgstr "结束" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "即刻" +msgstr "立即" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" @@ -4677,7 +4706,7 @@ msgstr "同步" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "在终点" +msgstr "在结尾" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" @@ -4689,7 +4718,7 @@ msgstr "子过渡动画需要开始和结束节点。" #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." -msgstr "路径下无播放资源:%s。" +msgstr "路径下无可播放资源:%s。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -4727,11 +4756,11 @@ msgstr "移除选中的节点或过渡动画。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." -msgstr "开启或关闭动画的自动播放,在开始,重启或者搜索0位置处。" +msgstr "开启或关闭动画在开始,重启或者搜索0位置处的自动播放。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "设置终点结束动画。这对于子过渡动画非常有用。" +msgstr "设置终点结束动画。适用于子过渡动画。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " @@ -4765,11 +4794,11 @@ msgstr "淡出(秒):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" -msgstr "混合" +msgstr "混合 (Blend)" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix" -msgstr "混合" +msgstr "混合 (Mix)" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" @@ -4794,19 +4823,19 @@ msgstr "数量:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" -msgstr "混合0:" +msgstr "混合 0:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 1:" -msgstr "混合1:" +msgstr "混合 1:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "X-Fade(交叉淡化)时间(s):" +msgstr "交叉淡化 (X-Fade) 时间(秒):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Current:" -msgstr "当前:" +msgstr "当前:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp @@ -4816,15 +4845,15 @@ msgstr "添加输入" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "清除Auto-Advance" +msgstr "清除自动 Advance" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "设置清除Auto-Advance" +msgstr "设置自动 Advance" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Delete Input" -msgstr "删除输入事件" +msgstr "删除输入" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is valid." @@ -4844,31 +4873,31 @@ msgstr "单项节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix Node" -msgstr "混合(Mix)节点" +msgstr "Mix 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend2 Node" -msgstr "混合2(Blend) 节点" +msgstr "Blend2 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend3 Node" -msgstr "混合3(Blend) 节点" +msgstr "Blend3 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend4 Node" -msgstr "混合4(Blend) 节点" +msgstr "Blend4 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeScale Node" -msgstr "时间缩放节点" +msgstr "TimeScale 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "TimeSeek(时间寻找) 节点" +msgstr "TimeSeek 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Transition Node" -msgstr "过渡节点" +msgstr "Transition 节点" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Import Animations..." @@ -4896,11 +4925,11 @@ msgstr "连接错误,请重试。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "无法连接到服务器:" +msgstr "无法连接到主机:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "服务器无响应:" +msgstr "主机无响应:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" @@ -4908,7 +4937,7 @@ msgstr "无法解析主机名:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "请求失败,错误代码:" +msgstr "请求失败,返回代码:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed." @@ -4940,7 +4969,7 @@ msgstr "超时。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "文件hash值错误,该文件可能被篡改。" +msgstr "文件哈希值错误,该文件可能被篡改。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" @@ -4952,7 +4981,7 @@ msgstr "获得:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "sha256哈希值校验失败" +msgstr "SHA-256 哈希值校验失败" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" @@ -4960,7 +4989,7 @@ msgstr "素材下载出错:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading (%s / %s)..." -msgstr "下载中(%s / %s)..." +msgstr "下载中 (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading..." @@ -4976,7 +5005,7 @@ msgstr "请求错误" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" -msgstr "空闲" +msgstr "闲置" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Install..." @@ -4992,7 +5021,7 @@ msgstr "下载错误" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "已在下载此素材!" +msgstr "此素材已在下载!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" @@ -5000,7 +5029,7 @@ msgstr "最近更新" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "最久未更新" +msgstr "最近更新(倒序)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (A-Z)" @@ -5040,7 +5069,7 @@ msgstr "全部" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "未找到“%s”。" +msgstr "未找到 “%s”。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5052,16 +5081,16 @@ msgstr "插件..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" -msgstr "排序:" +msgstr "排序:" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" -msgstr "分类:" +msgstr "分类:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "站点:" +msgstr "站点:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Support" @@ -5081,7 +5110,7 @@ msgstr "载入中..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "素材ZIP文件" +msgstr "素材 ZIP 文件" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5097,7 +5126,7 @@ msgstr "" msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." -msgstr "没有可烘焙的Mesh。请确保Mesh包含UV2通道并且勾选'Bake Light'选项。" +msgstr "没有可烘焙的网格。请确保网格包含 UV2 通道并且勾选 “Bake Light” 选项。" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5174,50 +5203,43 @@ msgstr "创建垂直水平参考线" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "将 CanvasItem “%s”的 Pivot Offset 设为 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "旋转 CanvasItem" +msgstr "旋转 %d 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "旋转 CanvasItem" +msgstr "旋转 CanvasItem “%s” 为 %d 度" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "移动 CanvasItem" +msgstr "移动 CanvasItem “%s” 的锚点" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "缩放 Node2D “%s” 为 (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "缩放 Control “%s” 为 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "缩放包含项" +msgstr "缩放 %d 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "缩放包含项" +msgstr "缩放 CanvasItem “%s” 为 (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "移动 CanvasItem" +msgstr "移动 %s 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "移动 CanvasItem" +msgstr "移动 CanvasItem “%s” 至 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5227,29 +5249,29 @@ msgstr "容器的子级的锚点和边距值被其父容器重写。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Presets for the anchors and margins values of a Control node." -msgstr "控件节点的定位点和边距值的预设。" +msgstr "Control 节点的定位点和边距值的预设。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." -msgstr "激活后,移动控制节点会更改变锚点,而非边距。" +msgstr "激活后,移动 Control 节点会更改变锚点,而非边距。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Left" -msgstr "左上角" +msgstr "左上" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Right" -msgstr "右上角" +msgstr "右上" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Bottom Right" -msgstr "右下角" +msgstr "右下" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Bottom Left" -msgstr "左下角" +msgstr "左下" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Left" @@ -5371,7 +5393,7 @@ msgstr "清除骨骼" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "添加IK链" +msgstr "添加 IK 链" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" @@ -5404,7 +5426,7 @@ msgstr "Alt+拖动:移动" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." -msgstr "按下V键修改旋转中心,在移动时按下Shift+V来拖动它。" +msgstr "按下 “V” 键修改旋转中心,在移动时按下 Shift+V 来拖动它。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" @@ -5432,7 +5454,7 @@ msgid "" "(same as Alt+RMB in select mode)." msgstr "" "显示鼠标点击位置的所有节点\n" -"(同Alt+鼠标右键)。" +"(同 Alt + 鼠标右键)。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -5645,11 +5667,11 @@ msgstr "清除姿势" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "网格步进乘以2" +msgstr "网格步进乘以 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "网格步进除以2" +msgstr "网格步进除以 2" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan View" @@ -5657,7 +5679,7 @@ msgstr "平移视图" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "添加%s" +msgstr "添加 %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." @@ -5675,7 +5697,7 @@ msgstr "创建节点" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" -msgstr "从%s实例化场景出错" +msgstr "从 %s 实例化场景出错" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Default Type" @@ -5686,12 +5708,12 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"拖放+ Shift:将节点添加为兄弟节点\n" -"拖放+ Alt:更改节点类型" +"拖放 + Shift:将节点添加为兄弟节点\n" +"拖放 + Alt:更改节点类型" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" -msgstr "创建Polygon3D" +msgstr "创建 Polygon3D" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly" @@ -5736,7 +5758,7 @@ msgstr "生成顶点计数:" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "Emission Mask(发射遮挡)" +msgstr "发射遮罩" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5761,29 +5783,29 @@ msgstr "从像素捕获" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "Emission Colors(自发光颜色)" +msgstr "发射色彩" #: editor/plugins/cpu_particles_editor_plugin.cpp msgid "CPUParticles" -msgstr "CPU粒子" +msgstr "CPUParticles" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "从Mesh创建发射点" +msgstr "从网格创建发射点" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "从Node创建发射点" +msgstr "从节点创建发射点" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat 0" -msgstr "保持0" +msgstr "Flat 0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat 1" -msgstr "保持1" +msgstr "Flat 1" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease In" @@ -5835,7 +5857,7 @@ msgstr "移除曲线点" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "切换曲线线性Tangent" +msgstr "切换曲线线性正切" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" @@ -5847,7 +5869,7 @@ msgstr "鼠标右键添加点" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "烘培GI探针" +msgstr "烘培 GI 探针" #: editor/plugins/gradient_editor_plugin.cpp msgid "Gradient Edited" @@ -5855,7 +5877,7 @@ msgstr "渐变编辑" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "第%d项" +msgstr "第 %d 项" #: editor/plugins/item_list_editor_plugin.cpp msgid "Items" @@ -5875,11 +5897,11 @@ msgstr "网格为空!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create a Trimesh collision shape." -msgstr "无法创建Trimesh碰撞形状。" +msgstr "无法创建三角网格碰撞形状。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "创建静态三维身体" +msgstr "创建静态三角网格身体" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5887,7 +5909,7 @@ msgstr "此操作无法引用在根节点上!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Shape" -msgstr "创建三维网格静态形状" +msgstr "创建三角网格静态形状" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create a single convex collision shape for the scene root." @@ -5919,23 +5941,23 @@ msgstr "创建导航网格" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "包含的Mesh不是ArrayMesh类型。" +msgstr "包含的 Mesh 不是 ArrayMesh 类型。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "UV展开失败,可能该网格并非流形?" +msgstr "UV 展开失败,可能该网格并非流形?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "没有要调试的网格。" +msgstr "没有可调试的网格。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "模型在此层上没有UV图" +msgstr "模型在此层上没有 UV" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "MeshInstance (网格实例) 缺少 Mesh(网格)!" +msgstr "MeshInstance 缺少 Mesh!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" @@ -5943,7 +5965,7 @@ msgstr "网格没有可用来创建轮廓的表面!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "网格原始类型不是 PRIMITIVE_TRIANGLES(三角形网格)!" +msgstr "Mesh 原始类型不是 PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -5967,7 +5989,7 @@ msgid "" "automatically.\n" "This is the most accurate (but slowest) option for collision detection." msgstr "" -"创建StaticBody并自动为其分配基于多边形的碰撞形状。\n" +"创建 StaticBody 并自动为其分配基于多边形的碰撞形状。\n" "这是最准确(但是最慢)的碰撞检测手段。" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6018,19 +6040,19 @@ msgid "" "that property isn't possible." msgstr "" "创建一个静态轮廓网格。轮廓网格会自动翻转法线。\n" -"可以用来在必要时代替SpatialMaterial的Grow属性。" +"可以用来在必要时代替 SpatialMaterial 的 Grow 属性。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" -msgstr "查看UV1" +msgstr "查看 UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV2" -msgstr "查看UV2" +msgstr "查看 UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" -msgstr "为光照映射/环境光遮蔽展开UV2" +msgstr "为光照映射或环境光遮蔽展开 UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" @@ -6042,11 +6064,11 @@ msgstr "轮廓大小:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" -msgstr "调试UV通道" +msgstr "调试 UV 通道" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" -msgstr "确定要移除项目%d吗?" +msgstr "确定要移除项目 %d 吗?" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "" @@ -6079,11 +6101,11 @@ msgstr "从场景中更新" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." -msgstr "未指定网格源(且节点中没有设置多网格物体(MultiMesh))。" +msgstr "未指定网格源(且节点中没有设置 MultiMesh 集)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "未指定网格源(且多网格(MultiMesh)不包含网格(Mesh))。" +msgstr "未指定网格源(且 MultiMesh 不包含 Mesh)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." @@ -6091,11 +6113,11 @@ msgstr "网格源无效(路径无效)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "网格源无效(不是网格实例(MeshInstance))。" +msgstr "网格源无效(不是 MeshInstance)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "网格源无效(不包含网格(Mesh)资源)。" +msgstr "网格源无效(不包含 Mesh 资源)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." @@ -6115,7 +6137,7 @@ msgstr "表面的源无效(无面)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "选择源网格:" +msgstr "选择源网格:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" @@ -6127,7 +6149,7 @@ msgstr "填充表面" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "填充MultiMesh" +msgstr "填充 MultiMesh" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" @@ -6139,11 +6161,11 @@ msgstr "源网格:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" -msgstr "X轴" +msgstr "X 轴" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Y-Axis" -msgstr "Y轴" +msgstr "Y 轴" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Z-Axis" @@ -6177,7 +6199,7 @@ msgstr "创建导航多边形" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Convert to CPUParticles" -msgstr "转换为 CPU粒子" +msgstr "转换为 CPUParticles" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generating Visibility Rect" @@ -6189,12 +6211,12 @@ msgstr "生成可视化区域" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "可以设置ParticlesMaterial 点的材质" +msgstr "只可设为指向 ParticlesMaterial 处理材料" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generation Time (sec):" -msgstr "生成时间(秒):" +msgstr "生成时间(秒):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." @@ -6206,23 +6228,23 @@ msgstr "几何体不包含任何面。" #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "“%s”未从Spatial继承。" +msgstr "“%s” 未从 Spatial 继承。" #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain geometry." -msgstr "\"%s\"不包含几何体。" +msgstr "“%s” 不包含几何体。" #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain face geometry." -msgstr "\"%s\"不包含面几何体。" +msgstr "“%s” 不包含面几何体。" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "创建发射器(Emitter)" +msgstr "创建发射器 (Emitter)" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "发射位置:" +msgstr "发射位置:" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" @@ -6230,7 +6252,7 @@ msgstr "表面顶点" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" -msgstr "表面定点+法线(方向向量)" +msgstr "表面定点 + 法线(有向)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" @@ -6242,19 +6264,19 @@ msgstr "发射源: " #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "需要使用“ParticlesMaterial”类型的处理材质。" +msgstr "需要使用 “ParticlesMaterial” 类型的处理材质。" #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" -msgstr "正在生成AABB" +msgstr "正在生成 AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "生成可见的AABB" +msgstr "生成可见的 AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "生成AABB" +msgstr "生成 AABB" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" @@ -6297,12 +6319,12 @@ msgstr "选择顶点" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "Shift+拖拽:选择控制点" +msgstr "Shift+拖动:选择控制点" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "鼠标左键:添加点" +msgstr "单击:添加点" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Left Click: Split Segment (in curve)" @@ -6311,11 +6333,11 @@ msgstr "鼠标左键:拆分片段(曲线内)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "鼠标右键:删除点" +msgstr "鼠标右键:删除点" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "选择控制点(Shift+拖动)" +msgstr "选择控制点(Shift+拖动)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6358,11 +6380,11 @@ msgstr "设置曲线的顶点坐标" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" -msgstr "设置的曲线初始位置(Pos)" +msgstr "设置曲线内控点位置" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Out Position" -msgstr "设置曲线外控制点" +msgstr "设置曲线外控点位置" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -6374,15 +6396,15 @@ msgstr "移除路径顶点" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Out-Control Point" -msgstr "移除曲线外控制点" +msgstr "移除外控点" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" -msgstr "移除曲线内控制点" +msgstr "移除内控点" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "拆分(曲线)" +msgstr "拆分线段(在曲线中)" #: editor/plugins/physical_bone_plugin.cpp msgid "Move Joint" @@ -6391,7 +6413,7 @@ msgstr "移动关节" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "Polygon2D 的骨架属性并没有指向一个 Skeleton2D 节点" +msgstr "Polygon2D 的骨架属性并没有指向 Skeleton2D 节点" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" @@ -6407,13 +6429,13 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "创建UV贴图" +msgstr "创建 UV 贴图" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." -msgstr "多边形2d 具有内部顶点, 因此不能再在视口中对其进行编辑。" +msgstr "Polygon2D 具有内部顶点,因此不能再于视口中对其进行编辑。" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" @@ -6453,11 +6475,11 @@ msgstr "绘制骨骼权重" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." -msgstr "打开2D多边形UV编辑器。" +msgstr "打开 2D 多边形 UV 编辑器。" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "2D多边形UV编辑器" +msgstr "2D 多边形 UV 编辑器" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" @@ -6480,22 +6502,20 @@ msgid "Move Points" msgstr "移动点" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "拖动来旋转" +msgstr "Command: 旋转" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: 移动所有" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl: 缩放" +msgstr "Shift+Command: 缩放" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl:旋转" +msgstr "Ctrl: 旋转" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" @@ -6515,13 +6535,13 @@ msgstr "缩放多边形" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create a custom polygon. Enables custom polygon rendering." -msgstr "建立自定义多边形。启用自定义多边形渲染。" +msgstr "创建自定义多边形。启用自定义多边形渲染。" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "Remove a custom polygon. If none remain, custom polygon rendering is " "disabled." -msgstr "移除自定义多边形。如果不存在,禁用自定义多边形渲染。" +msgstr "移除自定义多边形。如果没有剩下任何多边形,则会禁用自定义多边形渲染。" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." @@ -6536,18 +6556,16 @@ msgid "Radius:" msgstr "半径:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "创建多边形和 UV" +msgstr "复制多边形为 UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "转换为Polygon2D" +msgstr "复制 UV 为多边形" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "清除UV" +msgstr "清除 UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Settings" @@ -6645,7 +6663,7 @@ msgstr "预加载资源" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "AnimationTree 没有设置路径到一个 AnimationPlayer" +msgstr "AnimationTree 没有设置到 AnimationPlayer 的路径" #: editor/plugins/root_motion_editor_plugin.cpp msgid "Path to AnimationPlayer is invalid" @@ -6714,7 +6732,7 @@ msgstr "脚本并非处于工具模式,无法执行。" #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." -msgstr "如需执行此脚本,必须继承EditorScript并将其设为工具模式。" +msgstr "如需执行此脚本,必须继承 EditorScript 并将其设为工具模式。" #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -6752,7 +6770,7 @@ msgstr "筛选脚本" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "切换按字母表排序方式排列方法。" +msgstr "切换按字母顺序排列方法。" #: editor/plugins/script_editor_plugin.cpp msgid "Filter methods" @@ -6870,7 +6888,7 @@ msgstr "使用外部编辑器进行调试" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." -msgstr "打开Godot在线文档。" +msgstr "打开 Godot 在线文档。" #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." @@ -6933,7 +6951,7 @@ msgstr "目标" #: editor/plugins/script_text_editor.cpp msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." -msgstr "未找到方法“%s”(连接于信号“%s”、来自节点“%s”、目标节点“%s”)。" +msgstr "未找到方法 “%s”(连接于信号“%s”、来自节点“%s”、目标节点“%s”)。" #: editor/plugins/script_text_editor.cpp msgid "[Ignore]" @@ -6949,12 +6967,12 @@ msgstr "转到函数" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "只可以拖拽来自文件系统中的资源。" +msgstr "只可拖放来自文件系统中的资源。" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." -msgstr "无法放置该节点,因为脚本“%s”未在该场景中使用。" +msgstr "无法放置该节点,因为脚本 “%s” 未在该场景中使用。" #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -6996,7 +7014,7 @@ msgstr "断点" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Go To" -msgstr "跳转到" +msgstr "转到" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -7026,7 +7044,7 @@ msgstr "切换注释" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "折叠/展开行" +msgstr "折叠/展开行" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -7034,7 +7052,7 @@ msgstr "折叠所有行" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "取消折叠所有行" +msgstr "展开所有行" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" @@ -7058,7 +7076,7 @@ msgstr "将缩进转为空格" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Tabs" -msgstr "将缩进转为Tabs" +msgstr "将缩进转为制表符" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -7099,7 +7117,7 @@ msgstr "转到行..." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "切换断点" +msgstr "设置/移除断点" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" @@ -7107,18 +7125,18 @@ msgstr "移除所有断点" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" -msgstr "前往下一个断点" +msgstr "转到下一个断点" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Breakpoint" -msgstr "前往上一个断点" +msgstr "转到上一个断点" #: editor/plugins/shader_editor_plugin.cpp msgid "" "This shader has been modified on on disk.\n" "What action should be taken?" msgstr "" -"此着色器已在磁盘上修改.\n" +"此着色器已在磁盘上修改。\n" "应该采取什么行动?" #: editor/plugins/shader_editor_plugin.cpp @@ -7179,15 +7197,15 @@ msgstr "已忽略变换。" #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "X轴变换。" +msgstr "X 轴变换。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "Y轴变换。" +msgstr "Y 轴变换。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "Z轴变换。" +msgstr "Z 轴变换。" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." @@ -7203,7 +7221,7 @@ msgstr "移动: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." -msgstr "旋转%s度。" +msgstr "旋转 %s 度。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." @@ -7315,7 +7333,7 @@ msgstr "锁定视角旋转" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "显示法线" +msgstr "显示标准" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" @@ -7343,7 +7361,7 @@ msgstr "查看信息" #: editor/plugins/spatial_editor_plugin.cpp msgid "View FPS" -msgstr "查看帧率" +msgstr "查看 FPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" @@ -7363,7 +7381,7 @@ msgstr "效果预览" #: editor/plugins/spatial_editor_plugin.cpp msgid "Not available when using the GLES2 renderer." -msgstr "使用GLES2渲染器时不可用。" +msgstr "使用 GLES2 渲染器时不可用。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -7406,12 +7424,12 @@ msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." msgstr "" -"注意:显示的FPS值是编辑器的帧速率。\n" -"它不能用于表现游戏中的实际性能。" +"注意:显示的 FPS 值是编辑器的帧速率。\n" +"不能反馈出实际游戏中的性能。" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "XForm对话框" +msgstr "XForm 对话框" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7423,9 +7441,9 @@ msgid "" msgstr "" "点击以切换可见状态。\n" "\n" -"睁眼:标志可见。\n" -"闭眼:标志隐藏。\n" -"半睁眼:标志也可穿过不透明的表面可见(“X光”)。" +"睁眼:Gizmo 可见。\n" +"闭眼:Gizmo 隐藏。\n" +"半睁眼:Gizmo 也可穿过不透明的表面可见(“X-Ray - X 光”)。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Nodes To Floor" @@ -7512,31 +7530,31 @@ msgstr "变换对话框..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "1个视口" +msgstr "1 个视口" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "2个视口" +msgstr "2 个视口" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "2个视口(备选)" +msgstr "2 个视口(备选)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "3个视口" +msgstr "3 个视口" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "3个视口(备选)" +msgstr "3 个视口(备选)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "4个视口" +msgstr "4 个视口" #: editor/plugins/spatial_editor_plugin.cpp msgid "Gizmos" -msgstr "控制器" +msgstr "Gizmo" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -7577,11 +7595,11 @@ msgstr "透视视角(角度):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "查看Z-Near:" +msgstr "查看 Z-Near:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "查看Z-Far:" +msgstr "查看 Z-Far:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" @@ -7617,35 +7635,35 @@ msgstr "无名控制器" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" -msgstr "创建Mesh2D" +msgstr "创建 Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Mesh2D Preview" -msgstr "Mesh2D预览" +msgstr "Mesh2D 预览" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Polygon2D" -msgstr "创建Polygon 2D" +msgstr "创建 Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" -msgstr "Polygon2D预览" +msgstr "Polygon2D 预览" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D" -msgstr "创建CollisionPolygon2D" +msgstr "创建 CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "CollisionPolygon2D Preview" -msgstr "CollisionPolygon2D预览" +msgstr "CollisionPolygon2D 预览" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D" -msgstr "创建LightOccluder2D" +msgstr "创建 LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "LightOccluder2D Preview" -msgstr "LightOccluder2D预览" +msgstr "LightOccluder2D 预览" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" @@ -7653,7 +7671,7 @@ msgstr "Sprite 是空的!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "无法将使用动画帧的精灵转换为网格。" +msgstr "无法将使用动画帧将精灵转换为网格。" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." @@ -7661,7 +7679,7 @@ msgstr "无效的几何体,无法使用网格替换。" #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Mesh2D" -msgstr "转换为Mesh2D" +msgstr "转换为 Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -7669,7 +7687,7 @@ msgstr "无效的几何体,无法创建多边形。" #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Polygon2D" -msgstr "转换为Polygon2D" +msgstr "转换为 Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." @@ -7677,7 +7695,7 @@ msgstr "无效的几何体,无法创建多边形碰撞体。" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D Sibling" -msgstr "创建CollisionPolygon2D兄弟节点" +msgstr "创建 CollisionPolygon2D 兄弟节点" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." @@ -7685,7 +7703,7 @@ msgstr "无效的几何体,无法创建遮光体。" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D Sibling" -msgstr "创建LightOccluder2D兄弟节点" +msgstr "创建 LightOccluder2D 兄弟节点" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite" @@ -7717,7 +7735,7 @@ msgstr "未选择帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add %d Frame(s)" -msgstr "添加%d帧" +msgstr "添加 %d 帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" @@ -7745,7 +7763,7 @@ msgstr "添加空白帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "修改动画FPS" +msgstr "修改动画 FPS" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" @@ -7817,7 +7835,7 @@ msgstr "选择/清除所有帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Create Frames from Sprite Sheet" -msgstr "从 Sprite Sheet 中创建帧" +msgstr "从精灵表中创建帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" @@ -7833,7 +7851,7 @@ msgstr "设置边距" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" -msgstr "吸附模式:" +msgstr "吸附模式:" #: editor/plugins/texture_region_editor_plugin.cpp #: scene/resources/visual_shader.cpp @@ -7854,7 +7872,7 @@ msgstr "自动裁剪" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Offset:" -msgstr "网格偏移量:" +msgstr "偏移量:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Step:" @@ -7922,7 +7940,7 @@ msgstr "不可用的按钮" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "项目(Item)" +msgstr "项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled Item" @@ -7930,11 +7948,11 @@ msgstr "不可用的项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" -msgstr "检查项目(Item)" +msgstr "检查项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" -msgstr "已选项目(Checked Item)" +msgstr "已选项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Radio Item" @@ -7946,47 +7964,47 @@ msgstr "已选单选项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." -msgstr "命名为 Sep。" +msgstr "带名称的分隔线" #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" -msgstr "子菜单(Submenu)" +msgstr "子菜单" #: editor/plugins/theme_editor_plugin.cpp msgid "Subitem 1" -msgstr "子项目1" +msgstr "子项目 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Subitem 2" -msgstr "子项目2" +msgstr "子项目 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" -msgstr "有(Has)" +msgstr "有" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "许多(Many)" +msgstr "许多" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled LineEdit" -msgstr "行编辑不可用" +msgstr "已禁用 LineEdit" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "分页1" +msgstr "选项卡 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "分页2" +msgstr "选项卡 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "分页3" +msgstr "选项卡 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Editable Item" -msgstr "可编辑节点" +msgstr "可编辑的项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Subtree" @@ -7994,11 +8012,11 @@ msgstr "子树" #: editor/plugins/theme_editor_plugin.cpp msgid "Has,Many,Options" -msgstr "有,很多,选项" +msgstr "有, 很多, 选项" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "数据类型:" +msgstr "数据类型:" #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp @@ -8083,21 +8101,20 @@ msgid "Paint Tile" msgstr "绘制图块" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift+鼠标左键:绘制直线\n" -"Shift+Ctrl+鼠标左键:绘制矩形" +"Shift + 鼠标左键:绘制直线\n" +"Shift + Command + 鼠标左键:绘制矩形" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+鼠标左键:绘制直线\n" -"Shift+Ctrl+鼠标左键:绘制矩形" +"Shift + 鼠标左键:绘制直线\n" +"Shift + Ctrl + 鼠标左键:绘制矩形" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -8193,7 +8210,7 @@ msgstr "优先级" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index" -msgstr "Z索引" +msgstr "Z 索引" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region Mode" @@ -8225,7 +8242,7 @@ msgstr "图标模式" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index Mode" -msgstr "Z索引模式" +msgstr "Z 索引模式" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." @@ -8241,19 +8258,31 @@ msgstr "擦除位掩码。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new rectangle." -msgstr "新建矩形。" +msgstr "创建新矩形。" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "新建矩形" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "创建新多边形。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "新建多边形" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "删除所选形状" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "保持多边形位于纹理区域中。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." -msgstr "启用吸附并显示网格(可通过属性面板设置)。" +msgstr "启用吸附并显示网格(可通过属性检查器设置)。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display Tile Names (Hold Alt Key)" @@ -8286,7 +8315,7 @@ msgstr "删除纹理" #: editor/plugins/tile_set_editor_plugin.cpp msgid "%s file(s) were not added because was already on the list." -msgstr "%s 文件没有被添加,因为已添加在列表中。" +msgstr "因为有 %s 个文件已添加在列表中,所以没有被添加。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8298,7 +8327,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete selected Rect." -msgstr "删除选中的Rect。" +msgstr "删除选中矩形。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8321,7 +8350,7 @@ msgid "" msgstr "" "鼠标左键:启用比特。\n" "鼠标右键:关闭比特。\n" -"Shift+鼠标左键:设置通配符位。\n" +"Shift + 鼠标左键:设置通配符位。\n" "点击另一个图块进行编辑。" #: editor/plugins/tile_set_editor_plugin.cpp @@ -8443,7 +8472,7 @@ msgstr "图块集" #: editor/plugins/version_control_editor_plugin.cpp msgid "No VCS addons are available." -msgstr "没有可用的VCS插件。" +msgstr "没有可用的 VCS 插件。" #: editor/plugins/version_control_editor_plugin.cpp msgid "Error" @@ -8463,7 +8492,7 @@ msgstr "提交" #: editor/plugins/version_control_editor_plugin.cpp msgid "VCS Addon is not initialized" -msgstr "VCS插件未初始化" +msgstr "VCS 插件未初始化" #: editor/plugins/version_control_editor_plugin.cpp msgid "Version Control System" @@ -8536,7 +8565,7 @@ msgstr "检测文件差异的变化" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" -msgstr "只使用GLES3" +msgstr "(仅限 GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Output" @@ -8548,7 +8577,7 @@ msgstr "标量" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector" -msgstr "Vector" +msgstr "矢量" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" @@ -8556,7 +8585,7 @@ msgstr "布尔值" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sampler" -msgstr "采样(Sampler)" +msgstr "采样 Sampler" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" @@ -8596,7 +8625,7 @@ msgstr "设置表达式" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Resize VisualShader node" -msgstr "调整可视着色器节点" +msgstr "调整 VisualShader 节点大小" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" @@ -8611,7 +8640,6 @@ msgid "Add Node to Visual Shader" msgstr "将节点添加到可视着色器" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" msgstr "节点已移动" @@ -8633,9 +8661,8 @@ msgid "Visual Shader Input Type Changed" msgstr "可视着色器输入类型已更改" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "设置统一名称" +msgstr "已更改 UniformRef 的名称" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -8671,11 +8698,11 @@ msgstr "灰度函数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts HSV vector to RGB equivalent." -msgstr "将HSV向量转换为等效的RGB向量。" +msgstr "将 HSV 向量转换为等效的 RGB 向量。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts RGB vector to HSV equivalent." -msgstr "将RGB向量转换为等效的HSV向量。" +msgstr "将 RGB 向量转换为等效的 HSV 向量。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sepia function." @@ -8731,15 +8758,15 @@ msgstr "返回两个参数之间 %s 比较的布尔结果。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "等于(==)" +msgstr "等于 (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "大于(>)" +msgstr "大于 (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "大于或等于(> =)" +msgstr "大于或等于 (>=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8751,35 +8778,35 @@ msgstr "如果提供的标量相等,更大或更小,则返回关联的向量 msgid "" "Returns the boolean result of the comparison between INF and a scalar " "parameter." -msgstr "返回INF和标量参数之间比较的布尔结果。" +msgstr "返回 INF 和标量参数之间比较的布尔结果。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between NaN and a scalar " "parameter." -msgstr "返回NaN和标量参数之间比较的布尔结果。" +msgstr "返回 NaN 和标量参数之间比较的布尔结果。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "小于 (<)" +msgstr "小于 (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "小于或等于(<=)" +msgstr "小于或等于 (<=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "不等于(!=)" +msgstr "不等于 (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided boolean value is true or false." -msgstr "如果提供的布尔值是true或false,则返回关联的向量。" +msgstr "如果提供的布尔值是 true 或 false,则返回关联的向量。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated scalar if the provided boolean value is true or false." -msgstr "如果提供的布尔值是true或false,则返回关联的标量。" +msgstr "如果提供的布尔值是 true 或 false,则返回关联的标量。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." @@ -8801,7 +8828,7 @@ msgstr "布尔统一。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for all shader modes." -msgstr "“%s”为所有着色器模式的输入参数。" +msgstr "所有着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Input parameter." @@ -8809,27 +8836,27 @@ msgstr "输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader modes." -msgstr "“%s”为顶点和片段着色器模式的输入参数。" +msgstr "顶点和片段着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment and light shader modes." -msgstr "“%s”为片段和灯光着色器模式的输入参数。" +msgstr "片段和灯光着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment shader mode." -msgstr "“%s”为片段着色器模式的输入参数。" +msgstr "片段着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for light shader mode." -msgstr "“%s”为灯光着色器模式的输入参数。" +msgstr "灯光着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex shader mode." -msgstr "“%s”为顶点着色器模式的输入参数。" +msgstr "顶点着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader mode." -msgstr "“%s”为顶点和片段着色器模式的输入参数。" +msgstr "顶点和片段着色器模式的 “%s” 输入参数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." @@ -8841,35 +8868,35 @@ msgstr "标量运算符。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "E constant (2.718282). Represents the base of the natural logarithm." -msgstr "E常数(2.718282)。表示自然对数的基数。" +msgstr "E 常数 (2.718282)。表示自然对数的基数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Epsilon constant (0.00001). Smallest possible scalar number." -msgstr "Epsilon常数(0.00001)。最小的标量数。" +msgstr "ε (eplison) 常数 (0.00001)。最小的标量数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Phi constant (1.618034). Golden ratio." -msgstr "Phi常数(1.618034)。黄金比例。" +msgstr "Φ (Phi) 常数 (1.618034)。黄金比例。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi/4 constant (0.785398) or 45 degrees." -msgstr "Pi / 4常数(0.785398)或45度。" +msgstr "π (Pi)/4 常数 (0.785398) 或 45 度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi/2 constant (1.570796) or 90 degrees." -msgstr "Pi/2常数(1.570796)或90度。" +msgstr "π (Pi)/2 常数 (1.570796) 或 90 度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi constant (3.141593) or 180 degrees." -msgstr "Pi 常数 (3.141593) 或 180 度。" +msgstr "π (Pi) 常数 (3.141593) 或 180 度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Tau constant (6.283185) or 360 degrees." -msgstr "Tau常数(6.283185)或360度。" +msgstr "τ (Tau) 常数 (6.283185)或 360 度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sqrt2 constant (1.414214). Square root of 2." -msgstr "Sqrt2 常数 (1.414214)。2 的平方根。" +msgstr "Sqrt2 常数 (1.414214)。2 的平方根。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the absolute value of the parameter." @@ -8926,11 +8953,11 @@ msgstr "将以弧度为单位的量转换为度。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-e Exponential." -msgstr "以e为底的指数。" +msgstr "以 e 为底的指数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-2 Exponential." -msgstr "2为底的指数。" +msgstr "以 2 为底的指数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest integer less than or equal to the parameter." @@ -8950,7 +8977,7 @@ msgstr "自然对数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-2 logarithm." -msgstr "2为底的对数。" +msgstr "以 2 为底的对数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the greater of two values." @@ -9021,10 +9048,10 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" +"SmoothStep 函数( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" -"如果'x'小于'edge0'则返回0.0,如果x大于'edge1'则返回1.0。否则在0.0和1.0之间返" -"回Hermite多项式插值的值。" +"如果 “x” 小于 “edge0” 则返回 0.0,如果 x 大于 “edge1” 则返回 1.0。否则在 0.0 " +"和 1.0 之间返回埃尔米特多项式插值的值。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9032,9 +9059,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Step function( scalar(edge), scalar(x) ).\n" +"Step 函数( scalar(edge), scalar(x) ).\n" "\n" -"如果'x'小于'edge'则返回0.0,否则返回1.0。" +"如果 “x” 小于 “edge” 则返回 0.0,否则返回 1.0。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." @@ -9112,9 +9139,9 @@ msgid "" msgstr "" "计算一对矢量的外积。\n" "\n" -"OuterProduct 将第一个参数\"c\"视为列矢量(包含一列的矩阵),将第二个参数\"r" -"\"视为行矢量(具有一行的矩阵),并执行线性代数矩阵乘以\"c * r\",生成行数为" -"\"c\"中的组件,其列数是\"r\"中的组件数。" +"OuterProduct 将第一个参数 “c” 视为列矢量(包含一列的矩阵),将第二个参数 “r” " +"视为行矢量(具有一行的矩阵),并执行线性代数矩阵乘以 “c * r”,生成行数为 “c” " +"中的组件,其列数是 “r” 中的组件数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." @@ -9187,8 +9214,8 @@ msgid "" "incident vector, and Nref, the reference vector. If the dot product of I and " "Nref is smaller than zero the return value is N. Otherwise -N is returned." msgstr "" -"返回指向与参考向量相同方向的向量。该函数有三个向量参数:N,方向向量,I,入射" -"向量,Nref,参考向量。如果I和Nref的点乘小于零,返回值为n,否则返回-N。" +"返回指向与参考向量相同方向的向量。该函数有三个向量参数:N,方向向量;I,入射" +"向量;Nref,参考向量。如果 I 和 Nref 的点乘小于零,返回值为 N,否则返回 -N。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the length of a vector." @@ -9232,10 +9259,10 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"SmoothStep 函数(矢量(edge0)、矢量(edge1)、矢量(x))。 \n" +"SmoothStep 函数( vector(edge0), vector(edge1), vector (x) )。 \n" "\n" -"如果\"x\"小于\"edge0\",则返回 0.0;如果\"x\"大于\"edge1\",则返回 0.0。否则," -"返回值将使用赫密特多项式在 0.0 和 1.0 之间插值。" +"如果 “x” 小于 “edge0”,则返回 0.0;如果 “x” 大于 “edge1”,则返回 0.0。否则," +"返回值将使用埃尔米特多项式在 0.0 和 1.0 之间插值。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9245,10 +9272,10 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"smoothstep函数(标量(edge0)、标量(edge1)、向量(x))。\n" +"SmoothStep 函数( scalar(edge0), scalar(edge1), vector(x) )。\n" "\n" -"如果'x'小于'edge0'则返回0.0,如果x大于'edge1'则返回1.0。否则在0.0和1.0之间返" -"回Hermite多项式插值的值。" +"如果 “x” 小于 “edge0” 则返回 0.0,如果 x 大于 “edge1” 则返回 1.0。否则,返回" +"值将使用埃尔米特多项式在 0.0 和 1.0 之间插值。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9256,9 +9283,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Step function( scalar(edge), scalar(x) ).\n" +"Step 函数( scalar(edge), scalar(x) )。\n" "\n" -"如果'x'小于'edge'则返回0.0,否则返回1.0。" +"如果 “x” 小于 “edge” 则返回 0.0,否则返回 1.0。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9266,9 +9293,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Step function( scalar(edge), scalar(x) ).\n" +"Step 函数( scalar(edge), scalar(x) )。\n" "\n" -"如果'x'小于'edge'则返回0.0,否则返回1.0。" +"如果 “x” 小于 “edge” 则返回 0.0,否则返回 1.0。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds vector to vector." @@ -9304,8 +9331,8 @@ msgid "" "output ports. This is a direct injection of code into the vertex/fragment/" "light function, do not use it to write the function declarations inside." msgstr "" -"自定义Godot着色器语言表达式,可以有任意数量的输入和输出端口。它会往顶点/片段/" -"灯光函数中直接注入代码,请勿在其中声明函数。" +"自定义 Godot 着色器语言表达式,可以有任意数量的输入和输出端口。它会往顶点/片" +"段/灯光函数中直接注入代码,请勿在其中声明函数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9325,7 +9352,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "至现有一致的引用。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9339,7 +9366,7 @@ msgstr "(仅限片段/灯光模式)矢量导数功能。" msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." -msgstr "(仅限片段/光照模式)(矢量)使用局部差分的“ x”中的导数。" +msgstr "(仅限片段/光照模式)(矢量)使用局部差分的 “x” 中的导数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9363,13 +9390,13 @@ msgstr "(仅限片段/光照模式)(标量)使用局部差分的'y'导 msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." -msgstr "(仅限片段/光照模式)(向量)“ x”和“ y”中的绝对导数之和。" +msgstr "(仅限片段/光照模式)(向量)“x” 和 “y” 中的绝对导数之和。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." -msgstr "(仅限片段/光照模式)(标量)“ x”和“ y”中的绝对导数之和。" +msgstr "(仅限片段/光照模式)(标量)“x” 和 “y” 中的绝对导数之和。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" @@ -9389,14 +9416,14 @@ msgstr "可执行的" #: editor/project_export.cpp msgid "Delete preset '%s'?" -msgstr "是否删除预设“%s”?" +msgstr "是否删除预设 “%s”?" #: editor/project_export.cpp msgid "" "Failed to export the project for platform '%s'.\n" "Export templates seem to be missing or invalid." msgstr "" -"无法导出平台“%s”的项目。\n" +"无法为平台 “%s” 导出项目。\n" "导出模板似乎缺失或无效。" #: editor/project_export.cpp @@ -9405,7 +9432,7 @@ msgid "" "This might be due to a configuration issue in the export preset or your " "export settings." msgstr "" -"无法导出平台“%s”的项目。\n" +"无法为平台 “%s” 导出项目。\n" "原因可能是导出预设或导出设置内的配置有问题。" #: editor/project_export.cpp @@ -9518,11 +9545,11 @@ msgstr "加密(在下面提供密钥)" #: editor/project_export.cpp msgid "Invalid Encryption Key (must be 64 characters long)" -msgstr "无效的加密密钥(长度必须为64个字符)" +msgstr "无效的加密密钥(长度必须为 64 个字符)" #: editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" -msgstr "脚本加密密钥(256位16进制码):" +msgstr "脚本加密密钥(256 位 16 进制码):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -9546,7 +9573,7 @@ msgstr "ZIP 文件" #: editor/project_export.cpp msgid "Godot Game Pack" -msgstr "Godot游戏包" +msgstr "Godot 游戏包" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -9566,12 +9593,12 @@ msgstr "指定的路径不存在。" #: editor/project_manager.cpp msgid "Error opening package file (it's not in ZIP format)." -msgstr "打开包文件时出错(非ZIP格式)。" +msgstr "打开包文件时出错(非 ZIP 格式)。" #: editor/project_manager.cpp msgid "" "Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." -msgstr "无效的“.zip”项目文件;没有包含“project.godot”文件。" +msgstr "无效的 “.zip” 项目文件。没有包含 “project.godot” 文件。" #: editor/project_manager.cpp msgid "Please choose an empty folder." @@ -9579,11 +9606,11 @@ msgstr "请选择空文件夹。" #: editor/project_manager.cpp msgid "Please choose a \"project.godot\" or \".zip\" file." -msgstr "请选择“project.godot”或“.zip”文件。" +msgstr "请选择 “project.godot” 或 “.zip” 文件。" #: editor/project_manager.cpp msgid "This directory already contains a Godot project." -msgstr "该目录已经包含Godot项目。" +msgstr "该目录已经包含 Godot 项目。" #: editor/project_manager.cpp msgid "New Game Project" @@ -9607,7 +9634,7 @@ msgstr "该路径中已存在同名文件夹。" #: editor/project_manager.cpp msgid "It would be a good idea to name your project." -msgstr "为项目命名是一个好主意。" +msgstr "最好为项目起个名字。" #: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." @@ -9622,11 +9649,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." -msgstr "无法在项目路径下编辑project.godot文件。" +msgstr "无法在项目路径下编辑 project.godot 文件。" #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." -msgstr "无法在项目路径下创建project.godot文件。" +msgstr "无法在项目路径下创建 project.godot 文件。" #: editor/project_manager.cpp msgid "Rename Project" @@ -9650,7 +9677,7 @@ msgstr "创建并编辑" #: editor/project_manager.cpp msgid "Install Project:" -msgstr "安装项目:" +msgstr "安装项目:" #: editor/project_manager.cpp msgid "Install & Edit" @@ -9677,6 +9704,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9740,12 +9771,12 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" -"以下项目设置文件未指定创建它的Godot版本。\n" +"以下项目设置文件未指定创建它的 Godot 版本。\n" "\n" "%s\n" "\n" -"如果继续打开,它将转换为Godot的当前配置文件格式。\n" -"警告:你将无法再使用以前版本的引擎打开项目。" +"如果继续打开,该项目会转换为 Godot 当前的配置文件格式。\n" +"警告:将无法再使用以前版本的引擎打开该项目。" #: editor/project_manager.cpp msgid "" @@ -9758,18 +9789,18 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" -"以下项目设置文件由较旧的引擎版本生成,需要为此版本进行转换:\n" +"以下项目设置文件由较旧版本的引擎生成,需要为此版本进行转换:\n" "\n" "%s\n" "\n" "是否要转换?\n" -"警告: 您将无法再使用以前版本的引擎打开项目。" +"警告: 将无法再使用以前版本的引擎打开该项目。" #: editor/project_manager.cpp msgid "" "The project settings were created by a newer engine version, whose settings " "are not compatible with this version." -msgstr "项目设置是由更新的引擎版本创建的,其设置与此版本不兼容。" +msgstr "项目设置是由较新版本的引擎创建的,其设置与此版本不兼容。" #: editor/project_manager.cpp msgid "" @@ -9778,7 +9809,7 @@ msgid "" "the \"Application\" category." msgstr "" "无法运行项目:未定义主场景。 \n" -"请编辑项目并在“应用程序”类别下的“项目设置”中设置主场景。" +"请编辑项目并在 “项目设置” 中 “Application” 类别下设置主场景。" #: editor/project_manager.cpp msgid "" @@ -9786,18 +9817,18 @@ msgid "" "Please edit the project to trigger the initial import." msgstr "" "无法运行项目: 需要导入素材。\n" -"请编辑项目,从而触发首次导入。" +"请编辑项目来触发首次导入。" #: editor/project_manager.cpp msgid "Are you sure to run %d projects at once?" -msgstr "您确定要同时运行%d个项目吗?" +msgstr "确定要同时运行 %d 个项目吗?" #: editor/project_manager.cpp msgid "" "Remove %d projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"是否从列表中删除%d个项目? \n" +"是否从列表中删除 %d 个项目? \n" "项目文件夹的内容不会被修改。" #: editor/project_manager.cpp @@ -9829,7 +9860,7 @@ msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" -"您确定要扫描%s文件夹中的现有Godot项目吗? \n" +"确定要扫描文件夹 %s 中的现有 Godot 项目吗? \n" "这可能需要一段时间。" #. TRANSLATORS: This refers to the application where users manage their Godot projects. @@ -9878,7 +9909,7 @@ msgid "" "You currently don't have any projects.\n" "Would you like to explore official example projects in the Asset Library?" msgstr "" -"你目前没有任何项目。 \n" +"目前没有任何项目。 \n" "是否查看素材库中的官方示例项目?" #: editor/project_manager.cpp @@ -9910,12 +9941,11 @@ msgstr "鼠标按键" msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" -msgstr "" -"无效的操作名称。操作名不能为空,也不能包含 '/', ':', '=', '\\' 或者空字符串" +msgstr "无效的操作名称。操作名不能为空,也不能包含 “/”, “:”, “=”, “\\” 或 “\"”" #: editor/project_settings_editor.cpp msgid "An action with the name '%s' already exists." -msgstr "名为'%s'的操作已存在。" +msgstr "名为 “%s” 的操作已存在。" #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" @@ -9983,7 +10013,7 @@ msgstr "X 按键 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" -msgstr "手柄摇杆序号:" +msgstr "手柄摇杆序号:" #: editor/project_settings_editor.cpp msgid "Axis" @@ -10039,11 +10069,11 @@ msgstr "请先选择一个设置项目 !" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." -msgstr "不存在属性 '%s'。" +msgstr "不存在属性 “%s”。" #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "“%s”是内部设定,无法删除。" +msgstr "“%s” 是内部设定,无法删除。" #: editor/project_settings_editor.cpp msgid "Delete Item" @@ -10053,7 +10083,8 @@ msgstr "删除条目" msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." -msgstr "无效的操作名称。它不能是空的也不能包含 '/', ':', '=', '\\' 或者 '\"'。" +msgstr "" +"无效的操作名称。名称不能为空,也不能包含 “/”, “:”, “=”, “\\” 或者 “\"”。" #: editor/project_settings_editor.cpp msgid "Add Input Action" @@ -10077,11 +10108,11 @@ msgstr "重写功能" #: editor/project_settings_editor.cpp msgid "Add Translation" -msgstr "添加语言" +msgstr "添加翻译" #: editor/project_settings_editor.cpp msgid "Remove Translation" -msgstr "移除语言" +msgstr "移除翻译" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" @@ -10093,7 +10124,7 @@ msgstr "添加资源重定向" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "修改语言资源重定向" +msgstr "修改资源重定向语言" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" @@ -10145,11 +10176,11 @@ msgstr "盲区" #: editor/project_settings_editor.cpp msgid "Device:" -msgstr "设备:" +msgstr "设备:" #: editor/project_settings_editor.cpp msgid "Index:" -msgstr "序号:" +msgstr "序号:" #: editor/project_settings_editor.cpp msgid "Localization" @@ -10157,11 +10188,11 @@ msgstr "本地化" #: editor/project_settings_editor.cpp msgid "Translations" -msgstr "语言" +msgstr "翻译" #: editor/project_settings_editor.cpp msgid "Translations:" -msgstr "语言:" +msgstr "翻译:" #: editor/project_settings_editor.cpp msgid "Remaps" @@ -10173,7 +10204,7 @@ msgstr "资源:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "地区重定向:" +msgstr "依照区域重定向:" #: editor/project_settings_editor.cpp msgid "Locale" @@ -10181,15 +10212,15 @@ msgstr "区域" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "区域筛选器" +msgstr "筛选区域" #: editor/project_settings_editor.cpp msgid "Show All Locales" -msgstr "显示所有语言设置" +msgstr "显示所有区域" #: editor/project_settings_editor.cpp msgid "Show Selected Locales Only" -msgstr "仅显示选定的语言环境" +msgstr "仅显示选定的区域" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -10197,7 +10228,7 @@ msgstr "筛选模式:" #: editor/project_settings_editor.cpp msgid "Locales:" -msgstr "区域:" +msgstr "区域:" #: editor/project_settings_editor.cpp msgid "AutoLoad" @@ -10241,7 +10272,7 @@ msgstr "选择节点" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "加载文件出错:不是资源文件!" +msgstr "加载文件出错:不是资源文件!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -10249,7 +10280,7 @@ msgstr "选择一个节点" #: editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "(Bit)位 %d, val %d." +msgstr "位 %d,值 %d。" #: editor/property_selector.cpp msgid "Select Property" @@ -10297,7 +10328,7 @@ msgstr "节点名称" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "父节点的名称,如果有的话" +msgstr "父节点名称(若有需要)" #: editor/rename_dialog.cpp msgid "Node type" @@ -10349,7 +10380,7 @@ msgid "" "Missing digits are padded with leading zeros." msgstr "" "计数器数字的最少个数。\n" -"缺失的数字将用0填充在头部。" +"缺失的数字将用 0 填充在头部。" #: editor/rename_dialog.cpp msgid "Post-Process" @@ -10389,7 +10420,7 @@ msgstr "正则表达式出错:" #: editor/rename_dialog.cpp msgid "At character %s" -msgstr "位于字符%s" +msgstr "位于字符 %s" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" @@ -10397,7 +10428,7 @@ msgstr "重设父节点" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "重设位置(选择新的父节点):" +msgstr "重设位置(选择新的父节点):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" @@ -10409,7 +10440,7 @@ msgstr "重设父节点" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "运行模式:" +msgstr "运行模式:" #: editor/run_settings_dialog.cpp msgid "Current Scene" @@ -10421,7 +10452,7 @@ msgstr "主场景" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "主场景参数:" +msgstr "主场景参数:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" @@ -10433,13 +10464,13 @@ msgstr "没有可实例化场景的父节点。" #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "从%s加载场景出错" +msgstr "从 %s 加载场景出错" #: editor/scene_tree_dock.cpp msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." -msgstr "无法实例化场景%s当前场景已存在于它的子节点中。" +msgstr "无法实例化场景 %s,因为当前场景已存在于其子节点中。" #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" @@ -10491,23 +10522,23 @@ msgstr "将节点设置为根节点" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes and any children?" -msgstr "是否删除节点“%s”及其子节点?" +msgstr "是否删除节点 “%s” 及其子节点?" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" -msgstr "是否删除%d个节点?" +msgstr "是否删除 %d 个节点?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "是否删除根节点“%s”?" +msgstr "是否删除根节点 “%s”?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "是否删除节点“%s”及其子节点?" +msgstr "是否删除节点 “%s” 及其子节点?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" -msgstr "是否删除节点“%s”?" +msgstr "是否删除节点 “%s”?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10525,18 +10556,19 @@ msgstr "将新场景另存为..." msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." -msgstr "禁用“可编辑实例”将导致节点的所有属性恢复为其默认值。" +msgstr "禁用 “editable_instance” 将导致节点的所有属性恢复为其默认值。" #: editor/scene_tree_dock.cpp msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" -"开启“加载为占位符”将禁用“可编辑实例”并重置该节点的所有属性恢复为其默认值。" +"开启 “加载为占位符” 将禁用 “子节点可编辑” 并重置该节点的所有属性恢复为其默认" +"值。" #: editor/scene_tree_dock.cpp msgid "Make Local" -msgstr "使用本地" +msgstr "转为本地" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -10709,14 +10741,14 @@ msgstr "(连接来源)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "节点配置警告:" +msgstr "节点配置警告:" #: editor/scene_tree_editor.cpp msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"节点具有%s个连接和%s个组。\n" +"节点具有 %s 个连接和 %s 个分组。\n" "单击以显示信号面板。" #: editor/scene_tree_editor.cpp @@ -10724,7 +10756,7 @@ msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"节点具有%s个连接。\n" +"节点具有 %s 个连接。\n" "单击以显示信号面板。" #: editor/scene_tree_editor.cpp @@ -10829,7 +10861,7 @@ msgstr "错误:无法创建脚本文件。" #: editor/script_create_dialog.cpp msgid "Error loading script from %s" -msgstr "从%s加载脚本出错" +msgstr "从 %s 加载脚本出错" #: editor/script_create_dialog.cpp msgid "Overrides" @@ -10869,7 +10901,7 @@ msgstr "脚本路径/名称有效。" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "允许:a-z,a-z,0-9,_ 和 ." +msgstr "允许:a-z, A-Z, 0-9, _ 和 ." #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)." @@ -10927,15 +10959,15 @@ msgstr "错误:" #: editor/script_editor_debugger.cpp msgid "C++ Error" -msgstr "C++错误" +msgstr "C++ 错误" #: editor/script_editor_debugger.cpp msgid "C++ Error:" -msgstr "C++错误:" +msgstr "C++ 错误:" #: editor/script_editor_debugger.cpp msgid "C++ Source" -msgstr "C++源文件" +msgstr "C++ 源文件" #: editor/script_editor_debugger.cpp msgid "Source:" @@ -10943,7 +10975,7 @@ msgstr "源文件:" #: editor/script_editor_debugger.cpp msgid "C++ Source:" -msgstr "C++源文件:" +msgstr "C++ 源文件:" #: editor/script_editor_debugger.cpp msgid "Stack Trace" @@ -11007,7 +11039,7 @@ msgstr "从列表中选取一个或多个项目以显示图表。" #: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "占用显存的资源列表:" +msgstr "占用显存的资源列表:" #: editor/script_editor_debugger.cpp msgid "Total:" @@ -11015,7 +11047,7 @@ msgstr "合计:" #: editor/script_editor_debugger.cpp msgid "Export list to a CSV file" -msgstr "将列表导出为CSV文件" +msgstr "将列表导出为 CSV 文件" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -11039,15 +11071,15 @@ msgstr "其他" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "点击的控件:" +msgstr "点击的控件:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "点击的控件类型:" +msgstr "点击的控件类型:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "实时编辑根节点:" +msgstr "实时编辑根节点:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" @@ -11055,7 +11087,7 @@ msgstr "从场景树设置" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "导出为CSV格式" +msgstr "导出为 CSV 格式" #: editor/settings_config_dialog.cpp msgid "Erase Shortcut" @@ -11103,11 +11135,11 @@ msgstr "修改通知器 AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "修改粒子AABB" +msgstr "修改粒子 AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" -msgstr "修改探针(Probe)范围" +msgstr "修改探针范围" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" @@ -11171,7 +11203,7 @@ msgstr "双击创建新条目" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" -msgstr "平台:" +msgstr "平台:" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform" @@ -11183,11 +11215,11 @@ msgstr "动态链接库" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "添加CPU架构项" +msgstr "添加架构项" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" -msgstr "动态链接库" +msgstr "GDNative 库" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" @@ -11203,7 +11235,7 @@ msgstr "库" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " -msgstr "库: " +msgstr "库: " #: modules/gdnative/register_types.cpp msgid "GDNative" @@ -11211,7 +11243,7 @@ msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" -msgstr "Step参数为 0 !" +msgstr "Step 参数为 0!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -11227,15 +11259,15 @@ msgstr "没有基于资源文件" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "实例字典格式不正确(缺少@path)" +msgstr "实例字典格式不正确(缺少 @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" -msgstr "实例字典格式不正确(无法加载脚本@path)" +msgstr "实例字典格式不正确(无法加载 @path 的脚本)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "实例字典格式不正确(无效脚本@path)" +msgstr "实例字典格式不正确(@path 的脚本无效)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" @@ -11319,27 +11351,27 @@ msgstr "编辑 Z 轴" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" -msgstr "光标沿X轴旋转" +msgstr "光标沿 X 轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Y" -msgstr "沿Y轴旋转" +msgstr "沿 Y 轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Z" -msgstr "沿Z轴旋转" +msgstr "沿 Z 轴旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "光标沿X轴向后旋转" +msgstr "光标沿 X 轴向后旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "光标沿Y轴向后旋转" +msgstr "光标沿 Y 轴向后旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "光标沿Z轴向后旋转" +msgstr "光标沿 Z 轴向后旋转" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" @@ -11359,11 +11391,11 @@ msgstr "填充已选" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" -msgstr "GridMap设置" +msgstr "GridMap 设置" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Pick Distance:" -msgstr "拾取距离:" +msgstr "拾取距离:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Filter meshes" @@ -11371,7 +11403,7 @@ msgstr "筛选网格" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." -msgstr "向此GridMap提供网格库资源以使用其网格。" +msgstr "向此 GridMap 提供网格库资源以使用其网格。" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" @@ -11387,7 +11419,7 @@ msgstr "烘焙导航网" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "清除导航网格(mesh)。" +msgstr "清除导航网格。" #: modules/recast/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -11427,11 +11459,11 @@ msgstr "创建多边形网格..." #: modules/recast/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "转换为导航网格(mesh)..." +msgstr "转换为导航网格..." #: modules/recast/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "导航网格(Mesh)生成设置:" +msgstr "导航网格生成设置:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." @@ -11446,19 +11478,20 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"一个节点在无工作内存的情况下被yielded,请阅读文档来查看如何适当的yield!" +"一个节点在无工作内存的情况下调用了 yield,请阅读文档来查看如何正确使用 " +"yield!" #: modules/visual_script/visual_script.cpp msgid "" "Node yielded, but did not return a function state in the first working " "memory." -msgstr "节点已yielded,但并没有在第一个工作内存中返回一个函数状态。" +msgstr "节点调用了 yield,但并没有在第一个工作内存中返回函数状态。" #: modules/visual_script/visual_script.cpp msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." -msgstr "节点工作内存的第一个节点的返回值必须已赋值!请修正你的节点。" +msgstr "节点工作内存的第一个节点的返回值必须被赋值!请修正节点。" #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " @@ -11466,7 +11499,7 @@ msgstr "节点返回了一个无效的连续输出: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "在非堆栈中的节点中找到连续bit,报告bug!" +msgstr "在非堆栈中的节点中找到连续比特,请回报 Bug!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -11582,11 +11615,11 @@ msgstr "复制 VisualScript 节点" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." -msgstr "按住 %s 放置一个Getter节点,按住Shift键放置一个通用签名。" +msgstr "按住 %s 放置一个 Getter 节点,按住 Shift 键放置一个通用签名。" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." -msgstr "按住Ctrl键放置一个Getter节点。按住Shift键放置一个通用签名。" +msgstr "按住 Ctrl 键放置一个 Getter 节点。按住 Shift 键放置一个通用签名。" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." @@ -11594,19 +11627,19 @@ msgstr "按住 %s 放置一个场景节点的引用节点。" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "按住Ctrl键放置一个场景节点的引用节点。" +msgstr "按住 Ctrl 键放置一个场景节点的引用节点。" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." -msgstr "按住 %s 放置变量的Setter节点。" +msgstr "按住 %s 放置变量的 Setter 节点。" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "按住Ctrl键放置变量的Setter节点。" +msgstr "按住 Ctrl 键放置变量的 Setter 节点。" #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "添加Preload节点" +msgstr "添加预载 (Preload) 节点" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -11617,16 +11650,16 @@ msgid "" "Can't drop properties because script '%s' is not used in this scene.\n" "Drop holding 'Shift' to just copy the signature." msgstr "" -"无法放置该属性,因为脚本“%s”未在该场景中使用。\n" -"放置时按住Shift键可以仅复制签名。" +"无法放置该属性,因为脚本 “%s” 未在该场景中使用。\n" +"放置时按住 Shift 键可以仅复制签名。" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "添加属性Getter" +msgstr "添加属性 Getter" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "添加属性Setter" +msgstr "添加属性 Setter" #: modules/visual_script/visual_script_editor.cpp msgid "Change Base Type" @@ -11658,7 +11691,7 @@ msgstr "连接节点序列" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" -msgstr "脚本已存在函数 '%s'" +msgstr "脚本已有函数 “%s”" #: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" @@ -11802,33 +11835,33 @@ msgstr "路径必须指向节点!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "'%s'这个属性名的在节点'%s'中不存在。" +msgstr "节点 “%s” 的索引属性名 “%s” 无效。" #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " -msgstr ":无效参数类型: " +msgstr ": 无效参数类型: " #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid arguments: " -msgstr ":无效参数: " +msgstr ": 无效参数: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " -msgstr "脚本中未找到VariableGet: " +msgstr "脚本中未找到 VariableGet: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableSet not found in script: " -msgstr "脚本中未找到VariableSet: " +msgstr "脚本中未找到 VariableSet: " #: modules/visual_script/visual_script_nodes.cpp msgid "Custom node has no _step() method, can't process graph." -msgstr "自定义节点不包含_step()方法,不能生成图像。" +msgstr "自定义节点不包含 _step() 方法,不能生成图像。" #: modules/visual_script/visual_script_nodes.cpp msgid "" "Invalid return value from _step(), must be integer (seq out), or string " "(error)." -msgstr "_step()的返回值无效,必须是整形(seq out)或字符串(error)。" +msgstr "_step() 的返回值无效,必须是整形 (Seq Out) 或字符串 (Error)。" #: modules/visual_script/visual_script_property_selector.cpp msgid "Search VisualScript" @@ -11844,7 +11877,7 @@ msgstr "设置 %s" #: platform/android/export/export.cpp msgid "Package name is missing." -msgstr "缺包名。" +msgstr "包名缺失。" #: platform/android/export/export.cpp msgid "Package segments must be of non-zero length." @@ -11852,7 +11885,7 @@ msgstr "包段的长度必须为非零。" #: platform/android/export/export.cpp msgid "The character '%s' is not allowed in Android application package names." -msgstr "Android应用程序包名称中不允许使用字符“%s”。" +msgstr "Android 应用程序包名称中不允许使用字符 “%s”。" #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." @@ -11860,11 +11893,11 @@ msgstr "包段中的第一个字符不能是数字。" #: platform/android/export/export.cpp msgid "The character '%s' cannot be the first character in a package segment." -msgstr "包段中的第一个字符不能是“%s”。" +msgstr "包段中的第一个字符不能是 “%s”。" #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." -msgstr "包必须至少有一个“.”分隔符。" +msgstr "包必须至少有一个 “.” 分隔符。" #: platform/android/export/export.cpp msgid "Select device from the list" @@ -11872,11 +11905,11 @@ msgstr "从列表中选择设备" #: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." -msgstr "未在编辑器设置中配置ADB可执行文件。" +msgstr "未在编辑器设置中配置 ADB 可执行文件。" #: platform/android/export/export.cpp msgid "OpenJDK jarsigner not configured in the Editor Settings." -msgstr "未在编辑器设置中配置OpenJDK Jarsigner。" +msgstr "未在编辑器设置中配置 OpenJDK Jarsigner。" #: platform/android/export/export.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." @@ -11888,21 +11921,25 @@ msgstr "用于发布的密钥存储在导出预设中未被正确设置。" #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." -msgstr "自定义构建需要在“编辑器设置”中使用有效的Android SDK路径。" +msgstr "自定义构建需要在 “编辑器设置” 中使用有效的 Android SDK 路径。" #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "用于“编辑器设置”中自定义构建的Android SDK路径是无效的。" +msgstr "用于 “编辑器设置” 中自定义构建的 Android SDK 路径是无效的。" + +#: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "缺失“platform-tools”目录!" #: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." -msgstr "未在项目中安装Android构建模板。从项目菜单安装它。" +msgstr "未在项目中安装 Android 构建模板。从项目菜单安装它。" #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." -msgstr "APK扩展的公钥无效。" +msgstr "APK 扩展的公钥无效。" #: platform/android/export/export.cpp msgid "Invalid package name:" @@ -11913,44 +11950,45 @@ msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -"“android/modules”项目设置(变更于Godot 3.2.2)中包含了无效模" -"组“GodotPaymentV3”.\n" +"“android/modules” 项目设置(变更于Godot 3.2.2)中包含了无效模组 " +"“GodotPaymentV3”。\n" #: platform/android/export/export.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." -msgstr "必须启用“使用自定义构建”才能使用插件。" +msgstr "必须启用 “使用自定义构建” 才能使用插件。" #: platform/android/export/export.cpp msgid "" "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" "\"." -msgstr "“自由度”只有在当“Xr Mode”是“Oculus Mobile VR”时才有效。" +msgstr "" +"“Degrees Of Freedom” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" #: platform/android/export/export.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "“手部追踪”只有在当“Xr Mode”是“Oculus Mobile VR”时才有效。" +msgstr "“Hand Tracking” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" #: platform/android/export/export.cpp msgid "" "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "“焦点感知”只有在当“Xr Mode”是“Oculus Mobile VR”时才有效。" +msgstr "“Focus Awareness” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "“Export AAB” 只有在当启用 “Use Custom Build” 时才有效。" #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "无效文件名!Android App Bundle 必须有 *.aab 扩展。" #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion 与 Android App Bundle 不兼容。" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "无效文件名!Android APK 必须有 *.apk 扩展。" #: platform/android/export/export.cpp msgid "" @@ -11973,25 +12011,25 @@ msgstr "" #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" -msgstr "构建android项目(gradle)" +msgstr "构建 Android 项目 (Gradle)" #: platform/android/export/export.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -"Android项目构建失败,请检查输出中显示的错误。\n" -"你也可以访问docs.godotengine.org查看Android构建文档。" +"Android 项目构建失败,请检查输出中显示的错误。\n" +"也可以访问 docs.godotengine.org 查看 Android 构建文档。" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "移动输出" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." -msgstr "" +msgstr "无法复制与更名导出文件,请在 Gradle 项目文件夹内确认输出。" #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12003,7 +12041,7 @@ msgstr "标识符中不允许使用字符 '%s' 。" #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." -msgstr "未指定应用商店团队ID-无法配置项目。" +msgstr "未指定 App Store Team ID - 无法配置项目。" #: platform/iphone/export/export.cpp msgid "Invalid Identifier:" @@ -12015,7 +12053,7 @@ msgstr "预设中未指定必需的图标。" #: platform/javascript/export/export.cpp msgid "Stop HTTP Server" -msgstr "停止HTTP服务" +msgstr "停止 HTTP 服务" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -12023,7 +12061,7 @@ msgstr "在浏览器中运行" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "使用默认浏览器打开导出的HTML文件。" +msgstr "使用默认浏览器打开导出的 HTML 文件。" #: platform/javascript/export/export.cpp msgid "Could not write file:" @@ -12039,11 +12077,11 @@ msgstr "导出模板无效:" #: platform/javascript/export/export.cpp msgid "Could not read custom HTML shell:" -msgstr "无法读取自定义HTML命令:" +msgstr "无法读取自定义 HTML 壳层:" #: platform/javascript/export/export.cpp msgid "Could not read boot splash image file:" -msgstr "无法读取启动图片:" +msgstr "无法读取启动图片:" #: platform/javascript/export/export.cpp msgid "Using default boot splash image." @@ -12063,11 +12101,11 @@ msgstr "发布者显示名称无效。" #: platform/uwp/export/export.cpp msgid "Invalid product GUID." -msgstr "产品GUID无效。" +msgstr "产品 GUID 无效。" #: platform/uwp/export/export.cpp msgid "Invalid publisher GUID." -msgstr "发布者GUID无效。" +msgstr "发布者 GUID 无效。" #: platform/uwp/export/export.cpp msgid "Invalid background color." @@ -12075,47 +12113,47 @@ msgstr "无效的背景颜色。" #: platform/uwp/export/export.cpp msgid "Invalid Store Logo image dimensions (should be 50x50)." -msgstr "Logo图片尺寸无效(图像尺寸必须是50x50)。" +msgstr "商店 Logo 图片尺寸无效(图像尺寸必须是 50x50)。" #: platform/uwp/export/export.cpp msgid "Invalid square 44x44 logo image dimensions (should be 44x44)." -msgstr "正方形的 44x44 Logo图片尺寸无效(应为44x44)。" +msgstr "正方形的 44x44 Logo 图片尺寸无效(应为 44x44)。" #: platform/uwp/export/export.cpp msgid "Invalid square 71x71 logo image dimensions (should be 71x71)." -msgstr "正方形的 71x71 Logo标志图片尺寸无效(应为71x71)。" +msgstr "正方形的 71x71 Logo 标志图片尺寸无效(应为 71x71)。" #: platform/uwp/export/export.cpp msgid "Invalid square 150x150 logo image dimensions (should be 150x150)." -msgstr "正方的 150x150 Logo图片尺寸无效(应为150x150)。" +msgstr "正方形的 150x150 Logo 图片尺寸无效(应为 150x150)。" #: platform/uwp/export/export.cpp msgid "Invalid square 310x310 logo image dimensions (should be 310x310)." -msgstr "正方形的 310x310 Logo图片尺寸无效(应为310x310)。" +msgstr "正方形的 310x310 Logo 图片尺寸无效(应为 310x310)。" #: platform/uwp/export/export.cpp msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)." -msgstr "宽幅310x150 Logo图片尺寸无效(应为310x150)。" +msgstr "宽幅 310x150 Logo 图片尺寸无效(应为 310x150)。" #: platform/uwp/export/export.cpp msgid "Invalid splash screen image dimensions (should be 620x300)." -msgstr "启动画面图片尺寸无效(应为620x300)。" +msgstr "启动画面图片尺寸无效(应为 620x300)。" #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" -"必须创建SpriteFrames资源,或在“ Frames”属性中设置SpriteFrames资源,以便" -"AnimatedSprite显示帧。" +"必须创建 SpriteFrames 资源,或在 “Frames” 属性中设置 SpriteFrames 资源,以便 " +"AnimatedSprite 显示帧。" #: scene/2d/canvas_modulate.cpp msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" -"每个场景中只允许有一个CanvasModulate类型的节点,场景中的第一个CanvasModulate" -"节点能正常工作,其余的将被忽略。" +"每个场景中只允许有一个 CanvasModulate 类型的节点,场景中的第一个 " +"CanvasModulate 节点能正常工作,其余的将被忽略。" #: scene/2d/collision_object_2d.cpp msgid "" @@ -12133,12 +12171,12 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D类型节点只能为CollisionObject2D的派生类提供碰撞形状数据,请" -"将其放在Area2D、StaticBody2D、RigidBody2D或KinematicBody2D节点下。" +"CollisionPolygon2D 类型节点只能为 CollisionObject2D 的派生类提供碰撞形状数" +"据,请将其放在 Area2D, StaticBody2D, RigidBody2D 或 KinematicBody2D 节点下。" #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "空的CollisionPolygon2D不起任何碰撞检测作用。" +msgstr "空的 CollisionPolygon2D 不起任何碰撞检测作用。" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12146,14 +12184,14 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D类型节点只能为CollisionObject2D的派生类提供碰撞形状数据,请将" -"其放在Area2D、StaticBody2D、RigidBody2D或者是KinematicBody2D节点下。" +"CollisionShape2D 类型节点只能为 CollisionObject2D 的派生类提供碰撞形状数据," +"请将其放在 Area2D, StaticBody2D, RigidBody2D 或者是 KinematicBody2D 节点下。" #: scene/2d/collision_shape_2d.cpp msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" -msgstr "形状资源必须是通过CollisionShape2D节点的shape属性创建的!" +msgstr "CollisionShape2D 必须有形状才能工作。请先为其创建形状资源!" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12167,13 +12205,35 @@ msgstr "" msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." -msgstr "CPUParticles2D动画需要使用启用了“粒子动画”的CanvasItemMaterial。" +msgstr "" +"CPUParticles2D 动画需要使用启用了 “Particles Animation” 的 " +"CanvasItemMaterial。" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "必须将具有灯光形状的纹理提供给“纹理”(Texture)属性。" +msgstr "必须将具有灯光形状的纹理提供给 “Texture”(纹理)属性。" #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12189,21 +12249,21 @@ msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"请为此节点设置一个NavigationPolygon类型的资源作为形状,这样它才能正常工作。" +"请为此节点设置一个 NavigationPolygon 类型的资源作为形状,这样它才能正常工作。" #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance类型的节点必须作为Navigation2D的子孙才能为其提供导航" -"数据。" +"NavigationPolygonInstance 类型的节点必须作为 Navigation2D 的子节点或子孙节点" +"才能为其提供导航数据。" #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"ParallaxLayer类型的节点必须作为ParallaxBackground的子节点才能正常工作。" +"ParallaxLayer 类型的节点必须作为 ParallaxBackground 的子节点才能正常工作。" #: scene/2d/particles_2d.cpp msgid "" @@ -12211,8 +12271,8 @@ msgid "" "Use the CPUParticles2D node instead. You can use the \"Convert to " "CPUParticles\" option for this purpose." msgstr "" -"基于GPU的粒子不受GLES2视频驱动程序的支持。\n" -"改为使用CPUParticles2D节点。为此,您可以使用“转换为 CPU粒子”选项。" +"基于 GPU 的粒子不受 GLES2 视频驱动程序的支持。\n" +"改为使用 CPUParticles2D 节点。为此,可以使用 “Convert to CPUParticles” 选项。" #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" @@ -12224,11 +12284,12 @@ msgstr "粒子材质没有指定,该行为无效。" msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." -msgstr "Particles2D 动画需要使用启用了“粒子动画”的CanvasItemMaterial。" +msgstr "" +"Particles2D 动画需要使用启用了 “Particles Animation” 的 CanvasItemMaterial。" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." -msgstr "PathFollow2D类型的节点只有作为Path2D的子节点节才能正常工作。" +msgstr "PathFollow2D 类型的节点只有作为 Path2D 的子节点节才能正常工作。" #: scene/2d/physics_body_2d.cpp msgid "" @@ -12236,13 +12297,13 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" -"对RigidBody2D (在character或rigid模式想)的尺寸修改在运行时会被物理引擎的覆" -"盖。\n" +"对 RigidBody2D (在 Character 或 Rigid 模式下)的尺寸修改在运行时会被物理引擎" +"的覆盖。\n" "建议您修改子节点的碰撞形状。" #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." -msgstr "Path属性必须指向有效的Node2D节点才能正常工作。" +msgstr "Path 属性必须指向有效的 Node2D 节点才能正常工作。" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." @@ -12264,43 +12325,43 @@ msgid "" "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"启用了“使用父级”的图块地图需要父级 CollisionObject2D 才能提供形状。请使用它作" -"为 Area2D、StaticBody2D、RigidBody2D、KinematicBody2D 等的子项来赋予它们形" -"状。" +"启用了“Use Parent” 的 TileMap 需要父级 CollisionObject2D 才能提供形状。请使用" +"它作为 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 等的子项来赋予它们" +"形状。" #: scene/2d/visibility_notifier_2d.cpp msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." -msgstr "当直接将已编辑的场景根作为父级使用时,VisibilityEnabler2D效果最佳。" +msgstr "当直接将已编辑的场景根作为父级使用时,VisibilityEnabler2D 效果最佳。" #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "ARVRCamera必须将ARVROrigin节点作为其父节点。" +msgstr "ARVRCamera 必须将 ARVROrigin 节点作为其父节点。" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "ARVRController必须具有ARVROrigin节点作为其父节点。" +msgstr "ARVRController 必须具有 ARVROrigin 节点作为其父节点。" #: scene/3d/arvr_nodes.cpp msgid "" "The controller ID must not be 0 or this controller won't be bound to an " "actual controller." -msgstr "控制器ID不能为0,否则此控制器将不会绑定到实际的控制器。" +msgstr "控制器 ID 不能为 0,否则此控制器将不会绑定到实际的控制器。" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "ARVRAnchor必须具有ARVROrigin节点作为其父节点。" +msgstr "ARVRAnchor 必须具有 ARVROrigin 节点作为其父节点。" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor ID must not be 0 or this anchor won't be bound to an actual " "anchor." -msgstr "锚点ID不能为0,否则此锚点将不会绑定到实际的锚点。" +msgstr "锚点 ID 不能为 0,否则此锚点将不会绑定到实际的锚点。" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROrigin需要一个ARVRCamera子节点。" +msgstr "ARVROrigin 需要一个 ARVRCamera 子节点。" #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -12341,12 +12402,13 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" -"CollisionPolygon类型节点只能为CollisionObject的派生类提供碰撞形状数据,请将其" -"放在Area、StaticBody、RigidBody或KinematicBody节点下。" +"CollisionPolygon 类型节点只能为 CollisionObject 的派生类提供碰撞形状数据,请" +"将其放在 Area, StaticBody, RigidBody, KinematicBody 等节点下来为节点提供形" +"状。" #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." -msgstr "空CollisionPolygon节点不起碰撞检测作用。" +msgstr "空 CollisionPolygon 节点不起碰撞检测作用。" #: scene/3d/collision_shape.cpp msgid "" @@ -12354,14 +12416,14 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShape类型节点只能为CollisionObject的派生类提供碰撞形状数据,请将其放" -"在Area、StaticBody、RigidBody或KinematicBody节点下。" +"CollisionShape 类型节点只能为 CollisionObject 的派生类提供碰撞形状数据,请将" +"其放在 Area, StaticBody, RigidBody, KinematicBody 节点下来为节点提供形状。" #: scene/3d/collision_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." -msgstr "必须提供形状以使CollisionShape起作用。请为其创建形状资源。" +msgstr "必须提供形状以使 CollisionShape 起作用。请为其创建形状资源。" #: scene/3d/collision_shape.cpp msgid "" @@ -12383,8 +12445,8 @@ msgid "" "CPUParticles animation requires the usage of a SpatialMaterial whose " "Billboard Mode is set to \"Particle Billboard\"." msgstr "" -"CPUParticles动画需要使用SpatialMaterial,其“公告牌模式”设置为“ Particle " -"Billboard”。" +"CPUParticles 动画需要使用 Billboard Mode 设置为 “Particle Billboard” 的 " +"SpatialMaterial。" #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -12395,13 +12457,13 @@ msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" -"GLES2视频驱动程序不支持GIProbe。\n" -"请改用BakedLightmap。" +"GLES2 视频驱动程序不支持 GIProbes。\n" +"请改用 BakedLightmap。" #: scene/3d/interpolated_camera.cpp msgid "" "InterpolatedCamera has been deprecated and will be removed in Godot 4.0." -msgstr "InterpolatedCamera已废弃,将在Godot 4.0中删除。" +msgstr "InterpolatedCamera 已废弃,将在 Godot 4.0 中删除。" #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -12409,14 +12471,15 @@ msgstr "角度宽于 90 度的 SpotLight 无法投射出阴影。" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." -msgstr "此节点需要设置NavigationMesh资源才能正常工作。" +msgstr "此节点需要设置 NavigationMesh 资源才能正常工作。" #: scene/3d/navigation_mesh.cpp msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshInstance类型节点必须作为Navigation节点的子孙才能提供导航数据。" +"NavigationMeshInstance 类型节点必须作为 Navigation 节点的子节点或子孙节点才能" +"提供导航数据。" #: scene/3d/particles.cpp msgid "" @@ -12424,31 +12487,33 @@ msgid "" "Use the CPUParticles node instead. You can use the \"Convert to CPUParticles" "\" option for this purpose." msgstr "" -"基于GPU的粒子不受GLES2视频驱动程序的支持。\n" -"改为使用CPUParticles节点。为此,您可以使用“转换为 CPU粒子”选项。" +"基于 GPU 的粒子不受 GLES2 视频驱动程序的支持。\n" +"改为使用 CPUParticles 节点。为此,您可以使用 “Convert to CPUParticles” 选项。" #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." -msgstr "粒子不可见,因为没有网格(meshe)指定到绘制通道(draw passes)。" +msgstr "粒子不可见,因为没有网格指定到绘制通道 (Draw Pass)。" #: scene/3d/particles.cpp msgid "" "Particles animation requires the usage of a SpatialMaterial whose Billboard " "Mode is set to \"Particle Billboard\"." msgstr "" -"粒子动画需要使用SpatialMaterial,其“公告牌模式”设置为“ Particle Billboard”。" +"粒子动画需要使用 Billboard Mode 设置为 “Particle Billboard” 的 " +"SpatialMaterial。" #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow类型的节点只有作为Path类型节点的子节点才能正常工作。" +msgstr "PathFollow 类型的节点只有作为 Path 类型节点的子节点才能正常工作。" #: scene/3d/path.cpp msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" -"PathFollow 的 ROTATION_ORIENTED 要求在其父路径的 Curve 资源中启用“向上矢量”。" +"PathFollow 的 ROTATION_ORIENTED 要求在其父路径的 Curve 资源中启用 “Up " +"Vector”。" #: scene/3d/physics_body.cpp msgid "" @@ -12456,15 +12521,36 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" -"对RigidBody(在character或rigid模式下)的尺寸修改,在运行时会被物理引擎的覆" -"盖。\n" +"对 RigidBody(在 Character 或 Rigid 模式下)的尺寸修改,在运行时会被物理引擎" +"的覆盖。\n" "建议您修改子节点的碰撞形状。" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." -msgstr "“远程路径”属性必须指向有效的Spatial或Spatial派生的节点才能工作。" +msgstr "" +"“Remote Path” 属性必须指向有效的 Spatial 或 Spatial 派生的节点才能工作。" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -12484,7 +12570,7 @@ msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite3D to display frames." msgstr "" -"必须在“Frames”属性中创建或设置 SpriteFrames 资源,AnimatedSprite3D 才会显示" +"必须在 “Frames” 属性中创建或设置 SpriteFrames 资源,AnimatedSprite3D 才会显示" "帧。" #: scene/3d/vehicle_body.cpp @@ -12492,52 +12578,53 @@ msgid "" "VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " "it as a child of a VehicleBody." msgstr "" -"VehicleWheel 为 VehicleBody 提供一个车轮系统(Wheel System)。请将它作为" -"VehicleBody的子节点。" +"VehicleWheel 为 VehicleBody 提供一个车轮系统 (Wheel System)。请将它作为 " +"VehicleBody 的子节点。" #: scene/3d/world_environment.cpp msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" -"WorldEnvironment 要求其“Environment”属性是一个 Environment,以产生可见效果。" +"WorldEnvironment 要求其 “Environment” 属性是一个 Environment,以产生可见效" +"果。" #: scene/3d/world_environment.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." -msgstr "每个场景中只允许有一个WorldEnvironment类型的节点。" +msgstr "每个场景中只允许有一个 WorldEnvironment 类型的节点。" #: scene/3d/world_environment.cpp msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" -"这个WorldEnvironment被忽略。添加摄像头(用于3D场景)或将此环境的背景模式设置" -"为画布(用于2D场景)。" +"这个 WorldEnvironment 被忽略。添加摄像头(用于 3D 场景)或将此环境的背景模式" +"设置为画布(用于 2D 场景)。" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "在 BlendTree 节点 '%s' 上没有发现动画: '%s'" +msgstr "在 BlendTree 节点 “%s” 上没有发现动画: “%s”" #: scene/animation/animation_blend_tree.cpp msgid "Animation not found: '%s'" -msgstr "没有动画: '%s'" +msgstr "没有动画: “%s”" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "在节点 '%s' 上的动画无效: '%s' 。" +msgstr "在节点 “%s” 上的动画无效: “%s” 。" #: scene/animation/animation_tree.cpp msgid "Invalid animation: '%s'." -msgstr "无效动画: '%s' 。" +msgstr "无效动画: “%s” 。" #: scene/animation/animation_tree.cpp msgid "Nothing connected to input '%s' of node '%s'." -msgstr "没有任何物体连接到节点 '%s' 的输入 '%s' 。" +msgstr "没有任何物体连接到节点 “%s” 的输入 “%s” 。" #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." -msgstr "没有为图设置根AnimationNode。" +msgstr "没有为图设置根 AnimationNode。" #: scene/animation/animation_tree.cpp msgid "Path to an AnimationPlayer node containing animations is not set." @@ -12549,11 +12636,11 @@ msgstr "动画播放器的路径没有加载一个 AnimationPlayer 节点。" #: scene/animation/animation_tree.cpp msgid "The AnimationPlayer root node is not a valid node." -msgstr "AnimationPlayer根节点不是有效节点。" +msgstr "AnimationPlayer 根节点不是有效节点。" #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." -msgstr "该节点已废弃。请使用Animation Tree代替。" +msgstr "该节点已废弃。请使用 AnimationTree 代替。" #: scene/gui/color_picker.cpp msgid "" @@ -12591,20 +12678,20 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"除非脚本配置其子代放置行为,否则容器本身没有任何作用。\n" -"如果您不想添加脚本,请改用普通的Control节点。" +"除非脚本配置其子节点放置行为,否则容器本身没有任何作用。\n" +"如果您不想添加脚本,请改用普通的 Control 节点。" #: scene/gui/control.cpp msgid "" "The Hint Tooltip won't be displayed as the control's Mouse Filter is set to " "\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"." msgstr "" -"由于该控件的 Mouse Filter 设置为 \"Ignore\" 因此它的 Hint Tooltip 将不会展" -"示。将 Mouse Filter 设置为 \"Stop\" 或 \"Pass\" 可修正此问题。" +"由于该控件的 Mouse Filter 设置为 “Ignore” 因此将不会显示高亮工具提示。将 " +"Mouse Filter 设置为 “Stop” 或 “Pass” 可修正此问题。" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "提示!" +msgstr "警告!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." @@ -12616,12 +12703,12 @@ msgid "" "functions. Making them visible for editing is fine, but they will hide upon " "running." msgstr "" -"默认情况下,弹出窗口将隐藏,除非您调用popup()或任何popup *()函数。使它们" -"可见以进行编辑是可以的,但是它们会在运行时隐藏。" +"弹窗将默认隐藏,除非调用 popup() 或任何 popup*() 函数。虽然可以将弹窗设为可见" +"来进行编辑,但在运行时会隐藏。" #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "如果启用了“ Exp Edit”,则“ Min Value”必须大于0。" +msgstr "如果启用了 “Exp Edit”,则 “Min Value” 必须大于 0。" #: scene/gui/scroll_container.cpp msgid "" @@ -12629,19 +12716,21 @@ msgid "" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer旨在与单个子控件一起使用。\n" -"子节点应该是单个容器(VBox、HBox等)或者使用单个控件并手动设置其自定义最小尺" +"ScrollContainer 适用于与单个子控件一起使用。\n" +"子节点应该是单个容器(VBox, HBox 等)或者使用单个控件并手动设置其自定义最小尺" "寸。" #: scene/gui/tree.cpp msgid "(Other)" -msgstr "(其它)" +msgstr "(其它)" #: scene/main/scene_tree.cpp msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." -msgstr "无法加载项目设置中的默认环境,详见(渲染->视图->默认环境)。" +msgstr "" +"无法加载项目设置中的默认环境 (Rendering -> Environment -> Default " +"Environment)。" #: scene/main/viewport.cpp msgid "" @@ -12650,13 +12739,13 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"这个 Viewport 未被设置为渲染目标(render target)。如果你刻意打算让其直接在屏" -"幕上显示其内容,使其成为子控件的所以它可以有一个尺寸大小值。否则请将其设置为 " -"RenderTarget,并将其内部纹理分配给其它节点显示。" +"这个 Viewport 未被设置为渲染目标。如果你想让其直接在屏幕上显示内容,请使其成" +"为 Control 的子节点,这样一来该 Viewport 才会有大小。否则请为其设置 " +"RenderTarget 并分配其内部纹理来显示。" #: scene/main/viewport.cpp msgid "Viewport size must be greater than 0 to render anything." -msgstr "Viewport大小大于0时才能进行渲染。" +msgstr "Viewport 大小大于 0 时才能进行渲染。" #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." @@ -12676,7 +12765,7 @@ msgstr "对函数的赋值。" #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "对uniform的赋值。" +msgstr "对统一的赋值。" #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." @@ -12686,6 +12775,30 @@ msgstr "变量只能在顶点函数中指定。" msgid "Constants cannot be modified." msgstr "不允许修改常量。" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "当前位置已存在同名文件或文件夹。" + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "缺失“build-tools”目录!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "未找到 zipalign 工具。" + +#~ msgid "Aligning APK..." +#~ msgstr "对齐 APK..." + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "无法完成 APK 对齐。" + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "无法删除未对齐 APK。" + +#~ msgid "Error trying to save layout!" +#~ msgstr "保存布局出错!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "覆盖编辑器默认布局。" + #~ msgid "Move pivot" #~ msgstr "移动轴心点" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index cfc8abfafa..b3faa76c3c 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -1071,14 +1071,17 @@ msgstr "" #: editor/dependency_editor.cpp #, fuzzy -msgid "Remove selected files from the project? (Can't be restored)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "從專案中刪除所選的檔案?(此動作無法復原)" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" #: editor/dependency_editor.cpp @@ -1125,7 +1128,7 @@ msgstr "" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -2389,12 +2392,16 @@ msgid "Error saving TileSet!" msgstr "儲存TileSet時出現錯誤!" #: editor/editor_node.cpp -#, fuzzy -msgid "Error trying to save layout!" -msgstr "儲存佈局時出現錯誤!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" #: editor/editor_node.cpp -msgid "Default editor layout overridden." +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." msgstr "" #: editor/editor_node.cpp @@ -2403,7 +2410,7 @@ msgstr "未找到佈局名稱!" #: editor/editor_node.cpp #, fuzzy -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "重設預設佈局。" #: editor/editor_node.cpp @@ -3794,6 +3801,16 @@ msgid "Name contains invalid characters." msgstr "名字含有無效字符。" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "重新命名檔案:" @@ -3846,15 +3863,6 @@ msgstr "編輯Dependencies..." msgid "View Owners..." msgstr "" -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy -msgid "Rename..." -msgstr "重新命名..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "再製..." - #: editor/filesystem_dock.cpp #, fuzzy msgid "Move To..." @@ -3883,11 +3891,18 @@ msgid "Collapse All" msgstr "全部折疊" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "重新命名" +msgid "Duplicate..." +msgstr "再製..." + +#: editor/filesystem_dock.cpp +#, fuzzy +msgid "Move to Trash" +msgstr "移動Autoload" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy +msgid "Rename..." +msgstr "重新命名..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3925,8 +3940,11 @@ msgid "Move" msgstr "移動" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "此位置已存在同名的檔案或資料夾。" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "重新命名" #: editor/filesystem_dock.cpp #, fuzzy @@ -8608,10 +8626,25 @@ msgstr "新增" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy +msgid "New Rectangle" +msgstr "新增場景" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy msgid "Create a new polygon." msgstr "縮放selection" #: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "New Polygon" +msgstr "插件" + +#: editor/plugins/tile_set_editor_plugin.cpp +#, fuzzy +msgid "Delete Selected Shape" +msgstr "刪除選中檔案" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "" @@ -10062,6 +10095,10 @@ msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -12365,6 +12402,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -12632,6 +12673,26 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " @@ -12892,6 +12953,26 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -13100,6 +13181,13 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "此位置已存在同名的檔案或資料夾。" + +#, fuzzy +#~ msgid "Error trying to save layout!" +#~ msgstr "儲存佈局時出現錯誤!" + #, fuzzy #~ msgid "Move pivot" #~ msgstr "上移" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index e579ce7d7c..dc3c1f49f7 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -29,7 +29,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-11 17:17+0000\n" +"PO-Revision-Date: 2020-12-07 08:11+0000\n" "Last-Translator: BinotaLIU <me@binota.org>\n" "Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hant/>\n" @@ -38,7 +38,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -61,15 +61,15 @@ msgstr "運算式中的輸入 %i 無效 (未傳遞)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "該實體為 null,無法使用 self" +msgstr "該實體為 null,無法使用 self(未傳遞)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "該運算元無法由運算子 %s、%s、與 %s 運算。" +msgstr "運算子 %s 的運算元 %s 與 %s 無效。" #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "在型別 %s 、基礎類型 %s 上存取了無效的索引" +msgstr "索引型別 %s 對基礎類型 %s 無效" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" @@ -307,7 +307,7 @@ msgstr "觸發程序" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "截圖" +msgstr "截取" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -324,11 +324,11 @@ msgstr "立方體" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "Clamp 式內插循環" +msgstr "鉗制內插循環 (Clamp)" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "Wrap 式內插循環" +msgstr "無縫內插循環 (Wrap)" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -389,15 +389,15 @@ msgstr "AnimationPlayer 不能播放自己,只可播放其他 Player。" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "新增/插入動畫" +msgstr "新增並插入動畫" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" -msgstr "動畫新增軌跡與畫格" +msgstr "新增動畫軌道與關鍵畫格" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "新增關鍵畫格" +msgstr "新增動畫關鍵畫格" #: editor/animation_track_editor.cpp msgid "Change Animation Step" @@ -437,7 +437,7 @@ msgstr "沒有根節點時無法新增軌道" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "對於貝茲曲線無效的軌道(非適用之子屬性)" +msgstr "不可用於貝茲曲線的軌道(無適用之子屬性)" #: editor/animation_track_editor.cpp msgid "Add Bezier Track" @@ -477,7 +477,7 @@ msgstr "移動動畫關鍵畫格" #: editor/animation_track_editor.cpp msgid "Clipboard is empty" -msgstr "空白剪貼板" +msgstr "剪貼板為空" #: editor/animation_track_editor.cpp msgid "Paste Tracks" @@ -490,7 +490,7 @@ msgstr "動畫縮放關鍵影格" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "該選項不適用於編輯貝茲曲線,其僅有單一軌道。" +msgstr "該選項不適用貝茲曲線編輯,因曲線僅有單一軌道。" #: editor/animation_track_editor.cpp msgid "" @@ -509,7 +509,7 @@ msgstr "" "若要開啟「加入客制軌」的功能,請在場景在匯入設定中將 [Animation] -> " "[Storage] 設定為\n" "[Files],並啟用 [Animation] -> [Keep Custom Tracks],然後重新匯入。\n" -"另可使用會將動畫匯入獨立檔案的匯入預設設定。" +"或者也可使用會將動畫匯入獨立檔案的匯入預設設定。" #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" @@ -612,11 +612,11 @@ msgstr "最佳化動畫工具" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" -msgstr "最大線性錯誤:" +msgstr "最大線性誤差:" #: editor/animation_track_editor.cpp msgid "Max. Angular Error:" -msgstr "最大角度錯誤:" +msgstr "最大角度誤差:" #: editor/animation_track_editor.cpp msgid "Max Optimizable Angle:" @@ -770,13 +770,13 @@ msgstr "必須指定目標節點方法。" #: editor/connections_dialog.cpp msgid "Method name must be a valid identifier." -msgstr "方法名稱必須為有效識別符。" +msgstr "方法名稱必須為有效識別項。" #: editor/connections_dialog.cpp msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." -msgstr "找不到目標方法!請指定一個有效的方法、或將腳本附加至目標節點上。" +msgstr "找不到目標方法!請指定一個有效的方法,或將腳本附加至目標節點上。" #: editor/connections_dialog.cpp msgid "Connect to Node:" @@ -1037,17 +1037,23 @@ msgid "Owners Of:" msgstr "為下列之擁有者:" #: editor/dependency_editor.cpp -msgid "Remove selected files from the project? (Can't be restored)" -msgstr "確定要將所選檔案自專案中移除嗎?(無法復原)" +msgid "" +"Remove selected files from the project? (no undo)\n" +"You can find the removed files in the system trash to restore them." +msgstr "" +"確定要將所選檔案自專案中移除嗎?(無法復原)\n" +"移除的檔案可在稍後於系統資源回收桶內找到。" #: editor/dependency_editor.cpp msgid "" "The files being removed are required by other resources in order for them to " "work.\n" -"Remove them anyway? (no undo)" +"Remove them anyway? (no undo)\n" +"You can find the removed files in the system trash to restore them." msgstr "" -"有其他資源需要正在刪除的檔案以正常運作。\n" -"依然要移除嗎?(無法復原)" +"有其他資源需要正在刪除的檔案才能正常運作。\n" +"依然要移除嗎?(無法復原)\n" +"移除的檔案可在稍後於系統資源回收桶內找到。" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1059,7 +1065,7 @@ msgstr "載入時發生錯誤:" #: editor/dependency_editor.cpp msgid "Load failed due to missing dependencies:" -msgstr "由於缺乏下列相依性內容而無法載入:" +msgstr "缺乏下列相依性內容,無法載入:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1091,7 +1097,7 @@ msgstr "孤立資源瀏覽器" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp -#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" @@ -1123,7 +1129,7 @@ msgstr "Godot Engine 貢獻者" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "專案創始人" +msgstr "專案發起人" #: editor/editor_about.cpp msgid "Lead Developer" @@ -1138,7 +1144,7 @@ msgstr "專案管理員 " #: editor/editor_about.cpp msgid "Developers" -msgstr "開發者" +msgstr "開發人員" #: editor/editor_about.cpp msgid "Authors" @@ -1216,7 +1222,7 @@ msgstr "無法開啟套件檔案,非 ZIP 格式。" #: editor/editor_asset_installer.cpp msgid "%s (Already Exists)" -msgstr "%s(已經存在)" +msgstr "%s(已存在)" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1249,7 +1255,7 @@ msgstr "安裝" #: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "套件安裝" +msgstr "套件安裝程式" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1269,7 +1275,7 @@ msgstr "更改音訊匯流排音量" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "切換音訊匯流排 Solo" +msgstr "開啟/關閉音訊匯流排獨奏" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" @@ -1301,7 +1307,7 @@ msgstr "拖放以重新排列。" #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "Solo" +msgstr "獨奏" #: editor/editor_audio_buses.cpp msgid "Mute" @@ -1444,7 +1450,7 @@ msgstr "不可與現存的全域常數名稱衝突。" #: editor/editor_autoload_settings.cpp msgid "Keyword cannot be used as an autoload name." -msgstr "關鍵字無法作為 Autoload 名稱。" +msgstr "不可使用關鍵字作為 Autoload 名稱。" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" @@ -1456,7 +1462,7 @@ msgstr "重新命名 Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "觸發全域 AutoLoad" +msgstr "開啟/關閉全域 AutoLoad" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" @@ -1596,33 +1602,30 @@ msgstr "" "請在專案設定中啟用「Import Etc」或是禁用「Driver Fallback Enabled」。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for GLES2. Enable " "'Import Pvrtc' in Project Settings." msgstr "" -"目標平台上的 GLES2 必須使用「ETC」紋理壓縮。請在專案設定中啟用「Import " -"Etc」。" +"目標平台上的 GLES2 必須使用「PVRTC」紋理壓縮。請在專案設定中啟用「Import " +"Pvrtc」。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"目標平台上的 GLES3 必須使用「ETC2」紋理壓縮。請在專案設定中啟用「Import Etc " -"2」。" +"目標平台上的 GLES3 必須使用「ETC2」或「PVRTC」紋理壓縮。請在專案設定中啟用" +"「Import Etc 2」或「Import Pvrtc」。" #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'PVRTC' texture compression for the driver fallback " "to GLES2.\n" "Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"目標平台上的 GLES2 回退驅動器功能必須使用「ETC」紋理壓縮。\n" -"請在專案設定中啟用「Import Etc」或是禁用「Driver Fallback Enabled」。" +"目標平台上的 GLES2 回退驅動器功能必須使用「PVRTC」紋理壓縮。\n" +"請在專案設定中啟用「Import Pvrtc」或是禁用「Driver Fallback Enabled」。" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1662,15 +1665,15 @@ msgstr "正在編輯場景樹" #: editor/editor_feature_profile.cpp msgid "Node Dock" -msgstr "節點 Dock" +msgstr "節點停駐列" #: editor/editor_feature_profile.cpp msgid "FileSystem Dock" -msgstr "檔案系統 Dock" +msgstr "檔案系統停駐列" #: editor/editor_feature_profile.cpp msgid "Import Dock" -msgstr "匯入 Dock" +msgstr "匯入停駐列" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" @@ -1682,7 +1685,7 @@ msgstr "設定檔必須為有效檔名,且不可包含「.」" #: editor/editor_feature_profile.cpp msgid "Profile with this name already exists." -msgstr "已有相同名稱的設定檔存在。" +msgstr "已存在相同名稱的設定檔。" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" @@ -1872,7 +1875,7 @@ msgstr "上一層" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "顯示/隱藏隱藏檔案" +msgstr "顯示/取消顯示隱藏檔案" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" @@ -1904,7 +1907,7 @@ msgstr "前往下一個資料夾。" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder." -msgstr "前往上層資料夾。" +msgstr "前往上一層資料夾。" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Refresh files." @@ -1952,7 +1955,7 @@ msgstr "掃描原始檔" msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" -msgstr "由於多個匯入器以不同的型別指向檔案 %s,已中止匯入" +msgstr "由於有多個匯入器對檔案 %s 提供了不同的型別,已中止匯入" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -2197,7 +2200,7 @@ msgstr "好" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "保存資源錯誤!" +msgstr "保存資源時發生錯誤!" #: editor/editor_node.cpp msgid "" @@ -2255,7 +2258,7 @@ msgstr "正在建立縮圖" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "無樹狀根目錄無法進行此操作。" +msgstr "無樹狀根目錄時無法進行此操作。" #: editor/editor_node.cpp msgid "" @@ -2273,7 +2276,7 @@ msgstr "無法保存場景。可能是由於相依性(實體或繼承)無法 #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "無法複寫開啟中的場景!" +msgstr "無法複寫未關閉的場景!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -2289,22 +2292,31 @@ msgstr "無法加載要合併的圖塊集!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "保存保存圖塊集時發生錯誤!" +msgstr "保存圖塊集時發生錯誤!" #: editor/editor_node.cpp -msgid "Error trying to save layout!" -msgstr "嘗試保存配置時出錯!" +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" +"保存編輯器畫面配置時發生錯誤。\n" +"請確認編輯器的使用者資料路徑是否可寫入。" #: editor/editor_node.cpp -msgid "Default editor layout overridden." -msgstr "已覆蓋預設的編輯器配置。" +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" +"預設編輯器畫面配置已被複寫。\n" +"若要恢復預設的畫面配置,請使用 [刪除配置] 選項,並刪除預設畫面配置。" #: editor/editor_node.cpp msgid "Layout name not found!" msgstr "找不到配置名稱!" #: editor/editor_node.cpp -msgid "Restored default layout to base settings." +msgid "Restored the Default layout to its base settings." msgstr "已將預設配置還原至基本設定。" #: editor/editor_node.cpp @@ -2314,7 +2326,7 @@ msgid "" "understand this workflow." msgstr "" "該資源屬於已匯入的場景,因此不可編輯。 \n" -"請閱讀有關匯入場景的說明文件以更瞭解該流程。" +"請閱讀有關匯入場景的說明文件以更瞭解該工作流程。" #: editor/editor_node.cpp msgid "" @@ -2338,7 +2350,7 @@ msgid "" "understand this workflow." msgstr "" "該場景自外部匯入,因此做出的改動將不會保存。\n" -"實例化或繼承後將可對其做出修改。\n" +"實例化或繼承該場景即可對其做出修改。\n" "請閱讀與匯入相關的說明文件以更加瞭解該工作流程。" #: editor/editor_node.cpp @@ -2348,7 +2360,7 @@ msgid "" "this workflow." msgstr "" "該資源自外部匯入,因此做出的改動將不會保存。\n" -"請閱讀有關偵錯的說明文件以更瞭解該流程。" +"請閱讀有關偵錯的說明文件以更瞭解該工作流程。" #: editor/editor_node.cpp msgid "There is no defined scene to run." @@ -2392,7 +2404,7 @@ msgstr "已保存 %s 個已修改的資源。" #: editor/editor_node.cpp msgid "A root node is required to save the scene." -msgstr "保存場景需要根節點。" +msgstr "必須有根節點才可保存場景。" #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2412,7 +2424,7 @@ msgstr "此場景從未被保存。是否於執行前先保存?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "該操作必須要有場景才可完成。" +msgstr "必須要有場景才可完成該操作。" #: editor/editor_node.cpp msgid "Export Mesh Library" @@ -2482,7 +2494,7 @@ msgstr "開啟專案管理員前要先保存以下場景嗎?" msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." -msgstr "該選項已停止維護。目前已將需強制重新整理之狀況視為 Bug,請回報該問題。" +msgstr "該選項已停止維護。目前已將需強制重新整理的情況視為 Bug,請回報該問題。" #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -2634,7 +2646,7 @@ msgstr "其他 %d 個檔案" #: editor/editor_node.cpp msgid "Dock Position" -msgstr "Dock 位置" +msgstr "停駐列位置" #: editor/editor_node.cpp msgid "Distraction Free Mode" @@ -2674,7 +2686,7 @@ msgstr "篩選檔案..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "操作場景文件。" +msgstr "操作場景檔案。" #: editor/editor_node.cpp msgid "New Scene" @@ -2792,7 +2804,7 @@ msgstr "" "當開啓該選項後,一鍵部署所產生的執行檔會嘗試連線至本電腦之 IP 位置以對執行中" "的專案進行除錯。\n" "該選項旨在進行遠端除錯(通常配合行動裝置使用)。\n" -"若要使用本機 GDScript 除錯工具,則不許啟用該選項。" +"若要使用本機 GDScript 除錯工具,則不需啟用該選項。" #: editor/editor_node.cpp msgid "Small Deploy with Network Filesystem" @@ -2809,8 +2821,8 @@ msgid "" msgstr "" "啟用該選項後,一鍵部署至 Android 時的可執行檔將不會包含專案資料。\n" "專案之檔案系統將由本編輯器透過網路提供。\n" -"部署至 Android 平台需使用 USB 線以獲得更快速的效能。該選項適用於有大型素材的" -"專案,可加速測試。" +"部署至 Android 平台需使用 USB 線以獲得更快速的效能。該選項用於有大型素材的專" +"案時可加速測試。" #: editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -2890,7 +2902,7 @@ msgstr "開啟/關閉系統主控台" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" -msgstr "開啟 編輯器資料/編輯器設定 資料夾" +msgstr "開啟編輯器資料/編輯器設定資料夾" #: editor/editor_node.cpp msgid "Open Editor Data Folder" @@ -3192,7 +3204,7 @@ msgstr "全部" #: editor/editor_profiler.cpp msgid "Self" -msgstr "自身" +msgstr "僅自己" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3220,7 +3232,7 @@ msgstr "圖層" #: editor/editor_properties.cpp msgid "Bit %d, value %d" -msgstr "位 %d,值 %d" +msgstr "位元 %d,值 %d" #: editor/editor_properties.cpp msgid "[Empty]" @@ -3238,14 +3250,14 @@ msgstr "無效的 RID" msgid "" "The selected resource (%s) does not match any type expected for this " "property (%s)." -msgstr "所選的資源(%s)並不符合任該屬性(%s)的任何型別。" +msgstr "所選資源(%s)不符合任該屬性(%s)的任何型別。" #: editor/editor_properties.cpp msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" -"無法為欲保存為檔案之資源建立 ViewportTexture。\n" +"無法為欲保存成檔案之資源建立 ViewportTexture。\n" "資源必須屬於一個場景。" #: editor/editor_properties.cpp @@ -3255,7 +3267,7 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" -"無法為該資源建立檢視區紋理 (ViewportTexture),因其未設定對應的本地場景。\n" +"無法為該資源建立 ViewportTexture,因其未設定為對應本機之場景。\n" "請開啟其(與其至節點的所有資源)「Local to Scene」屬性。" #: editor/editor_properties.cpp editor/property_editor.cpp @@ -3332,7 +3344,7 @@ msgid "" "as runnable." msgstr "" "為找到可執行於該平台的匯出預設設定。\n" -"請在 [匯出] 選單中新增一個可執行的預設設定,會將現有的預設設定設為可執行。" +"請在 [匯出] 選單中新增一個可執行的預設設定,或將現有的預設設定設為可執行。" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -3360,7 +3372,7 @@ msgstr "是否未新增「_run」方法?" #: editor/editor_spin_slider.cpp msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes." -msgstr "按住 Ctrl 以取整數。按住 Shift 以使用更精確的改動。" +msgstr "按住 Ctrl 以取整數。按住 Shift 以進行更精確的改動。" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3533,7 +3545,7 @@ msgstr "已連線" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Requesting..." -msgstr "正在請求…" +msgstr "正在要求…" #: editor/export_template_manager.cpp msgid "Downloading" @@ -3597,7 +3609,7 @@ msgstr "狀態:檔案匯入失敗。請修正檔案並手動重新匯入。" #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "無法移動/重新命名根資源。" +msgstr "無法移動或重新命名根資源。" #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." @@ -3632,6 +3644,16 @@ msgid "Name contains invalid characters." msgstr "名稱包含無效字元。" #: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp msgid "Renaming file:" msgstr "重新命名檔案:" @@ -3679,14 +3701,6 @@ msgstr "編輯相依性..." msgid "View Owners..." msgstr "檢視擁有者..." -#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Rename..." -msgstr "重新命名..." - -#: editor/filesystem_dock.cpp -msgid "Duplicate..." -msgstr "重複..." - #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "移動至..." @@ -3714,11 +3728,16 @@ msgid "Collapse All" msgstr "收合全部" #: editor/filesystem_dock.cpp -#: editor/plugins/animation_tree_player_editor_plugin.cpp -#: editor/project_manager.cpp editor/rename_dialog.cpp -#: editor/scene_tree_dock.cpp -msgid "Rename" -msgstr "重新命名" +msgid "Duplicate..." +msgstr "重複..." + +#: editor/filesystem_dock.cpp +msgid "Move to Trash" +msgstr "移動至資源回收桶" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "重新命名..." #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3753,8 +3772,11 @@ msgid "Move" msgstr "移動" #: editor/filesystem_dock.cpp -msgid "There is already file or folder with the same name in this location." -msgstr "該位置已有相同名稱的檔案或資料夾。" +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "重新命名" #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3866,7 +3888,7 @@ msgstr "群組中的節點" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "空群組將被自動移除。" +msgstr "空群組將自動移除。" #: editor/groups_editor.cpp msgid "Group Editor" @@ -3943,11 +3965,11 @@ msgstr "無法載入 Post-Import 腳本:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "匯入後腳本無效或損毀(請檢查主控台):" +msgstr "Post-Import 腳本無效或損毀(請檢查主控台):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "執行匯入後腳本時發生錯誤:" +msgstr "執行 Post-Import 腳本時發生錯誤:" #: editor/import/resource_importer_scene.cpp msgid "Did you return a Node-derived object in the `post_import()` method?" @@ -4171,11 +4193,11 @@ msgstr "移動節點頂點" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" -msgstr "修改混合空間 1D 限制" +msgstr "修改 BlendSpace1D 限制" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Labels" -msgstr "修改混合空間 1D 標籤" +msgstr "修改 BlendSpace1D 標籤" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4195,11 +4217,11 @@ msgstr "新增動畫頂點" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Remove BlendSpace1D Point" -msgstr "移除混合空間 1D 頂點" +msgstr "移除 BlendSpace1D 頂點" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "移動混合空間 1D 節點頂點" +msgstr "移動 BlendSpace1D 節點頂點" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4209,7 +4231,7 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" -"動畫樹未啟用。\n" +"AnimationTree 未啟用。\n" "請先啟用以播放,若啟用失敗請檢查節點警告訊息。" #: editor/plugins/animation_blend_space_1d_editor.cpp @@ -4220,7 +4242,7 @@ msgstr "在此空間中設定混合位置" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "選擇與移動頂點,使用滑鼠右鍵建立頂點。" +msgstr "選擇並移動頂點,使用滑鼠右鍵建立頂點。" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp @@ -4313,7 +4335,7 @@ msgstr "輸出節點無法被新增至混合樹。" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" -msgstr "新增節點至混合樹" +msgstr "新增節點至 BlendTree" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Node Moved" @@ -4442,7 +4464,7 @@ msgstr "重新命名動畫" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "混合下一個改動" +msgstr "混合下一個更改" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" @@ -4570,7 +4592,7 @@ msgstr "僅顯示差異" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "強制使用白色調整" +msgstr "強制使用白色調變" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" @@ -4688,11 +4710,11 @@ msgstr "移除所選的節點或轉場。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." -msgstr "開啟/關閉自動播放動畫於開始、重新啟動或搜尋至 0 時。" +msgstr "開啟/取消動畫在開始、重新啟動或搜尋至 0 時的自動播放。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "設定結尾動畫。對於子轉場很有用。" +msgstr "設定結尾動畫。適用於子轉場。" #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " @@ -4869,11 +4891,11 @@ msgstr "無法解析主機名稱:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "請求失敗,回傳代碼:" +msgstr "要求失敗,回傳代碼:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed." -msgstr "請求失敗。" +msgstr "要求失敗。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Cannot save response to:" @@ -4885,7 +4907,7 @@ msgstr "寫入錯誤。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "請求失敗,過多重新導向" +msgstr "要求失敗,過多重新導向" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect loop." @@ -4893,7 +4915,7 @@ msgstr "重新導向循環。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, timeout" -msgstr "請求失敗,逾時" +msgstr "要求失敗,逾時" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Timeout." @@ -4933,7 +4955,7 @@ msgstr "正在解析..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" -msgstr "建立請求時發生錯誤" +msgstr "建立要求時發生錯誤" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -5001,7 +5023,7 @@ msgstr "全部" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "無「%s」相關的結果。" +msgstr "找不到與「%s」相關的結果。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5051,15 +5073,15 @@ msgid "" "path from the BakedLightmap properties." msgstr "" "無法判斷光照圖的保存路徑。\n" -"請將場景保存(圖片將保存於相同資料夾),或是在 BackedLightmap 屬性內選擇一個" -"保存路徑。" +"請保存場景(圖片將保存於相同資料夾),或是在 BackedLightmap 屬性內選擇一個保" +"存路徑。" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" -"無可製作之網格。請確保這些網格包含 UV2 通道並已開啟「Bake Light」旗標。" +"無可烘焙之網格。請確保這些網格包含 UV2 通道並已開啟「Bake Light」旗標。" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5067,7 +5089,7 @@ msgstr "建立光照圖失敗,請確保該路徑可寫入。" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "建立光照圖" +msgstr "烘焙光照圖" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5136,50 +5158,43 @@ msgstr "建立水平與垂直參考線" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "" +msgstr "將 CanvasItem「%s」的 Pivot Offset 設為 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate %d CanvasItems" -msgstr "旋轉 CanvasItem" +msgstr "旋轉 %d 個 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "旋轉 CanvasItem" +msgstr "旋轉 CanvasItem「%d」為 %d 度" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" Anchor" -msgstr "移動 CanvasItem" +msgstr "移動 CanvasItem「%s」的錨點" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "" +msgstr "縮放 Node2D「%s」為 (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "" +msgstr "縮放 Control「%s」為 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale %d CanvasItems" -msgstr "縮放 CanvasItem" +msgstr "縮放 %d 個 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "縮放 CanvasItem" +msgstr "縮放 CanvasItem「%s」為 (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move %d CanvasItems" -msgstr "移動 CanvasItem" +msgstr "移動 %d 個 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "移動 CanvasItem" +msgstr "移動 CanvasItem「%s」至 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5809,7 +5824,7 @@ msgstr "右鍵點擊以新增控制點" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "製作 GI 探查" +msgstr "烘焙 GI 探查" #: editor/plugins/gradient_editor_plugin.cpp msgid "Gradient Edited" @@ -6151,7 +6166,7 @@ msgstr "產生矩形可見性" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "僅可將為 ParticlesMaterial 處理材料設定點" +msgstr "僅可設為指向 ProticlesMaterial 處理材料" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -6442,18 +6457,16 @@ msgid "Move Points" msgstr "移動點" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Command: Rotate" -msgstr "拖移:旋轉" +msgstr "Command:旋轉" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift:移動全部" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Command: Scale" -msgstr "Shift+Ctrl:縮放" +msgstr "Shift+Command:縮放" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -6498,14 +6511,12 @@ msgid "Radius:" msgstr "半徑:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy Polygon to UV" -msgstr "建立多邊形與 UV" +msgstr "將多邊形複製至 UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Copy UV to Polygon" -msgstr "轉換為 Polygon2D" +msgstr "將 UV 複製至多邊形" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" @@ -6911,7 +6922,7 @@ msgstr "跳至函式" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "只可拖移來自檔案系統的資源。" +msgstr "只可拖放來自檔案系統的資源。" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -7828,7 +7839,7 @@ msgstr "分隔線:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "TextureRegion" -msgstr "TextureRegion" +msgstr "紋理貼圖區域" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" @@ -8045,13 +8056,12 @@ msgid "Paint Tile" msgstr "繪製圖塊" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" "Shift+左鍵:直線繪製\n" -"Shift+Ctrl+左鍵:矩形繪圖" +"Shift+Command+左鍵:矩形繪圖" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8206,10 +8216,22 @@ msgid "Create a new rectangle." msgstr "建立新矩形。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "新增矩形" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." msgstr "建立新多邊形。" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "新增多邊形" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "刪除所選形狀" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." msgstr "保持多邊形在區域矩形 (Rect) 內。" @@ -8573,7 +8595,6 @@ msgid "Add Node to Visual Shader" msgstr "將節點新增至視覺著色器" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node(s) Moved" msgstr "已移動節點" @@ -8595,9 +8616,8 @@ msgid "Visual Shader Input Type Changed" msgstr "已修改視覺著色器輸入類型" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "UniformRef Name Changed" -msgstr "設定均勻名稱" +msgstr "已更改 UniformRef 名稱" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" @@ -9288,7 +9308,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "" +msgstr "現有均勻的參照。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9639,6 +9659,10 @@ msgid "OpenGL ES 3.0" msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp msgid "" "Higher visual quality\n" "All features available\n" @@ -9732,7 +9756,7 @@ msgstr "" msgid "" "The project settings were created by a newer engine version, whose settings " "are not compatible with this version." -msgstr "該專案設定是由新版本的引擎所建立,其設定無法相容於這個版本。" +msgstr "該專案設定是由新版本的 Godot 所建立,其設定無法相容於這個版本。" #: editor/project_manager.cpp msgid "" @@ -9741,7 +9765,7 @@ msgid "" "the \"Application\" category." msgstr "" "無法執行專案:未定義主場景。\n" -"請編輯專案並在「應用程式」分類中的專案設定內設定主場景。" +"請編輯專案並在 [專案設定] 的「Application」分類中設定主場景。" #: editor/project_manager.cpp msgid "" @@ -10494,7 +10518,8 @@ msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" -"啟用「載入為佔位」將禁用「可編輯子節點」並導致其所有節點都被還原為其預設值。" +"啟用「Load As Placeholder」將禁用「Editable Children」並導致其所有節點都被還" +"原為其預設值。" #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -11349,7 +11374,7 @@ msgstr "製作 NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "清除導航網格 (Navigation Mesh)。" +msgstr "清除導航網格。" #: modules/recast/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -11385,15 +11410,15 @@ msgstr "正在建立輪廓..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "正在建立多邊形網格 (Polymesh)..." +msgstr "正在建立多邊形網格..." #: modules/recast/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "正在轉換為原生導航網格 (Native Navigation Mesh)..." +msgstr "正在轉換為原生導航網格..." #: modules/recast/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "導航網格 (Navigation Mesh) 產生器設定:" +msgstr "導航網格產生器設定:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." @@ -11768,11 +11793,11 @@ msgstr "無效的索引屬性名稱「%s」,於節點「%s」。" #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " -msgstr ": 無效的引數型別: " +msgstr ": 無效的引數型別: " #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid arguments: " -msgstr ": 無效的引數: " +msgstr ": 無效的引數: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " @@ -11857,6 +11882,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "編輯器設定中用於自定義設定之 Android SDK 路徑無效。" #: platform/android/export/export.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "缺少「platform-tools」資料夾!" + +#: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -11906,19 +11935,19 @@ msgstr "" #: platform/android/export/export.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "" +msgstr "「Export AAB」僅於「Use Custom Build」啟用時可用。" #: platform/android/export/export.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "" +msgstr "無效的檔案名稱!Android App Bundle 必須要有 *.aab 副檔名。" #: platform/android/export/export.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "APK Expansion 與 Android App Bundle 不相容。" #: platform/android/export/export.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "無效的檔案名稱!Android APK 必須要有 *.apk 副檔名。" #: platform/android/export/export.cpp msgid "" @@ -11953,13 +11982,13 @@ msgstr "" #: platform/android/export/export.cpp msgid "Moving output" -msgstr "" +msgstr "移動輸出" #: platform/android/export/export.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." -msgstr "" +msgstr "無法複製並更名匯出的檔案,請於 Gradle 專案資料夾內確認輸出。" #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -12101,7 +12130,7 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionPolygon2D 僅可為 CollisionObject2D 衍生的節點提供碰撞形狀資訊。請僅" -"於 Area2D、StaticBody2D、RigidBody2D、KinematicBody2D…等節點下作為子節點使" +"於 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D…等節點下作為子節點使" "用。" #: scene/2d/collision_polygon_2d.cpp @@ -12115,7 +12144,7 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionShape2D 僅可為 CollisionObject2D 衍生的節點提供碰撞形狀資訊。請僅於 " -"Area2D、StaticBody2D、RigidBody2D、KinematicBody2D…等節點下作為子節點使用以提" +"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D…等節點下作為子節點使用以提" "供形狀。" #: scene/2d/collision_shape_2d.cpp @@ -12140,11 +12169,31 @@ msgstr "" "CPUParticles2D 動畫需要使用有啟用「Particles Animation(粒子動畫)」的 " "CanvasItemMaterial。" +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "有光照形狀的紋理必須提供「紋理」屬性。" +msgstr "有光照形狀的紋理必須提供「Texture」(紋理)屬性。" #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12236,9 +12285,8 @@ msgid "" "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D 僅可為 CollisionObject2D 衍生的節點提供碰撞形狀資訊。請將其" -"設為 Area2D、StaticBody2D、RigidBody2D、KinematicBody2D… 的子節點以賦予其形" -"狀。" +"打開「Use Parent」的 TileMap 僅可為母級 CollisionObject2D 提供形狀。請將其設" +"為 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D… 的子節點以賦予其形狀。" #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -12367,7 +12415,7 @@ msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" -"GLES2 視訊驅動程式不支援 GIProbs。\n" +"GLES2 視訊驅動程式不支援 GIProbes。\n" "請改為使用 BakedLightmap。" #: scene/3d/interpolated_camera.cpp @@ -12435,6 +12483,26 @@ msgstr "" "複寫。\n" "請改為修改其子節點的碰撞形狀之大小。" +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + #: scene/3d/remote_transform.cpp msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" @@ -12619,7 +12687,9 @@ msgstr "(其它)" msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." -msgstr "無法載入專案設定中指定的預設環境(算繪 -> 環境 -> 預設環境)。" +msgstr "" +"無法載入專案設定中指定的預設環境 (Rendering -> Environment -> Default " +"Environment)。" #: scene/main/viewport.cpp msgid "" @@ -12664,6 +12734,30 @@ msgstr "Varying 變數只可在頂點函式中指派。" msgid "Constants cannot be modified." msgstr "不可修改常數。" +#~ msgid "There is already file or folder with the same name in this location." +#~ msgstr "該位置已有相同名稱的檔案或資料夾。" + +#~ msgid "Missing 'build-tools' directory!" +#~ msgstr "缺少「build-tools」資料夾!" + +#~ msgid "Unable to find the zipalign tool." +#~ msgstr "找不到 zipalign 工具。" + +#~ msgid "Aligning APK..." +#~ msgstr "正在對齊 APK…" + +#~ msgid "Unable to complete APK alignment." +#~ msgstr "無法完成 APK 對齊。" + +#~ msgid "Unable to delete unaligned APK." +#~ msgstr "無法刪除未對齊的 APK。" + +#~ msgid "Error trying to save layout!" +#~ msgstr "嘗試保存配置時出錯!" + +#~ msgid "Default editor layout overridden." +#~ msgstr "已覆蓋預設的編輯器配置。" + #~ msgid "Move pivot" #~ msgstr "移動軸心" |