I think the conversation now is not about
Strategy for multi currency, not about
Strategy for multi location.
My approach is that I normally try to log as much information as I may need in the future and be sure, that I know how to extract it later.
If you think of it, country of expense is just one of the things you may want to track for the purposes of the future data analysis. But this is not the only information, you may want to track.
Say you track Expenses:Clothing. But you may want to track this per country and also per family member. Say you have 4 family members and you have expenses in 3 countries, In this case just for Expenses:Clothing you will have 3*4 = 12 sub-accounts
Expenses:Clothing:UK:John
Expenses:Clothing:UK:Mary
Expenses:Clothing:UK:Richard
Expenses:Clothing:UK:Anna
Expenses:Clothing:US:John
Expenses:Clothing:US:Mary
Expenses:Clothing:US:Richard
Expenses:Clothing:US:Anna
.......
If you then separate Clothing on Clothing and Footwear, you already end up with 24 accounts
This very quickly becomes not manageable. However the advantage of keeping meta information in an account is that beancount gives you a lot of control about accounts (it checks them, you can then close them at certain moment etc).
Another disadvantage is that it is not that easy for instance to group expenses per country, as the country is berried as the 3rd element of the account name.
Another alternative is to keep meta data in a meta field. Meta fields do not have a lot of built in checks (but you can script them), but avoids problems, mentioned above.
Example:
2024-01-01 price GBP 2 USD
2024-01-01 * "Shopping UK"
Expenses:Clothing 100 GBP
country:"UK"
Assets:Cash
2024-01-01 * "Supermarket UK"
Expenses:Supermarket 50 GBP
country:"UK"
Assets:Cash
2024-01-02 * "Shopping US"
Expenses:Clothing 100 USD
country:"US"
Assets:Cash
2024-01-02 * "Supermarket US"
Expenses:Supermarket 50 USD
country:"US"
Assets:Cash
You can then query the above like this for instance
SELECT meta['country'] as country, account, SUM(convert(position,"USD", date)) as USD
WHERE account ~ "Expenses"
GROUP BY country, account
You can experiment with it here: