1 /*
2  * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
3  */
4 /*
5  * Licensed to the Apache Software Foundation (ASF) under one or more
6  * contributor license agreements.  See the NOTICE file distributed with
7  * this work for additional information regarding copyright ownership.
8  * The ASF licenses this file to You under the Apache License, Version 2.0
9  * (the "License"); you may not use this file except in compliance with
10  * the License.  You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 package com.sun.org.apache.xerces.internal.impl.msg;
22 
23 import com.sun.org.apache.xerces.internal.util.MessageFormatter;
24 import java.util.Locale;
25 import java.util.MissingResourceException;
26 import java.util.PropertyResourceBundle;
27 import java.util.ResourceBundle;
28 import jdk.xml.internal.SecuritySupport;
29 
30 /**
31  * XMLMessageFormatter provides error messages for the XML 1.0 Recommendation and for
32  * the Namespaces Recommendation
33  *
34  * @xerces.internal
35  *
36  * @author Eric Ye, IBM
37  *
38  * @LastModified: Sep 2017
39  */
40 public class XMLMessageFormatter_fr implements MessageFormatter {
41     /**
42      * The domain of messages concerning the XML 1.0 specification.
43      */
44     public static final String XML_DOMAIN = "http://www.w3.org/TR/1998/REC-xml-19980210";
45     public static final String XMLNS_DOMAIN = "http://www.w3.org/TR/1999/REC-xml-names-19990114";
46 
47     // private objects to cache the locale and resource bundle
48     private Locale fLocale = null;
49     private ResourceBundle fResourceBundle = null;
50 
51     //
52     // MessageFormatter methods
53     //
54 
55     /**
56      * Formats a message with the specified arguments using the given
57      * locale information.
58      *
59      * @param locale    The locale of the message.
60      * @param key       The message key.
61      * @param arguments The message replacement text arguments. The order
62      *                  of the arguments must match that of the placeholders
63      *                  in the actual message.
64      *
65      * @return Returns the formatted message.
66      *
67      * @throws MissingResourceException Thrown if the message with the
68      *                                  specified key cannot be found.
69      */
formatMessage(Locale locale, String key, Object[] arguments)70     public String formatMessage(Locale locale, String key, Object[] arguments)
71         throws MissingResourceException {
72 
73         if (fResourceBundle == null || locale != fLocale) {
74             if (locale != null) {
75                 fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages", locale);
76                 // memorize the most-recent locale
77                 fLocale = locale;
78             }
79             if (fResourceBundle == null)
80                 fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages");
81         }
82 
83         // format message
84         String msg;
85         try {
86             msg = fResourceBundle.getString(key);
87             if (arguments != null) {
88                 try {
89                     msg = java.text.MessageFormat.format(msg, arguments);
90                 }
91                 catch (Exception e) {
92                     msg = fResourceBundle.getString("FormatFailed");
93                     msg += " " + fResourceBundle.getString(key);
94                 }
95             }
96         }
97 
98         // error
99         catch (MissingResourceException e) {
100             msg = fResourceBundle.getString("BadMessageKey");
101             throw new MissingResourceException(key, msg, key);
102         }
103 
104         // no message
105         if (msg == null) {
106             msg = key;
107             if (arguments.length > 0) {
108                 StringBuffer str = new StringBuffer(msg);
109                 str.append('?');
110                 for (int i = 0; i < arguments.length; i++) {
111                     if (i > 0) {
112                         str.append('&');
113                     }
114                     str.append(String.valueOf(arguments[i]));
115                 }
116             }
117         }
118 
119         return msg;
120     }
121 
122 }
123