1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
crate::ix!();

//-------------------------------------------[.cpp/bitcoin/src/util/translation.h]

/**
  | Bilingual messages:
  | 
  | - in GUI: user's native language + untranslated
  | (i.e. English)
  | 
  | - in log and stderr: untranslated only
  |
  */
#[derive(Default)]
pub struct BilingualStr {
    original:   String,
    translated: String,
}

impl AddAssign<&BilingualStr> for BilingualStr {
    
    #[inline]fn add_assign(&mut self, other: &BilingualStr) {
        todo!();
        /*
            original += rhs.original;
            translated += rhs.translated;
            return *this;
        */
    }
}

impl BilingualStr {

    pub fn empty(&self) -> bool {
        
        todo!();
        /*
            return original.empty();
        */
    }
    
    pub fn clear(&mut self)  {
        
        todo!();
        /*
            original.clear();
            translated.clear();
        */
    }
}

impl Add<&BilingualStr> for BilingualStr {

    type Output = BilingualStr;
    
    fn add(self, other: &BilingualStr) -> Self::Output {
        todo!();
        /*
            lhs += rhs;
        return lhs;
        */
    }
}

impl From<&str> for BilingualStr {
    fn from(x: &str) -> Self {
        untranslated(x)
    }
}

/**
  | Mark a bilingual_str as untranslated
  |
  */
#[inline] pub fn untranslated(original: &str) -> BilingualStr {
    
    todo!();
        /*
            return {original, original};
        */
}

pub mod tinyformat {

    use super::*;

    pub fn format<Args>(
            fmt:  &BilingualStr,
            args: &Args) -> BilingualStr {

        todo!();
            /*
                return bilingual_str{format(fmt.original, args...), format(fmt.translated, args...)};
            */
    }
}

/**
  | Translate a message to the native language
  | of the user.
  |
  */
lazy_static!{
    /*
    const extern std::function<std::string(const char*)> G_TRANSLATION_FUN;
    */
}

/**
  | Translation function.
  | 
  | If no translation function is set, simply
  | return the input.
  |
  */
lazy_static!{
    /*
    inline bilingual_str _(const char* psz)
    {
        return bilingual_str{psz, G_TRANSLATION_FUN ? (G_TRANSLATION_FUN)(psz) : psz};
    }
    */
}