Fix FreeBSD build.
[haiku.git] / headers / os / locale / Catalog.h
blob910d05aeefdfc135d0e060ff58a073d9cc8fc686
1 /*
2 * Copyright 2003-2012, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 */
5 #ifndef _CATALOG_H_
6 #define _CATALOG_H_
9 #include <LocaleRoster.h>
10 #include <Locker.h>
11 #include <SupportDefs.h>
12 #include <String.h>
15 class BCatalogData;
16 class BLocale;
17 class BMessage;
18 struct entry_ref;
21 class BCatalog {
22 public:
23 BCatalog();
24 BCatalog(const entry_ref& catalogOwner,
25 const char* language = NULL,
26 uint32 fingerprint = 0);
27 virtual ~BCatalog();
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;
48 protected:
49 BCatalog(const BCatalog&);
50 const BCatalog& operator= (const BCatalog&);
51 // hide assignment and copy-constructor
53 BCatalogData* fCatalogData;
54 mutable BLocker fLock;
56 private:
57 friend class BLocale;
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
80 // application.
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.
84 // example:
85 // #define B_TRANSLATION_CONTEXT "Folder-Window"
86 // Tip: Use a descriptive name of the class implemented in that
87 // source-file.
89 #ifdef B_COLLECTING_CATKEYS
91 // pull in all the macros used when collecting catalog keys.
92 #include <tools/CollectingCatalog.h>
94 #else
96 // Translation macros which may be used to shorten translation requests:
97 #undef B_TRANSLATE
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), \
114 (comment))
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) \
125 : (string)
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).
129 /* Example:
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) {
142 menu->AddItem(
143 new BMenuItem(
144 B_TRANSLATE(*ch),
145 new BMessage(...)
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) \
192 B_TRANSLATE(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) \
204 B_TRANSLATE_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_ */