2 * Copyright 2003-2012, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
9 #include <LocaleRoster.h>
11 #include <SupportDefs.h>
24 BCatalog(const entry_ref
& catalogOwner
,
25 const char* language
= NULL
,
26 uint32 fingerprint
= 0);
29 const char* GetString(const char* string
,
30 const char* context
= NULL
,
31 const char* comment
= NULL
);
32 const char* GetString(uint32 id
);
34 status_t
GetData(const char* name
, BMessage
* msg
);
35 status_t
GetData(uint32 id
, BMessage
* msg
);
37 status_t
GetSignature(BString
* signature
);
38 status_t
GetLanguage(BString
* language
);
39 status_t
GetFingerprint(uint32
* fingerprint
);
41 status_t
SetTo(const entry_ref
& catalogOwner
,
42 const char* language
= NULL
,
43 uint32 fingerprint
= 0);
45 status_t
InitCheck() const;
46 int32
CountItems() const;
49 BCatalog(const BCatalog
&);
50 const BCatalog
& operator= (const BCatalog
&);
51 // hide assignment and copy-constructor
53 BCatalogData
* fCatalogData
;
54 mutable BLocker fLock
;
58 friend status_t
get_add_on_catalog(BCatalog
*, const char*);
62 #undef B_TRANSLATION_SYSTEM_NAME_CONTEXT
63 #define B_TRANSLATION_SYSTEM_NAME_CONTEXT "System name"
66 #ifndef B_AVOID_TRANSLATION_MACROS
67 // macros for easy catalog-access, define B_AVOID_TRANSLATION_MACROS if
68 // you don't want these (in which case you need to collect the catalog keys
69 // manually, as collectcatkeys won't do it for you):
71 #undef B_TRANSLATION_CONTEXT
72 // In a single application, several strings (e.g. 'Ok') will be used
73 // more than once, in different contexts.
74 // As the application programmer can not know if all translations of
75 // this string will be the same for all languages, each occurrence of
76 // the string must be translated on its own.
77 // Specifying the context explicitly with each string allows the person
78 // translating a catalog to separate these different occurrences of the
79 // same string and tell which strings appears in what context of the
81 // In order to give the translator a useful hint, the application
82 // programmer needs to define B_TRANSLATION_CONTEXT with the context he'd
83 // like to be associated with the strings used in this specifc source file.
85 // #define B_TRANSLATION_CONTEXT "Folder-Window"
86 // Tip: Use a descriptive name of the class implemented in that
89 #ifdef B_COLLECTING_CATKEYS
91 // pull in all the macros used when collecting catalog keys.
92 #include <tools/CollectingCatalog.h>
96 // Translation macros which may be used to shorten translation requests:
98 #define B_TRANSLATE(string) \
99 BLocaleRoster::Default()->GetCatalog()->GetString((string), \
100 B_TRANSLATION_CONTEXT)
102 #undef B_TRANSLATE_CONTEXT
103 #define B_TRANSLATE_CONTEXT(string, context) \
104 BLocaleRoster::Default()->GetCatalog()->GetString((string), (context))
106 #undef B_TRANSLATE_COMMENT
107 #define B_TRANSLATE_COMMENT(string, comment) \
108 BLocaleRoster::Default()->GetCatalog()->GetString((string), \
109 B_TRANSLATION_CONTEXT, (comment))
111 #undef B_TRANSLATE_ALL
112 #define B_TRANSLATE_ALL(string, context, comment) \
113 BLocaleRoster::Default()->GetCatalog()->GetString((string), (context), \
116 #undef B_TRANSLATE_ID
117 #define B_TRANSLATE_ID(id) \
118 BLocaleRoster::Default()->GetCatalog()->GetString((id))
120 #undef B_TRANSLATE_SYSTEM_NAME
121 #define B_TRANSLATE_SYSTEM_NAME(string) \
122 BLocaleRoster::Default()->IsFilesystemTranslationPreferred() \
123 ? BLocaleRoster::Default()->GetCatalog()->GetString((string), \
124 B_TRANSLATION_SYSTEM_NAME_CONTEXT) \
127 // Translation markers which can be used to mark static strings/IDs which
128 // are used as key for translation requests (at other places in the code).
130 #define B_TRANSLATION_CONTEXT "MyDecentApp-Menu"
132 static const char* choices[] = {
133 B_TRANSLATE_MARK("left"),
134 B_TRANSLATE_MARK("right"),
135 B_TRANSLATE_MARK("up"),
136 B_TRANSLATE_MARK("down")
139 void MyClass::AddChoices(BMenu* menu)
141 for (char** ch = choices; *ch != '\0'; ++ch) {
151 #undef B_TRANSLATE_MARK
152 #define B_TRANSLATE_MARK(string) (string)
154 #undef B_TRANSLATE_MARK_CONTEXT
155 #define B_TRANSLATE_MARK_CONTEXT(string, context) (string)
157 #undef B_TRANSLATE_MARK_COMMENT
158 #define B_TRANSLATE_MARK_COMMENT(string, comment) (string)
160 #undef B_TRANSLATE_MARK_ALL
161 #define B_TRANSLATE_MARK_ALL(string, context, comment) (string)
163 #undef B_TRANSLATE_MARK_ID
164 #define B_TRANSLATE_MARK_ID(id) (id)
166 #undef B_TRANSLATE_MARK_SYSTEM_NAME
167 #define B_TRANSLATE_MARK_SYSTEM_NAME(string) (string)
169 // the same for void contexts:
170 #undef B_TRANSLATE_MARK_VOID
171 #define B_TRANSLATE_MARK_VOID(string)
173 #undef B_TRANSLATE_MARK_CONTEXT_VOID
174 #define B_TRANSLATE_MARK_CONTEXT_VOID(string, context)
176 #undef B_TRANSLATE_MARK_COMMENT_VOID
177 #define B_TRANSLATE_MARK_COMMENT_VOID(string, comment)
179 #undef B_TRANSLATE_MARK_ALL_VOID
180 #define B_TRANSLATE_MARK_ALL_VOID(string, context, comment)
182 #undef B_TRANSLATE_MARK_ID_VOID
183 #define B_TRANSLATE_MARK_ID_VOID(id)
185 #undef B_TRANSLATE_MARK_SYSTEM_NAME_VOID
186 #define B_TRANSLATE_MARK_SYSTEM_NAME_VOID(string)
188 // Translation macros which cause collectcatkeys to ignore this key
189 // (useful in combination with the marking macros above):
190 #undef B_TRANSLATE_NOCOLLECT
191 #define B_TRANSLATE_NOCOLLECT(string) \
194 #undef B_TRANSLATE_NOCOLLECT_COMMENT
195 #define B_TRANSLATE_NOCOLLECT_COMMENT(string, comment) \
196 B_TRANSLATE_COMMENT(string, comment)
198 #undef B_TRANSLATE_NOCOLLECT_ALL
199 #define B_TRANSLATE_NOCOLLECT_ALL(string, context, comment) \
200 B_TRANSLATE_ALL(string, context, comment)
202 #undef B_TRANSLATE_NOCOLLECT_ID
203 #define B_TRANSLATE_NOCOLLECT_ID(id) \
206 #undef B_TRANSLATE_NOCOLLECT_SYSTEM_NAME
207 #define B_TRANSLATE_NOCOLLECT_SYSTEM_NAME(string) \
208 B_TRANSLATE_SYSTEM_NAME(string)
210 #endif /* B_COLLECTING_CATKEYS */
212 #endif /* B_AVOID_TRANSLATION_MACROS */
215 #endif /* _CATALOG_H_ */