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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// use proc_macro2::{Literal, TokenStream, TokenTree};
// use quote::{quote, ToTokens, TokenStreamExt};
// use syn::parse::{Parse, ParseStream};
// use syn::Token;
//
// pub struct I18n {
// pub key: Literal,
// pub params: Vec<(Literal, TokenTree)>,
// }
//
// impl Parse for I18n {
// fn parse(input: ParseStream) -> syn::Result<Self> {
// let result = input.parse::<Literal>().expect("Expected a string literal as key");
//
// let mut params = vec![];
// while !input.is_empty() && input.peek(Token![,]) {
// input.parse::<Token![,]>()?;
// let content;
// syn::parenthesized!(content in input);
// let param_key = content.parse::<Literal>().expect("Expected param key as string literal");
// content.parse::<Token![,]>()?;
// let param_value = content.parse::<TokenTree>().expect("Expected param value");
// params.push((param_key, param_value));
// }
//
// Ok(I18n { key: result, params })
// }
// }
//
// impl ToTokens for I18n {
// fn to_tokens(&self, tokens: &mut TokenStream) {
// let key = &self.key;
//
// if self.params.is_empty() {
// tokens.append_all(quote! {
// {
// use fluent_langneg::{negotiate_languages, NegotiationStrategy};
// use fluent_resmgr::resource_manager::ResourceManager;
// use std::{fs, io, vec};
// use std::path::PathBuf;
// use unic_langid::LanguageIdentifier;
//
// let res_path = PathBuf::from(std::env!("CARGO_MANIFEST_DIR"))
// .join(&crate::TIDOS_I18N_CONFIGURATION.resource_location)
// .join("{locale}")
// .join("{res_id}");
// // ResourceManager should be static
// let mgr = ResourceManager::new(res_path.to_str().unwrap().to_string());
//
//
// // dynamic part per request
// let resolved_locales = negotiate_languages(
// &[&page.lang], // This needs to be detemined once upon request of a page
// &crate::TIDOS_I18N_CONFIGURATION.get_available_locales(), // could be static
// Some(&crate::TIDOS_I18N_CONFIGURATION.get_default_locale()), // could be determined during compile time
// NegotiationStrategy::Filtering,
// )
// .into_iter()
// .map(|s| s.to_owned())
// .collect(); // This needs to be detemined once upon request of a page
//
// let bundle = mgr
// .get_bundle(resolved_locales, crate::TIDOS_I18N_CONFIGURATION.resources.clone())
// .expect("Could not get bundle");
//
// let msg = bundle.get_message(#key)
// .expect("Message doesn't exist.");
//
// let mut errors = vec![];
// let pattern = msg.value()
// .expect("Message has no value.");
//
// let mut output = String::new();
//
// bundle.write_pattern(&mut output, &pattern, None, &mut errors)
// .expect("Could not write.");
//
// output
// }
// });
// } else {
// let params = &self.params.iter().fold(TokenStream::new(), |mut acc, (key, value)| {
// acc.append_all(quote! { args.set(#key, #value); });
// acc
// });
// tokens.append_all(quote! {
// {
// use fluent::{FluentArgs};
// use fluent_langneg::{negotiate_languages, NegotiationStrategy};
// use fluent_resmgr::resource_manager::ResourceManager;
// use std::{fs, io, vec};
// use std::path::PathBuf;
// use unic_langid::LanguageIdentifier;
//
// let res_path = PathBuf::from(std::env!("CARGO_MANIFEST_DIR"))
// .join(&crate::TIDOS_I18N_CONFIGURATION.resource_location)
// .join("{locale}")
// .join("{res_id}");
// // ResourceManager should be static
// let mgr = ResourceManager::new(res_path.to_str().unwrap().to_string());
//
//
// // dynamic part per request
// let resolved_locales = negotiate_languages(
// &[&page.lang], // This needs to be detemined once upon request of a page
// &crate::TIDOS_I18N_CONFIGURATION.get_available_locales(), // could be static
// Some(&crate::TIDOS_I18N_CONFIGURATION.get_default_locale()), // could be determined during compile time
// NegotiationStrategy::Filtering,
// )
// .into_iter()
// .map(|s| s.to_owned())
// .collect(); // This needs to be detemined once upon request of a page
//
// let bundle = mgr
// .get_bundle(resolved_locales, crate::TIDOS_I18N_CONFIGURATION.resources.clone())
// .expect("Could not get bundle");
//
// let msg = bundle.get_message(#key)
// .expect("Message doesn't exist.");
//
// let mut args = FluentArgs::new();
// #params
//
// let mut errors = vec![];
// let pattern = msg.value()
// .expect("Message has no value.");
//
// let mut output = String::new();
//
// bundle.write_pattern(&mut output, &pattern, Some(&args), &mut errors)
// .expect("Could not write.");
//
// output
// }
// });
// }
// }
// }