code_lang/app_language.h

78 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#if defined(_WIN32) || defined(_WIN64)
#include <Windows.h>
#ifndef uint32_t
typedef unsigned int uint32_t;
#endif
#ifndef LANG_EXPORT
#ifdef _DEBUG
#pragma comment(lib, "Debug/lang.lib")
#else
#pragma comment(lib, "Release/lang.lib")
#endif
#endif
#endif
// purpose: APP language utility
//
// Date: 2023-01-16
//
// Implement: 语言包封装为独立的模块,提供以下API供程序调用
//
// 所需语言包按代码页区分为独立的文件安装时部署在安装目录下的“lang”子目录下扩展名为“.pak”
extern "C"
{
#pragma pack(push)
#pragma pack(1)
typedef struct _lan_attr
{
int cp; // code page
uint32_t id; // 语言名称全局唯一ID
char *name; // 以当前语言环境显示的名称UTF-8
}LANATTR;
#pragma pack(pop)
// Function: 初始化语言包
//
// Parameter: param - 保留供后期扩展
//
// Return: 返回当前应用的语言包代码页,-1为语言包文件丢失需要提醒用户程序文件损坏并退出
extern int lang_initialize(void* param = nullptr);
// Function: 获取APP当前支持的所有语言包
//
// Parameter: 无
//
// Return: LANATTR指针数组pptr直到pptr[]为nullptr为止
extern LANATTR** lang_get_supported_languages(void);
// Function: 获取APP当前语言包/代码页
//
// Parameter: 无
//
// Return: 代码页
extern int lang_get_cur_code_page(void);
// Function: 设置APP语言包/代码页APP运行时会自动选定当前代码页无特殊需要不需要专门调用
//
// Parameter: cp - 代码页若为“0”则自动匹配系统当前代码页
//
// Return: 0 - 成功
// ENOENT - APP不支持该代码页
extern int lang_set_code_page(int cp = 0);
// Function: 加载当前代码页的字符串资源 UTF-8
//
// Parameters: id - 字符串ID全局唯一
//
// err - 获取id对应的字符串错误码
// 0 - 成功
// ENOENT - 所需ID资源在当前代码页中没找到
//
// Return: 对应的字符串指针如果失败返回长度为0的空字符串 ""。调用者不用释放返回指针,但也不要改动该指针内容
extern const char* lang_load_string(uint32_t id, int* err);
}