-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit a24e4fa
Showing
7 changed files
with
585 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# This file is used to ignore files which are generated | ||
# ---------------------------------------------------------------------------- | ||
|
||
*~ | ||
*.autosave | ||
*.a | ||
*.core | ||
*.moc | ||
*.o | ||
*.obj | ||
*.orig | ||
*.rej | ||
*.so | ||
*.so.* | ||
*_pch.h.cpp | ||
*_resource.rc | ||
*.qm | ||
.#* | ||
*.*# | ||
core | ||
!core/ | ||
tags | ||
.DS_Store | ||
.directory | ||
*.debug | ||
Makefile* | ||
*.prl | ||
*.app | ||
moc_*.cpp | ||
ui_*.h | ||
qrc_*.cpp | ||
Thumbs.db | ||
*.res | ||
*.rc | ||
/.qmake.cache | ||
/.qmake.stash | ||
|
||
# qtcreator generated files | ||
*.pro.user* | ||
|
||
# xemacs temporary files | ||
*.flc | ||
|
||
# Vim temporary files | ||
.*.swp | ||
|
||
# Visual Studio generated files | ||
*.ib_pdb_index | ||
*.idb | ||
*.ilk | ||
*.pdb | ||
*.sln | ||
*.suo | ||
*.vcproj | ||
*vcproj.*.*.user | ||
*.ncb | ||
*.sdf | ||
*.opensdf | ||
*.vcxproj | ||
*vcxproj.* | ||
|
||
# MinGW generated files | ||
*.Debug | ||
*.Release | ||
|
||
# Python byte code | ||
*.pyc | ||
|
||
# Binaries | ||
# -------- | ||
*.dll | ||
*.exe | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
project(locales C) | ||
cmake_minimum_required(VERSION 2.8) | ||
list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) | ||
set(LOCALE_SOURCES locale.c categories.c categories.h) | ||
add_executable(locale ${LOCALE_SOURCES}) | ||
add_subdirectory(po) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
#include "categories.h" | ||
#include <stdlib.h> | ||
#include <string.h> | ||
|
||
struct cat_item lc_time_cats [] = | ||
{ | ||
{ABDAY_1,"abday",CAT_TYPE_STRINGARRAY,ABDAY_1,ABDAY_7}, | ||
{DAY_1,"day",CAT_TYPE_STRINGARRAY,DAY_1,DAY_7}, | ||
{ABMON_1,"abmon",CAT_TYPE_STRINGARRAY,ABMON_1,ABMON_12}, | ||
{MON_1,"mon",CAT_TYPE_STRINGARRAY,MON_1,MON_12}, | ||
{AM_STR,"am_pm", CAT_TYPE_STRINGARRAY,AM_STR,PM_STR}, | ||
{D_T_FMT,"d_t_fmt", CAT_TYPE_STRING,0,0}, | ||
{D_FMT,"d_fmt", CAT_TYPE_STRING,0,0}, | ||
{T_FMT,"t_fmt", CAT_TYPE_STRING,0,0}, | ||
{ERA,"era", CAT_TYPE_STRING,0,0}, | ||
{ERA_D_FMT,"era_d_fmt", CAT_TYPE_STRING,0,0}, | ||
{ALT_DIGITS,"alt_digits", CAT_TYPE_STRING,0,0}, | ||
{ERA_D_T_FMT,"era_d_t_fmt", CAT_TYPE_STRING,0,0}, | ||
{ERA_T_FMT,"era_t_fmt", CAT_TYPE_STRING,0,0}, | ||
{0,"", CAT_TYPE_END,0,0} | ||
}; | ||
|
||
struct cat_item lc_ctype_cats [] = | ||
{ | ||
{CODESET, "charmap", CAT_TYPE_STRING,0,0}, | ||
{0,"", CAT_TYPE_END,0,0} | ||
}; | ||
|
||
struct cat_item lc_messages_cats [] = | ||
{ | ||
{YESEXPR, "yesexpr",CAT_TYPE_STRING,0,0}, | ||
{NOEXPR, "noexpr",CAT_TYPE_STRING,0,0}, | ||
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
{YESSTR, "yesstr",CAT_TYPE_STRING,0,0}, | ||
{NOSTR, "nostr",CAT_TYPE_STRING,0,0}, | ||
#endif | ||
{0,"", CAT_TYPE_END,0,0} | ||
}; | ||
|
||
struct cat_item lc_numeric_cats [] = | ||
{ | ||
{RADIXCHAR, "decimal_point",CAT_TYPE_STRING,0,0}, | ||
{THOUSEP, "thousands_sep",CAT_TYPE_STRING,0,0}, | ||
{0,"", CAT_TYPE_END,0,0} | ||
}; | ||
|
||
struct cat_item lc_monetary_cats [] = | ||
{ | ||
{CRNCYSTR, "crncystr",CAT_TYPE_STRING,0,0}, | ||
{0,"", CAT_TYPE_END,0,0} | ||
}; | ||
|
||
struct cat_item lc_collate_cats [] = | ||
{ | ||
{0,"", CAT_TYPE_END,0,0} | ||
}; | ||
|
||
struct cat_item* cats[] = | ||
{ | ||
lc_ctype_cats, | ||
lc_numeric_cats, | ||
lc_time_cats, | ||
lc_collate_cats, | ||
lc_monetary_cats, | ||
lc_messages_cats | ||
}; | ||
|
||
const struct cat_item get_cat_item_for_name(const char *name) | ||
{ | ||
struct cat_item invalid = {0,"", CAT_TYPE_END,0,0}; | ||
for(int i = 0; i < LC_ALL; i++) | ||
{ | ||
for(int j = 0; cats[i][j].type != CAT_TYPE_END; j++) | ||
{ | ||
if(!strcmp(name,cats[i][j].name)) | ||
return cats[i][j]; | ||
} | ||
} | ||
return invalid; | ||
} | ||
|
||
const struct cat_item* get_cat_for_locale_cat(int locale_cat) | ||
{ | ||
return cats[locale_cat]; | ||
} | ||
|
||
int get_cat_num_for_name(const char* cat_name) | ||
{ | ||
if (!strcmp(cat_name,"LC_CTYPE")) | ||
return LC_CTYPE; | ||
if (!strcmp(cat_name,"LC_NUMERIC")) | ||
return LC_NUMERIC; | ||
if (!strcmp(cat_name,"LC_TIME")) | ||
return LC_TIME; | ||
if (!strcmp(cat_name,"LC_COLLATE")) | ||
return LC_COLLATE; | ||
if (!strcmp(cat_name,"LC_MONETARY")) | ||
return LC_MONETARY; | ||
if (!strcmp(cat_name,"LC_MESSAGES")) | ||
return LC_MESSAGES; | ||
return LC_INVAL; | ||
} | ||
|
||
const char *get_name_for_cat(int cat_no) | ||
{ | ||
if (cat_no == LC_CTYPE) | ||
return "LC_CTYPE"; | ||
if (cat_no == LC_NUMERIC) | ||
return "LC_NUMERIC"; | ||
if (cat_no == LC_TIME) | ||
return "LC_TIME"; | ||
if (cat_no == LC_COLLATE) | ||
return "LC_COLLATE"; | ||
if (cat_no == LC_MONETARY) | ||
return "LC_MONETARY"; | ||
if (cat_no == LC_MESSAGES) | ||
return "LC_MESSAGES"; | ||
return ""; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#ifndef CATEGORIES_H | ||
#define CATEGORIES_H | ||
|
||
#include <locale.h> | ||
#include <langinfo.h> | ||
|
||
#define CAT_TYPE_STRING 0 | ||
#define CAT_TYPE_STRINGARRAY 1 | ||
#define CAT_TYPE_STRINGLIST 2 | ||
#define CAT_TYPE_BYTE 3 | ||
#define CAT_TYPE_BYTEARRAY 4 | ||
#define CAT_TYPE_WORD 4 | ||
#define CAT_TYPE_WORDARRAY 5 | ||
#define CAT_TYPE_END 6 | ||
|
||
#define LC_INVAL -1 | ||
|
||
typedef int cat_type; | ||
|
||
struct cat_item | ||
{ | ||
nl_item id; | ||
const char* name; | ||
cat_type type; | ||
int min; | ||
int max; | ||
}; | ||
const struct cat_item get_cat_item_for_name(const char* name); | ||
const struct cat_item* get_cat_for_locale_cat(int locale_cat); | ||
int get_cat_num_for_name(const char *cat_name); | ||
const char* get_name_for_cat(int cat_no); | ||
#endif // CATEGORIES_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
# Translations.cmake, CMake macros written for Marlin, feel free to re-use them | ||
|
||
macro (add_translations_directory NLS_PACKAGE LOCPATH) | ||
add_custom_target (i18n ALL COMMENT ?Building i18n messages.?) | ||
find_program (MSGFMT_EXECUTABLE msgfmt) | ||
# be sure that all languages are present | ||
# Using all usual languages code from https://www.gnu.org/software/gettext/manual/html_node/Language-Codes.html#Language-Codes | ||
# Rare language codes should be added on-demand. | ||
file(STRINGS LOCALES LANGUAGES_NEEDED) | ||
# set (LANGUAGES_NEEDED aa ab ae af ak am an ar as ast av ay az ba be bg bh bi bm bn bo br bs ca ce ch ckb co cr cs cu cv cy da de dv dz ee el en_AU en_CA en_GB eo es et eu fa ff fi fj fo fr fr_CA fy ga gd gl gn gu gv ha he hi ho hr ht hu hy hz ia id ie ig ii ik io is it iu ja jv ka kg ki kj kk kl km kn ko kr ks ku kv kw ky la lb lg li ln lo lt lu lv mg mh mi mk ml mn mo mr ms mt my na nb nd ne ng nl nn nb nr nv ny oc oj om or os pa pi pl ps pt pt_BR qu rm rn ro ru rue rw sa sc sd se sg si sk sl sm sma sn so sq sr ss st su sv sw ta te tg th ti tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa wo xh yi yo za zh zh_CN zh_HK zh_TW zu) | ||
# string (REPLACE ";" " " LINGUAS "${LANGUAGES_NEEDED}") | ||
# configure_file (${CMAKE_CURRENT_SOURCE_DIR}/LINGUAS.in ${CMAKE_CURRENT_BINARY_DIR}/LINGUAS) | ||
foreach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED}) | ||
create_po_file (${LANGUAGE_NEEDED}) | ||
endforeach (LANGUAGE_NEEDED ${LANGUAGES_NEEDED}) | ||
# generate .mo from .po | ||
file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po) | ||
foreach (PO_INPUT ${PO_FILES}) | ||
get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME_WE) | ||
set (MO_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.mo) | ||
set (PO_COPY ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.po) | ||
file (COPY ${PO_INPUT} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) | ||
add_custom_command (TARGET i18n COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_OUTPUT} ${PO_INPUT}) | ||
|
||
install (FILES ${MO_OUTPUT} DESTINATION | ||
${LOCPATH}) | ||
endforeach (PO_INPUT ${PO_FILES}) | ||
endmacro (add_translations_directory) | ||
|
||
# Apply the right default template. | ||
macro (create_po_file LANGUAGE_NEEDED) | ||
set (FILE ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po) | ||
if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE_NEEDED}.po) | ||
file (APPEND ${FILE} "msgid \"\"\n") | ||
file (APPEND ${FILE} "msgstr \"\"\n") | ||
file (APPEND ${FILE} "\"MIME-Version: 1.0\\n\"\n") | ||
file (APPEND ${FILE} "\"Content-Type: text/plain; charset=UTF-8\\n\"\n") | ||
|
||
if ("${LANGUAGE_NEEDED}" STREQUAL "ja" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "vi" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "ko") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "en" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "de" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "nl" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "sv" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "nb" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "nn" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "nb" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "no" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "fo" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "es" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "pt" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "it" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "bg" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "he" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "fi" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "et" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "eo" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "hu" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "tr" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "es") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n != 1;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "fr" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "fr_CA" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "pt_BR") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=2; plural=n>1;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "lv") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "ro") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "lt") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "ru" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "uk" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "be" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "sr" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "hr") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "cs" | ||
OR "${LANGUAGE_NEEDED}" STREQUAL "sk") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "pl") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\\n\"\n") | ||
elseif ("${LANGUAGE_NEEDED}" STREQUAL "sl") | ||
file (APPEND ${FILE} "\"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\\n\"\n") | ||
endif () | ||
|
||
endif () | ||
endmacro (create_po_file) | ||
|
||
macro (add_translations_catalog NLS_PACKAGE) | ||
add_custom_target (pot COMMENT ?Building translation catalog.?) | ||
find_program (XGETTEXT_EXECUTABLE xgettext) | ||
|
||
set(C_SOURCE "") | ||
|
||
foreach(FILES_INPUT ${ARGN}) | ||
set(BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}) | ||
|
||
file (GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${BASE_DIRECTORY}/*.c) | ||
foreach(C_FILE ${SOURCE_FILES}) | ||
set(C_SOURCE ${C_SOURCE} ${C_FILE}) | ||
endforeach() | ||
endforeach() | ||
|
||
set(BASE_XGETTEXT_COMMAND | ||
${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE} | ||
-o ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot | ||
--add-comments="/" --extract-all --from-code=UTF-8) | ||
|
||
set(CONTINUE_FLAG "") | ||
|
||
IF(NOT "${C_SOURCE}" STREQUAL "") | ||
add_custom_command(TARGET pot WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${BASE_XGETTEXT_COMMAND} ${C_SOURCE}) | ||
set(CONTINUE_FLAG "-j") | ||
ENDIF() | ||
endmacro () |
Oops, something went wrong.