]>
git.ipfire.org Git - thirdparty/cups.git/blob - cups/localize.c
2 * "$Id: localize.c 5826 2006-08-15 19:04:11Z mike $"
4 * PPD custom option routines for the Common UNIX Printing System (CUPS).
6 * Copyright 1997-2006 by Easy Software Products, all rights reserved.
8 * These coded instructions, statements, and computer programs are the
9 * property of Easy Software Products and are protected by Federal
10 * copyright law. Distribution and use rights are outlined in the file
11 * "LICENSE.txt" which should have been included with this file. If this
12 * file is missing or damaged please contact Easy Software Products
15 * Attn: CUPS Licensing Information
16 * Easy Software Products
17 * 44141 Airport View Drive, Suite 204
18 * Hollywood, Maryland 20636 USA
20 * Voice: (301) 373-9600
21 * EMail: cups-info@cups.org
22 * WWW: http://www.cups.org
24 * PostScript is a trademark of Adobe Systems, Inc.
26 * This code and any derivative of it may be used and distributed
27 * freely under the terms of the GNU General Public License when
28 * used with GNU Ghostscript or its derivatives. Use of the code
29 * (or any derivative of it) with software other than GNU
30 * GhostScript (or its derivatives) is governed by the CUPS license
33 * This file is subject to the Apple OS-Developed Software exception.
37 * ppdLocalize() - Localize the PPD file to the current locale.
41 * Include necessary headers.
52 static const char *ppd_text(ppd_file_t
*ppd
, const char *keyword
,
53 const char *spec
, const char *ll_CC
,
58 * 'ppdLocalize()' - Localize the PPD file to the current locale.
63 int /* O - 0 on success, -1 on error */
64 ppdLocalize(ppd_file_t
*ppd
) /* I - PPD file */
66 int i
, j
, k
; /* Looping vars */
67 ppd_group_t
*group
; /* Current group */
68 ppd_option_t
*option
; /* Current option */
69 ppd_choice_t
*choice
; /* Current choice */
70 ppd_coption_t
*coption
; /* Current custom option */
71 ppd_cparam_t
*cparam
; /* Current custom parameter */
72 cups_lang_t
*lang
; /* Current language */
73 char ckeyword
[PPD_MAX_NAME
], /* Custom keyword */
74 ll_CC
[6], /* Language + country locale */
75 ll
[3]; /* Language locale */
76 const char *text
; /* Localized text */
80 * Range check input...
83 DEBUG_printf(("ppdLocalize(ppd=%p)\n", ppd
));
89 * Get the default language...
92 if ((lang
= cupsLangDefault()) == NULL
)
95 strlcpy(ll_CC
, lang
->language
, sizeof(ll_CC
));
96 strlcpy(ll
, lang
->language
, sizeof(ll
));
98 DEBUG_printf((" lang->language=\"%s\", ll=\"%s\", ll_CC=\"%s\"...\n",
99 lang
->language
, ll
, ll_CC
));
102 * Now lookup all of the groups, options, choices, etc.
105 for (i
= ppd
->num_groups
, group
= ppd
->groups
; i
> 0; i
--, group
++)
107 if ((text
= ppd_text(ppd
, "Translation", group
->name
, ll_CC
, ll
)) != NULL
)
108 strlcpy(group
->text
, text
, sizeof(group
->text
));
110 for (j
= group
->num_options
, option
= group
->options
; j
> 0; j
--, option
++)
112 if ((text
= ppd_text(ppd
, "Translation", option
->keyword
, ll_CC
,
114 strlcpy(option
->text
, text
, sizeof(option
->text
));
116 for (k
= option
->num_choices
, choice
= option
->choices
;
120 if (strcmp(choice
->choice
, "Custom"))
121 text
= ppd_text(ppd
, option
->keyword
, choice
->choice
, ll_CC
, ll
);
124 snprintf(ckeyword
, sizeof(ckeyword
), "Custom%s", option
->keyword
);
126 text
= ppd_text(ppd
, ckeyword
, "True", ll_CC
, ll
);
130 strlcpy(choice
->text
, text
, sizeof(choice
->text
));
136 * Translate any custom parameters...
139 for (coption
= (ppd_coption_t
*)cupsArrayFirst(ppd
->coptions
);
141 coption
= (ppd_coption_t
*)cupsArrayNext(ppd
->coptions
))
143 for (cparam
= (ppd_cparam_t
*)cupsArrayFirst(coption
->params
);
145 cparam
= (ppd_cparam_t
*)cupsArrayNext(coption
->params
))
147 snprintf(ckeyword
, sizeof(ckeyword
), "ParamCustom%s", coption
->keyword
);
149 if ((text
= ppd_text(ppd
, ckeyword
, cparam
->name
, ll_CC
, ll
)) != NULL
)
150 strlcpy(cparam
->text
, text
, sizeof(cparam
->text
));
159 * 'ppd_text()' - Find the localized text as needed...
162 static const char * /* O - Localized text or NULL */
163 ppd_text(ppd_file_t
*ppd
, /* I - PPD file */
164 const char *keyword
, /* I - Main keyword */
165 const char *spec
, /* I - Option keyword */
166 const char *ll_CC
, /* I - Language + country locale */
167 const char *ll
) /* I - Language locale */
169 char lkeyword
[PPD_MAX_NAME
]; /* Localization keyword */
170 ppd_attr_t
*attr
; /* Current attribute */
173 DEBUG_printf(("ppd_text(ppd=%p, keyword=\"%s\", spec=\"%s\", "
174 "ll_CC=\"%s\", ll=\"%s\")\n",
175 ppd
, keyword
, spec
, ll_CC
, ll
));
178 * Look for Keyword.ll_CC, then Keyword.ll...
181 snprintf(lkeyword
, sizeof(lkeyword
), "%s.%s", ll_CC
, keyword
);
182 if ((attr
= ppdFindAttr(ppd
, lkeyword
, spec
)) == NULL
)
184 snprintf(lkeyword
, sizeof(lkeyword
), "%s.%s", ll
, keyword
);
185 attr
= ppdFindAttr(ppd
, lkeyword
, spec
);
190 printf(" *%s %s/%s: \"%s\"\n", attr
->name
, attr
->spec
, attr
->text
,
191 attr
->value
? attr
->value
: "");
197 * Return text if we find it...
200 return (attr
? attr
->text
: NULL
);
205 * End of "$Id: localize.c 5826 2006-08-15 19:04:11Z mike $".