=== added file 'dhis-live/src/main/java/org/hisp/dhis/LiveMessagingService.java' --- dhis-live/src/main/java/org/hisp/dhis/LiveMessagingService.java 1970-01-01 00:00:00 +0000 +++ dhis-live/src/main/java/org/hisp/dhis/LiveMessagingService.java 2010-09-10 04:26:24 +0000 @@ -0,0 +1,106 @@ +/* +* + * Copyright (c) 2004-2010, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.hisp.dhis; +import java.util.Locale; +import java.util.ResourceBundle; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + + + +/** + * + * @author Jason P. Pickering + */ +public class LiveMessagingService + +{ + + private static final Log log = LogFactory.getLog(TrayApp.class); + + private static final String defaultLanguage = "en"; + private static final String defaultCountry = "GB"; + + + + private ResourceBundle getMessageBundle() + { + ResourceBundle messages; + String currentLanguage= TrayApp.getInstance().getConfig().getLocaleLanguage(); + String currentCountry = TrayApp.getInstance().getConfig().getLocaleCountry(); + Locale currentLocale = new Locale (currentLanguage,currentCountry); + log.debug("Current locale set to " + currentLocale.toString()); + try + { + messages = ResourceBundle.getBundle("messages",currentLocale); + } + catch (Exception e) + { + //problem loading the desired resource bundle + //fall back to default + log.error("The desired resource bundle could not be loaded.Usig default"); + currentLocale = new Locale(defaultLanguage, defaultCountry); + messages = ResourceBundle.getBundle("messages",currentLocale); + } + + return messages; + } + + public String getString (String messageName) { + + ResourceBundle messages = getMessageBundle(); + + String returnMessage = null ; + if ( messageName.isEmpty() ) + { + returnMessage = "messageName not valid"; + return returnMessage; + } + else + { + + if ( messages.containsKey( messageName) ) + { + returnMessage = messages.getString( messageName ); + + if (returnMessage == null) + { + returnMessage = "Message not found"; + } + + } + else + { + returnMessage = "Message key " + messageName + " not found."; + } + return returnMessage; + } + } + +} === modified file 'dhis-live/src/main/java/org/hisp/dhis/TrayApp.java' --- dhis-live/src/main/java/org/hisp/dhis/TrayApp.java 2010-09-07 21:23:11 +0000 +++ dhis-live/src/main/java/org/hisp/dhis/TrayApp.java 2010-09-10 04:26:24 +0000 @@ -31,12 +31,8 @@ import java.awt.event.*; import java.net.URI; import java.net.URL; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.swing.*; import java.io.*; -import java.util.Locale; -import java.util.ResourceBundle; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; @@ -81,7 +77,7 @@ // the configuration private ConfigType config; - private static ResourceBundle messages = ResourceBundle.getBundle( "messages", Locale.getDefault() ); + private static LiveMessagingService messageService = new LiveMessagingService(); private static TrayApp instance; @@ -103,18 +99,13 @@ // ------------------------------------------------------------------------- public static void main( String[] args ) { - Locale[] supportedLocales = - { - Locale.FRENCH, - Locale.GERMAN, - Locale.ENGLISH - }; + log.info( "Environment variable DHIS2_HOME: " + System.getenv( "DHIS2_HOME" ) ); if ( !SystemTray.isSupported() ) { - JOptionPane.showMessageDialog( (JFrame) null, messages.getString( "dialogbox.unsupportedPlatform" ) ); + JOptionPane.showMessageDialog( (JFrame) null, messageService.getString( "dialogbox.unsupportedPlatform" ) ); System.exit( 0 ); } else { @@ -125,7 +116,7 @@ } catch ( Exception ex ) { log.fatal( "TrayApp Initialization failure", ex ); - JOptionPane.showMessageDialog( (JFrame) null, messages.getString( "dialogbox.initFailure" ) ); + JOptionPane.showMessageDialog( (JFrame) null, messageService.getString( "dialogbox.initFailure" ) ); System.exit( 0 ); } } @@ -157,7 +148,7 @@ if ( installDir == null ) { log.fatal( "Neither DHIS Live Jar nor DHIS2_HOME could be found." ); - JOptionPane.showMessageDialog( (JFrame) null, messages.getString( "dialogbox.initFailure" ) ); + JOptionPane.showMessageDialog( (JFrame) null, messageService.getString( "dialogbox.initFailure" ) ); System.exit( 0 ); } else { @@ -199,10 +190,14 @@ Image image = createImage( STOPPED_ICON, "tray icon" ); PopupMenu popup = new PopupMenu(); - MenuItem openItem = new MenuItem( messages.getString( "CMD_OPEN" ) ); - MenuItem databaseItem = new MenuItem( messages.getString( "CMD_DATABASE" ) ); - MenuItem settingsItem = new MenuItem( messages.getString( "CMD_SETTINGS" ) ); - MenuItem exitItem = new MenuItem( messages.getString( "CMD_EXIT" ) ); + MenuItem openItem = new MenuItem( messageService.getString( "CMD_OPEN" ) ); + openItem.setActionCommand("open"); + MenuItem databaseItem = new MenuItem( messageService.getString( "CMD_DATABASE" ) ); + databaseItem.setActionCommand("db"); + MenuItem settingsItem = new MenuItem( messageService.getString( "CMD_SETTINGS" ) ); + settingsItem.setActionCommand("settings"); + MenuItem exitItem = new MenuItem( messageService.getString( "CMD_EXIT" ) ); + exitItem.setActionCommand("exit"); popup.add( openItem ); popup.add( databaseItem ); @@ -219,13 +214,13 @@ { String cmd = e.getActionCommand(); - if ( cmd.equals( messages.getString( "CMD_OPEN" ) ) ) + if ( cmd.equals( "open" ) ) { launchBrowser(); } else { - if ( cmd.equals( messages.getString( "CMD_EXIT" ) ) ) + if ( cmd.equals( "exit" ) ) { shutdown(); } @@ -262,16 +257,16 @@ { log.warn( "Lifecycle: server failed" ); trayIcon.setImage( createImage( FAILED_ICON, "Running icon" ) ); - JOptionPane.showMessageDialog( (JFrame) null, messages.getString( "dialogbox.webserverFailure" ) ); + JOptionPane.showMessageDialog( (JFrame) null, messageService.getString( "dialogbox.webserverFailure" ) ); shutdown(); } public void lifeCycleStarted( LifeCycle arg0 ) { log.info( "Lifecycle: server started" ); - trayIcon.displayMessage( messages.getString( "notification.started" ), messages.getString( "notification.startedDetails" ) + " " + getUrl() + ".", + trayIcon.displayMessage( messageService.getString( "notification.started" ), messageService.getString( "notification.startedDetails" ) + " " + getUrl() + ".", TrayIcon.MessageType.INFO ); - trayIcon.setToolTip( messages.getString( "tooltip.running" ) ); + trayIcon.setToolTip( messageService.getString( "tooltip.running" ) ); trayIcon.setImage( createImage( RUNNING_ICON, "Running icon" ) ); launchBrowser(); @@ -280,14 +275,14 @@ public void lifeCycleStarting( LifeCycle arg0 ) { log.info( "Lifecycle: server starting" ); - trayIcon.displayMessage( messages.getString( "notification.starting" ), messages.getString( "notification.startingDetails" ), TrayIcon.MessageType.INFO ); + trayIcon.displayMessage( messageService.getString( "notification.starting" ), messageService.getString( "notification.startingDetails" ), TrayIcon.MessageType.INFO ); trayIcon.setImage( createImage( STARTING_ICON, "Starting icon" ) ); } public void lifeCycleStopped( LifeCycle arg0 ) { log.info( "Lifecycle: server stopped" ); - trayIcon.displayMessage( messages.getString( "notification.stopped" ), messages.getString( "notification.stoppedDetails" ), TrayIcon.MessageType.INFO ); + trayIcon.displayMessage( messageService.getString( "notification.stopped" ), messageService.getString( "notification.stoppedDetails" ), TrayIcon.MessageType.INFO ); trayIcon.setImage( createImage( STOPPED_ICON, "Running icon" ) ); } @@ -511,4 +506,15 @@ log.error( "Error serializing config to file", ex ); } } + /* private static ResourceBundle messageService + { + ResourceBundle rb; + + String currentCountry = TrayApp.getInstance().getConfig().getLocaleCountry(); + String currentLanguage= TrayApp.getInstance().getConfig().getLocaleLanguage(); + Locale currentLocale = new Locale (currentCountry,currentLanguage); + rb = ResourceBundle.getBundle("messages",currentLocale); + return rb; + } + */ } === modified file 'dhis-live/src/main/resources/Config.xsd' --- dhis-live/src/main/resources/Config.xsd 2010-09-07 21:23:11 +0000 +++ dhis-live/src/main/resources/Config.xsd 2010-09-10 04:26:24 +0000 @@ -6,7 +6,7 @@ - + === modified file 'dhis-live/src/main/resources/messages_de.properties' --- dhis-live/src/main/resources/messages_de.properties 2010-09-06 17:50:24 +0000 +++ dhis-live/src/main/resources/messages_de.properties 2010-09-10 04:26:24 +0000 @@ -1,6 +1,15 @@ -CMD_OPEN=Open DHIS 2 Live +CMD_OPEN=Open dhis 2 Live +CMD_CONFIG=Konfigurieren CMD_EXIT=Ausgang CMD_SETTINGS=Einstellungen CMD_DATABASE=Datenbanken -dialogbox.unsupportedPlatform=System Tray nicht unterst\u00fctzt auf dieser Plattform -dialogbox.initFailure=DHIS2-live konnte nicht initialisiert werden\nSiehe Protokoll f\u00fcr Details +dialogbox.unsupportedPlatform=System Tray nicht unterstützt auf dieser Plattform +dialogbox.initFailure=DHIS2-live nicht \ nWenden Protokoll für Details zu initialisieren +dialogbox.webserverFailure=Web-Server nicht gestartet werden - siehe Protokolle für Details +notification.started=Started +notification.startedDetails=Dhis 2 läuft. Ihr Browser wird \ n hingewiesen werden +notification.starting=Beginnend +notification.startingDetails=Dhis 2 ist ab. \ NBitte geduldig zu sein. +notification.stopped=Gestoppt +notification.stoppedDetails=Dhis 2 hat aufgehört. +tooltip.running=Dhis 2 Server laufen === removed file 'dhis-live/src/main/resources/messages_en.properties' --- dhis-live/src/main/resources/messages_en.properties 2010-09-07 21:23:11 +0000 +++ dhis-live/src/main/resources/messages_en.properties 1970-01-01 00:00:00 +0000 @@ -1,18 +0,0 @@ -CMD_OPEN = Open DHIS 2 Live -CMD_CONFIG = Configure -CMD_EXIT = Exit -CMD_SETTINGS = Settings -CMD_DATABASE = Databases - -dialogbox.unsupportedPlatform = System Tray not supported on this platform -dialogbox.initFailure = DHIS2-live failed to initialize\nSee log for details -dialogbox.webserverFailure = Web server failed to start - see logs for details - -notification.started = Started -notification.startedDetails = DHIS 2 is running. Your browser will\n be pointed to -notification.starting = Starting -notification.startingDetails = DHIS 2 is starting.\nPlease be patient. -notification.stopped = Stopped -notification.stoppedDetails = DHIS 2 has stopped. - -tooltip.running = DHIS 2 Server running \ No newline at end of file === added file 'dhis-live/src/main/resources/messages_en_GB.properties' --- dhis-live/src/main/resources/messages_en_GB.properties 1970-01-01 00:00:00 +0000 +++ dhis-live/src/main/resources/messages_en_GB.properties 2010-09-10 04:26:24 +0000 @@ -0,0 +1,18 @@ +CMD_OPEN = Open DHIS 2 Live +CMD_CONFIG = Configure +CMD_EXIT = Exit +CMD_SETTINGS = Settings +CMD_DATABASE = Databases + +dialogbox.unsupportedPlatform = System Tray not supported on this platform +dialogbox.initFailure = DHIS2-live failed to initialize\nSee log for details +dialogbox.webserverFailure = Web server failed to start - see logs for details + +notification.started = Started +notification.startedDetails = DHIS 2 is running. Your browser will\n be pointed to +notification.starting = Starting +notification.startingDetails = DHIS 2 is starting.\nPlease be patient. +notification.stopped = Stopped +notification.stoppedDetails = DHIS 2 has stopped. + +tooltip.running = DHIS 2 Server running \ No newline at end of file === added file 'dhis-live/src/main/resources/messages_es.properties' --- dhis-live/src/main/resources/messages_es.properties 1970-01-01 00:00:00 +0000 +++ dhis-live/src/main/resources/messages_es.properties 2010-09-10 04:26:24 +0000 @@ -0,0 +1,15 @@ +CMD_OPEN=Abrir DHIS 2 Live +CMD_CONFIG=Configurar +CMD_EXIT=Salida +CMD_SETTINGS=Configuración +CMD_DATABASE=Bases de datos +dialogbox.unsupportedPlatform=La bandeja del sistema no se admite en esta plataforma +dialogbox.initFailure=DHIS2-live no se pudo inicializar \ log nConsulte para obtener más detalles +dialogbox.webserverFailure=servidor Web no se pudo iniciar - ver los registros de datos +notification.started=Introducción +notification.startedDetails=DHIS 2 está en ejecución. Su navegador \ n se refirió a +notification.starting=A partir +notification.startingDetails=DHIS 2 se está iniciando. \ NPor favor, sea paciente. +notification.stopped=Detenido +notification.stoppedDetails=DHIS 2 se ha detenido. +tooltip.running=DHIS 2 Server que se ejecuta === modified file 'dhis-live/src/main/resources/messages_fr.properties' --- dhis-live/src/main/resources/messages_fr.properties 2010-09-06 17:50:24 +0000 +++ dhis-live/src/main/resources/messages_fr.properties 2010-09-10 04:26:24 +0000 @@ -1,6 +1,15 @@ CMD_OPEN=Open DHIS 2 Live +CMD_CONFIG=Configurer CMD_EXIT=Sortie -CMD_SETTINGS=Param\u00e8tres -CMD_DATABASE=Bases de donn\u00e9es -dialogbox.unsupportedPlatform=Barre d'\u00e9tat syst\u00e8me n'est pas support\u00e9 sur cette plate-forme -dialogbox.initFailure=DHIS2-live n'a pas pu s'initialiser\nVoir le journal pour plus de d\u00e9tails +CMD_SETTINGS=Paramètres +CMD_DATABASE=Bases de données +dialogbox.unsupportedPlatform=Barre d'état système n'est pas supporté sur cette plate-forme +dialogbox.initFailure=DHIS2-live n'a pas pu initialiser \ log nContactez pour plus de détails +dialogbox.webserverFailure=serveur Web n'a pas pu démarrer - voir les journaux pour plus de détails +notification.started=En route +notification.startedDetails=DHIS 2 est en cours d'exécution. Votre navigateur n \ être souligné +notification.starting=Départ +notification.startingDetails=DHIS 2 est de départ. \ NVeuillez être patient. +notification.stopped=Arrêté +notification.stoppedDetails=DHIS 2 a cessé. +tooltip.running=DHIS 2 Server en cours d'exécution === added file 'dhis-live/src/main/resources/messages_pt.properties' --- dhis-live/src/main/resources/messages_pt.properties 1970-01-01 00:00:00 +0000 +++ dhis-live/src/main/resources/messages_pt.properties 2010-09-10 04:26:24 +0000 @@ -0,0 +1,15 @@ +CMD_OPEN=Open DHIS 2 Live +CMD_CONFIG=Configurar +CMD_EXIT=Saída +CMD_SETTINGS=Configurações +CMD_DATABASE=Bases de dados +dialogbox.unsupportedPlatform=Bandeja do sistema não é suportado nesta plataforma +dialogbox.initFailure=DHIS2 vivo falhou ao inicializar \ log nConsulte para detalhes +dialogbox.webserverFailure=servidor Web falhou ao iniciar - ver logs para obter detalhes +notification.started=Começado +notification.startedDetails=DHIS 2 está funcionando. Seu navegador \ n ser apontado +notification.starting=Começando +notification.startingDetails=DHIS 2 está de partida. \ NPor favor, seja paciente. +notification.stopped=Parado +notification.stoppedDetails=DHIS 2 parou. +tooltip.running=DHIS 2 Server executando === added file 'dhis-live/src/main/resources/messages_ru.properties' --- dhis-live/src/main/resources/messages_ru.properties 1970-01-01 00:00:00 +0000 +++ dhis-live/src/main/resources/messages_ru.properties 2010-09-10 04:26:24 +0000 @@ -0,0 +1,15 @@ +CMD_OPEN=\u041e\u0442\u043a\u0440\u044b\u0442\u044c DHIS 2 Live +CMD_CONFIG=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c +CMD_EXIT=\u0412\u044b\u0445\u043e\u0434 +CMD_SETTINGS=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +CMD_DATABASE=\u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 +dialogbox.unsupportedPlatform=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043b\u043e\u0442\u043e\u043a \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 +dialogbox.initFailure=DHIS2-\u0436\u0438\u0442\u044c \u043d\u0435 \u0441\u043c\u043e\u0433 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \ nSee \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 +dialogbox.webserverFailure=\u0412\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c - \u0441\u043c. \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 +notification.started=\u0420\u0430\u0431\u043e\u0442\u044b +notification.startedDetails=DHIS 2 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \ \u043f, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c +notification.starting=\u041e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 +notification.startingDetails=DHIS 2 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f. \u0425\u043f\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0431\u0443\u0434\u044c\u0442\u0435 \u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u044b. +notification.stopped=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432\u0448\u0438\u0439\u0441\u044f +notification.stoppedDetails=DHIS 2 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f. +tooltip.running=DHIS 2 Server \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 === added file 'dhis-live/src/main/resources/messages_sw.properties' --- dhis-live/src/main/resources/messages_sw.properties 1970-01-01 00:00:00 +0000 +++ dhis-live/src/main/resources/messages_sw.properties 2010-09-10 04:26:24 +0000 @@ -0,0 +1,15 @@ +CMD_OPEN=Open DHIS 2 Live +CMD_CONFIG=Configure +CMD_EXIT=Exit +CMD_SETTINGS=Vipimo +CMD_DATABASE=Databaser +dialogbox.unsupportedPlatform=Mfumo tray si mkono kwenye jukwaa hili +dialogbox.initFailure=DHIS2-kuishi alishindwa initialize \ nSee logi kwa maelezo +dialogbox.webserverFailure=Web server alishindwa kuanza - angalia magogo kwa maelezo +notification.started=Started +notification.startedDetails=DHIS 2 anakimbia. browser yako \ n kuelekezwa kwa +notification.starting=Kuanzia +notification.startingDetails=DHIS 2 ni kuanzia \ nPlease kuwa na subira.. +notification.stopped=Kusimamishwa +notification.stoppedDetails=DHIS 2 kimesimama. +tooltip.running=DHIS 2 Server mbio === added file 'dhis-live/src/main/resources/messages_vi.properties' --- dhis-live/src/main/resources/messages_vi.properties 1970-01-01 00:00:00 +0000 +++ dhis-live/src/main/resources/messages_vi.properties 2010-09-10 04:26:24 +0000 @@ -0,0 +1,15 @@ +CMD_OPEN=M\u1edf DHIS 2 Live +CMD_CONFIG=C\u1ea5u h\u00ecnh +CMD_EXIT=Ra +CMD_SETTINGS=C\u00e0i \u0111\u1eb7t +CMD_DATABASE=C\u01a1 s\u1edf d\u1eef li\u1ec7u +dialogbox.unsupportedPlatform=Khay h\u1ec7 th\u1ed1ng kh\u00f4ng h\u1ed7 tr\u1ee3 tr\u00ean n\u1ec1n t\u1ea3ng n\u00e0y +dialogbox.initFailure=DHIS2-s\u1ed1ng kh\u00f4ng th\u1ec3 kh\u1edfi t\u1ea1o \ log nSee \u0111\u1ec3 bi\u1ebft chi ti\u1ebft +dialogbox.webserverFailure=Web server kh\u00f4ng th\u00e0nh c\u00f4ng \u0111\u1ec3 b\u1eaft \u0111\u1ea7u - xem nh\u1eadt k\u00fd \u0111\u1ec3 bi\u1ebft chi ti\u1ebft +notification.started=B\u1eaft \u0111\u1ea7u +notification.startedDetails=DHIS 2 \u0111ang ch\u1ea1y. Tr\u00ecnh duy\u1ec7t c\u1ee7a b\u1ea1n s\u1ebd \ n \u0111\u01b0\u1ee3c ch\u1ec9 ra +notification.starting=B\u1eaft \u0111\u1ea7u +notification.startingDetails=DHIS 2 l\u00e0 b\u1eaft \u0111\u1ea7u. \ NH\u00e3y \u0111\u01b0\u1ee3c b\u1ec7nh nh\u00e2n. +notification.stopped=Ng\u01b0ng +notification.stoppedDetails=DHIS 2 \u0111\u00e3 ng\u1eebng. +tooltip.running=2 DHIS m\u00e1y ch\u1ee7 \u0111ang ch\u1ea1y