Add the code for article BAEL-2876 (#6887)
This commit is contained in:
		
							parent
							
								
									ccd28428f3
								
							
						
					
					
						commit
						f2de02990d
					
				| @ -21,9 +21,16 @@ | |||||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||||
|         <maven.compiler.source>1.8</maven.compiler.source> |         <maven.compiler.source>1.8</maven.compiler.source> | ||||||
|         <maven.compiler.target>1.8</maven.compiler.target> |         <maven.compiler.target>1.8</maven.compiler.target> | ||||||
|  |         <icu.version>64.2</icu.version> | ||||||
|     </properties> |     </properties> | ||||||
| 
 | 
 | ||||||
|     <dependencies> |     <dependencies> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>com.ibm.icu</groupId> | ||||||
|  |             <artifactId>icu4j</artifactId> | ||||||
|  |             <version>${icu.version}</version> | ||||||
|  |         </dependency> | ||||||
|  | 
 | ||||||
|     </dependencies> |     </dependencies> | ||||||
| 
 | 
 | ||||||
|     <build> |     <build> | ||||||
|  | |||||||
| @ -0,0 +1,21 @@ | |||||||
|  | package com.baeldung.localization; | ||||||
|  | 
 | ||||||
|  | import java.text.ParseException; | ||||||
|  | import java.util.Arrays; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Locale; | ||||||
|  | 
 | ||||||
|  | public class App { | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Runs all available formatter | ||||||
|  |      * @throws ParseException  | ||||||
|  |      */ | ||||||
|  |     public static void main(String[] args) { | ||||||
|  |         List<Locale> locales = Arrays.asList(new Locale[] { Locale.UK, Locale.ITALY, Locale.FRANCE, Locale.forLanguageTag("pl-PL") }); | ||||||
|  |         Localization.run(locales); | ||||||
|  |         JavaSEFormat.run(locales); | ||||||
|  |         ICUFormat.run(locales); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,29 @@ | |||||||
|  | package com.baeldung.localization; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Locale; | ||||||
|  | import java.util.ResourceBundle; | ||||||
|  | 
 | ||||||
|  | import com.ibm.icu.text.MessageFormat; | ||||||
|  | 
 | ||||||
|  | public class ICUFormat { | ||||||
|  | 
 | ||||||
|  |     public static String getLabel(Locale locale, Object[] data) { | ||||||
|  |         ResourceBundle bundle = ResourceBundle.getBundle("formats", locale); | ||||||
|  |         String format = bundle.getString("label-icu"); | ||||||
|  |         MessageFormat formatter = new MessageFormat(format, locale); | ||||||
|  |         return formatter.format(data); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static void run(List<Locale> locales) { | ||||||
|  |         System.out.println("ICU formatter"); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { "Alice", "female", 0 }))); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { "Alice", "female", 1 }))); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { "Alice", "female", 2 }))); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { "Alice", "female", 3 }))); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { "Bob", "male", 0 }))); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { "Bob", "male", 1 }))); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { "Bob", "male", 2 }))); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { "Bob", "male", 3 }))); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | package com.baeldung.localization; | ||||||
|  | 
 | ||||||
|  | import java.text.MessageFormat; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Locale; | ||||||
|  | import java.util.ResourceBundle; | ||||||
|  | 
 | ||||||
|  | public class JavaSEFormat { | ||||||
|  | 
 | ||||||
|  |     public static String getLabel(Locale locale, Object[] data) { | ||||||
|  |         ResourceBundle bundle = ResourceBundle.getBundle("formats", locale); | ||||||
|  |         final String pattern = bundle.getString("label"); | ||||||
|  |         final MessageFormat formatter = new MessageFormat(pattern, locale); | ||||||
|  |         return formatter.format(data); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static void run(List<Locale> locales) { | ||||||
|  |         System.out.println("Java formatter"); | ||||||
|  |         final Date date = new Date(System.currentTimeMillis()); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { date, "Alice", 0 }))); | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale, new Object[] { date, "Alice", 2 }))); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | package com.baeldung.localization; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Locale; | ||||||
|  | import java.util.ResourceBundle; | ||||||
|  | 
 | ||||||
