51 #ifdef WITH_INTERNATIONAL
59 static const char **locales =
NULL;
60 static int num_locales = 0;
62 static int num_locales_menu = 0;
64 static void free_locales(
void)
67 int idx = num_locales_menu - 1;
69 MEM_freeN((
void *)locales_menu[idx].identifier);
70 MEM_freeN((
void *)locales_menu[idx].name);
71 MEM_freeN((
void *)locales_menu[idx].description);
81 num_locales = num_locales_menu = 0;
84 static void fill_locales(
void)
103 str = (
char *)line->link;
109 if (
t >= num_locales) {
122 if (num_locales > 0) {
123 locales =
MEM_callocN(num_locales *
sizeof(
char *), __func__);
126 char *loc, *sep1, *sep2, *sep3;
128 str = (
char *)line->link;
135 sep1 = strchr(
str,
':');
138 sep2 = strchr(sep1,
':');
141 locales_menu[idx].
icon = 0;
145 sep3 = strchr(sep2,
':');
161 "Automatically choose system's defined language "
162 "if available, or fall-back to English");
182 locales_menu[idx].
value = locales_menu[idx].
icon = 0;
191 #ifdef WITH_INTERNATIONAL
200 #ifdef WITH_INTERNATIONAL
219 char *old_locale = setlocale(LC_ALL,
NULL);
222 if (setlocale(LC_ALL, lang) ==
NULL) {
223 setenv(
"LANG",
"C", 1);
224 printf(
"Warning: Falling back to the standard locale (\"C\")\n");
226 setlocale(LC_ALL, old_locale);
231 #ifdef WITH_INTERNATIONAL
237 printf(
"%s: 'locale' data path for translations not found, continuing\n", __func__);
245 #ifdef WITH_INTERNATIONAL
251 #ifdef WITH_INTERNATIONAL
253 ((U.language >= ULANGUAGE_AUTO && U.language < num_locales) ? U.language : ULANGUAGE_ENGLISH)
254 # define LOCALE(_id) (locales ? locales[(_id)] : "")
259 #ifdef WITH_INTERNATIONAL
260 int ulang = ULANGUAGE;
261 const char *short_locale =
str ?
str : LOCALE(ulang);
262 const char *short_locale_utf8 =
NULL;
265 if (short_locale[0]) {
267 char *variant = strchr(short_locale,
'@');
269 char *locale =
BLI_strdupn(short_locale, variant - short_locale);
270 short_locale_utf8 =
BLI_sprintfN(
"%s.UTF-8%s", locale, variant);
274 short_locale_utf8 =
BLI_sprintfN(
"%s.UTF-8", short_locale);
291 #ifdef WITH_INTERNATIONAL
293 const char *locale = LOCALE(ULANGUAGE);
294 if (locale[0] ==
'\0') {
322 char **language_country,
323 char **language_variant)
325 char *m1, *m2, *_t =
NULL;
327 m1 = strchr(locale,
'_');
328 m2 = strchr(locale,
'@');
330 if (language || language_variant) {
357 if (language_country) {
362 *language_country =
NULL;
365 if (language_variant) {
370 *language_variant =
NULL;
373 if (_t && !language) {
383 #ifdef WITH_INPUT_IME
const char * BKE_appdir_folder_id(const int folder_id, const char *subfolder)
File and directory operations.
void BLI_file_free_lines(struct LinkNode *lines)
struct LinkNode * BLI_file_read_as_lines(const char *file) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_join_dirfile(char *__restrict dst, const size_t maxlen, const char *__restrict dir, const char *__restrict file) ATTR_NONNULL()
const char * BLI_getenv(const char *env) ATTR_NONNULL(1)
size_t size_t char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
char * BLI_strdupn(const char *str, const size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
size_t BLI_strnlen(const char *str, const size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_strdupcat(const char *__restrict str1, const char *__restrict str2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
void IMB_thumb_clear_translations(void)
Read Guarded memory(de)allocation.
void BLT_lang_locale_explode(const char *locale, char **language, char **country, char **variant, char **language_country, char **language_variant)
const char * BLT_lang_get(void)
bool BLT_lang_is_ime_supported(void)
EnumPropertyItem * BLT_lang_RNA_enum_properties(void)
void BLT_lang_set(const char *str)
const char * bl_locale_get(void)
void bl_locale_set(const char *locale)
void bl_locale_init(const char *_messages_path, const char *_default_domain)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)