Traveling abroad? Need help learning the language? Wondering how hard it can be to write an app to help translate phrases? Wonder no more, because:
You will need:
Compile the Raku programming language on your Android. There are excellent instructions here, but when I did this I ran into a little issue. This step was easier to do by plugging a real keyboard into the device.
I like using the Raku programming language for this task for a variety of reasons. One is that the language is so concise I can actually write the program on the phone. Really. Another is that it has great built-in features for interacting with other programs, with functions like shell and the quoting construct qx.
Write a program like the one to the right. This program basically works like this:
termux-dialog radio        
        to
        choose
        the
        direction
        of
        translation
        (English
        to
        Italian
        or
        vice
        versa).
        This
        determines
        the
        name
        of
        the
        model.      curl              termux-dialog confirm        
        to
        get
        a
        yes        
        or
        no        
        as
        to
        whether
        we
        should
        send
        the
        request
        again.
        This
        is
        because
        the
        first
        request
        might
        load
        the
        model
        into
        a
        cache,
        in
        which
        case
        you
        will
        have
        to
        retry
        it
        in
        20
        seconds.
        You
        can
        see
        this
        in
        action
        by
        trying
        it
        out
        at
        the
        huggingface
        online
        interface        
        .      
        When your program is ready, run it with raku ciao.raku and verify that it works.  Oh also note that your api token should go into a file called "hugging".
      
        Make a shell script in ~/.shortcuts/tasks/ciao -- this is a wrapper that calls the above program and is used by termux-widget.  This step allows you to add a button to your home screen to call the "app".  This can also set up the environment and change to your working directory.
      
#!/bin/sh
exec 2>&1 >> $HOME/ciao.log
. /data/data/com.termux/files/home/.bashrc
cd /data/data/com.termux/files/home/ciao
raku ./ciao.raku
      
    
      spoiler: here is the program, as seen from an editor on the phone
       
    
That's it! Enjoy your travels! And happy language hacking!
Below is the program in a wider format, and as text for your copy-paste convenience.
    #!/usr/bin/env raku
use JSON::Fast;
my $HF_API_TOKEN="hugging".IO.slurp.trim;
sub j($txt) { from-json($txt) }
sub jt($txt) { j($txt)<text> }
my $model = jt qx/termux-dialog radio -v en-it,it-en/;
my $mode is default("") = "speech" if $model ~~ /en '-'/;
my $txt = jt q:w:s:x[termux-dialog $mode];
my $url = <<api-inference.huggingface.co models Helsinki-NLP "opus-mt-$model">>.join: "/";
loop {
  my $proc = shell Q:s:to/SH/, :out;
    curl -s https://$url \
     -X POST \
     -d '{"inputs": "$txt" }' \
     -H "Authorization: Bearer $HF_API_TOKEN"
  SH
  my $o = j $proc.out.slurp(:close);
  my $tr = $o[0]<translation_text> || ~$o;
  my $out = "$txt -> $model -> $tr";
  jt qqx[termux-dialog confirm -i "$out"] andthen do { last if $_ eq 'yes' }
}