Localization:
* Fixed phrases * Updated POT * New POT is merged with community POs
This commit is contained in:
parent
81cebe5be3
commit
102d3e0d2c
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -975,7 +975,7 @@ namespace Slic3r {
|
||||
}
|
||||
|
||||
if (res == 0) {
|
||||
add_error("Error while extracting model data from zip archive");
|
||||
add_error("Error while extracting model data from ZIP archive");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -584,8 +584,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->set_default_value(new ConfigOptionBools{false});
|
||||
|
||||
// TRN FilamentSettings : "Dynamic fan speeds"
|
||||
auto fan_speed_setting_description = L(
|
||||
"Overhang size is expressed as a percentage of overlap of the extrusion with the previous layer: "
|
||||
auto fan_speed_setting_description = L("Overhang size is expressed as a percentage of overlap of the extrusion with the previous layer: "
|
||||
"100% would be full overlap (no overhang), while 0% represents full overhang (floating extrusion, bridge). "
|
||||
"Fan speeds for overhang sizes in between are calculated via linear interpolation.");
|
||||
|
||||
@ -2907,7 +2906,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->label = L("Tip Diameter");
|
||||
def->category = L("Support material");
|
||||
// TRN PrintSettings: "Organic supports" > "Tip Diameter"
|
||||
def->tooltip = L("The diameter of the top of the tip of the branches of organic support.");
|
||||
def->tooltip = L("Branch tip diameter for organic supports.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
@ -4666,7 +4665,7 @@ CLIActionsConfigDef::CLIActionsConfigDef()
|
||||
#if ENABLE_GL_CORE_PROFILE
|
||||
def = this->add("opengl-version", coString);
|
||||
def->label = L("OpenGL version");
|
||||
def->tooltip = L("Select the specified OpenGL version");
|
||||
def->tooltip = L("Select a specific version of OpenGL");
|
||||
def->cli = "opengl-version";
|
||||
def->set_default_value(new ConfigOptionString());
|
||||
|
||||
|
@ -290,8 +290,7 @@ void SLAPrint::Steps::generate_preview(SLAPrintObject &po, SLAPrintObjectStep st
|
||||
|
||||
if (!handled) { // Last resort to voxelization.
|
||||
po.active_step_add_warning(PrintStateBase::WarningLevel::NON_CRITICAL,
|
||||
_u8L("Can't perform full mesh booleans! "
|
||||
"Some parts of the print will be previewed with approximated meshes. "
|
||||
_u8L("Some parts of the print will be previewed with approximated meshes. "
|
||||
"This does not affect the quality of slices or the physical print in any way."));
|
||||
m = generate_preview_vdb(po, step);
|
||||
}
|
||||
@ -510,8 +509,7 @@ void SLAPrint::Steps::slice_model(SLAPrintObject &po)
|
||||
|
||||
if(slindex_it == po.m_slice_index.end())
|
||||
//TRN To be shown at the status bar on SLA slicing error.
|
||||
throw Slic3r::RuntimeError(
|
||||
format(_u8L("Model named: %s can not be sliced. Please check if the model is sane."), po.model_object()->name));
|
||||
throw Slic3r::RuntimeError(format("Model named: %s can not be sliced. Please check if the model is sane.", po.model_object()->name));
|
||||
|
||||
po.m_model_height_levels.clear();
|
||||
po.m_model_height_levels.reserve(po.m_slice_index.size());
|
||||
|
@ -20,7 +20,7 @@ public:
|
||||
|
||||
std::string formatted_errorstr() const
|
||||
{
|
||||
return _u8L("Error with zip archive") + " " + m_zipname + ": " +
|
||||
return _u8L("Error with ZIP archive") + " " + m_zipname + ": " +
|
||||
get_errorstr();
|
||||
}
|
||||
|
||||
|
@ -719,7 +719,7 @@ void BackgroundSlicingProcess::prepare_upload()
|
||||
m_print->set_status(95, _u8L("Running post-processing scripts"));
|
||||
std::string error_message;
|
||||
if (copy_file(m_temp_output_path, source_path.string(), error_message) != SUCCESS)
|
||||
throw Slic3r::RuntimeError(_u8L("Copying of the temporary G-code to the output G-code failed"));
|
||||
throw Slic3r::RuntimeError("Copying of the temporary G-code to the output G-code failed");
|
||||
m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
|
||||
// Make a copy of the source path, as run_post_process_scripts() is allowed to change it when making a copy of the source file
|
||||
// (not here, but when the final target is a file).
|
||||
|
@ -1425,8 +1425,7 @@ PageDownloader::PageDownloader(ConfigWizard* parent)
|
||||
append(box_allow_downloads);
|
||||
|
||||
// TRN ConfigWizard : Downloader : %1% = "PrusaSlicer"
|
||||
append_text(format_wxstr(_L(
|
||||
"If enabled, %1% registers to start on custom URL on www.printables.com."
|
||||
append_text(format_wxstr(_L("If enabled, %1% registers to start on custom URL on www.printables.com."
|
||||
" You will be able to use button with %1% logo to open models in this %1%."
|
||||
" The model will be downloaded into folder you choose bellow."
|
||||
), SLIC3R_APP_NAME));
|
||||
@ -1761,7 +1760,7 @@ PageBuildVolume::PageBuildVolume(ConfigWizard* parent)
|
||||
: ConfigWizardPage(parent, _L("Build Volume"), _L("Build Volume"), 1)
|
||||
, build_volume(new DiamTextCtrl(this))
|
||||
{
|
||||
append_text(_L("Set vertical size of your printer."));
|
||||
append_text(_L("Set the printer height."));
|
||||
|
||||
wxString value = "200";
|
||||
build_volume->SetValue(value);
|
||||
|
@ -191,7 +191,7 @@ void FileGet::priv::get_perform()
|
||||
if (file == NULL) {
|
||||
wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_ERROR);
|
||||
// TRN %1% = file path
|
||||
evt->SetString(GUI::format_wxstr(_L("Can't create file at %1%."), temp_path_wstring));
|
||||
evt->SetString(GUI::format_wxstr(_L("Can't create file at %1%"), temp_path_wstring));
|
||||
evt->SetInt(m_id);
|
||||
m_evt_handler->QueueEvent(evt);
|
||||
return;
|
||||
|
@ -957,16 +957,14 @@ void GUI_App::init_app_config()
|
||||
if (!error.empty()) {
|
||||
// Error while parsing config file. We'll customize the error message and rethrow to be displayed.
|
||||
if (is_editor()) {
|
||||
throw Slic3r::RuntimeError(
|
||||
_u8L("Error parsing PrusaSlicer config file, it is probably corrupted. "
|
||||
"Try to manually delete the file to recover from the error. Your user profiles will not be affected.") +
|
||||
"\n\n" + app_config->config_path() + "\n\n" + error);
|
||||
throw Slic3r::RuntimeError(format("Error parsing PrusaSlicer config file, it is probably corrupted. "
|
||||
"Try to manually delete the file to recover from the error. Your user profiles will not be affected."
|
||||
"\n\n%1%\n\n%2%", app_config->config_path(), error));
|
||||
}
|
||||
else {
|
||||
throw Slic3r::RuntimeError(
|
||||
_u8L("Error parsing PrusaGCodeViewer config file, it is probably corrupted. "
|
||||
"Try to manually delete the file to recover from the error.") +
|
||||
"\n\n" + app_config->config_path() + "\n\n" + error);
|
||||
throw Slic3r::RuntimeError(format("Error parsing PrusaGCodeViewer config file, it is probably corrupted. "
|
||||
"Try to manually delete the file to recover from the error."
|
||||
"\n\n%1%\n\n%2%", app_config->config_path(), error));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1054,16 +1052,14 @@ std::string GUI_App::check_older_app_config(Semver current_version, bool backup)
|
||||
if (!error.empty()) {
|
||||
// Error while parsing config file. We'll customize the error message and rethrow to be displayed.
|
||||
if (is_editor()) {
|
||||
throw Slic3r::RuntimeError(
|
||||
_u8L("Error parsing PrusaSlicer config file, it is probably corrupted. "
|
||||
"Try to manually delete the file to recover from the error. Your user profiles will not be affected.") +
|
||||
"\n\n" + app_config->config_path() + "\n\n" + error);
|
||||
throw Slic3r::RuntimeError(format("Error parsing PrusaSlicer config file, it is probably corrupted. "
|
||||
"Try to manually delete the file to recover from the error. Your user profiles will not be affected."
|
||||
"\n\n%1%\n\n%2%", app_config->config_path(), error));
|
||||
}
|
||||
else {
|
||||
throw Slic3r::RuntimeError(
|
||||
_u8L("Error parsing PrusaGCodeViewer config file, it is probably corrupted. "
|
||||
"Try to manually delete the file to recover from the error.") +
|
||||
"\n\n" + app_config->config_path() + "\n\n" + error);
|
||||
throw Slic3r::RuntimeError(format("Error parsing PrusaGCodeViewer config file, it is probably corrupted. "
|
||||
"Try to manually delete the file to recover from the error."
|
||||
"\n\n%1%\n\n%2%", app_config->config_path(), error));
|
||||
}
|
||||
}
|
||||
if (!snapshot_id.empty())
|
||||
@ -2316,7 +2312,7 @@ bool GUI_App::load_language(wxString language, bool initial)
|
||||
m_imgui->set_language(into_u8(language_info->CanonicalName));
|
||||
//FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only.
|
||||
//wxSetlocale(LC_NUMERIC, "C");
|
||||
Preset::update_suffix_modified((" (" + _L("modified") + ")").ToUTF8().data());
|
||||
Preset::update_suffix_modified(format(" (%1%)", _L("modified")));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -3378,8 +3374,8 @@ void GUI_App::on_version_read(wxCommandEvent& evt)
|
||||
if (m_app_updater->get_triggered_by_user())
|
||||
{
|
||||
std::string text = (*Semver::parse(into_u8(evt.GetString())) == Semver())
|
||||
? Slic3r::format(_u8L("Check for application update has failed."))
|
||||
: Slic3r::format(_u8L("No new version is available. Latest release version is %1%."), evt.GetString());
|
||||
? _u8L("Check for application update has failed.")
|
||||
: Slic3r::format(_u8L("You are currently running the latest released version %1%."), evt.GetString());
|
||||
|
||||
this->plater_->get_notification_manager()->push_version_notification(NotificationType::NoNewReleaseAvailable
|
||||
, NotificationManager::NotificationLevel::RegularNotificationLevel
|
||||
@ -3450,7 +3446,7 @@ void GUI_App::app_version_check(bool from_user)
|
||||
{
|
||||
if (from_user) {
|
||||
if (m_app_updater->get_download_ongoing()) {
|
||||
MessageDialog msgdlg(nullptr, _L("Download of new version is already ongoing. Do you wish to continue?"), _L("Notice"), wxYES_NO);
|
||||
MessageDialog msgdlg(nullptr, _L("Downloading of the new version is in progress. Do you want to continue?"), _L("Notice"), wxYES_NO);
|
||||
if (msgdlg.ShowModal() != wxID_YES)
|
||||
return;
|
||||
}
|
||||
|
@ -420,7 +420,7 @@ MeshErrorsInfo ObjectList::get_mesh_errors_info(const int obj_idx, const int vol
|
||||
const ModelObject* object = (*m_objects)[obj_idx];
|
||||
if (vol_idx != -1 && vol_idx >= int(object->volumes.size())) {
|
||||
if (sidebar_info)
|
||||
*sidebar_info = _L("Wrong volume index") + " ";
|
||||
*sidebar_info = _L("Invalid object part index") + " ";
|
||||
return { {}, {} }; // hide tooltip
|
||||
}
|
||||
|
||||
@ -2044,7 +2044,7 @@ bool ObjectList::del_from_cut_object(bool is_cut_connector, bool is_model_part/*
|
||||
InfoDialog dialog(wxGetApp().plater(), title,
|
||||
_L("This action will break a cut information.\n"
|
||||
"After that PrusaSlicer can't guarantee model consistency.") + "\n\n" +
|
||||
_L("To manipulate with solid parts or negative volumes you have to invalidate cut infornation first." + msg_end ),
|
||||
_L("To manipulate with solid parts or negative volumes you have to invalidate cut information first." + msg_end ),
|
||||
false, buttons_style | wxCANCEL_DEFAULT | wxICON_WARNING);
|
||||
|
||||
dialog.SetButtonLabel(wxID_YES, _L("Invalidate cut info"));
|
||||
|
@ -219,7 +219,7 @@ GLGizmoCut3D::GLGizmoCut3D(GLCanvas3D& parent, const std::string& icon_filename,
|
||||
{"Type" , _u8L("Type")},
|
||||
{"Style" , _u8L("Style")},
|
||||
{"Shape" , _u8L("Shape")},
|
||||
{"Depth ratio" , _u8L("Depth ratio")},
|
||||
{"Depth" , _u8L("Depth")},
|
||||
{"Size" , _u8L("Size")},
|
||||
};
|
||||
|
||||
@ -1413,7 +1413,7 @@ void GLGizmoCut3D::render_debug_input_window(float x)
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (m_imgui->checkbox(_L("Render cut plane as circle"), m_cut_plane_as_circle))
|
||||
if (m_imgui->checkbox(("Render cut plane as disc"), m_cut_plane_as_circle))
|
||||
m_plane.reset();
|
||||
|
||||
ImGui::PushItemWidth(0.5f * m_label_width);
|
||||
@ -1765,7 +1765,7 @@ void GLGizmoCut3D::render_cut_plane_input_window(CutConnectors &connectors)
|
||||
m_imgui->disabled_end();
|
||||
};
|
||||
|
||||
ImGuiWrapper::text(_L("After cut") + ": ");
|
||||
ImGuiWrapper::text(_L("Cut result") + ": ");
|
||||
add_vertical_scaled_interval(0.5f);
|
||||
|
||||
m_imgui->disabled_begin(has_connectors || m_keep_as_parts);
|
||||
@ -1785,14 +1785,14 @@ void GLGizmoCut3D::render_cut_plane_input_window(CutConnectors &connectors)
|
||||
add_vertical_scaled_interval(0.75f);
|
||||
|
||||
m_imgui->disabled_begin(has_connectors);
|
||||
ImGuiWrapper::text(_L("Cut to") + ":");
|
||||
ImGuiWrapper::text(_L("Cut into") + ":");
|
||||
|
||||
add_horizontal_scaled_interval(1.2f);
|
||||
// TRN CutGizmo: RadioButton Cut to ...
|
||||
// TRN CutGizmo: RadioButton Cut into ...
|
||||
if (m_imgui->radio_button(_L("Objects"), !m_keep_as_parts))
|
||||
m_keep_as_parts = false;
|
||||
ImGui::SameLine();
|
||||
// TRN CutGizmo: RadioButton Cut to ...
|
||||
// TRN CutGizmo: RadioButton Cut into ...
|
||||
if (m_imgui->radio_button(_L("Parts"), m_keep_as_parts))
|
||||
m_keep_as_parts = true;
|
||||
|
||||
@ -1917,9 +1917,9 @@ void GLGizmoCut3D::render_input_window_warning() const
|
||||
m_imgui->text(out);
|
||||
}
|
||||
if (!m_keep_upper && !m_keep_lower)
|
||||
m_imgui->text(wxString(ImGui::WarningMarkerSmall) + _L("Invalid state. \nNo one part is selected for keep after cut"));
|
||||
m_imgui->text(wxString(ImGui::WarningMarkerSmall) + _L("Select at least one object to keep after cutting."));
|
||||
if (!has_valid_contour())
|
||||
m_imgui->text(wxString(ImGui::WarningMarkerSmall) + _L("Warning state. \nCut plane is placed out of object"));
|
||||
m_imgui->text(wxString(ImGui::WarningMarkerSmall) + _L("Cut plane is placed out of object"));
|
||||
}
|
||||
|
||||
void GLGizmoCut3D::on_render_input_window(float x, float y, float bottom_limit)
|
||||
|
@ -1886,7 +1886,7 @@ void GLGizmoEmboss::draw_font_list()
|
||||
if (ImGui::Selectable(face.name_truncated.c_str(), is_selected, flags, selectable_size)) {
|
||||
if (!select_facename(wx_face_name)) {
|
||||
del_index = index;
|
||||
wxMessageBox(GUI::format(_L("Font face \"%1%\" can't be selected."), wx_face_name));
|
||||
MessageDialog(wxGetApp().plater(), GUI::format_wxstr(_L("Font \"%1%\" can't be selected."), wx_face_name));
|
||||
}
|
||||
}
|
||||
// tooltip as full name of font face
|
||||
@ -2218,7 +2218,7 @@ void GLGizmoEmboss::draw_delete_style_button() {
|
||||
active_index + 1;
|
||||
|
||||
if (next_style_index >= m_style_manager.get_styles().size()) {
|
||||
MessageDialog msg(plater, _L("Can't remove the last exising style."), dialog_title, wxICON_ERROR | wxOK);
|
||||
MessageDialog msg(plater, _L("Can't remove the last existing style."), dialog_title, wxICON_ERROR | wxOK);
|
||||
msg.ShowModal();
|
||||
break;
|
||||
}
|
||||
@ -2231,7 +2231,7 @@ void GLGizmoEmboss::draw_delete_style_button() {
|
||||
continue;
|
||||
}
|
||||
|
||||
wxString message = GUI::format_wxstr(_L("Are you sure,\nthat you want permanently and unrecoverable \nremove \"%1%\" style?"), style_name);
|
||||
wxString message = GUI::format_wxstr(_L("Are you sure you want to permanently remove the \"%1%\" style?"), style_name);
|
||||
MessageDialog msg(plater, message, dialog_title, wxICON_WARNING | wxYES | wxNO);
|
||||
if (msg.ShowModal() == wxID_YES) {
|
||||
// delete style
|
||||
@ -2372,10 +2372,9 @@ void GLGizmoEmboss::draw_style_list() {
|
||||
|
||||
// Check whether user wants lose actual style modification
|
||||
if (selected_style_index.has_value() && is_modified) {
|
||||
wxString title = _L("Style modification will be lost.");
|
||||
const EmbossStyle &style = m_style_manager.get_styles()[*selected_style_index].style;
|
||||
wxString message = GUI::format_wxstr(_L("Changing style to '%1%' will discard current style modification.\n\n Would you like to continue anyway?"), style.name);
|
||||
MessageDialog not_loaded_style_message(nullptr, message, title, wxICON_WARNING | wxYES|wxNO);
|
||||
wxString message = GUI::format_wxstr(_L("Changing style to \"%1%\" will discard current style modification.\n\nWould you like to continue anyway?"), style.name);
|
||||
MessageDialog not_loaded_style_message(nullptr, message, _L("Warning"), wxICON_WARNING | wxYES | wxNO);
|
||||
if (not_loaded_style_message.ShowModal() != wxID_YES)
|
||||
selected_style_index.reset();
|
||||
}
|
||||
@ -2391,7 +2390,7 @@ void GLGizmoEmboss::draw_style_list() {
|
||||
process();
|
||||
} else {
|
||||
wxString title = _L("Not valid style.");
|
||||
wxString message = GUI::format_wxstr(_L("Style '%1%' can't be used and will be removed from a list."), style.name);
|
||||
wxString message = GUI::format_wxstr(_L("Style \"%1%\" can't be used and will be removed from a list."), style.name);
|
||||
MessageDialog not_loaded_style_message(nullptr, message, title, wxOK);
|
||||
not_loaded_style_message.ShowModal();
|
||||
m_style_manager.erase(*selected_style_index);
|
||||
@ -2790,8 +2789,8 @@ void GLGizmoEmboss::draw_advanced()
|
||||
{
|
||||
const auto &ff = m_style_manager.get_font_file_with_cache();
|
||||
if (!ff.has_value()) {
|
||||
ImGui::Text("%s", _u8L("Advanced font options could be changed only for correct font.\n"
|
||||
"Start with select correct font.").c_str());
|
||||
ImGui::Text("%s", _u8L("Advanced options cannot be changed for the selected font.\n"
|
||||
"Select another font.").c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3038,7 +3037,7 @@ void GLGizmoEmboss::draw_advanced()
|
||||
if (priv::apply_camera_dir(cam, m_parent) && use_surface)
|
||||
process();
|
||||
} else if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("%s", _u8L("Use camera direction for text orientation").c_str());
|
||||
ImGui::SetTooltip("%s", _u8L("Orient the text towards the camera.").c_str());
|
||||
}
|
||||
#ifdef ALLOW_DEBUG_MODE
|
||||
ImGui::Text("family = %s", (font_prop.family.has_value() ?
|
||||
@ -3121,7 +3120,7 @@ bool GLGizmoEmboss::choose_font_by_wxdialog()
|
||||
(!use_deserialized_font && !m_style_manager.load_style(emboss_style, wx_font))) {
|
||||
m_style_manager.erase(font_index);
|
||||
wxString message = GUI::format_wxstr(
|
||||
"Font '%1%' can't be used. Please select another.",
|
||||
"Font \"%1%\" can't be used. Please select another.",
|
||||
emboss_style.name);
|
||||
wxString title = "Selected font is NOT True-type.";
|
||||
MessageDialog not_loaded_font_message(nullptr, message, title, wxOK);
|
||||
|
@ -60,7 +60,7 @@ static std::string surface_feature_type_as_string(Measure::SurfaceFeatureType ty
|
||||
switch (type)
|
||||
{
|
||||
default:
|
||||
case Measure::SurfaceFeatureType::Undef: { return _u8L("No feature"); }
|
||||
case Measure::SurfaceFeatureType::Undef: { return ("No feature"); }
|
||||
case Measure::SurfaceFeatureType::Point: { return _u8L("Vertex"); }
|
||||
case Measure::SurfaceFeatureType::Edge: { return _u8L("Edge"); }
|
||||
case Measure::SurfaceFeatureType::Circle: { return _u8L("Circle"); }
|
||||
|
@ -104,7 +104,7 @@ GLGizmoSimplify::GLGizmoSimplify(GLCanvas3D &parent)
|
||||
// translation for GUI size
|
||||
, tr_mesh_name(_u8L("Mesh name"))
|
||||
, tr_triangles(_u8L("Triangles"))
|
||||
, tr_detail_level(_u8L("Detail level"))
|
||||
, tr_detail_level(_u8L("Level of detail"))
|
||||
, tr_decimate_ratio(_u8L("Decimate ratio"))
|
||||
{}
|
||||
|
||||
@ -144,7 +144,7 @@ void GLGizmoSimplify::add_simplify_suggestion_notification(
|
||||
|
||||
for (size_t object_id : big_ids) {
|
||||
std::string t = GUI::format(_L(
|
||||
"Processing model '%1%' with more than 1M triangles "
|
||||
"Processing model \"%1%\" with more than 1M triangles "
|
||||
"could be slow. It is highly recommended to reduce "
|
||||
"amount of triangles."), objects[object_id]->name);
|
||||
std::string hypertext = _u8L("Simplify model");
|
||||
@ -318,11 +318,8 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
|
||||
m_configuration.use_count = !m_configuration.use_count;
|
||||
start_process = true;
|
||||
} else if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && is_multipart)
|
||||
// TRN %1% = "Detail level", %2% = "Decimate ratio"
|
||||
ImGui::SetTooltip("%s", GUI::format(_L(
|
||||
"Multipart object can be simplified only by %1%. "
|
||||
"If you want specify %2% process it separately."),
|
||||
tr_detail_level, tr_decimate_ratio).c_str());
|
||||
ImGui::SetTooltip("%s", _u8L("A multipart object can be simplified using only a Level of detail. "
|
||||
"If you want to enter a Decimate ratio, do the simplification separately.").c_str());
|
||||
ImGui::SameLine();
|
||||
|
||||
// show preview result triangle count (percent)
|
||||
|
@ -244,7 +244,7 @@ void UpdateJob::process(Ctl &ctl)
|
||||
m_result = priv::try_create_mesh(m_input, was_canceled);
|
||||
if (was_canceled()) return;
|
||||
if (m_result.its.empty())
|
||||
throw priv::JobException(_u8L("Created text volume is empty. Change text or font.").c_str());
|
||||
throw priv::JobException("Created text volume is empty. Change text or font.");
|
||||
|
||||
// center triangle mesh
|
||||
Vec3d shift = m_result.bounding_box().center();
|
||||
|
@ -1768,7 +1768,7 @@ void MainFrame::quick_slice(const int qs)
|
||||
wxGetApp().app_config->update_last_output_dir(get_dir_name(output_file));
|
||||
}
|
||||
else if (qs & qsExportPNG) {
|
||||
wxFileDialog dlg(this, _L("Save zip file as:"),
|
||||
wxFileDialog dlg(this, _L("Save ZIP file as:"),
|
||||
wxGetApp().app_config->get_last_output_dir(get_dir_name(output_file)),
|
||||
get_base_name(output_file), "*.sl1", wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
|
||||
if (dlg.ShowModal() != wxID_OK)
|
||||
|
@ -701,11 +701,7 @@ void PhysicalPrinterDialog::on_sys_color_changed()
|
||||
void PhysicalPrinterDialog::OnOK(wxEvent& event)
|
||||
{
|
||||
wxString printer_name = m_printer_name->GetValue();
|
||||
if (printer_name.IsEmpty()) {
|
||||
warning_catcher(this, _L("The supplied name is empty. It can't be saved."));
|
||||
return;
|
||||
}
|
||||
if (printer_name == m_default_name) {
|
||||
if (printer_name.IsEmpty() || printer_name == m_default_name) {
|
||||
warning_catcher(this, _L("You have to enter a printer name."));
|
||||
return;
|
||||
}
|
||||
|
@ -5453,7 +5453,7 @@ LoadProjectsDialog::LoadProjectsDialog(const std::vector<fs::path>& paths)
|
||||
int id = 0;
|
||||
|
||||
// all geometry
|
||||
wxRadioButton* btn = new wxRadioButton(this, wxID_ANY, _L("Import geometry"), wxDefaultPosition, wxDefaultSize, id == 0 ? wxRB_GROUP : 0);
|
||||
wxRadioButton* btn = new wxRadioButton(this, wxID_ANY, _L("Import 3D models"), wxDefaultPosition, wxDefaultSize, id == 0 ? wxRB_GROUP : 0);
|
||||
btn->SetValue(id == m_action);
|
||||
btn->Bind(wxEVT_RADIOBUTTON, [this, id, contains_projects](wxCommandEvent&) {
|
||||
m_action = id;
|
||||
@ -5466,7 +5466,7 @@ LoadProjectsDialog::LoadProjectsDialog(const std::vector<fs::path>& paths)
|
||||
id++;
|
||||
// all new window
|
||||
if (instances_allowed) {
|
||||
btn = new wxRadioButton(this, wxID_ANY, _L("Start new PrusaSlicer instance"), wxDefaultPosition, wxDefaultSize, id == 0 ? wxRB_GROUP : 0);
|
||||
btn = new wxRadioButton(this, wxID_ANY, _L("Start a new instance of PrusaSlicer"), wxDefaultPosition, wxDefaultSize, id == 0 ? wxRB_GROUP : 0);
|
||||
btn->SetValue(id == m_action);
|
||||
btn->Bind(wxEVT_RADIOBUTTON, [this, id, contains_projects](wxCommandEvent&) {
|
||||
m_action = id;
|
||||
@ -5491,7 +5491,7 @@ LoadProjectsDialog::LoadProjectsDialog(const std::vector<fs::path>& paths)
|
||||
stb_sizer->Add(m_combo_project, 0, wxEXPAND | wxTOP, 5);
|
||||
// one config
|
||||
id++;
|
||||
btn = new wxRadioButton(this, wxID_ANY, _L("Select one to load config only"), wxDefaultPosition, wxDefaultSize, id == 0 ? wxRB_GROUP : 0);
|
||||
btn = new wxRadioButton(this, wxID_ANY, _L("Select only one file to load the configuration."), wxDefaultPosition, wxDefaultSize, id == 0 ? wxRB_GROUP : 0);
|
||||
btn->SetValue(id == m_action);
|
||||
btn->Bind(wxEVT_RADIOBUTTON, [this, id, instances_allowed](wxCommandEvent&) {
|
||||
m_action = id;
|
||||
@ -5537,7 +5537,8 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path)
|
||||
mz_zip_zero_struct(&archive);
|
||||
|
||||
if (!open_zip_reader(&archive, archive_path.string())) {
|
||||
std::string err_msg = GUI::format(_u8L("Loading of a zip archive on path %1% has failed."), archive_path.string());
|
||||
// TRN %1% is archive path
|
||||
std::string err_msg = GUI::format(_u8L("Loading of a ZIP archive on path %1% has failed."), archive_path.string());
|
||||
throw Slic3r::FileIOError(err_msg);
|
||||
}
|
||||
mz_uint num_entries = mz_zip_reader_get_num_files(&archive);
|
||||
@ -5816,7 +5817,7 @@ ProjectDropDialog::ProjectDropDialog(const std::string& filename)
|
||||
wxArrayString choices;
|
||||
choices.reserve(4);
|
||||
choices.Add(_L("Open as project"));
|
||||
choices.Add(_L("Import geometry only"));
|
||||
choices.Add(_L("Import 3D models only"));
|
||||
choices.Add(_L("Import config only"));
|
||||
if (!single_instance_only)
|
||||
choices.Add(_L("Start new PrusaSlicer instance"));
|
||||
|
@ -776,7 +776,7 @@ void PlaterPresetComboBox::show_edit_menu()
|
||||
const PhysicalPrinter& pp = m_preset_bundle->physical_printers.get_selected_printer();
|
||||
std::string host = pp.config.opt_string("print_host");
|
||||
if (!host.empty()) {
|
||||
append_menu_item(menu, wxID_ANY, _L("Open physical printer URL"), "",
|
||||
append_menu_item(menu, wxID_ANY, _L("Open the physical printer URL"), "",
|
||||
[this](wxCommandEvent&) { this->open_physical_printer_url(); }, "open_browser", menu, []() { return true; }, wxGetApp().plater());
|
||||
}
|
||||
|
||||
|
@ -166,34 +166,32 @@ void SavePresetDialog::Item::update()
|
||||
const std::string unusable_suffix = PresetCollection::get_suffix_modified();//"(modified)";
|
||||
for (size_t i = 0; i < std::strlen(unusable_symbols); i++) {
|
||||
if (m_preset_name.find_first_of(unusable_symbols[i]) != std::string::npos) {
|
||||
info_line = _L("The supplied name is not valid;") + "\n" +
|
||||
_L("the following characters are not allowed:") + " " + unusable_symbols;
|
||||
info_line = _L("The following characters are not allowed in the name") + ": " + unusable_symbols;
|
||||
m_valid_type = ValidationType::NoValid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_valid_type == ValidationType::Valid && m_preset_name.find(unusable_suffix) != std::string::npos) {
|
||||
info_line = _L("The supplied name is not valid;") + "\n" +
|
||||
_L("the following suffix is not allowed:") + "\n\t" +
|
||||
info_line = _L("The following suffix is not allowed in the name") + ":\n\t" +
|
||||
from_u8(unusable_suffix);
|
||||
m_valid_type = ValidationType::NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == ValidationType::Valid && m_preset_name == "- default -") {
|
||||
info_line = _L("The supplied name is not available.");
|
||||
info_line = _L("This name is reserved, use another.");
|
||||
m_valid_type = ValidationType::NoValid;
|
||||
}
|
||||
|
||||
const Preset* existing = get_existing_preset();
|
||||
if (m_valid_type == ValidationType::Valid && existing && (existing->is_default || existing->is_system)) {
|
||||
info_line = m_use_text_ctrl ? _L("The supplied name is used for a system profile.") :
|
||||
info_line = m_use_text_ctrl ? _L("This name is used for a system profile name, use another.") :
|
||||
_L("Cannot overwrite a system profile.");
|
||||
m_valid_type = ValidationType::NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == ValidationType::Valid && existing && (existing->is_external)) {
|
||||
info_line = m_use_text_ctrl ? _L("The supplied name is used for a external profile.") :
|
||||
info_line = m_use_text_ctrl ? _L("This name is used for an external profile name, use another.") :
|
||||
_L("Cannot overwrite an external profile.");
|
||||
m_valid_type = ValidationType::NoValid;
|
||||
}
|
||||
|
@ -163,13 +163,15 @@ void Tab::create_preset_tab()
|
||||
|
||||
add_scaled_button(panel, &m_btn_hide_incompatible_presets, "flag_green");
|
||||
|
||||
m_btn_compare_preset->SetToolTip(_L("Compare this preset with some another"));
|
||||
// TRN Settings Tabs: Tooltip for save button: "Settings"
|
||||
m_btn_save_preset->SetToolTip(format_wxstr(_L("Save current %s"), m_title));
|
||||
// TRN Settings Tabs: Tooltip for rename button: "Settings"
|
||||
m_btn_rename_preset->SetToolTip(format_wxstr(_L("Rename current %1%"), m_title));
|
||||
//TRN Settings Tab: tooltip for toolbar button
|
||||
m_btn_compare_preset->SetToolTip(_L("Compare preset with another"));
|
||||
//TRN Settings Tab: tooltip for toolbar button
|
||||
m_btn_save_preset ->SetToolTip(_L("Save preset"));
|
||||
//TRN Settings Tab: tooltip for toolbar button
|
||||
m_btn_rename_preset->SetToolTip(_L("Rename preset"));
|
||||
m_btn_rename_preset->Hide();
|
||||
m_btn_delete_preset->SetToolTip(_(L("Delete this preset")));
|
||||
//TRN Settings Tab: tooltip for toolbar button
|
||||
m_btn_delete_preset->SetToolTip(_(L("Delete preset")));
|
||||
m_btn_delete_preset->Hide();
|
||||
|
||||
add_scaled_button(panel, &m_question_btn, "question");
|
||||
@ -2411,8 +2413,8 @@ void TabPrinter::build_fff()
|
||||
if (!m_supports_min_feedrates && m_use_silent_mode) {
|
||||
if (!msg.IsEmpty())
|
||||
msg += "\n\n";
|
||||
msg += _L("Stealth mode for machine limits to G-code is not supported with selected G-code flavor.\n"
|
||||
"The Stealth mode was suppressed.");
|
||||
msg += _L("The selected G-code flavor does not support the machine limitation for Stealth mode.\n"
|
||||
"Stealth mode will not be applied and will be disabled.");
|
||||
|
||||
auto silent_mode = static_cast<ConfigOptionBool*>(m_config->option("silent_mode")->clone());
|
||||
silent_mode->value = false;
|
||||
|
@ -857,10 +857,10 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection* dependent_
|
||||
m_tree = new DiffViewCtrl(this, wxSize(em * (add_new_value_column ? 80 : 60), em * 30));
|
||||
m_tree->AppendToggleColumn_(L"\u2714" , DiffModel::colToggle, wxLinux ? 9 : 6);
|
||||
m_tree->AppendBmpTextColumn("" , DiffModel::colIconText, 28);
|
||||
m_tree->AppendBmpTextColumn(_L("Original Value"), DiffModel::colOldValue, 12);
|
||||
m_tree->AppendBmpTextColumn(_L("Modified Value"), DiffModel::colModValue, 12);
|
||||
m_tree->AppendBmpTextColumn(_L("Original value"), DiffModel::colOldValue, 12);
|
||||
m_tree->AppendBmpTextColumn(_L("Modified value"), DiffModel::colModValue, 12);
|
||||
if (add_new_value_column)
|
||||
m_tree->AppendBmpTextColumn(_L("New Value"), DiffModel::colNewValue, 12);
|
||||
m_tree->AppendBmpTextColumn(_L("New value"), DiffModel::colNewValue, 12);
|
||||
|
||||
// Add Buttons
|
||||
wxFont btn_font = this->GetFont().Scaled(1.4f);
|
||||
|
@ -455,6 +455,7 @@ MsgDataLegacy::MsgDataLegacy() :
|
||||
auto *text2 = new wxStaticText(this, wxID_ANY, _(L("For more information please visit our wiki page:")));
|
||||
static const wxString url("https://github.com/prusa3d/PrusaSlicer/wiki/Slic3r-PE-1.40-configuration-update");
|
||||
// The wiki page name is intentionally not localized:
|
||||
// TRN %s = PrusaSlicer
|
||||
auto *link = new wxHyperlinkCtrl(this, wxID_ANY, format_wxstr(_L("%s 1.40 configuration update"), SLIC3R_APP_NAME), CONFIG_UPDATE_WIKI_URL);
|
||||
content_sizer->Add(text2);
|
||||
content_sizer->Add(link);
|
||||
@ -491,13 +492,8 @@ MsgNoUpdates::~MsgNoUpdates() {}
|
||||
MsgNoAppUpdates::MsgNoAppUpdates() :
|
||||
MsgDialog(nullptr, _(L("App update")), _(L("No updates available")), wxICON_ERROR | wxOK)
|
||||
{
|
||||
|
||||
auto* text = new wxStaticText(this, wxID_ANY, wxString::Format(
|
||||
_(L(
|
||||
"%s has no version updates available."
|
||||
)),
|
||||
SLIC3R_APP_NAME
|
||||
));
|
||||
//TRN %1% is PrusaSlicer
|
||||
auto* text = new wxStaticText(this, wxID_ANY, format_wxstr(_L("Your %1% is up to date."),SLIC3R_APP_NAME));
|
||||
text->Wrap(CONTENT_WIDTH * wxGetApp().em_unit());
|
||||
content_sizer->Add(text);
|
||||
content_sizer->AddSpacer(VERT_SPACING);
|
||||
|
@ -221,7 +221,7 @@ boost::filesystem::path AppUpdater::priv::download_file(const DownloadAppData& d
|
||||
assert(file != NULL);
|
||||
if (file == NULL) {
|
||||
std::string line1 = GUI::format(_u8L("Download from %1% couldn't start:"), data.url);
|
||||
std::string line2 = GUI::format(_u8L("Can't create file at %1%."), tmp_path.string());
|
||||
std::string line2 = GUI::format(_u8L("Can't create file at %1%"), tmp_path.string());
|
||||
std::string message = GUI::format("%1%\n%2%", line1, line2);
|
||||
BOOST_LOG_TRIVIAL(error) << message;
|
||||
wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_APP_DOWNLOAD_FAILED);
|
||||
@ -266,7 +266,7 @@ boost::filesystem::path AppUpdater::priv::download_file(const DownloadAppData& d
|
||||
return false;
|
||||
}
|
||||
if (file == NULL) {
|
||||
error_message = GUI::format(_u8L("Can't create file at %1%."), tmp_path.string());
|
||||
error_message = GUI::format(_u8L("Can't create file at %1%"), tmp_path.string());
|
||||
return false;
|
||||
}
|
||||
try
|
||||
|
@ -234,7 +234,7 @@ void fix_model_by_win10_sdk(const std::string &path_src, const std::string &path
|
||||
if (status == AsyncStatus::Completed)
|
||||
hr = modelAsync->GetResults(model.GetAddressOf());
|
||||
else
|
||||
throw Slic3r::RuntimeError(L("Failed loading the input model."));
|
||||
throw Slic3r::RuntimeError("Failed loading the input model.");
|
||||
|
||||
Microsoft::WRL::ComPtr<ABI::Windows::Foundation::Collections::IVector<ABI::Windows::Graphics::Printing3D::Printing3DMesh*>> meshes;
|
||||
hr = model->get_Meshes(meshes.GetAddressOf());
|
||||
@ -247,7 +247,7 @@ void fix_model_by_win10_sdk(const std::string &path_src, const std::string &path
|
||||
hr = model->RepairAsync(repairAsync.GetAddressOf());
|
||||
status = winrt_async_await(repairAsync, throw_on_cancel);
|
||||
if (status != AsyncStatus::Completed)
|
||||
throw Slic3r::RuntimeError(L("Mesh repair failed."));
|
||||
throw Slic3r::RuntimeError("Mesh repair failed.");
|
||||
repairAsync->GetResults();
|
||||
|
||||
on_progress(L("Loading repaired model"), 60);
|
||||
@ -262,14 +262,14 @@ void fix_model_by_win10_sdk(const std::string &path_src, const std::string &path
|
||||
hr = printing3d3mfpackage->SaveModelToPackageAsync(model.Get(), saveToPackageAsync.GetAddressOf());
|
||||
status = winrt_async_await(saveToPackageAsync, throw_on_cancel);
|
||||
if (status != AsyncStatus::Completed)
|
||||
throw Slic3r::RuntimeError(L("Saving mesh into the 3MF container failed."));
|
||||
throw Slic3r::RuntimeError("Saving mesh into the 3MF container failed.");
|
||||
hr = saveToPackageAsync->GetResults();
|
||||
|
||||
Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::Streams::IRandomAccessStream*>> generatorStreamAsync;
|
||||
hr = printing3d3mfpackage->SaveAsync(generatorStreamAsync.GetAddressOf());
|
||||
status = winrt_async_await(generatorStreamAsync, throw_on_cancel);
|
||||
if (status != AsyncStatus::Completed)
|
||||
throw Slic3r::RuntimeError(L("Saving mesh into the 3MF container failed."));
|
||||
throw Slic3r::RuntimeError("Saving mesh into the 3MF container failed.");
|
||||
Microsoft::WRL::ComPtr<ABI::Windows::Storage::Streams::IRandomAccessStream> generatorStream;
|
||||
hr = generatorStreamAsync->GetResults(generatorStream.GetAddressOf());
|
||||
|
||||
@ -300,7 +300,7 @@ void fix_model_by_win10_sdk(const std::string &path_src, const std::string &path
|
||||
hr = inputStream->ReadAsync(buffer.Get(), 65536 * 2048, ABI::Windows::Storage::Streams::InputStreamOptions_ReadAhead, asyncRead.GetAddressOf());
|
||||
status = winrt_async_await(asyncRead, throw_on_cancel);
|
||||
if (status != AsyncStatus::Completed)
|
||||
throw Slic3r::RuntimeError(L("Saving mesh into the 3MF container failed."));
|
||||
throw Slic3r::RuntimeError("Saving mesh into the 3MF container failed.");
|
||||
hr = buffer->get_Length(&length);
|
||||
if (length == 0)
|
||||
break;
|
||||
@ -375,7 +375,7 @@ bool fix_model_by_win10_sdk_gui(ModelObject &model_object, int volume_idx, wxPro
|
||||
mo->add_instance();
|
||||
if (!Slic3r::store_3mf(path_src.string().c_str(), &model, nullptr, false, nullptr, false)) {
|
||||
boost::filesystem::remove(path_src);
|
||||
throw Slic3r::RuntimeError(L("Export of a temporary 3mf file failed"));
|
||||
throw Slic3r::RuntimeError("Export of a temporary 3mf file failed");
|
||||
}
|
||||
model.clear_objects();
|
||||
model.clear_materials();
|
||||
@ -391,15 +391,15 @@ bool fix_model_by_win10_sdk_gui(ModelObject &model_object, int volume_idx, wxPro
|
||||
bool loaded = Slic3r::load_3mf(path_dst.string().c_str(), config, config_substitutions, &model, false);
|
||||
boost::filesystem::remove(path_dst);
|
||||
if (! loaded)
|
||||
throw Slic3r::RuntimeError(L("Import of the repaired 3mf file failed"));
|
||||
throw Slic3r::RuntimeError("Import of the repaired 3mf file failed");
|
||||
if (model.objects.size() == 0)
|
||||
throw Slic3r::RuntimeError(L("Repaired 3MF file does not contain any object"));
|
||||
throw Slic3r::RuntimeError("Repaired 3MF file does not contain any object");
|
||||
if (model.objects.size() > 1)
|
||||
throw Slic3r::RuntimeError(L("Repaired 3MF file contains more than one object"));
|
||||
throw Slic3r::RuntimeError("Repaired 3MF file contains more than one object");
|
||||
if (model.objects.front()->volumes.size() == 0)
|
||||
throw Slic3r::RuntimeError(L("Repaired 3MF file does not contain any volume"));
|
||||
throw Slic3r::RuntimeError("Repaired 3MF file does not contain any volume");
|
||||
if (model.objects.front()->volumes.size() > 1)
|
||||
throw Slic3r::RuntimeError(L("Repaired 3MF file contains more than one volume"));
|
||||
throw Slic3r::RuntimeError("Repaired 3MF file contains more than one volume");
|
||||
meshes_repaired.emplace_back(std::move(model.objects.front()->volumes.front()->mesh()));
|
||||
}
|
||||
for (size_t i = 0; i < volumes.size(); ++ i) {
|
||||
|
Loading…
Reference in New Issue
Block a user