1 /* 2 * This program is free software; you can redistribute it and/or 3 * modify it under the terms of the GNU General Public License 4 * as published by the Free Software Foundation; either version 2 5 * of the License, or (at your option) any later version. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software Foundation, 14 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 15 * 16 * The Original Code is Copyright (C) 2011 Blender Foundation. 17 * All rights reserved. 18 */ 19 20 /** \file 21 * \ingroup blt 22 */ 23 24 #pragma once 25 26 #include "BLI_utildefines.h" /* for bool type */ 27 28 #define TEXT_DOMAIN_NAME "blender" 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 bool BLT_is_default_context(const char *msgctxt); 35 const char *BLT_pgettext(const char *msgctxt, const char *msgid); 36 37 /* translation */ 38 bool BLT_translate(void); 39 bool BLT_translate_iface(void); 40 bool BLT_translate_tooltips(void); 41 bool BLT_translate_new_dataname(void); 42 const char *BLT_translate_do(const char *msgctxt, const char *msgid); 43 const char *BLT_translate_do_iface(const char *msgctxt, const char *msgid); 44 const char *BLT_translate_do_tooltip(const char *msgctxt, const char *msgid); 45 const char *BLT_translate_do_new_dataname(const char *msgctxt, const char *msgid); 46 47 bool BLT_lang_is_ime_supported(void); 48 49 /* The "translation-marker" macro. */ 50 #define N_(msgid) msgid 51 #define CTX_N_(context, msgid) msgid 52 53 /* Those macros should be used everywhere in UI code. */ 54 #ifdef WITH_INTERNATIONAL 55 /*# define _(msgid) BLT_gettext(msgid) */ 56 # define IFACE_(msgid) BLT_translate_do_iface(NULL, msgid) 57 # define TIP_(msgid) BLT_translate_do_tooltip(NULL, msgid) 58 # define DATA_(msgid) BLT_translate_do_new_dataname(NULL, msgid) 59 # define CTX_IFACE_(context, msgid) BLT_translate_do_iface(context, msgid) 60 # define CTX_TIP_(context, msgid) BLT_translate_do_tooltip(context, msgid) 61 # define CTX_DATA_(context, msgid) BLT_translate_do_new_dataname(context, msgid) 62 #else 63 /*# define _(msgid) msgid */ 64 # define IFACE_(msgid) msgid 65 # define TIP_(msgid) msgid 66 # define DATA_(msgid) msgid 67 # define CTX_IFACE_(context, msgid) ((void)(0 ? (context) : 0), msgid) 68 # define CTX_TIP_(context, msgid) ((void)(0 ? (context) : 0), msgid) 69 # define CTX_DATA_(context, msgid) ((void)(0 ? (context) : 0), msgid) 70 #endif 71 72 /* Helper macro, when we want to define a same msgid for multiple msgctxt... 73 * Does nothing in C, but is "parsed" by our i18n py tools. 74 * XXX Currently limited to at most 16 contexts at once 75 * (but you can call it several times with the same msgid, should you need more contexts!). 76 */ 77 #define BLT_I18N_MSGID_MULTI_CTXT(msgid, ...) 78 79 /****************************************************************************** 80 * All i18n contexts must be defined here. 81 * This is a nice way to be sure not to use a context twice for different 82 * things, and limit the number of existing contexts! 83 * WARNING! Contexts should not be longer than BKE_ST_MAXNAME - 1! 84 */ 85 86 /* Default, void context. 87 * WARNING! The "" context is not the same as no (NULL) context at mo/boost::locale level! 88 * NOTE: We translate BLT_I18NCONTEXT_DEFAULT as BLT_I18NCONTEXT_DEFAULT_BPY in Python, 89 * as we can't use "natural" None value in rna string properties... :/ 90 * The void string "" is also interpreted as BLT_I18NCONTEXT_DEFAULT. 91 * For performance reason, we only use the first char to detect this context, 92 * so other contexts should never start with the same char! 93 */ 94 #define BLT_I18NCONTEXT_DEFAULT NULL 95 #define BLT_I18NCONTEXT_DEFAULT_BPYRNA "*" 96 97 /* Default context for operator names/labels. */ 98 #define BLT_I18NCONTEXT_OPERATOR_DEFAULT "Operator" 99 100 /* Context for events/keymaps (necessary, since those often use one or two letters, 101 * easy to get collisions with other areas...). */ 102 #define BLT_I18NCONTEXT_UI_EVENTS "UI_Events_KeyMaps" 103 104 /* Mark the msgid applies to several elements 105 * (needed in some cases, as english adjectives have no plural mark :( ). */ 106 #define BLT_I18NCONTEXT_PLURAL "Plural" 107 108 /* ID-types contexts. */ 109 /* WARNING! Keep it in sync with idtypes in blenkernel/intern/idcode.c */ 110 #define BLT_I18NCONTEXT_ID_ACTION "Action" 111 #define BLT_I18NCONTEXT_ID_ARMATURE "Armature" 112 #define BLT_I18NCONTEXT_ID_BRUSH "Brush" 113 #define BLT_I18NCONTEXT_ID_CAMERA "Camera" 114 #define BLT_I18NCONTEXT_ID_CACHEFILE "CacheFile" 115 #define BLT_I18NCONTEXT_ID_COLLECTION "Collection" 116 #define BLT_I18NCONTEXT_ID_CURVE "Curve" 117 #define BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE "FreestyleLineStyle" 118 #define BLT_I18NCONTEXT_ID_GPENCIL "GPencil" 119 #define BLT_I18NCONTEXT_ID_HAIR "Hair" 120 #define BLT_I18NCONTEXT_ID_ID "ID" 121 #define BLT_I18NCONTEXT_ID_IMAGE "Image" 122 /*#define BLT_I18NCONTEXT_ID_IPO "Ipo"*/ /* Deprecated */ 123 #define BLT_I18NCONTEXT_ID_SHAPEKEY "Key" 124 #define BLT_I18NCONTEXT_ID_SIMULATION "Simulation" 125 #define BLT_I18NCONTEXT_ID_LIGHT "Light" 126 #define BLT_I18NCONTEXT_ID_LIBRARY "Library" 127 #define BLT_I18NCONTEXT_ID_LATTICE "Lattice" 128 #define BLT_I18NCONTEXT_ID_MATERIAL "Material" 129 #define BLT_I18NCONTEXT_ID_METABALL "Metaball" 130 #define BLT_I18NCONTEXT_ID_MESH "Mesh" 131 #define BLT_I18NCONTEXT_ID_NODETREE "NodeTree" 132 #define BLT_I18NCONTEXT_ID_OBJECT "Object" 133 #define BLT_I18NCONTEXT_ID_PAINTCURVE "PaintCurve" 134 #define BLT_I18NCONTEXT_ID_PALETTE "Palette" 135 #define BLT_I18NCONTEXT_ID_PARTICLESETTINGS "ParticleSettings" 136 #define BLT_I18NCONTEXT_ID_POINTCLOUD "PointCloud" 137 #define BLT_I18NCONTEXT_ID_LIGHTPROBE "LightProbe" 138 #define BLT_I18NCONTEXT_ID_SCENE "Scene" 139 #define BLT_I18NCONTEXT_ID_SCREEN "Screen" 140 #define BLT_I18NCONTEXT_ID_SEQUENCE "Sequence" 141 #define BLT_I18NCONTEXT_ID_SPEAKER "Speaker" 142 #define BLT_I18NCONTEXT_ID_SOUND "Sound" 143 #define BLT_I18NCONTEXT_ID_TEXTURE "Texture" 144 #define BLT_I18NCONTEXT_ID_TEXT "Text" 145 #define BLT_I18NCONTEXT_ID_VFONT "VFont" 146 #define BLT_I18NCONTEXT_ID_VOLUME "Volume" 147 #define BLT_I18NCONTEXT_ID_WORLD "World" 148 #define BLT_I18NCONTEXT_ID_WORKSPACE "WorkSpace" 149 #define BLT_I18NCONTEXT_ID_WINDOWMANAGER "WindowManager" 150 #define BLT_I18NCONTEXT_ID_MOVIECLIP "MovieClip" 151 #define BLT_I18NCONTEXT_ID_MASK "Mask" 152 153 /* Helper for bpy.app.i18n object... */ 154 typedef struct { 155 const char *c_id; 156 const char *py_id; 157 const char *value; 158 } BLT_i18n_contexts_descriptor; 159 160 #define BLT_I18NCONTEXTS_ITEM(ctxt_id, py_id) \ 161 { \ 162 # ctxt_id, py_id, ctxt_id \ 163 } 164 165 #define BLT_I18NCONTEXTS_DESC \ 166 { \ 167 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_DEFAULT, "default_real"), \ 168 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_DEFAULT_BPYRNA, "default"), \ 169 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "operator_default"), \ 170 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_UI_EVENTS, "ui_events_keymaps"), \ 171 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_PLURAL, "plural"), \ 172 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ACTION, "id_action"), \ 173 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ARMATURE, "id_armature"), \ 174 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_BRUSH, "id_brush"), \ 175 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CAMERA, "id_camera"), \ 176 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CACHEFILE, "id_cachefile"), \ 177 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_COLLECTION, "id_collection"), \ 178 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_CURVE, "id_curve"), \ 179 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE, "id_fs_linestyle"), \ 180 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_GPENCIL, "id_gpencil"), \ 181 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_HAIR, "id_hair"), \ 182 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_ID, "id_id"), \ 183 BLT_I18NCONTEXTS_ITEM( \ 184 BLT_I18NCONTEXT_ID_IMAGE, \ 185 "id_image"), /*BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_IPO, "id_ipo"),*/ \ 186 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SHAPEKEY, "id_shapekey"), \ 187 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIGHT, "id_light"), \ 188 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIBRARY, "id_library"), \ 189 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LATTICE, "id_lattice"), \ 190 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MASK, "id_mask"), \ 191 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MATERIAL, "id_material"), \ 192 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_METABALL, "id_metaball"), \ 193 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MESH, "id_mesh"), \ 194 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_MOVIECLIP, "id_movieclip"), \ 195 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_NODETREE, "id_nodetree"), \ 196 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_OBJECT, "id_object"), \ 197 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PAINTCURVE, "id_paintcurve"), \ 198 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PALETTE, "id_palette"), \ 199 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PARTICLESETTINGS, "id_particlesettings"), \ 200 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_POINTCLOUD, "id_pointcloud"), \ 201 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIGHTPROBE, "id_lightprobe"), \ 202 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SCENE, "id_scene"), \ 203 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SCREEN, "id_screen"), \ 204 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SEQUENCE, "id_sequence"), \ 205 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SIMULATION, "id_simulation"), \ 206 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SPEAKER, "id_speaker"), \ 207 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SOUND, "id_sound"), \ 208 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_TEXTURE, "id_texture"), \ 209 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_TEXT, "id_text"), \ 210 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_VFONT, "id_vfont"), \ 211 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_VOLUME, "id_volume"), \ 212 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WORLD, "id_world"), \ 213 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WORKSPACE, "id_workspace"), \ 214 BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WINDOWMANAGER, "id_windowmanager"), \ 215 { \ 216 NULL, NULL, NULL \ 217 } \ 218 } 219 220 #ifdef __cplusplus 221 }; 222 #endif 223