All these `src.get(attr, {})` calls are kind of silly, since if the value doesn't exist you're allocating and immediately destroying three useless empty objects (and I assume this method is going to be called rather frequently). Maybe some simple caching?

```python
lang = src.setdefault(attr, {})
value = lang.get(req_lang) or lang.get(def_lang) or lang.get(svr_lang)
```