|  | public class Localization { | ||||||
|  | 
 | ||||||
|  |     public static String getLabel(Locale locale) { | ||||||
|  |         final ResourceBundle bundle = ResourceBundle.getBundle("messages", locale); | ||||||
|  |         return bundle.getString("label"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static void run(List<Locale> locales) { | ||||||
|  |         locales.forEach(locale -> System.out.println(getLabel(locale))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										2
									
								
								core-java-8-2/src/main/resources/formats_en.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								core-java-8-2/src/main/resources/formats_en.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | label=On {0, date, short} {1} has sent you {2, choice, 0#no messages|1#a message|2#two messages|2<{2,number,integer} messages}. | ||||||
|  | label-icu={0} has sent you {2, plural, =0 {no messages} =1 {a message} other {{2, number, integer} messages}}. | ||||||
							
								
								
									
										2
									
								
								core-java-8-2/src/main/resources/formats_fr.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								core-java-8-2/src/main/resources/formats_fr.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | label={0, date, short}, {1}{2, choice, 0# ne|0<} vous a envoyé {2, choice, 0#aucun message|1#un message|2#deux messages|2<{2,number,integer} messages}. | ||||||
|  | label-icu={0} {2, plural, =0 {ne } other {}}vous a envoyé {2, plural, =0 {aucun message} =1 {un message} other {{2, number, integer} messages}}. | ||||||
							
								
								
									
										2
									
								
								core-java-8-2/src/main/resources/formats_it.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								core-java-8-2/src/main/resources/formats_it.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | label={0, date, short} {1} ti ha inviato {2, choice, 0#nessun messagio|1#un messaggio|2#due messaggi|2<{2, number, integer} messaggi}. | ||||||
|  | label-icu={0} {2, plural, =0 {non } other {}}ti ha inviato {2, plural, =0 {nessun messaggio} =1 {un messaggio} other {{2, number, integer} messaggi}}. | ||||||
							
								
								
									
										2
									
								
								core-java-8-2/src/main/resources/formats_pl.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								core-java-8-2/src/main/resources/formats_pl.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | label=W {0, date, short} {1}{2, choice, 0# nie|0<} wys\u0142a\u0142a ci {2, choice, 0#\u017Cadnych wiadomo\u015Bci|1#wiadomo\u015B\u0107|2#dwie wiadomo\u015Bci|2<{2, number, integer} wiadomo\u015Bci}. | ||||||
|  | label-icu={0} {2, plural, =0 {nie } other {}}{1, select, male {wys\u0142a\u0142} female {wys\u0142a\u0142a} other {wys\u0142a\u0142o}} ci {2, plural, =0 {\u017Cadnej wiadomo\u015Bci} =1 {wiadomo\u015B\u0107} other {{2, number, integer} wiadomo\u015Bci}}. | ||||||
							
								
								
									
										1
									
								
								core-java-8-2/src/main/resources/messages_en.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								core-java-8-2/src/main/resources/messages_en.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | label=Alice has sent you a message. | ||||||
							
								
								
									
										1
									
								
								core-java-8-2/src/main/resources/messages_fr.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								core-java-8-2/src/main/resources/messages_fr.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | label=Alice vous a envoyé un message. | ||||||
							
								
								
									
										1
									
								
								core-java-8-2/src/main/resources/messages_it.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								core-java-8-2/src/main/resources/messages_it.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | label=Alice ti ha inviato un messaggio. | ||||||
							
								
								
									
										1
									
								
								core-java-8-2/src/main/resources/messages_pl.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								core-java-8-2/src/main/resources/messages_pl.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | label=Alice wys\u0142a\u0142a ci wiadomo\u015B\u0107. | ||||||
| @ -0,0 +1,74 @@ | |||||||
|  | package com.baeldung.localization; | ||||||
|  | 
 | ||||||
|  | import static org.junit.Assert.assertEquals; | ||||||
|  | 
 | ||||||
|  | import java.util.Locale; | ||||||
|  | 
 | ||||||
|  | import org.junit.Test; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.localization.ICUFormat; | ||||||
|  | 
 | ||||||
|  | public class ICUFormatUnitTest { | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInUK_whenAliceSendsNothing_thenCorrectMessage() { | ||||||
|  |         assertEquals("Alice has sent you no messages.", ICUFormat.getLabel(Locale.UK, new Object[] { "Alice", "female", 0 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInUK_whenAliceSendsOneMessage_thenCorrectMessage() { | ||||||
|  |         assertEquals("Alice has sent you a message.", ICUFormat.getLabel(Locale.UK, new Object[] { "Alice", "female", 1 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInUK_whenBobSendsSixMessages_thenCorrectMessage() { | ||||||
|  |         assertEquals("Bob has sent you 6 messages.", ICUFormat.getLabel(Locale.UK, new Object[] { "Bob", "male", 6 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInItaly_whenAliceSendsNothing_thenCorrectMessage() { | ||||||
|  |         assertEquals("Alice non ti ha inviato nessun messaggio.", ICUFormat.getLabel(Locale.ITALY, new Object[] { "Alice", "female", 0 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInItaly_whenAliceSendsOneMessage_thenCorrectMessage() { | ||||||
|  |         assertEquals("Alice ti ha inviato un messaggio.", ICUFormat.getLabel(Locale.ITALY, new Object[] { "Alice", "female", 1 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInItaly_whenBobSendsSixMessages_thenCorrectMessage() { | ||||||
|  |         assertEquals("Bob ti ha inviato 6 messaggi.", ICUFormat.getLabel(Locale.ITALY, new Object[] { "Bob", "male", 6 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInFrance_whenAliceSendsNothing_thenCorrectMessage() { | ||||||
|  |         assertEquals("Alice ne vous a envoyé aucun message.", ICUFormat.getLabel(Locale.FRANCE, new Object[] { "Alice", "female", 0 })); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     @Test | ||||||
|  |     public void givenInFrance_whenAliceSendsOneMessage_thenCorrectMessage() { | ||||||
|  |         assertEquals("Alice vous a envoyé un message.", ICUFormat.getLabel(Locale.FRANCE, new Object[] { "Alice", "female", 1 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInFrance_whenBobSendsSixMessages_thenCorrectMessage() { | ||||||
|  |         assertEquals("Bob vous a envoyé 6 messages.", ICUFormat.getLabel(Locale.FRANCE, new Object[] { "Bob", "male", 6 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenInPoland_whenAliceSendsNothing_thenCorrectMessage() { | ||||||
|  |         assertEquals("Alice nie wysłała ci żadnej wiadomości.", ICUFormat.getLabel(Locale.forLanguageTag("pl-PL"), new Object[] { "Alice", "female", 0 })); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     @Test | ||||||
|  |     public void givenInPoland_whenAliceSendsOneMessage_thenCorrectMessage() { | ||||||
|  |         assertEquals("Alice wysłała ci wiadomość.", ICUFormat.getLabel(Locale.forLanguageTag("pl-PL"), new Object[] { "Alice", "female", 1 })); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     @Test | ||||||
|  |     public void givenInPoland_whenBobSendsSixMessages_thenCorrectMessage() { | ||||||
|  |         assertEquals("Bob wysłał ci 6 wiadomości.", ICUFormat.getLabel(Locale.forLanguageTag("pl-PL"), new Object[] { "Bob", "male", 6 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user