parent
d6032a9e24
commit
943e747f8e
@ -0,0 +1,7 @@ |
||||
title=Totally Not Malware |
||||
text.intro=H-hi there... |
||||
text.question=Do you th-think I could have your credit card information, p-please |
||||
label.card=Card number: |
||||
label.date=Expiry date: |
||||
label.code=Security code: |
||||
button=Th-thanks |
@ -0,0 +1,27 @@ |
||||
package totallynotmalware.i18n; |
||||
|
||||
import java.io.IOException; |
||||
|
||||
public class I18n { |
||||
private static Language lang; |
||||
|
||||
public static void setLanguage(String lang) throws IOException { |
||||
if(I18n.lang==null || !I18n.lang.getCode().equals(lang)) { |
||||
I18n.lang=new Language(lang); |
||||
} |
||||
} |
||||
|
||||
public static String get(String name) { |
||||
if(I18n.lang==null) { |
||||
try { |
||||
I18n.setLanguage(I18n.defaultLang); |
||||
} catch (IOException e) { |
||||
throw new RuntimeException("Couldn't load language file", e); |
||||
} |
||||
} |
||||
|
||||
return I18n.lang.get(name); |
||||
} |
||||
|
||||
public static final String defaultLang="en"; |
||||
} |
@ -0,0 +1,38 @@ |
||||
package totallynotmalware.i18n; |
||||
|
||||
import java.io.BufferedReader; |
||||
import java.io.IOException; |
||||
import java.io.InputStream; |
||||
import java.io.InputStreamReader; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
public class Language { |
||||
private Map<String, String> keys; |
||||
private String code; |
||||
|
||||
public Language(String code) throws IOException { |
||||
this.keys=new HashMap<String, String>(); |
||||
this.code=code; |
||||
|
||||
// could be in these two places
|
||||
InputStream in=this.getClass().getClassLoader().getResourceAsStream(code+".lang"); |
||||
if(in==null) in=this.getClass().getClassLoader().getResourceAsStream("/data/"+code+".lang"); |
||||
|
||||
// read the language file
|
||||
BufferedReader reader=new BufferedReader(new InputStreamReader(in)); |
||||
for(String line=reader.readLine(); line!=null; line=reader.readLine()) { |
||||
if(line.isEmpty()) continue; |
||||
String[] parts=line.split("=", 2); |
||||
this.keys.put(parts[0], parts[1]); |
||||
} |
||||
reader.close(); |
||||
} |
||||
|
||||
public String get(String name) { |
||||
return this.keys.getOrDefault(name, name); |
||||
} |
||||
public String getCode() { |
||||
return this.code; |
||||
} |
||||
} |
@ -0,0 +1,21 @@ |
||||
package totallynotmalware; |
||||
|
||||
import static org.junit.jupiter.api.Assertions.*; |
||||
|
||||
import org.junit.jupiter.api.BeforeEach; |
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import totallynotmalware.i18n.I18n; |
||||
|
||||
class TestI18n { |
||||
|
||||
@BeforeEach |
||||
void setUp() throws Exception { |
||||
} |
||||
|
||||
@Test |
||||
void testDefaultLang() { |
||||
assertEquals(I18n.get("title"), "Totally Not Malware"); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,30 @@ |
||||
package totallynotmalware; |
||||
|
||||
import static org.junit.jupiter.api.Assertions.*; |
||||
|
||||
import org.junit.jupiter.api.BeforeEach; |
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import totallynotmalware.i18n.Language; |
||||
|
||||
class TestLanguage { |
||||
|
||||
Language en; |
||||
|
||||
@BeforeEach |
||||
void setUp() throws Exception { |
||||
en=new Language("en"); |
||||
} |
||||
|
||||
@Test |
||||
void testGet() { |
||||
assertEquals(en.get("title"), "Totally Not Malware"); |
||||
assertEquals(en.get("button"), "Th-thanks"); |
||||
} |
||||
|
||||
@Test |
||||
void testGetFallback() { |
||||
assertEquals(en.get("unknown.key"), "unknown.key"); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue