Forráskód Böngészése

feat: 添加中文翻译

SongZihuan 3 éve
szülő
commit
20e7e2f6ec
6 módosított fájl, 68 hozzáadás és 29 törlés
  1. 1 1
      lang/hgt.py
  2. 26 1
      lang/tr/zh_cn.py
  3. 25 14
      src/main.c
  4. 3 3
      src/main_build.c
  5. 4 1
      src/main_run.c
  6. 9 9
      src/runtime/aFunlang.c

+ 1 - 1
lang/hgt.py

@@ -94,7 +94,7 @@ with open(os.path.join(output_dir, f"_ht.c"), "w", encoding="utf-8") as fc:
 
         fh.write(f"#include \"{export_h}.h\"\n")
         fc.write(f"#include \"_ht.h\"\n")
-        fh.write("#define HT_getText(name, ...) (HT_TEXT_ ## name)\n")
+        fh.write("#define HT_getText(name, ...) ((char *)(HT_TEXT_ ## name))\n")
         fh.write(f"{export} int HT_initGetText(char *lang);\n")
         fc.write("#undef HT_getText\n")
 

+ 26 - 1
lang/tr/zh_cn.py

@@ -20,4 +20,29 @@ HELP_INFO = r'''[参数]
        -f 强制编译
 
 [Github page]
-   <https://github.com/aFun-org/aFunlang>'''
+   <https://github.com/aFun-org/aFunlang>'''
+   
+VERSION_N = '版本'
+CL_N = '命令行'
+CL_TIPS = '在顶层活动空间运行输入的代码'
+USAGE_N = '帮助'
+CL_ERROR = '命令行参数错误'
+NOT_FILE = '没有代码需要被运行'
+RUN_Exit_N = '退出'
+RUN_Exitcode_N = '退出代码'
+ARG_CONFLICT = '参数冲突'
+NOT_BUILD_SRC = '没有源码被编译'
+MANY_BUILD_SRC = '太多源码被编译'
+NOT_BUILD_FILE_EXISITS = '需要编译的文件不存在'
+ALREADY_BUILD = '已经编译'
+BUILD_AGAIN = '使用 --fource 强制编译'
+BUILD_FILE = '文件将被编译'
+RUN_SAVE_ERROR = '字节码编译失败'
+RUN_NOT_AUN = '运行的文件不是.aun文件'
+RUN_NOT_AUB = '运行的文件不是.aub文件'
+LOAD_BT_ERROR = '字节码加载失败'
+RUN_NOT_AUN_AUB = '运行的文件不是.aun或.aub文件'
+NOT_RUN_FILE_EXISITS = '需要运行的文件不存在'
+BUILD_IN_AUN = '被编译的文件不是.aun文件'
+BUILD_OUT_AUB = '编译输出的文件不是.aun文件'
+BUILD_ERROR_N = '编译失败'

+ 25 - 14
src/main.c

@@ -98,19 +98,20 @@ INIT_ERROR:
 
 static void printVersion(void) {
     printf_stdout(0, "aFunlang at %s\n", name);
-    printf_stdout(0, "version: " aFunVersion "\n");
+    printf_stdout(0, "aFunlang dir %s\n", base_path);
+    printf_stdout(0, "%s: " aFunVersion "\n", HT_getText(VERSION_N, "version"));
     fputs_stdout(aFunDescription "\n");
 }
 
 static void printWelcomeInfo(void) {
-    printf_stdout(0, "\naFunlang " aFunVersion " CommandLine (" __DATE__ ", " __TIME__ ")\n");
-    printf_stdout(0, "["compilerID"] on "systemName"\n");
-    printf_stdout(0, "(Enter the aFun code to run in the top activity)\n");
+    printf_stdout(0, "\naFunlang " aFunVersion " %s (" __DATE__ ", " __TIME__ ")\n", HT_getText(CL_N, "CommandLine"));
+    fputs_stdout("["compilerID"] on "systemName"\n");
+    printf_stdout(0, "(%s)\n", HT_getText(CL_TIPS, "Enter the aFun code to run in the top activity"));
 }
 
 static void printHelp(void) {
-    printf_stdout(0, "aFunlang Usage:\n");
-    printf_stdout(strlen(HT_getText(HELP_INFO, "<base-tr>")), "%s\n", HT_getText(HELP_INFO, ""));
+    printf_stdout(0, "aFunlang %s:\n", HT_getText(USAGE_N, "Usage"));
+    printf_stdout(0, "%s\n", HT_getText(HELP_INFO, ""));
 }
 
 /*
@@ -118,7 +119,7 @@ static void printHelp(void) {
  * 目标: 打印参数错误信息
  */
 static void printError(ff_FFlags *ff) {
-    writeErrorLog(aFunlangLogger, log_default, "Command line argument error (%s).", ff_getChild(ff));
+    writeErrorLog(aFunlangLogger, log_default, "%s (%s).", HT_getText(CL_ERROR, "Command line argument error"), ff_getChild(ff));
     printHelp();
 }
 
