For a quick recap, we will use a tool called csvtrans written by my colleague and good friend, Ricky Kaare Engelharth. The tool is built with .NET Core and can be installed using this command
dotnet tool install -g csvtrans
Using the tool is also straight forward and it also comes with some quick start instructions
USAGE: csvtrans [--help] [--sheet <document id> <sheet name>]
[--csv <url or path>] [--format <apple|android|resx>]
[--outputdir <directory path>] [--name <string>]
[--convert-placeholders <regex pattern>]
OPTIONS:
--sheet, -s <document id> <sheet name>
specify a Google Sheet as input.
--csv, -c <url or path>
specify a online or local cvs file as input.
--format, -f <apple|android|resx>
specify the output format.
--outputdir, -o <directory path>
specify the output directory.
--name, -n <string> specify an optional name for the output.
--convert-placeholders, -p <regex pattern>
convert placeholders to match the output format.
--help display this list of options.
Here's an example usage of tool
csvtrans --sheet 1mrMkhItrIDsPwEKMlR8JJ3Pgj1K6zUv0AhmBT4jWRqs Android --format android --outputdir .\Resources\
The first argument –-sheet
is the Google Sheet document ID followed by the Sheet Name, the next argument –-format
specifies the output file format, and the last argument –-outputdir
specifies the output folderYou can get the Document ID from the URL of the Google Sheet
Here's an example output
Now I can just bring these files into my project and use them directly. Well, almost! There's one little problem, and that is that by default the Xamarin.Android csproj tooling explicitly adds each strings.xml file as an AndroidResource. Oddly enough, the csproj format allows to specify wild card folders, so if we want to enable dynamic generation of values/strings.xml translations then we need to manually edit the csproj.
This is actually very easy to do. We just need to replace the lines like
with
This opens up for dynamic translations at build time using your CI/CD build tools of choice