| /* |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.eclipse.osgi.util; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.lang.reflect.Field; |
| import java.util.Properties; |
| |
| |
| public class NLS { |
| |
| public static void initializeMessages(final String bundleName, final Class<?> clazz) { |
| String resource = bundleName.replace('.', '/') + ".properties"; |
| final InputStream input = clazz.getClassLoader().getResourceAsStream(resource); |
| try { |
| Properties properties = new Properties(); |
| properties.load(input); |
| for (String key : properties.stringPropertyNames()) { |
| String value = properties.getProperty(key); |
| |
| try { |
| Field field = clazz.getDeclaredField(key); |
| field.setAccessible(true); |
| field.set(null, value); |
| } catch (Exception e) { |
| // ignore |
| } |
| } |
| } catch (IOException e) { |
| // ignore |
| } finally { |
| try { |
| input.close(); |
| } catch (IOException e) { |
| // ignore |
| } |
| } |
| } |
| |
| public static String bind(String message, Object binding) { |
| return bind(message, new Object[] { binding }); |
| } |
| |
| public static String bind(String message, Object binding1, Object binding2) { |
| return bind(message, new Object[] { binding1, binding2 }); |
| } |
| |
| public static String bind(String message, Object[] bindings) { |
| int length = message.length(); |
| //estimate correct size of string buffer to avoid growth |
| StringBuilder buffer = new StringBuilder(message.length() |
| + (bindings != null ? bindings.length * 5 : 0)); |
| for (int i = 0; i < length; i++) { |
| char c = message.charAt(i); |
| switch (c) { |
| case '{' : |
| int index = message.indexOf('}', i); |
| // if we don't have a matching closing brace then... |
| if (index == -1) { |
| buffer.append(c); |
| break; |
| } |
| i++; |
| if (i >= length) { |
| buffer.append(c); |
| break; |
| } |
| // look for a substitution |
| int number = -1; |
| try { |
| number = Integer.parseInt(message.substring(i, index)); |
| } catch (NumberFormatException e) { |
| throw (IllegalArgumentException) new IllegalArgumentException().initCause(e); |
| } |
| if (bindings == null || number >= bindings.length || number < 0) { |
| buffer.append("<missing argument>"); //$NON-NLS-1$ |
| i = index; |
| break; |
| } |
| buffer.append(bindings[number]); |
| i = index; |
| break; |
| case '\'' : |
| // if a single quote is the last char on the line then skip it |
| int nextIndex = i + 1; |
| if (nextIndex >= length) { |
| buffer.append(c); |
| break; |
| } |
| char next = message.charAt(nextIndex); |
| // if the next char is another single quote then write out one |
| if (next == '\'') { |
| i++; |
| buffer.append(c); |
| break; |
| } |
| // otherwise we want to read until we get to the next single quote |
| index = message.indexOf('\'', nextIndex); |
| // if there are no more in the string, then skip it |
| if (index == -1) { |
| buffer.append(c); |
| break; |
| } |
| // otherwise write out the chars inside the quotes |
| buffer.append(message.substring(nextIndex, index)); |
| i = index; |
| break; |
| default : |
| buffer.append(c); |
| } |
| } |
| return buffer.toString(); |
| } |
| |
| } |