@@ -160,13 +161,19 @@ static int mainRun(ff_FFlags *ff) {
     char **argv = NULL;
     int argc = ff_get_process_argv(&argv, ff);
     if (argc == 0) {
-        writeErrorLog(aFunlangLogger, log_default, "There are not file to run.");
+        writeErrorLog(aFunlangLogger, log_default, HT_getText(NOT_FILE, "There are not file to run"));
         return 1;
     }
 
     af_Environment *env = creatAFunEnvironment(argc - 1, argv + 1);
     exit_code = runCodeFromFile(argv[0], true, 0, env);
     destructAFunEnvironment(env);
+
+    if (exit_code != 0)
+        writeErrorLog(aFunlangLogger, log_default, "aFun %s, %s = %d", HT_getText(RUN_Exit_N, ""), HT_getText(RUN_Exitcode_N, ""), exit_code);
+    else
+        writeInfoLog(aFunlangLogger, log_default, "aFun %s, %s = %d", HT_getText(RUN_Exit_N, ""), HT_getText(RUN_Exitcode_N, ""), exit_code);
+
     return exit_code;
 }
 
@@ -230,8 +237,7 @@ static int mainCL(ff_FFlags *ff) {
     RunList *rl = getRunList(ff, &command_line, &save_aub);
 
     if (rl == NULL && !command_line) {
-        writeErrorLog(aFunlangLogger, log_default, "There are not code to run.");
-        printError(ff);
+        writeErrorLog(aFunlangLogger, log_default, HT_getText(NOT_FILE, ""));
         return EXIT_FAILURE;
     }
 
@@ -253,6 +259,11 @@ static int mainCL(ff_FFlags *ff) {
         do
             exit_code = runCodeFromStdin("stdin", env);
         while (isCoreExit(env) != 1);
+
+        if (exit_code != 0)
+            writeErrorLog(aFunlangLogger, log_default, "aFun cl %s, %s = %d", HT_getText(RUN_Exit_N, ""), HT_getText(RUN_Exitcode_N, ""), exit_code);
+        else
+            writeInfoLog(aFunlangLogger, log_default, "aFun cl %s, %s = %d", HT_getText(RUN_Exit_N, ""), HT_getText(RUN_Exitcode_N, ""), exit_code);
     }
 
     destructAFunEnvironment(env);
@@ -273,14 +284,14 @@ static int mainBuild(ff_FFlags *ff) {
         switch (mark) {
             case 'o':
                 if (path != NULL) {
-                    writeErrorLog(aFunlangLogger, log_default, "Argument conflict (out, path).");
+                    writeErrorLog(aFunlangLogger, log_default, HT_getText(ARG_CONFLICT, "Argument conflict (out, path)"));
                     goto error;
                 }
                 out_put = text;
                 break;
             case 'p':
                 if (out_put != NULL) {
-                    writeErrorLog(aFunlangLogger, log_default, "Argument conflict (out, path).");
+                    writeErrorLog(aFunlangLogger, log_default, HT_getText(ARG_CONFLICT, ""));
                     goto error;
                 }
                 path = text;
@@ -301,14 +312,14 @@ out:
 
         /* 如果没有参数 */
         if (!ff_getopt_wild(&text, ff)) {
-            writeErrorLog(aFunlangLogger, log_default, "There are not source file to build.");
+            writeErrorLog(aFunlangLogger, log_default, HT_getText(NOT_BUILD_SRC, "There are not source file to build"));
             goto error;
         } else
             in = text;
 
         /* 如果还有第二个参数 */
         if (ff_getopt_wild(&text, ff)) {
-            writeErrorLog(aFunlangLogger, log_default, "There are too many source file to build. (Do not use --out option).");
+            writeErrorLog(aFunlangLogger, log_default, HT_getText(MANY_BUILD_SRC, "There are too many source file to build. (Do not use --out option)"));
             goto error;
         }
 

+ 3 - 3
src/main_build.c

@@ -7,17 +7,17 @@ int buildFileOutput(FilePath out, FilePath in, bool force) {
         time_t time_2 = getFileMTime(out);
 
         if (time_1 == 0 && time_2 == 0) {
-            writeErrorLog(aFunlangLogger, log_default, "File not exists [%s].", in);
+            writeErrorLog(aFunlangLogger, log_default, "%s [%s]", HT_getText(NOT_BUILD_FILE_EXISITS, "File not exists"), in);
             return -1;
         }
 
         if (time_2 >= time_1) {
-            writeErrorLog(aFunlangLogger, log_default, "Source already build (%s), use --force to build again.", in);
+            writeErrorLog(aFunlangLogger, log_default, "%s (%s), %s", HT_getText(ALREADY_BUILD, "Source already build"), in, HT_getText(BUILD_AGAIN, "use --force to build again"));
             return 0;
         }
     }
 
-    writeErrorLog(aFunlangLogger, log_default, "File (%s) will be build. (%s)", in, out);
+    writeInfoLog(aFunlangLogger, log_default, "%s (%s -> %s)", HT_getText(BUILD_FILE, "File will be build"), in, out);
     return buildFile(out, in);
 }
 

+ 4 - 1
src/main_run.c

@@ -81,7 +81,10 @@ int runCodeFromRunList(RunList *run_list, RunList **bak, bool save_afb, af_Envir
         }
 
         if (isCoreExit(env) == 1) {
-            writeErrorLog(aFunlangLogger, log_default, "aFun core exit, exit_code = %d", exit_code);
+            if (exit_code != 0)
+                writeErrorLog(aFunlangLogger, log_default, "aFun %s, %s = %d", HT_getText(RUN_Exit_N, "exit"), HT_getText(RUN_Exitcode_N, "exit code"), exit_code);
+            else
+                writeInfoLog(aFunlangLogger, log_default, "aFun %s, %s code = %d", HT_getText(RUN_Exit_N, "exit"), HT_getText(RUN_Exitcode_N, "exit code"), exit_code);
             break;
         }
     }

+ 9 - 9
src/runtime/aFunlang.c

@@ -79,7 +79,7 @@ static int runCode_(FilePath name, af_Parser *parser, int mode, FilePath save_pa
     if (save_path != NULL) {
         int res = writeByteCode(bt_code, save_path);
         if (res != 1)
-            writeErrorLog(aFunCoreLogger, log_default, "Save aFun Bytecode file error [%s] [save at %s].", writeByteCodeError[res], save_path);
+            writeErrorLog(aFunCoreLogger, log_default, "%s [%s -> %s]", HT_getText(RUN_SAVE_ERROR, "Save aFun Bytecode file error"), writeByteCodeError[res], save_path);
     }
 
     bool res = iterCode(bt_code, mode, env);
@@ -115,7 +115,7 @@ int runCodeFromFileSource(FilePath file, bool save_afb, FilePath save_path, int
 
     char *sufix = getFileSurfix(file);
     if (sufix == NULL || !EQ_STR(".aun", sufix)) {
-        writeErrorLog(aFunCoreLogger, log_default, "Is not .aun file[%s].", (sufix == NULL ? "" : sufix));
+        writeErrorLog(aFunCoreLogger, log_default, "%s[%s]", HT_getText(RUN_NOT_AUN, "There is not .aun file"), (sufix == NULL ? "" : sufix));
         return -2;
     }
 
@@ -174,14 +174,14 @@ int runCodeFromFileByte(FilePath file, int mode, af_Environment *env){
 
     char *sufix = getFileSurfix(file);
     if (sufix == NULL || !EQ_STR(".aub", sufix)) {
-        writeErrorLog(aFunCoreLogger, log_default, "Is not .aub file[%s].", (sufix == NULL ? "" : sufix));
+        writeErrorLog(aFunCoreLogger, log_default, "%s[%s].", HT_getText(RUN_NOT_AUB, "There is not .aub file"), (sufix == NULL ? "" : sufix));
         return -2;
     }
 
     af_Code *code = NULL;
     int res = readByteCode(&code, file);
     if(res != 1) {
-        writeErrorLog(aFunCoreLogger, log_default, "Load bytecode file error [%s] [Load at %s].", readByteCodeError[res], file);
+        writeErrorLog(aFunCoreLogger, log_default, "%s[%s: %s].", HT_getText(LOAD_BT_ERROR, "Load bytecode file error"), file, readByteCodeError[res]);
         return -2;
     }
 
@@ -200,7 +200,7 @@ int runCodeFromFile(FilePath file, bool save_afb, int mode, af_Environment *env)
 
     char *sufix = getFileSurfix(file);
     if (sufix != NULL && !EQ_STR(".aun", sufix) && !EQ_STR(".aub", sufix)) {  // 不是源文件, 字节码文件或无后缀文件
-        writeErrorLog(aFunCoreLogger, log_default, "Is not .aun/.aub file[%s].", sufix);
+        writeErrorLog(aFunCoreLogger, log_default, "%s[%s].", HT_getText(RUN_NOT_AUN_AUB, "There is not .aun/.aub file"), sufix);
         return -2;
     }
 
@@ -212,7 +212,7 @@ int runCodeFromFile(FilePath file, bool save_afb, int mode, af_Environment *env)
     time_t time_2 = getFileMTime(path_2);
 
     if (time_1 == 0 && time_2 == 0) {
-        writeErrorLog(aFunCoreLogger, log_default, "File not exists [%s].", file);
+        writeErrorLog(aFunCoreLogger, log_default, "%s[%s].", HT_getText(NOT_RUN_FILE_EXISITS, "File not exists"), file);
         free(path_1);
         free(path_2);
         return -3;
@@ -244,12 +244,12 @@ int buildFile(FilePath out, FilePath in){
     char *suffix_in = getFileSurfix(in);
     char *suffix_out = getFileSurfix(out);
     if (suffix_in == NULL || !EQ_STR(".aun", suffix_in)) {  // 不是源文件
-        writeErrorLog(aFunCoreLogger, log_default, "Input file is not .aun file[%s].", (suffix_in == NULL ? "" : suffix_in));
+        writeErrorLog(aFunCoreLogger, log_default, "%s[%s]", HT_getText(BUILD_IN_AUN, "Input file is not .aun file"), (suffix_in == NULL ? "" : suffix_in));
         return -2;
     }
 
     if (suffix_out == NULL || !EQ_STR(".aub", suffix_out)) {  // 不是字节码文件
-        writeErrorLog(aFunCoreLogger, log_default, "Output file is not .aub file[%s].", (suffix_out == NULL ? "" : suffix_out));
+        writeErrorLog(aFunCoreLogger, log_default, "[%s]", HT_getText(BUILD_OUT_AUB, "Output file is not .aub file"), (suffix_out == NULL ? "" : suffix_out));
         return -2;
     }
 
@@ -263,7 +263,7 @@ int buildFile(FilePath out, FilePath in){
     freeAllCode(code);
 
     if (res != 1) {
-        writeErrorLog(aFunCoreLogger, log_default, "Build error [%s] [Build %s].", writeByteCodeError[res], in);
+        writeErrorLog(aFunCoreLogger, log_default, "%s[%s: %s]", HT_getText(BUILD_ERROR_N, "Build error"), in, writeByteCodeError[res]);
         return -3;
     }