;================================================================
; common/common_i18n 通用国际化（多语言）函数
; i18n_translate.erb 翻译文本相关
;================================================================


;;;注册翻译文本文件
;;;- str path 译文文件路径
;;;@return 1成功 0失败
@RegisterLangFile(path)
    #DIMS path
    #DIMS DYNAMIC map_name
    #DIMS DYNAMIC content
    #DIMS DYNAMIC items, 1000
    #DIM DYNAMIC items_count
    #DIMS DYNAMIC key_value, 2
    #DIM DYNAMIC i
    SPLIT REPLACE(path, ".csv", ""), ".", key_value
    map_name '= @"i18n_%key_value:1%"
    IF !EXISTFILE(path)
        CALL PrintLog(@"翻译文本文件读取失败，文件 %path% 不存在。", "warn")
        RETURN 0
    ENDIF
    content '= LOADTEXT(path)
    SPLIT REPLACE(content, "\r\n", "\n"), "\n", items
    FOR i, 0, RESULT
        IF items:i != ""
            items_count += 1
            SPLIT items:i, ",", key_value
            MAP_SET map_name, key_value:0, key_value:1
        ENDIF
    NEXT
    CALL PrintLog(@"翻译文本文件 %path% 加载成功，共 {items_count} 条翻译文本。", "debug")
    RETURN 1


;;;批量注册翻译文本文件
;;;- str module 模块
;;;- str lang 译文语言
;;;@return 注册成功的文件数量
@RegisterLangFiles(module, lang)
    #DIMS module
    #DIMS lang
    #DIM DYNAMIC file_count
    #DIM DYNAMIC i
    ; 初始化 MAP 映射表
    SIF !MAP_EXIST(@"i18n_%lang%")
        MAP_CREATE @"i18n_%lang%"
    ; 枚举翻译文本文件
    file_count = ENUMFILES(@"lang/%module%", @"*.%lang%.csv", 1)
    ; 逐一加载
    FOR i, 0, file_count
        CALL RegisterLangFile(RESULTS:i)
    NEXT
    CALL PrintLog(@"模组 %module% 下共计 {file_count} 个翻译文本文件，已加载完成。", "debug")
    RETURN file_count


;;;获取翻译文本
;;;- str keyword 占位符
;;;- (option)str lang 译文语言（默认为当前语言）
;;;@return 翻译后的文本
@tr(keyword, lang="")
#FUNCTIONS
    #DIMS keyword
    #DIMS lang
    #DIMS DYNAMIC translated
    SIF lang == ""
        lang '= G_SETTING_LANG
    translated '= MAP_GET(@"i18n_%lang%", keyword)
    SIF translated == ""  ; fallback 回退到默认语言
        translated '= MAP_GET(@"i18n_zh_cn", keyword)
    RETURNF translated == "" ? @"\%%keyword%\%" # translated
