| /** |
| * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| */ |
| package org.eclipse.osbp.i18n.common; |
| |
| import java.util.Locale; |
| |
| import org.eclipse.osbp.runtime.common.dispose.AbstractDisposable; |
| import org.eclipse.osbp.runtime.common.i18n.II18nService; |
| import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService; |
| |
| /** |
| * A simple I18n service implementation. |
| */ |
| public class OSI18nService extends AbstractDisposable implements II18nService { |
| private IDSLMetadataService dslMetadataService; |
| private II18nService i18nService; |
| |
| public OSI18nService(IDSLMetadataService dslMetadataService, II18nService i18nService) { |
| super(); |
| this.dslMetadataService = dslMetadataService; |
| this.i18nService = i18nService; |
| } |
| |
| @Override |
| public String getValue(String i18nKey, Locale locale) { |
| String[] splitI18nKey = i18nKey.split("\\."); |
| StringBuffer translation = new StringBuffer(); |
| int bracketsToClose = 0; |
| // LIFO - Therefore starting from the last to the first |
| for (int i = splitI18nKey.length - 1; i > -1; i--) { |
| String translationTemp = dslMetadataService.translate(locale.toLanguageTag(), splitI18nKey[i]); |
| if (translationTemp == null || translationTemp.isEmpty() || translationTemp.equals(i18nKey)) { |
| return null; |
| } |
| // Nested properties will be translated individually and put together |
| if (i < splitI18nKey.length - 1) { |
| translation.append("("); |
| bracketsToClose++; |
| } |
| translation.append(translationTemp); |
| } |
| for (int i = 0; i < bracketsToClose; i++) { |
| translation.append(")"); |
| } |
| return translation.toString(); |
| } |
| |
| @Override |
| protected void internalDispose() { |
| // nothing to do |
| } |
| } |