MarlinFirmware / Marlin

Marlin is an optimized firmware for RepRap 3D printers based on the Arduino platform. Many commercial 3D printers come with Marlin installed. Check with your vendor if you need source code for your specific machine.
https://marlinfw.org
GNU General Public License v3.0
16.26k stars 19.23k forks source link

[FR] Allow some LCD options to be translated #26109

Open liu2-3zhi opened 1 year ago

liu2-3zhi commented 1 year ago

Did you test the latest bugfix-2.1.x code?

Yes, and the problem still exists.

Bug Description

Some LCD pages are not in the language file, such as "Configuration > Debug > Endstop Test". I cannot translate these pages. In addition, there are many language files that are incompletely translated or missing.

Bug Timeline

No response

Expected behavior

No response

Actual behavior

No response

Steps to Reproduce

No response

Version of Marlin Firmware

02010300

Printer model

No response

Electronics

No response

Add-ons

No response

Bed Leveling

None

Your Slicer

None

Host Software

None

Don't forget to include

Additional information & file uploads

No response

liu2-3zhi commented 1 year ago

There is no ZIP file for Configuration.h and Configuration_adv.h. Because it has nothing to do with Configuration.h and Configuration_adv.h.

ellensp commented 1 year ago

Except what type of lcd ae you referring to, a Config is always needed to answer questions like this one. And what pages? Pages implies more than one...

liu2-3zhi commented 1 year ago

"Configuration > Debug > Endstop Test"

ellensp commented 1 year ago

thats is one page, you said pages...

liu2-3zhi commented 1 year ago

I only found that this one page is not in the language file. All that remains is to regenerate the language files and font data for languages other than English.

ellensp commented 1 year ago

We rely on people who speak the language to provide correct translations English is the default file and should be used as a template

In Marlin/src/lcd/language/language_en.h is LSTR MSG_ENDSTOP_TEST = _UxGT("Endstop Test"); So it is just waiting for someone to provide the translations.

You just add this line to your appropriate language file with the correct translation.

No font rebuilding or stuff like that should be required.

We even provide tools to list what strings are missing from each language... buildroot/share/scripts/findMissingTranslations.sh though this seems a little broken right now

from another post you made I see that your identify as speaking "Chinese"

Running findMissingTranslations.sh zh_CN shows

249 out of 781 LCD strings need translation

List of missing translations

