A fork of the Mastodon Android client with Bluesky/ATProto support.
1// Run: java tools/GenerateLocaleConfig.java
2import java.io.*;
3import java.nio.charset.StandardCharsets;
4import java.util.ArrayList;
5import java.util.stream.*;
6
7public class GenerateLocaleConfig{
8 public static void main(String[] args) throws IOException{
9 File dir=new File("../mastodon/src/main/res/");
10 if(!dir.exists())
11 dir=new File("mastodon/src/main/res");
12 if(!dir.exists())
13 throw new RuntimeException("Please run from project directory (can't find mastodon/src/main/res)");
14
15 ArrayList<String> locales=new ArrayList<>(), rawLocales=new ArrayList<>();
16 locales.add("en");
17
18 for(File file:dir.listFiles()){
19 String name=file.getName();
20 if(file.isDirectory() && name.startsWith("values-")){
21 if(new File(file, "strings.xml").exists()){
22 locales.add(name.substring(name.indexOf('-')+1).replace("-r", "-"));
23 rawLocales.add(name.substring(name.indexOf('-')+1));
24 }
25 }
26 }
27
28 locales.sort(String::compareTo);
29 rawLocales.sort(String::compareTo);
30 try(OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream(new File(dir, "xml/locales_config.xml")), StandardCharsets.UTF_8)){
31 writer.write("""
32 <?xml version="1.0" encoding="utf-8"?>
33 <locale-config xmlns:android="http://schemas.android.com/apk/res/android">
34 """);
35 for(String locale : locales){
36 writer.write("\t<locale android:name=\"");
37 writer.write(locale);
38 writer.write("\"/>\n");
39 }
40 writer.write("</locale-config>");
41 }
42
43 File buildGradle=new File(dir, "../../../build.gradle");
44 ArrayList<String> buildGradleLines=new ArrayList<>();
45 try(BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(buildGradle)))){
46 String line;
47 while((line=reader.readLine())!=null){
48 if(line.trim().startsWith("resConfigs")){
49 line=line.substring(0, line.indexOf('r'))+"resConfigs ";
50 line+=rawLocales.stream().map(l->'"'+l+'"').collect(Collectors.joining(", "));
51 }
52 buildGradleLines.add(line);
53 }
54 }
55
56 try(OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream(buildGradle))){
57 for(String line:buildGradleLines){
58 writer.write(line);
59 writer.write('\n');
60 }
61 }
62 }
63}