mirror of
https://github.com/libretro/beetle-lynx-libretro.git
synced 2024-11-26 18:01:38 +00:00
Fix Crowdin config & workflow
Also add new languages
This commit is contained in:
parent
3d2fcc5a55
commit
560423adea
11
.github/workflows/crowdin_prep.yml
vendored
11
.github/workflows/crowdin_prep.yml
vendored
@ -15,15 +15,18 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Java JDK
|
||||
uses: actions/setup-java@v1
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: 18
|
||||
distribution: zulu
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Upload Source
|
||||
shell: bash
|
||||
|
11
.github/workflows/crowdin_translate.yml
vendored
11
.github/workflows/crowdin_translate.yml
vendored
@ -12,15 +12,18 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Java JDK
|
||||
uses: actions/setup-java@v1
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: 18
|
||||
distribution: zulu
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal access token.
|
||||
fetch-depth: 0 # otherwise, there would be errors pushing refs to the destination repository.
|
||||
|
@ -62,7 +62,7 @@ if __name__ == '__main__':
|
||||
translate_txt = translate_txt.replace('<0-59>', f"{minutes}")
|
||||
translate_txt = translate_txt.replace('<0-23>', f"{hour}")
|
||||
translate_txt = translate_txt.replace('# Fridays at , UTC',
|
||||
f"# Fridays at {hour%12}:{minutes} {'AM' if hour < 12 else 'PM'}, UTC")
|
||||
f"# Fridays at {hour%12}:{minutes if minutes > 9 else '0' + str(minutes)} {'AM' if hour < 12 else 'PM'}, UTC")
|
||||
translate_txt = translate_txt.replace("<CORE_NAME>", CORE_NAME)
|
||||
translate_txt = translate_txt.replace('<PATH/TO>/libretro_core_options_intl.h',
|
||||
core_intl_file)
|
||||
|
@ -1,16 +1,14 @@
|
||||
import re
|
||||
|
||||
# 0: full struct; 1: up to & including first []; 2: content between first {}
|
||||
p_struct = re.compile(r'(struct\s*[a-zA-Z0-9_\s]+\[])\s*'
|
||||
r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
|
||||
# 0: full struct; 1: up to & including first []; 2 & 3: comments; 4: content between first {}
|
||||
p_struct = re.compile(r'(\bstruct\b\s*[a-zA-Z0-9_\s]+\[])\s*' # 1st capturing group
|
||||
r'(?:(?=(\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+))\2\s*)*' # 2nd capturing group
|
||||
r'=\s*' # =
|
||||
r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+)\s*)*'
|
||||
r'{'
|
||||
r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
|
||||
r'((?:.|[\r\n])*?)\{\s*NULL,\s*NULL,\s*NULL\s*(?:.|[\r\n])*?},?(?:.|[\r\n])*?};') # captures full struct, it's beginning and it's content
|
||||
r'(?:(?=(\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+))\3\s*)*' # 3rd capturing group
|
||||
r'{((?:.|[\r\n])*?)\{\s*NULL,\s*NULL,\s*NULL\s*(?:.|[\r\n])*?},?(?:.|[\r\n])*?};') # captures full struct, it's beginning and it's content
|
||||
# 0: type name[]; 1: type; 2: name
|
||||
p_type_name = re.compile(r'(retro_core_option_[a-zA-Z0-9_]+)\s*'
|
||||
r'(option_cats([a-z_]{0,8})|option_defs([a-z_]*))\s*\[]')
|
||||
p_type_name = re.compile(r'(\bretro_core_option_[a-zA-Z0-9_]+)\s*'
|
||||
r'(\boption_cats([a-z_]{0,8})|\boption_defs([a-z_]*))\s*\[]')
|
||||
# 0: full option; 1: key; 2: description; 3: additional info; 4: key/value pairs
|
||||
p_option = re.compile(r'{\s*' # opening braces
|
||||
r'(?:(?:\/\*(?:.|[\r\n])*?\*\/|\/\/.*[\r\n]+|#.*[\r\n]+)\s*)*'
|
||||
@ -78,9 +76,9 @@ p_key_value = re.compile(r'{\s*' # opening braces
|
||||
|
||||
p_masked = re.compile(r'([A-Z_][A-Z0-9_]+)\s*(\"(?:"\s*"|\\\s*|.)*\")')
|
||||
|
||||
p_intl = re.compile(r'(struct retro_core_option_definition \*option_defs_intl\[RETRO_LANGUAGE_LAST]) = {'
|
||||
p_intl = re.compile(r'(\bstruct retro_core_option_definition \*option_defs_intl\[RETRO_LANGUAGE_LAST]) = {'
|
||||
r'((?:.|[\r\n])*?)};')
|
||||
p_set = re.compile(r'static INLINE void libretro_set_core_options\(retro_environment_t environ_cb\)'
|
||||
p_set = re.compile(r'\bstatic INLINE void libretro_set_core_options\(retro_environment_t environ_cb\)'
|
||||
r'(?:.|[\r\n])*?};?\s*#ifdef __cplusplus\s*}\s*#endif')
|
||||
|
||||
p_yaml = re.compile(r'"project_id": "[0-9]+".*\s*'
|
||||
|
@ -134,13 +134,12 @@ def is_viable_non_dupe(text: str, comparison) -> bool:
|
||||
|
||||
|
||||
def is_viable_value(text: str) -> bool:
|
||||
"""text must be longer than 2 ('""'), not 'NULL' and text.lower() not in
|
||||
{'"enabled"', '"disabled"', '"true"', '"false"', '"on"', '"off"'}.
|
||||
"""text must be longer than 2 ('""') and not 'NULL'.
|
||||
|
||||
:param text: String to be tested.
|
||||
:return: bool
|
||||
"""
|
||||
return 2 < len(text) and text != 'NULL' and text.lower() not in ON_OFFS
|
||||
return 2 < len(text) and text != 'NULL'
|
||||
|
||||
|
||||
def create_non_dupe(base_name: str, opt_num: int, comparison) -> str:
|
||||
@ -183,17 +182,17 @@ def get_texts(text: str) -> dict:
|
||||
if lang not in just_string:
|
||||
hash_n_string[lang] = {}
|
||||
just_string[lang] = set()
|
||||
|
||||
is_v2 = False
|
||||
is_v2_definition = 'retro_core_option_v2_definition' == struct_type_name[0]
|
||||
pre_name = ''
|
||||
# info texts format
|
||||
p = cor.p_info
|
||||
if 'retro_core_option_v2_definition' == struct_type_name[0]:
|
||||
is_v2 = True
|
||||
elif 'retro_core_option_v2_category' == struct_type_name[0]:
|
||||
if 'retro_core_option_v2_category' == struct_type_name[0]:
|
||||
# prepend category labels, as they can be the same as option labels
|
||||
pre_name = 'CATEGORY_'
|
||||
# categories have different info texts format
|
||||
p = cor.p_info_cat
|
||||
|
||||
struct_content = struct.group(2)
|
||||
struct_content = struct.group(4)
|
||||
# 0: full option; 1: key; 2: description; 3: additional info; 4: key/value pairs
|
||||
struct_options = cor.p_option.finditer(struct_content)
|
||||
for opt, option in enumerate(struct_options):
|
||||
@ -219,7 +218,7 @@ def get_texts(text: str) -> dict:
|
||||
if option.group(3):
|
||||
infos = option.group(3)
|
||||
option_info = p.finditer(infos)
|
||||
if is_v2:
|
||||
if is_v2_definition:
|
||||
desc1 = next(option_info).group(1)
|
||||
if is_viable_non_dupe(desc1, just_string[lang]):
|
||||
just_string[lang].add(desc1)
|
||||
@ -248,16 +247,21 @@ def get_texts(text: str) -> dict:
|
||||
else:
|
||||
raise ValueError(f'Too few arguments in struct {struct_type_name[1]} option {option.group(1)}!')
|
||||
|
||||
# group 4:
|
||||
# group 4: key/value pairs
|
||||
if option.group(4):
|
||||
for j, kv_set in enumerate(cor.p_key_value.finditer(option.group(4))):
|
||||
set_key, set_value = kv_set.group(1, 2)
|
||||
if not is_viable_value(set_value):
|
||||
if not is_viable_value(set_key):
|
||||
continue
|
||||
# use the key if value not available
|
||||
set_value = set_key
|
||||
if not is_viable_value(set_value):
|
||||
continue
|
||||
# re.fullmatch(r'(?:[+-][0-9]+)+', value[1:-1])
|
||||
if set_value not in just_string[lang] and not re.sub(r'[+-]', '', set_value[1:-1]).isdigit():
|
||||
|
||||
# add only if non-dupe, not translated by RetroArch directly & not purely numeric
|
||||
if set_value not in just_string[lang]\
|
||||
and set_value.lower() not in ON_OFFS\
|
||||
and not re.sub(r'[+-]', '', set_value[1:-1]).isdigit():
|
||||
clean_key = set_key[1:-1]
|
||||
clean_key = remove_special_chars(clean_key).upper().replace(' ', '_')
|
||||
m_h = create_non_dupe(re.sub(r'__+', '_', f"OPTION_VAL_{clean_key}"), opt, hash_n_string[lang])
|
||||
@ -298,8 +302,12 @@ def h2json(file_paths: dict) -> dict:
|
||||
for file_lang in file_paths:
|
||||
if not os.path.isfile(file_paths[file_lang]):
|
||||
continue
|
||||
|
||||
jsons[file_lang] = file_paths[file_lang][:-2] + '.json'
|
||||
file_path = file_paths[file_lang]
|
||||
try:
|
||||
jsons[file_lang] = file_path[:file_path.rindex('.')] + '.json'
|
||||
except ValueError:
|
||||
print(f"File {file_path} has incorrect format! File ending missing?")
|
||||
continue
|
||||
|
||||
p = cor.p_masked
|
||||
|
||||
@ -397,11 +405,11 @@ def get_crowdin_client(dir_path: str) -> str:
|
||||
return jar_path
|
||||
|
||||
|
||||
def create_intl_file(localisation_file_path: str, intl_dir_path: str, text: str, file_path: str) -> None:
|
||||
def create_intl_file(intl_file_path: str, localisations_path: str, text: str, file_path: str) -> None:
|
||||
"""Creates 'libretro_core_options_intl.h' from Crowdin translations.
|
||||
|
||||
:param localisation_file_path: Path to 'libretro_core_options_intl.h'
|
||||
:param intl_dir_path: Path to the intl/<core_name> directory.
|
||||
:param intl_file_path: Path to 'libretro_core_options_intl.h'
|
||||
:param localisations_path: Path to the intl/<core_name> directory.
|
||||
:param text: Content of the 'libretro_core_options.h' being translated.
|
||||
:param file_path: Path to the '_us.h' file, containing the original English texts.
|
||||
:return: None
|
||||
@ -497,10 +505,11 @@ def create_intl_file(localisation_file_path: str, intl_dir_path: str, text: str,
|
||||
'extern "C" {\n' \
|
||||
'#endif\n'
|
||||
|
||||
if os.path.isfile(localisation_file_path):
|
||||
if os.path.isfile(intl_file_path):
|
||||
# copy top of the file for re-use
|
||||
with open(localisation_file_path, 'r', encoding='utf-8') as intl: # libretro_core_options_intl.h
|
||||
with open(intl_file_path, 'r', encoding='utf-8') as intl: # libretro_core_options_intl.h
|
||||
in_text = intl.read()
|
||||
# attempt 1: find the distinct comment header
|
||||
intl_start = re.search(re.escape('/*\n'
|
||||
' ********************************\n'
|
||||
' * Core Option Definitions\n'
|
||||
@ -509,19 +518,22 @@ def create_intl_file(localisation_file_path: str, intl_dir_path: str, text: str,
|
||||
if intl_start:
|
||||
out_txt = in_text[:intl_start.end(0)]
|
||||
else:
|
||||
# attempt 2: if no comment header present, find c++ compiler instruction (it is kind of a must)
|
||||
intl_start = re.search(re.escape('#ifdef __cplusplus\n'
|
||||
'extern "C" {\n'
|
||||
'#endif\n'), in_text)
|
||||
if intl_start:
|
||||
out_txt = in_text[:intl_start.end(0)]
|
||||
# if all attempts fail, use default from above
|
||||
|
||||
# only write to file, if there is anything worthwhile to write!
|
||||
overwrite = False
|
||||
|
||||
# iterate through localisation files
|
||||
files = {}
|
||||
for file in os.scandir(intl_dir_path):
|
||||
for file in os.scandir(localisations_path):
|
||||
files[file.name] = {'is_file': file.is_file(), 'path': file.path}
|
||||
|
||||
for file in sorted(files): # intl/<core_name>/_*
|
||||
if files[file]['is_file'] \
|
||||
and file.startswith('_') \
|
||||
@ -532,6 +544,7 @@ def create_intl_file(localisation_file_path: str, intl_dir_path: str, text: str,
|
||||
struct_groups = cor.p_struct.finditer(text)
|
||||
lang_low = os.path.splitext(file)[0].lower()
|
||||
lang_up = lang_low.upper()
|
||||
# mark each language's section with a comment, for readability
|
||||
out_txt = out_txt + f'/* RETRO_LANGUAGE{lang_up} */\n\n' # /* RETRO_LANGUAGE_NM */
|
||||
|
||||
# copy adjusted translations (makros)
|
||||
@ -544,22 +557,22 @@ def create_intl_file(localisation_file_path: str, intl_dir_path: str, text: str,
|
||||
if 3 > len(struct_type_name): # no language specifier
|
||||
new_decl = re.sub(re.escape(struct_type_name[1]), struct_type_name[1] + lang_low, declaration)
|
||||
else:
|
||||
new_decl = re.sub(re.escape(struct_type_name[2]), lang_low, declaration)
|
||||
if '_us' != struct_type_name[2]:
|
||||
# only use _us constructs - other languages present in the source file are not important
|
||||
continue
|
||||
new_decl = re.sub(re.escape(struct_type_name[2]), lang_low, declaration)
|
||||
|
||||
p = cor.p_info
|
||||
if 'retro_core_option_v2_category' == struct_type_name[0]:
|
||||
p = cor.p_info_cat
|
||||
p = (cor.p_info_cat if 'retro_core_option_v2_category' == struct_type_name[0] else cor.p_info)
|
||||
offset_construct = construct.start(0)
|
||||
# append localised construct name and ' = {'
|
||||
start = construct.end(1) - offset_construct
|
||||
end = construct.start(2) - offset_construct
|
||||
end = construct.start(4) - offset_construct
|
||||
out_txt = out_txt + new_decl + construct.group(0)[start:end]
|
||||
|
||||
content = construct.group(2)
|
||||
# insert macros
|
||||
content = construct.group(4)
|
||||
new_content = cor.p_option.sub(replace_option, content)
|
||||
|
||||
start = construct.end(2) - offset_construct
|
||||
start = construct.end(4) - offset_construct
|
||||
# append macro-filled content and close the construct
|
||||
out_txt = out_txt + new_content + construct.group(0)[start:] + '\n'
|
||||
|
||||
# for v2
|
||||
@ -574,7 +587,7 @@ def create_intl_file(localisation_file_path: str, intl_dir_path: str, text: str,
|
||||
|
||||
# only write to file, if there is anything worthwhile to write!
|
||||
if overwrite:
|
||||
with open(localisation_file_path, 'w', encoding='utf-8') as intl:
|
||||
with open(intl_file_path, 'w', encoding='utf-8') as intl:
|
||||
intl.write(out_txt + '\n#ifdef __cplusplus\n'
|
||||
'}\n#endif\n'
|
||||
'\n#endif')
|
||||
@ -585,7 +598,7 @@ def create_intl_file(localisation_file_path: str, intl_dir_path: str, text: str,
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
if os.path.isfile(sys.argv[1]):
|
||||
if os.path.isfile(sys.argv[1]) or sys.argv[1].endswith('.h'):
|
||||
_temp = os.path.dirname(sys.argv[1])
|
||||
else:
|
||||
_temp = sys.argv[1]
|
||||
|
@ -6,8 +6,8 @@
|
||||
"files":
|
||||
[
|
||||
{
|
||||
"source": "/intl/_core_name_/_us.json",
|
||||
"source": "/_core_name_/_us.json",
|
||||
"dest": "/_core_name_/_core_name_.json",
|
||||
"translation": "/intl/_core_name_/_%two_letters_code%.json",
|
||||
"translation": "/_core_name_/_%two_letters_code%.json",
|
||||
},
|
||||
]
|
||||
|
@ -4,7 +4,7 @@ import core_option_translation as t
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
if t.os.path.isfile(t.sys.argv[1]):
|
||||
if t.os.path.isfile(t.sys.argv[1]) or t.sys.argv[1].endswith('.h'):
|
||||
_temp = t.os.path.dirname(t.sys.argv[1])
|
||||
else:
|
||||
_temp = t.sys.argv[1]
|
||||
|
@ -4,7 +4,7 @@ import core_option_translation as t
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
if t.os.path.isfile(t.sys.argv[1]):
|
||||
if t.os.path.isfile(t.sys.argv[1]) or t.sys.argv[1].endswith('.h'):
|
||||
_temp = t.os.path.dirname(t.sys.argv[1])
|
||||
else:
|
||||
_temp = t.sys.argv[1]
|
||||
|
@ -286,6 +286,11 @@ enum retro_language
|
||||
RETRO_LANGUAGE_INDONESIAN = 24,
|
||||
RETRO_LANGUAGE_SWEDISH = 25,
|
||||
RETRO_LANGUAGE_UKRAINIAN = 26,
|
||||
RETRO_LANGUAGE_CZECH = 27,
|
||||
RETRO_LANGUAGE_CATALAN_VALENCIA = 28,
|
||||
RETRO_LANGUAGE_CATALAN = 29,
|
||||
RETRO_LANGUAGE_BRITISH_ENGLISH = 30,
|
||||
RETRO_LANGUAGE_HUNGARIAN = 31,
|
||||
RETRO_LANGUAGE_LAST,
|
||||
|
||||
/* Ensure sizeof(enum) == sizeof(int) */
|
||||
|
@ -137,6 +137,11 @@ struct retro_core_options_v2 *options_intl[RETRO_LANGUAGE_LAST] = {
|
||||
&options_id, /* RETRO_LANGUAGE_INDONESIAN */
|
||||
&options_sv, /* RETRO_LANGUAGE_SWEDISH */
|
||||
&options_uk, /* RETRO_LANGUAGE_UKRAINIAN */
|
||||
&options_cs, /* RETRO_LANGUAGE_CZECH */
|
||||
&options_val, /* RETRO_LANGUAGE_CATALAN_VALENCIA */
|
||||
&options_ca, /* RETRO_LANGUAGE_CATALAN */
|
||||
&options_en, /* RETRO_LANGUAGE_BRITISH_ENGLISH */
|
||||
&options_hu, /* RETRO_LANGUAGE_HUNGARIAN */
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -99,7 +99,7 @@ struct retro_core_options_v2 options_ar = {
|
||||
|
||||
/* RETRO_LANGUAGE_AST */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_AST NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_AST "Voltiar automáticamente la pantalla"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_AST NULL
|
||||
#define OPTION_VAL_AUTO_AST NULL
|
||||
#define OPTION_VAL_MANUAL_AST NULL
|
||||
@ -161,7 +161,7 @@ struct retro_core_options_v2 options_ast = {
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_CA NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_CA NULL
|
||||
#define OPTION_VAL_AUTO_CA NULL
|
||||
#define OPTION_VAL_AUTO_CA "Automàtic"
|
||||
#define OPTION_VAL_MANUAL_CA NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_CA NULL
|
||||
#define OPTION_VAL_16_CA NULL
|
||||
@ -279,13 +279,13 @@ struct retro_core_options_v2 options_chs = {
|
||||
|
||||
/* RETRO_LANGUAGE_CHT */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_CHT NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_CHT NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_CHT "自動旋轉螢幕"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_CHT "設定旋轉螢幕的模式。設定為 <手動> 時,使用「選擇鍵」調整畫面逆時針旋轉,90度、180度、270度和0度的順序重複切換。"
|
||||
#define OPTION_VAL_AUTO_CHT "自動"
|
||||
#define OPTION_VAL_MANUAL_CHT NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_CHT NULL
|
||||
#define OPTION_VAL_16_CHT NULL
|
||||
#define OPTION_VAL_32_CHT NULL
|
||||
#define OPTION_VAL_MANUAL_CHT "手動"
|
||||
#define LYNX_PIX_FORMAT_LABEL_CHT "色彩格式 (需要重新啟動)"
|
||||
#define OPTION_VAL_16_CHT "16位元 (RGB565)"
|
||||
#define OPTION_VAL_32_CHT "32位元 (RGB8888)"
|
||||
|
||||
struct retro_core_option_v2_category option_cats_cht[] = {
|
||||
{ NULL, NULL, NULL },
|
||||
@ -339,11 +339,11 @@ struct retro_core_options_v2 options_cht = {
|
||||
|
||||
/* RETRO_LANGUAGE_CS */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_CS NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_CS NULL
|
||||
#define OPTION_VAL_AUTO_CS NULL
|
||||
#define OPTION_VAL_MANUAL_CS NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_CS NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_CS "Automatické otáčení obrazovky"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_CS "Prakticky automaticky otáčí orientaci obrazovky a mapování tlačítek pro známé hry. Pokud je nastaveno \"Ruční\", otáčení obrazovky se upravuje stisknutím tlačítka SELECT, jinak lze nastavit pevné otáčení buď na 0, 90, 180 nebo 270 stupňů proti směru hodinových ručiček."
|
||||
#define OPTION_VAL_AUTO_CS "Automatické"
|
||||
#define OPTION_VAL_MANUAL_CS "Manuální"
|
||||
#define LYNX_PIX_FORMAT_LABEL_CS "Formát barev (nutný restart)"
|
||||
#define OPTION_VAL_16_CS NULL
|
||||
#define OPTION_VAL_32_CS NULL
|
||||
|
||||
@ -520,7 +520,7 @@ struct retro_core_options_v2 options_da = {
|
||||
/* RETRO_LANGUAGE_DE */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_DE "Bildschirm automatisch drehen"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_DE NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_DE "Bildschirmausrichtung und Tastenzuordnung für bekannte Spiele automatisch virtuell drehen. Bei der Einstellung „Manuell“ wird die Bildschirmdrehung durch Drücken der SELECT-Taste angepasst, andernfalls kann eine feste Drehung auf 0, 90, 180 oder 270 Grad gegen den Uhrzeigersinn eingestellt werden."
|
||||
#define OPTION_VAL_AUTO_DE "Automatisch"
|
||||
#define OPTION_VAL_MANUAL_DE "Manuell"
|
||||
#define LYNX_PIX_FORMAT_LABEL_DE "Farbformat (Neustart erforderlich)"
|
||||
@ -637,6 +637,66 @@ struct retro_core_options_v2 options_el = {
|
||||
option_defs_el
|
||||
};
|
||||
|
||||
/* RETRO_LANGUAGE_EN */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_EN NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_EN NULL
|
||||
#define OPTION_VAL_AUTO_EN NULL
|
||||
#define OPTION_VAL_MANUAL_EN NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_EN "Colour Format (Restart Required)"
|
||||
#define OPTION_VAL_16_EN NULL
|
||||
#define OPTION_VAL_32_EN NULL
|
||||
|
||||
struct retro_core_option_v2_category option_cats_en[] = {
|
||||
{ NULL, NULL, NULL },
|
||||
};
|
||||
struct retro_core_option_v2_definition option_defs_en[] = {
|
||||
|
||||
/* These variable names and possible values constitute an ABI with ZMZ (ZSNES Libretro player).
|
||||
* Changing "Show layer 1" is fine, but don't change "layer_1"/etc or the possible values ("Yes|No").
|
||||
* Adding more variables and rearranging them is safe. */
|
||||
|
||||
{
|
||||
"lynx_rot_screen",
|
||||
LYNX_ROT_SCREEN_LABEL_EN,
|
||||
NULL,
|
||||
LYNX_ROT_SCREEN_INFO_0_EN,
|
||||
NULL,
|
||||
NULL,
|
||||
{
|
||||
{ "auto", OPTION_VAL_AUTO_EN },
|
||||
{ "manual", OPTION_VAL_MANUAL_EN },
|
||||
{ "0", NULL },
|
||||
{ "90", NULL },
|
||||
{ "180", NULL },
|
||||
{ "270", NULL },
|
||||
{ NULL, NULL},
|
||||
},
|
||||
"auto",
|
||||
},
|
||||
|
||||
{
|
||||
"lynx_pix_format",
|
||||
LYNX_PIX_FORMAT_LABEL_EN,
|
||||
NULL,
|
||||
"",
|
||||
NULL,
|
||||
NULL,
|
||||
{
|
||||
{ "16", OPTION_VAL_16_EN },
|
||||
{ "32", OPTION_VAL_32_EN },
|
||||
{ NULL, NULL},
|
||||
},
|
||||
"16",
|
||||
},
|
||||
|
||||
{ NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL },
|
||||
};
|
||||
struct retro_core_options_v2 options_en = {
|
||||
option_cats_en,
|
||||
option_defs_en
|
||||
};
|
||||
|
||||
/* RETRO_LANGUAGE_EO */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_EO NULL
|
||||
@ -759,13 +819,13 @@ struct retro_core_options_v2 options_es = {
|
||||
|
||||
/* RETRO_LANGUAGE_FA */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_FA NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_FA NULL
|
||||
#define OPTION_VAL_AUTO_FA NULL
|
||||
#define OPTION_VAL_MANUAL_FA NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_FA NULL
|
||||
#define OPTION_VAL_16_FA NULL
|
||||
#define OPTION_VAL_32_FA NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_FA "چرخش خودکار نمایشگر"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_FA "جهتگیری نمایشگر و نگاشت دکمهها را به طور خودکار برای بازیهای شناخته شده بچرخانید. هنگامی که روی «دستی» تنظیم میشود، چرخش صفحه با فشاردادن دکمه SELECT تنظیم میشود، در غیر این صورت یک چرخش ثابت را میتوان روی ۰، ۹۰، ۱۸۰ یا ۲۷۰ درجه پادساعتگرد تنظیم کرد."
|
||||
#define OPTION_VAL_AUTO_FA "خودکار"
|
||||
#define OPTION_VAL_MANUAL_FA "دستی"
|
||||
#define LYNX_PIX_FORMAT_LABEL_FA "فرمت رنگ (نیازمند بازآغاز)"
|
||||
#define OPTION_VAL_16_FA "۱۶-بیتی (RGB۵۶۵)"
|
||||
#define OPTION_VAL_32_FA "۳۲-بیتی (RGB۸۸۸۸)"
|
||||
|
||||
struct retro_core_option_v2_category option_cats_fa[] = {
|
||||
{ NULL, NULL, NULL },
|
||||
@ -820,7 +880,7 @@ struct retro_core_options_v2 options_fa = {
|
||||
/* RETRO_LANGUAGE_FI */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_FI "Näytön automaattinen kierto"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_FI NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_FI "Kierrä virtuaalisesti näytön ja painikkeiden suuntaa automaattisesti tunnetuille peleille. Kun asetus on \"Manuaalinen\", näytön kierto säädetään painamalla SELECT-painiketta, muuten kiinteä kierto voidaan asettaa joko 0, 90, 180, tai 270 asteen vastapäivään."
|
||||
#define OPTION_VAL_AUTO_FI "Automaattinen"
|
||||
#define OPTION_VAL_MANUAL_FI "Manuaalinen"
|
||||
#define LYNX_PIX_FORMAT_LABEL_FI "Väriformaatti (Uudelleenkäynnistys vaaditaan)"
|
||||
@ -1057,15 +1117,75 @@ struct retro_core_options_v2 options_he = {
|
||||
option_defs_he
|
||||
};
|
||||
|
||||
/* RETRO_LANGUAGE_HR */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_HR NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_HR NULL
|
||||
#define OPTION_VAL_AUTO_HR NULL
|
||||
#define OPTION_VAL_MANUAL_HR NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_HR NULL
|
||||
#define OPTION_VAL_16_HR NULL
|
||||
#define OPTION_VAL_32_HR NULL
|
||||
|
||||
struct retro_core_option_v2_category option_cats_hr[] = {
|
||||
{ NULL, NULL, NULL },
|
||||
};
|
||||
struct retro_core_option_v2_definition option_defs_hr[] = {
|
||||
|
||||
/* These variable names and possible values constitute an ABI with ZMZ (ZSNES Libretro player).
|
||||
* Changing "Show layer 1" is fine, but don't change "layer_1"/etc or the possible values ("Yes|No").
|
||||
* Adding more variables and rearranging them is safe. */
|
||||
|
||||
{
|
||||
"lynx_rot_screen",
|
||||
LYNX_ROT_SCREEN_LABEL_HR,
|
||||
NULL,
|
||||
LYNX_ROT_SCREEN_INFO_0_HR,
|
||||
NULL,
|
||||
NULL,
|
||||
{
|
||||
{ "auto", OPTION_VAL_AUTO_HR },
|
||||
{ "manual", OPTION_VAL_MANUAL_HR },
|
||||
{ "0", NULL },
|
||||
{ "90", NULL },
|
||||
{ "180", NULL },
|
||||
{ "270", NULL },
|
||||
{ NULL, NULL},
|
||||
},
|
||||
"auto",
|
||||
},
|
||||
|
||||
{
|
||||
"lynx_pix_format",
|
||||
LYNX_PIX_FORMAT_LABEL_HR,
|
||||
NULL,
|
||||
"",
|
||||
NULL,
|
||||
NULL,
|
||||
{
|
||||
{ "16", OPTION_VAL_16_HR },
|
||||
{ "32", OPTION_VAL_32_HR },
|
||||
{ NULL, NULL},
|
||||
},
|
||||
"16",
|
||||
},
|
||||
|
||||
{ NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL },
|
||||
};
|
||||
struct retro_core_options_v2 options_hr = {
|
||||
option_cats_hr,
|
||||
option_defs_hr
|
||||
};
|
||||
|
||||
/* RETRO_LANGUAGE_HU */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_HU NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_HU NULL
|
||||
#define OPTION_VAL_AUTO_HU NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_HU "Automatikus képernyőforgatás"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_HU "A képernyőirány és gombkiosztás virtuális elforgatása az ismert játékokhoz automatikusan. \"Kézi\" esetben a Select gomb lenyomásával forgatható, vagy fix elforgatás választható 0, 90, 180, vagy 270 fokban az óramutató járásával ellentétesen."
|
||||
#define OPTION_VAL_AUTO_HU "Automatikus"
|
||||
#define OPTION_VAL_MANUAL_HU "Kézi"
|
||||
#define LYNX_PIX_FORMAT_LABEL_HU NULL
|
||||
#define OPTION_VAL_16_HU NULL
|
||||
#define OPTION_VAL_32_HU NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_HU "Színformátum (újraindítás szükséges)"
|
||||
#define OPTION_VAL_16_HU "16 bites (RGB565)"
|
||||
#define OPTION_VAL_32_HU "32 bites (RGB8888)"
|
||||
|
||||
struct retro_core_option_v2_category option_cats_hu[] = {
|
||||
{ NULL, NULL, NULL },
|
||||
@ -1121,7 +1241,7 @@ struct retro_core_options_v2 options_hu = {
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_ID NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_ID NULL
|
||||
#define OPTION_VAL_AUTO_ID NULL
|
||||
#define OPTION_VAL_AUTO_ID "Otomatis"
|
||||
#define OPTION_VAL_MANUAL_ID NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_ID NULL
|
||||
#define OPTION_VAL_16_ID NULL
|
||||
@ -1600,10 +1720,10 @@ struct retro_core_options_v2 options_oc = {
|
||||
/* RETRO_LANGUAGE_PL */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_PL "Autoobracanie ekranu"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_PL "Praktycznie obracaj orientację ekranu i mapowanie przycisków automatycznie dla znanych gier. Po ustawieniu na 'Ręczny', obrót ekranu jest regulowany poprzez naciśnięcie przycisku SELECT w przeciwnym razie stały obrót można ustawić na 0, 90, 180 lub 270 stopni w kierunku przeciwnym do ruchu wskazówek zegara."
|
||||
#define LYNX_ROT_SCREEN_INFO_0_PL "Automatycznie obracaj orietancję ekranu i przypisania klawiszy dla znanych gier. Po ustawieniu na 'Ręcznie', obrót ekranu jest regulowany poprzez naciśnięcie przycisku SELECT, w przeciwnym wypadku stałą wartość obrótu można ustawić na 0, 90, 180 lub 270 stopni w kierunku przeciwnym do ruchu wskazówek zegara."
|
||||
#define OPTION_VAL_AUTO_PL NULL
|
||||
#define OPTION_VAL_MANUAL_PL "Ręcznie"
|
||||
#define LYNX_PIX_FORMAT_LABEL_PL NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_PL "Format Kolorów (Wymagany Restart)"
|
||||
#define OPTION_VAL_16_PL NULL
|
||||
#define OPTION_VAL_32_PL NULL
|
||||
|
||||
@ -1719,11 +1839,11 @@ struct retro_core_options_v2 options_pt_br = {
|
||||
|
||||
/* RETRO_LANGUAGE_PT_PT */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_PT_PT NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_PT_PT NULL
|
||||
#define OPTION_VAL_AUTO_PT_PT NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_PT_PT "Rodar automaticamente o ecrã"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_PT_PT "Virtualmente girar a orientação da tela e mapeamentos de botões automaticamente para jogos conhecidos. Quando definido como 'Manual', a rotação da tela é ajustada pressionando o botão SELECT, caso contrário, uma rotação fixa pode ser definida para 0, 90, 180 ou 270 graus no sentido anti-horário."
|
||||
#define OPTION_VAL_AUTO_PT_PT "Automático"
|
||||
#define OPTION_VAL_MANUAL_PT_PT NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_PT_PT NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_PT_PT "Formato de cores (reinicialização necessária)"
|
||||
#define OPTION_VAL_16_PT_PT NULL
|
||||
#define OPTION_VAL_32_PT_PT NULL
|
||||
|
||||
@ -1777,70 +1897,10 @@ struct retro_core_options_v2 options_pt_pt = {
|
||||
option_defs_pt_pt
|
||||
};
|
||||
|
||||
/* RETRO_LANGUAGE_RO */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_RO NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_RO NULL
|
||||
#define OPTION_VAL_AUTO_RO NULL
|
||||
#define OPTION_VAL_MANUAL_RO NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_RO NULL
|
||||
#define OPTION_VAL_16_RO NULL
|
||||
#define OPTION_VAL_32_RO NULL
|
||||
|
||||
struct retro_core_option_v2_category option_cats_ro[] = {
|
||||
{ NULL, NULL, NULL },
|
||||
};
|
||||
struct retro_core_option_v2_definition option_defs_ro[] = {
|
||||
|
||||
/* These variable names and possible values constitute an ABI with ZMZ (ZSNES Libretro player).
|
||||
* Changing "Show layer 1" is fine, but don't change "layer_1"/etc or the possible values ("Yes|No").
|
||||
* Adding more variables and rearranging them is safe. */
|
||||
|
||||
{
|
||||
"lynx_rot_screen",
|
||||
LYNX_ROT_SCREEN_LABEL_RO,
|
||||
NULL,
|
||||
LYNX_ROT_SCREEN_INFO_0_RO,
|
||||
NULL,
|
||||
NULL,
|
||||
{
|
||||
{ "auto", OPTION_VAL_AUTO_RO },
|
||||
{ "manual", OPTION_VAL_MANUAL_RO },
|
||||
{ "0", NULL },
|
||||
{ "90", NULL },
|
||||
{ "180", NULL },
|
||||
{ "270", NULL },
|
||||
{ NULL, NULL},
|
||||
},
|
||||
"auto",
|
||||
},
|
||||
|
||||
{
|
||||
"lynx_pix_format",
|
||||
LYNX_PIX_FORMAT_LABEL_RO,
|
||||
NULL,
|
||||
"",
|
||||
NULL,
|
||||
NULL,
|
||||
{
|
||||
{ "16", OPTION_VAL_16_RO },
|
||||
{ "32", OPTION_VAL_32_RO },
|
||||
{ NULL, NULL},
|
||||
},
|
||||
"16",
|
||||
},
|
||||
|
||||
{ NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL },
|
||||
};
|
||||
struct retro_core_options_v2 options_ro = {
|
||||
option_cats_ro,
|
||||
option_defs_ro
|
||||
};
|
||||
|
||||
/* RETRO_LANGUAGE_RU */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_RU "Автоповорот экрана"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_RU NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_RU "Автоматический поворот экрана и раскладки кнопок для определённых игр. Поворот экрана настраивается кнопкой SELECT в режиме 'Вручную' или устанавливается на фиксированное значение в 0, 90, 180 или 270 градусов против часовой стрелки."
|
||||
#define OPTION_VAL_AUTO_RU "Авто"
|
||||
#define OPTION_VAL_MANUAL_RU "Вручную"
|
||||
#define LYNX_PIX_FORMAT_LABEL_RU "Глубина цвета (требуется перезапуск)"
|
||||
@ -2140,7 +2200,7 @@ struct retro_core_options_v2 options_sv = {
|
||||
/* RETRO_LANGUAGE_TR */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_TR "Ekranı Otomatik Döndür"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_TR NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_TR "Bilinen oyunlar için ekran yönünü ve düğme eşlemelerini sanal olarak döndürün. 'El ile' olarak ayarlandığında, SELECT düğmesine basılarak ekran dönüşü ayarlanır, öyle değilse sabit bir dönüş saat yönünün tersine 0, 90, 180 veya 270 dereceye ayarlanabilir."
|
||||
#define OPTION_VAL_AUTO_TR "Otomatik"
|
||||
#define OPTION_VAL_MANUAL_TR "El İle"
|
||||
#define LYNX_PIX_FORMAT_LABEL_TR "Renk Biçimi (Yeniden Başlatılmalı)"
|
||||
@ -2199,11 +2259,11 @@ struct retro_core_options_v2 options_tr = {
|
||||
|
||||
/* RETRO_LANGUAGE_UK */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_UK NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_UK NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_UK "Автоповорот екрана"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_UK "По суті, поворот орієнтації екрану та розташування кнопок автоматично для відомих ігор. Якщо встановлено \"Вручну\", обертання екрана визначається за допомогою кнопки SELECT, інакше фіксований поворот можна встановити на 0, 90, 180 або 270 градусів проти годинникової стрілки."
|
||||
#define OPTION_VAL_AUTO_UK "Авто"
|
||||
#define OPTION_VAL_MANUAL_UK "Ручний"
|
||||
#define LYNX_PIX_FORMAT_LABEL_UK NULL
|
||||
#define OPTION_VAL_MANUAL_UK "Вручну"
|
||||
#define LYNX_PIX_FORMAT_LABEL_UK "Формат кольору (потрібний перезапуск)"
|
||||
#define OPTION_VAL_16_UK NULL
|
||||
#define OPTION_VAL_32_UK NULL
|
||||
|
||||
@ -2259,13 +2319,13 @@ struct retro_core_options_v2 options_uk = {
|
||||
|
||||
/* RETRO_LANGUAGE_VAL */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_VAL NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_VAL "Rotació automàtica de la pantalla"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_VAL "Gira virtualment l'orientació de la pantalla i el mapejat dels botons automàticament per a jocs coneguts. Quan s'ajusta com a \"Manual\", la rotació de la pantalla canvia prement el botó SELECT, en cas contrari, es pot definir una rotació fixa a 0, 90, 180 o 270 graus en sentit contrari a les agulles del rellotge."
|
||||
#define OPTION_VAL_AUTO_VAL NULL
|
||||
#define OPTION_VAL_MANUAL_VAL NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_VAL NULL
|
||||
#define OPTION_VAL_16_VAL NULL
|
||||
#define OPTION_VAL_32_VAL NULL
|
||||
#define OPTION_VAL_AUTO_VAL "Selecció automàtica"
|
||||
#define OPTION_VAL_MANUAL_VAL "Selecció manual"
|
||||
#define LYNX_PIX_FORMAT_LABEL_VAL "Format de color (requerix reiniciar)"
|
||||
#define OPTION_VAL_16_VAL "16 bits (RGB565)"
|
||||
#define OPTION_VAL_32_VAL "32 bits (RGB8888)"
|
||||
|
||||
struct retro_core_option_v2_category option_cats_val[] = {
|
||||
{ NULL, NULL, NULL },
|
||||
@ -2319,13 +2379,13 @@ struct retro_core_options_v2 options_val = {
|
||||
|
||||
/* RETRO_LANGUAGE_VN */
|
||||
|
||||
#define LYNX_ROT_SCREEN_LABEL_VN NULL
|
||||
#define LYNX_ROT_SCREEN_INFO_0_VN NULL
|
||||
#define LYNX_ROT_SCREEN_LABEL_VN "Tự động xoay màn hình"
|
||||
#define LYNX_ROT_SCREEN_INFO_0_VN "Tự động xoay hướng màn hình và chọn nút cho các trò chơi đã biết. Khi được đặt thành 'Thủ công', xoay màn hình được điều chỉnh bằng cách nhấn nút CHỌN, nếu không, xoay cố định có thể được đặt thành 0, 90, 180 hoặc 270 độ ngược chiều kim đồng hồ."
|
||||
#define OPTION_VAL_AUTO_VN "Tự động"
|
||||
#define OPTION_VAL_MANUAL_VN "Thủ công"
|
||||
#define LYNX_PIX_FORMAT_LABEL_VN NULL
|
||||
#define OPTION_VAL_16_VN NULL
|
||||
#define OPTION_VAL_32_VN NULL
|
||||
#define LYNX_PIX_FORMAT_LABEL_VN "Định dạng màu (Yêu cầu khởi động lại)"
|
||||
#define OPTION_VAL_16_VN "16-Bit màu (RGB565)"
|
||||
#define OPTION_VAL_32_VN "32-Bit màu (RGB8888)"
|
||||
|
||||
struct retro_core_option_v2_category option_cats_vn[] = {
|
||||
{ NULL, NULL, NULL },
|
||||
|
Loading…
Reference in New Issue
Block a user