``` Missing strings for language_zh_CN.h (Simplified Chinese): LSTR MSG_HIGH = _UxGT("HIGH"); LSTR MSG_LOW = _UxGT("LOW"); LSTR MSG_ERROR = _UxGT("Error"); LSTR MSG_MEDIA_INIT_FAIL = MEDIA_TYPE_EN _UxGT(" Init Fail"); LSTR MSG_MEDIA_SORT = _UxGT("Sort ") MEDIA_TYPE_EN; LSTR MSG_ENDSTOP_TEST = _UxGT("Endstop Test"); LSTR MSG_Z_PROBE = _UxGT("Z Probe"); LSTR MSG_AUTO_HOME_A = _UxGT("Home @"); LSTR MSG_Z_AFTER_HOME = _UxGT("Z After Homing"); LSTR MSG_FILAMENT_SET = _UxGT("Filament Settings"); LSTR MSG_FILAMENT_MAN = _UxGT("Filament Management"); LSTR MSG_MANUAL_LEVELING = _UxGT("Manual Leveling"); LSTR MSG_TRAM_FL = _UxGT("Front Left"); LSTR MSG_TRAM_FR = _UxGT("Front Right"); LSTR MSG_TRAM_C = _UxGT("Center"); LSTR MSG_TRAM_BL = _UxGT("Back Left"); LSTR MSG_TRAM_BR = _UxGT("Back Right"); LSTR MSG_MANUAL_MESH = _UxGT("Manual Mesh"); LSTR MSG_AUTO_MESH = _UxGT("Auto Build Mesh"); LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i"); LSTR MSG_DECREASING_ACCURACY = _UxGT("Accuracy Decreasing!"); LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Accuracy Achieved"); LSTR MSG_HOME_OFFSET_X = _UxGT("Home Offset X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z"); LSTR MSG_ERR_M428_TOO_FAR = _UxGT("Err: Too far!"); LSTR MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard"); LSTR MSG_SELECT_ORIGIN = _UxGT("Select Origin"); LSTR MSG_LAST_VALUE_SP = _UxGT("Last value "); LSTR MSG_PREHEAT_HOTEND = _UxGT("Preheat Hotend"); LSTR MSG_LASER_TOGGLE = _UxGT("Toggle Laser"); LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Toggle Blower"); LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Air Assist"); LSTR MSG_LASER_PULSE_MS = _UxGT("Test Pulse ms"); LSTR MSG_LASER_FIRE_PULSE = _UxGT("Fire Pulse"); LSTR MSG_FLOWMETER_FAULT = _UxGT("Coolant Flow Fault"); LSTR MSG_SPINDLE_TOGGLE = _UxGT("Toggle Spindle"); LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Toggle Vacuum"); LSTR MSG_SPINDLE_FORWARD = _UxGT("Spindle Forward"); LSTR MSG_BED_TRAMMING_MANUAL = _UxGT("Manual Tramming"); LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Adjust bed until the probe triggers."); LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Corners within tolerance. Bed trammed."); LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Good Points: "); LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Last Z: "); LSTR MSG_MESH_VIEWER = _UxGT("Mesh Viewer"); LSTR MSG_MESH_VIEW = _UxGT("View Mesh"); LSTR MSG_NO_VALID_MESH = _UxGT("No valid mesh"); LSTR MSG_ACTIVATE_MESH = _UxGT("Activate Leveling"); LSTR MSG_MESH_INSET = _UxGT("Mesh Inset"); LSTR MSG_MESH_MIN_X = _UxGT("Mesh X Minimum"); LSTR MSG_MESH_MAX_X = _UxGT("Mesh X Maximum"); LSTR MSG_MESH_MIN_Y = _UxGT("Mesh Y Minimum"); LSTR MSG_MESH_MAX_Y = _UxGT("Mesh Y Maximum"); LSTR MSG_MESH_AMAX = _UxGT("Maximize Area"); LSTR MSG_MESH_CENTER = _UxGT("Center Area"); LSTR MSG_MESH_CANCEL = _UxGT("Mesh cancelled"); LSTR MSG_MESH_RESET = _UxGT("Mesh reset"); LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Probe out of bounds"); LSTR MSG_IDEX_DUPE_GAP = _UxGT("Duplicate X-Gap"); LSTR MSG_UBL_TILT_MESH = _UxGT("Tilt Mesh"); LSTR MSG_UBL_TILTING_GRID = _UxGT("Tilting Grid Size"); LSTR MSG_UBL_MESH_TILTED = _UxGT("Mesh Tilted"); LSTR MSG_UBL_MESH_WIZARD = _UxGT("UBL Mesh Wizard"); LSTR MSG_UBL_MESH_FILLED = _UxGT("Missing Points Filled"); LSTR MSG_UBL_MESH_INVALID = _UxGT("Invalid Mesh"); LSTR MSG_UBL_INVALID_SLOT = _UxGT("First Select a Mesh Slot"); LSTR MSG_MESH_ACTIVE = _UxGT("Mesh %i active"); LSTR MSG_LED_CHANNEL_N = _UxGT("Channel {"); LSTR MSG_LEDS2 = _UxGT("Lights #2"); LSTR MSG_NEO2_PRESETS = _UxGT("Light #2 Presets"); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Brightness"); LSTR MSG_MOVE_50MM = _UxGT("Move 50mm"); LSTR MSG_MOVE_0001IN = _UxGT("Move 0.001in"); LSTR MSG_MOVE_001IN = _UxGT("Move 0.01in"); LSTR MSG_MOVE_01IN = _UxGT("Move 0.1in"); LSTR MSG_MOVE_05IN = _UxGT("Move 0.5in"); LSTR MSG_MOVE_1IN = _UxGT("Move 1.0in"); LSTR MSG_LIVE_MOVE = _UxGT("Live Move"); LSTR MSG_COOLER = _UxGT("Laser Coolant"); LSTR MSG_COOLER_TOGGLE = _UxGT("Toggle Cooler"); LSTR MSG_FLOWMETER_SAFETY = _UxGT("Flow Safety"); LSTR MSG_CUTTER = _UxGT("Cutter"); LSTR MSG_LASER = _UxGT("Laser"); LSTR MSG_PID_CYCLE = _UxGT("PID Cycles"); LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("Autotune failed!"); LSTR MSG_BAD_HEATER_ID = _UxGT("Bad extruder."); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temperature too high."); LSTR MSG_TIMEOUT = _UxGT("Timeout"); LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Testing heat loss"); LSTR MSG_MPC_HEATING_PAST_200 = _UxGT("Heating to >200C"); LSTR MSG_MPC_COOLING_TO_AMBIENT = _UxGT("Cooling to ambient"); LSTR MSG_MPC_AUTOTUNE = _UxGT("MPC Autotune"); LSTR MSG_MPC_EDIT = _UxGT("Edit * MPC"); LSTR MSG_MPC_POWER = _UxGT("Heater Power"); LSTR MSG_MPC_POWER_E = _UxGT("Power *"); LSTR MSG_MPC_BLOCK_HEAT_CAPACITY = _UxGT("Heat Capacity"); LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("Heat Cap. *"); LSTR MSG_SENSOR_RESPONSIVENESS = _UxGT("Sensor Resp."); LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Sensor Resp. *"); LSTR MSG_MPC_AMBIENT_XFER_COEFF = _UxGT("Ambient Coeff."); LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("Ambient Co. *"); LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN = _UxGT("Fan coeff."); LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("Fan coeff. *"); LSTR MSG_STEP_SMOOTHING = _UxGT("Step Smoothing"); LSTR MSG_INPUT_SHAPING = _UxGT("Input Shaping"); LSTR MSG_SHAPING_ENABLE = _UxGT("Enable @ shaping"); LSTR MSG_SHAPING_DISABLE = _UxGT("Disable @ shaping"); LSTR MSG_SHAPING_FREQ = _UxGT("@ frequency"); LSTR MSG_SHAPING_ZETA = _UxGT("@ damping"); LSTR MSG_SHAPING_A_FREQ = STR_A _UxGT(" frequency"); LSTR MSG_SHAPING_B_FREQ = STR_B _UxGT(" frequency"); LSTR MSG_SHAPING_A_ZETA = STR_A _UxGT(" damping "); LSTR MSG_SHAPING_B_ZETA = STR_B _UxGT(" damping "); LSTR MSG_SHAPING_X_ENABLE = _UxGT("Enable X shaping"); LSTR MSG_SHAPING_Y_ENABLE = _UxGT("Enable Y shaping"); LSTR MSG_FILAMENT_EN = _UxGT("Filament *"); LSTR MSG_SEGMENTS_PER_SECOND = _UxGT("Segments/Sec"); LSTR MSG_DRAW_MIN_X = _UxGT("Draw Min X"); LSTR MSG_DRAW_MAX_X = _UxGT("Draw Max X"); LSTR MSG_DRAW_MIN_Y = _UxGT("Draw Min Y"); LSTR MSG_DRAW_MAX_Y = _UxGT("Draw Max Y"); LSTR MSG_MAX_BELT_LEN = _UxGT("Max Belt Len"); LSTR MSG_LINEAR_ADVANCE = _UxGT("Linear Advance"); LSTR MSG_BRIGHTNESS = _UxGT("LCD Brightness"); LSTR MSG_SCREEN_TIMEOUT = _UxGT("LCD Timeout (m)"); LSTR MSG_BRIGHTNESS_OFF = _UxGT("Backlight Off"); LSTR MSG_ERR_EEPROM_CORRUPT = _UxGT("Err: EEPROM Corrupt"); LSTR MSG_HAS_PREVIEW = _UxGT("Has preview"); LSTR MSG_INFO_MACHINENAME = _UxGT("Machine Name"); LSTR MSG_INFO_SIZE = _UxGT("Size"); LSTR MSG_INFO_FWVERSION = _UxGT("Firmware Version"); LSTR MSG_INFO_BUILD = _UxGT("Build Datetime"); LSTR MSG_BUTTON_CONFIRM = _UxGT("Confirm"); LSTR MSG_BUTTON_CONTINUE = _UxGT("Continue"); LSTR MSG_BUTTON_SKIP = _UxGT("Skip"); LSTR MSG_BUTTON_INFO = _UxGT("Info"); LSTR MSG_BUTTON_LEVEL = _UxGT("Level"); LSTR MSG_BUTTON_PAUSE = _UxGT("Pause"); LSTR MSG_BUTTON_RESUME = _UxGT("Resume"); LSTR MSG_BUTTON_ADVANCED = _UxGT("Advanced"); LSTR MSG_BUTTON_SAVE = _UxGT("Save"); LSTR MSG_BUTTON_PURGE = _UxGT("Purge"); LSTR MSG_ADVANCED_PAUSE = _UxGT("Advanced Pause"); LSTR MSG_HOST_START_PRINT = _UxGT("Host Start"); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Continue Job"); LSTR MSG_TURN_OFF = _UxGT("Turn off now"); LSTR MSG_END_LOOPS = _UxGT("End Loops"); LSTR MSG_STOPPING = _UxGT("Stopping..."); LSTR MSG_REMAINING_TIME = _UxGT("Remaining"); LSTR MSG_PRINTER_KILLED = _UxGT("Printer killed!"); LSTR MSG_FWRETRACT = _UxGT("Firmware Retract"); LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Wipe Retract"); LSTR MSG_PARK_FAILED = _UxGT("Head cannot be parked"); LSTR MSG_ATTACH_SD_MEDIA = _UxGT("Attach SD Card"); LSTR MSG_ATTACH_USB_MEDIA = _UxGT("Attach USB Drive"); LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("High Speed"); LSTR MSG_MANUAL_PENUP = _UxGT("Pen up"); LSTR MSG_MANUAL_PENDOWN = _UxGT("Pen down"); LSTR MSG_ZPROBE_SETTINGS = _UxGT("Probe Settings"); LSTR MSG_ZPROBE_MARGIN = _UxGT("Probe Margin"); LSTR MSG_Z_FEED_RATE = _UxGT("Z Feed Rate"); LSTR MSG_ENABLE_HS_MODE = _UxGT("Enable HS mode"); LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Move Nozzle to Bed"); LSTR MSG_BABYSTEP_N = _UxGT("Babystep @"); LSTR MSG_TEMP_MALFUNCTION = _UxGT("TEMP MALFUNCTION"); LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Cooler Runaway"); LSTR MSG_COOLING_FAILED = _UxGT("Cooling Failed"); LSTR MSG_PLEASE_WAIT = _UxGT("Please wait..."); LSTR MSG_PREHEATING = _UxGT("Preheating..."); LSTR MSG_PROBE_HEATING = _UxGT("Probe Heating..."); LSTR MSG_PROBE_COOLING = _UxGT("Probe Cooling..."); LSTR MSG_LASER_COOLING = _UxGT("Laser Cooling..."); LSTR MSG_DELTA_CALIBRATION_IN_PROGRESS = _UxGT("Delta Calibration in progress"); LSTR MSG_MESH_DONE = _UxGT("Mesh probing done"); LSTR MSG_RESET_STATS = _UxGT("Reset Print Stats?"); LSTR MSG_HOTEND_IDLE_DISABLE = _UxGT("Disable Timeout"); LSTR MSG_HOTEND_IDLE_NOZZLE_TARGET = _UxGT("Nozzle Idle Temp"); LSTR MSG_HOTEND_IDLE_BED_TARGET = _UxGT("Bed Idle Temp"); LSTR MSG_FAN_SPEED_FAULT = _UxGT("Fan speed fault"); LSTR MSG_COLORS_GET = _UxGT("Get Color"); LSTR MSG_COLORS_SELECT = _UxGT("Select Colors"); LSTR MSG_COLORS_APPLIED = _UxGT("Colors applied"); LSTR MSG_COLORS_RED = _UxGT("Red"); LSTR MSG_COLORS_GREEN = _UxGT("Green"); LSTR MSG_COLORS_BLUE = _UxGT("Blue"); LSTR MSG_COLORS_WHITE = _UxGT("White"); LSTR MSG_UI_LANGUAGE = _UxGT("UI Language"); LSTR MSG_SOUND_ENABLE = _UxGT("Enable sound"); LSTR MSG_LOCKSCREEN = _UxGT("Lock Screen"); LSTR MSG_LOCKSCREEN_LOCKED = _UxGT("Printer is Locked,"); LSTR MSG_LOCKSCREEN_UNLOCK = _UxGT("Scroll to unlock."); LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Please wait until reboot."); LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("No Media"); LSTR MSG_PLEASE_PREHEAT = _UxGT("Please Preheat"); LSTR MSG_FILAMENT_CHANGE_PURGE_CONTINUE = _UxGT("Purge or Continue?"); LSTR MSG_RUNOUT_ENABLE = _UxGT("Enable Runout"); LSTR MSG_RUNOUT_ACTIVE = _UxGT("Runout Active"); LSTR MSG_INVERT_EXTRUDER = _UxGT("Invert Extruder"); LSTR MSG_EXTRUDER_MIN_TEMP = _UxGT("Extruder Min Temp."); LSTR MSG_FANCHECK = _UxGT("Fan Tacho Check"); LSTR MSG_MMU2_REMOVE_AND_CLICK = _UxGT("Remove and click..."); LSTR MSG_EDIT_PASSWORD = _UxGT("Edit Password"); LSTR MSG_LOGIN_REQUIRED = _UxGT("Login Required"); LSTR MSG_PASSWORD_SETTINGS = _UxGT("Password Settings"); LSTR MSG_ENTER_DIGIT = _UxGT("Enter Digit"); LSTR MSG_CHANGE_PASSWORD = _UxGT("Set/Edit Password"); LSTR MSG_REMOVE_PASSWORD = _UxGT("Remove Password"); LSTR MSG_PASSWORD_SET = _UxGT("Password is "); LSTR MSG_START_OVER = _UxGT("Start Over"); LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Remember to Save!"); LSTR MSG_PASSWORD_REMOVED = _UxGT("Password Removed"); LSTR MSG_TMC_ACURRENT = STR_A _UxGT("Driver Current"); LSTR MSG_TMC_BCURRENT = STR_B _UxGT("Driver Current"); LSTR MSG_TMC_CCURRENT = STR_C _UxGT("Driver Current"); LSTR MSG_TMC_ECURRENT = _UxGT("E Driver Current"); LSTR MSG_FIXED_TIME_MOTION = _UxGT("Fixed-Time Motion"); LSTR MSG_FTM_MODE = _UxGT("Motion Mode:"); LSTR MSG_FTM_ZV = _UxGT("ZV"); LSTR MSG_FTM_ZVD = _UxGT("ZVD"); LSTR MSG_FTM_EI = _UxGT("EI"); LSTR MSG_FTM_2HEI = _UxGT("2HEI"); LSTR MSG_FTM_3HEI = _UxGT("3HEI"); LSTR MSG_FTM_MZV = _UxGT("MZV"); //LSTR MSG_FTM_ULENDO_FBS = _UxGT("Ulendo FBS"); //LSTR MSG_FTM_DISCTF = _UxGT("DISCTF"); LSTR MSG_FTM_DYN_MODE = _UxGT("DF Mode:"); LSTR MSG_FTM_Z_BASED = _UxGT("Z-based"); LSTR MSG_FTM_MASS_BASED = _UxGT("Mass-based"); LSTR MSG_FTM_BASE_FREQ_N = _UxGT("@ Base Freq."); LSTR MSG_FTM_DFREQ_K_N = _UxGT("@ Dyn. Freq."); LSTR MSG_FTDI_HEATER_TIMEOUT = _UxGT("Idle timeout, temperature decreased. Press Okay to reheat and again to resume."); LSTR MSG_REHEATDONE = _UxGT("Reheat Done"); LSTR MSG_PROBE_WIZARD = _UxGT("Z Probe Wizard"); LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Probing Z Reference"); LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Moving to Probing Pos"); LSTR MSG_XATC = _UxGT("X-Twist Wizard"); LSTR MSG_XATC_DONE = _UxGT("X-Twist Wizard Done!"); LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Update Probe Z-Offset to "); LSTR MSG_SOUND = _UxGT("Sound"); LSTR MSG_TOP_LEFT = _UxGT("Top Left"); LSTR MSG_BOTTOM_LEFT = _UxGT("Bottom Left"); LSTR MSG_TOP_RIGHT = _UxGT("Top Right"); LSTR MSG_BOTTOM_RIGHT = _UxGT("Bottom Right"); LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibration Completed"); LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibration Failed"); LSTR MSG_DRIVER_BACKWARD = _UxGT(" driver backward"); LSTR MSG_SD_CARD = _UxGT("SD Card"); LSTR MSG_USB_DISK = _UxGT("USB Disk"); LSTR MSG_HOST_SHUTDOWN = _UxGT("Host Shutdown"); ```

Please provide translations for these strings

ellensp commented 1 year ago

Frrom another tool we provide buildroot/share/scripts/languageExport.py Here is a CSV file with all strings for your language. Please fill out any that are missing, You can see the English version in the post above language_zh_CN.csv

liu2-3zhi commented 1 year ago

Why are some texts I still can't find in the language files? 275737003d2618e35fd6fb13a26d3cc

liu2-3zhi commented 1 year ago

For example "open", "TRIGGEREND'''.

EvilGremlin commented 1 year ago

You can add missing strings if you like (entry in english required too, as it's template for everything else) But serial output must stay all-english.

liu2-3zhi commented 1 year ago

But they don't seem to exist in the language files, even the English language files can't find them. They seem to be embedded directly into the code.

EvilGremlin commented 1 year ago

Yes, because no one needed to change them to lang strings yet. You'll have to do that.

liu2-3zhi commented 1 year ago

Error strings for language_zh_CN.h (Simplified Chinese)(Can I say there is no translation at all?):

  LSTR MSG_ADVANCE_K                      = _UxGT("线性进给常数 K");
  LSTR MSG_ADVANCE_K_E                    = _UxGT("线性进给常数 K *");

Missing strings for language_zh_CN.h (Simplified Chinese)(language_zh_CN.h (Simplified Chinese) is missing strings (that I can find and understand in the code or can see in my LCD):):


  LSTR MSG_HIGH                           = _UxGT("高");
  LSTR MSG_LOW                            = _UxGT("低");
  LSTR MSG_ERROR                          = _UxGT("错误");
  LSTR MSG_MEDIA_INIT_FAIL                = MEDIA_TYPE_EN _UxGT("内存卡\USB设备初始化失败");
  LSTR MSG_MEDIA_SORT                     = _UxGT("种类 ") MEDIA_TYPE_EN;
  LSTR MSG_ENDSTOP_TEST                   = _UxGT("传感器测试");
  LSTR MSG_Z_PROBE                        = _UxGT("Z 探针");
  LSTR MSG_AUTO_HOME_A                    = _UxGT("回@轴原位");
  LSTR MSG_Z_AFTER_HOME                   = _UxGT("Z轴已归位");
  LSTR MSG_FILAMENT_SET                   = _UxGT("耗材设置");
  LSTR MSG_FILAMENT_MAN                   = _UxGT("耗材管理");
  LSTR MSG_MANUAL_LEVELING                = _UxGT("手动调平");
  LSTR MSG_TRAM_FL                        = _UxGT("左上角");
  LSTR MSG_TRAM_FR                        = _UxGT("右上角");
  LSTR MSG_TRAM_C                         = _UxGT("中心");
  LSTR MSG_TRAM_BL                        = _UxGT("左下角");
  LSTR MSG_TRAM_BR                        = _UxGT("右下角");
  LSTR MSG_MANUAL_MESH                    = _UxGT("手动建立调平网格");
  LSTR MSG_AUTO_MESH                      = _UxGT("自动建立调平网格");
  LSTR MSG_ITERATION                      = _UxGT("G34 重复反馈中: %i");
  LSTR MSG_DECREASING_ACCURACY            = _UxGT("精确度在降低!");
  LSTR MSG_ACCURACY_ACHIEVED              = _UxGT("达到目标精度");
  LSTR MSG_HOME_OFFSET_X                  = _UxGT("原点在X轴上的偏移");
  LSTR MSG_HOME_OFFSET_Y                  = _UxGT("原点在Y轴上的偏移");
  LSTR MSG_HOME_OFFSET_Z                  = _UxGT("原点在Z轴上的偏移");
  LSTR MSG_ERR_M428_TOO_FAR               = _UxGT("错误:偏移距离过大!");
  LSTR MSG_TRAMMING_WIZARD                = _UxGT("调平热床床角向导");
  LSTR MSG_MOVE_50MM                      = _UxGT("移动 50mm");
  LSTR MSG_FILAMENT_EN                    = _UxGT("*耗材情况");
  LSTR MSG_BABYSTEP_N                     = _UxGT("短距离微调移动 @");
  LSTR MSG_COLORS_RED                     = _UxGT("红色");
  LSTR MSG_COLORS_GREEN                   = _UxGT("绿色");
  LSTR MSG_COLORS_BLUE                    = _UxGT("蓝色");
  LSTR MSG_COLORS_WHITE                   = _UxGT("白色");
  LSTR MSG_UI_LANGUAGE                    = _UxGT("UI界面语言");
  LSTR MSG_SOUND_ENABLE                   = _UxGT("声音已开启");
  LSTR MSG_LOCKSCREEN                     = _UxGT("锁定屏幕");
  LSTR MSG_PROBE_WIZARD                   = _UxGT("探针Z轴偏移量自测量");
  LSTR MSG_PROBE_WIZARD_PROBING           = _UxGT("正在测量探针的Z轴偏移量");
  LSTR MSG_PROBE_WIZARD_MOVING            = _UxGT("移动到探测位置");
  LSTR MSG_XATC                           = _UxGT("X轴扭曲补偿向导");
  LSTR MSG_XATC_DONE                      = _UxGT("X轴扭曲补偿向导完成!");
  LSTR MSG_XATC_UPDATE_Z_OFFSET           = _UxGT("探针在Z轴上的偏移将被更新为");
  LSTR MSG_SOUND                          = _UxGT("声音");
  LSTR MSG_TOP_LEFT                       = _UxGT("左上角");
  LSTR MSG_BOTTOM_LEFT                    = _UxGT("左下角");
  LSTR MSG_TOP_RIGHT                      = _UxGT("右上角");
  LSTR MSG_BOTTOM_RIGHT                   = _UxGT("右下角");
  LSTR MSG_CALIBRATION_COMPLETED          = _UxGT("校准完成");
  LSTR MSG_CALIBRATION_FAILED             = _UxGT("校准失败");
  LSTR MSG_DRIVER_BACKWARD                = _UxGT("驱动器是反向的");
  LSTR MSG_SD_CARD                        = _UxGT("SD 卡);
  LSTR MSG_USB_DISK                       = _UxGT("USB 设备");
  LSTR MSG_HOST_SHUTDOWN                  = _UxGT("关闭宿主机");

What none of the language files have:

Wich on the "Configuration > Debug > Endstop Test" page:

Whcih In the "Marlin\Marlin\src\lcd\menu\menu_configuration.cpp" file:

#define STOP_ITEM(A,I) _STOP_ITEM(STRINGIFY(A) STRINGIFY(I) " " TERN(A##_HOME_TO_MAX, "Max", "Min"), A##I##_ENDSTOP)
#define FIL_ITEM(N) PSTRING_ITEM_N_P(N-1, MSG_FILAMENT_EN, (READ(FIL_RUNOUT##N##_PIN) != FIL_RUNOUT##N##_STATE) ? PSTR("PRESENT") : PSTR("out"), SS_FULL);

Translated:

#define STOP_ITEM(A,I) _STOP_ITEM(STRINGIFY(A) STRINGIFY(I) " " TERN(A##_HOME_TO_MAX, "最大值", "最小值"), A##I##_ENDSTOP)
#define FIL_ITEM(N) PSTRING_ITEM_N_P(N-1, MSG_FILAMENT_EN, (READ(FIL_RUNOUT##N##_PIN) != FIL_RUNOUT##N##_STATE) ? PSTR("存在") : PSTR("不存在"), SS_FULL);

Whcih In the "Marlin\Marlin\src\core\language.h" file:

#define STR_ENDSTOP_HIT                     "TRIGGERED"
#define STR_ENDSTOP_OPEN                    "open"

Translated:

#define STR_ENDSTOP_HIT                     "触发"
#define STR_ENDSTOP_OPEN                    "未触发"
liu2-3zhi commented 1 year ago

The "Configuration > Debug > Endstop Test" page is sometimes useful for troubleshooting. I wish they could be added to the language files.

IlyaFarm commented 1 year ago

There is a possibility that your display only supports Japanese and Latin characters, like mine REPRAP_DISCOUNT_SMART_CONTROLLER. I would suggest checking this way: make a translation in Latin by different words not like in lang.h file and if the Latin symbols is displayed, then the problem is in the firmware of your display. But I cannot guarantee it.

liu2-3zhi commented 1 year ago

I'm very sorry, I'm not good at English. May be my expression is wrong. The LCD can display normally, but the display is in English. Because they are not in the lang.h file. I need to modify the code, I hope to add the corresponding text to the lang.h file

IlyaFarm commented 1 year ago

No if your display firmware not do not support chinese language, it's too difficult to change firmware on it, and not fact that will help. Long time ago I try by my self translate to my regional language my REPRAP_DISCOUNT_SMART_CONTROLLER and I couldn't did for this reason.

liu2-3zhi commented 1 year ago

My display can display Chinese!

IlyaFarm commented 1 year ago

Understood, so then you can translate.

liu2-3zhi commented 1 year ago

But some LCD pages are not in the language file. Not even the English language file.

ellensp commented 1 year ago

Updated language file with info provided

language_zh_CN.zip

Not yet extended to replace all English