Meertalige uitwijkmogelijkheid opnieuw bekeken en een paginaboottekst met meertalige links
Bewaar de vertaalde titel en slak op één plaats en markeer ze geldig zodat ze kunnen worden gebruikt, zelfs als de rest van het item niet geldig is.
Voordat je verder leest, wil je misschien eerst mijn vorige bericht over de taal fallback lezen, zie onderstaande link. Hier is een voorbeeld van de complexiteit van meertaligheid. De link moet worden getoond in de taal die u op dit moment gebruikt .... een andere keer.
Het leven is één lange reeks van problemen die we voortdurend aan het oplossen zijn. Het begint met het krijgen van voldoende zuurstof, opgelost door ademhaling, misschien is het tweede punt wel bugs en onvolledige architectuur wanneer je een ontwikkelaar en programmeur bent. Hoe dan ook, het was tijd om een meertalige paginabodem te implementeren, dit is het onderste deel van de pagina met links naar pagina's als Over, Contact, Gebruiksvoorwaarden, Privacy beleid. Voor een echte meertalige site moeten deze links in de gekozen taal zijn.
Ik ben begonnen met twee tabellen en heb een nieuw deel van de beheerder aangemaakt om deze te beheren:
Voetregel Voetregel Voetregel
VoetregelVertaling
Met behulp van de beheerder maak ik een voettekst-item en voeg ik er een of meer taalrecords aan toe, voor elke taal wordt een vertaalrecord toegevoegd. Mijn eerste gedachte was om hier de naam en slak voor een pagina te specificeren, ik bedoel, een pagina is misschien niet beschikbaar in de geselecteerde taal en we willen terugvallen op de uitwijktaal. De vertaalde linknaam (paginatitel) en slak moeten ergens worden opgeslagen.
Bij het bouwen van de query om de pagina's te selecteren vond ik dit echter veel te complex omdat ik nu niet alleen de content_item en content_item tabellen maar ook de footer_item en footer_item_item_translation tabel moest opvragen. Niet precies wat ik in gedachten had, ik ben een programmeur en heb een voorkeur voor KISS.
Mijn oplossing om de complexiteit te verminderen is het opnieuw misbruiken van de content_item_vertaling record, de laatste keer dat ik de 'do_not_fallback' vlag heb toegevoegd en nu heb ik een andere vlag toegevoegd: 'can_use_slug'. De betekenis is als volgt:
- Wanneer het content_item_vertalingsrecord niet bestaat, vallen we terug naar de fallback taal.
- Wanneer het content_item_vertalingsrecord bestaat en gepubliceerd is, gebruiken we het.
- Wanneer de content_item_vertaling record bestaat maar niet gepubliceerd is, hebben we twee voorwaarden: - do_not_fallback
, indien True, is het item niet beschikbaar.
- can_use_slug, als do_not_fallback False is, en can_use_slug is True kunnen we de titel en slak van de content_item_vertaling record gebruiken.
Het leuke is dat we nu een echte meertalige footer kunnen bouwen, met meertalige links, zelfs als de pagina niet gepubliceerd is, alleen door de paginatitel en de slak toe te voegen aan de content_item_vertaling record en de can_use_slug vlag te zetten. De titel en de slak van de pagina staan maar op één plaats.
Een bonus is dat we dit ook kunnen gebruiken bij het tonen van de pagina om de titel van de pagina in de geselecteerde taal weer te geven terwijl de andere delen in het Engels blijven. U kunt dit controleren door de Gebruiksvoorwaarden pagina van deze website in meerdere talen te bekijken. Deze pagina is alleen beschikbaar in het Engels, maar we hebben nog steeds meertalige links in de footer en een meertalige titel.
Implementatie is net als het cache-object en instellingen-object beschreven in eerdere berichten en maakt natuurlijk gebruik van caching, geen noodzaak om de voettekst van elk verzoek te genereren. Geen code in dit bericht, moet eerst wat opruimen....
Links / credits
Refining multilanguage: adding language fallback as an option
/en/blog/refining-multilanguage-adding-language-fallback-as-an-option
Lees meer
Multilanguage
Recent
- Database UUID primaire sleutels van je webapplicatie verbergen
- Don't Repeat Yourself (DRY) met Jinja2
- SQLAlchemy, PostgreSQL, maximum aantal rijen per user
- Toon de waarden in SQLAlchemy dynamische filters
- Veilige gegevensoverdracht met Public Key versleuteling en pyNaCl
- rqlite: een alternatief voor SQLite met hoge beschikbaarheid en distributed
Meest bekeken
- Met behulp van Python's pyOpenSSL om SSL-certificaten die van een host zijn gedownload te controleren
- Gebruik van UUIDs in plaats van Integer Autoincrement Primary Keys met SQLAlchemy en MariaDb
- Maak verbinding met een dienst op een Docker host vanaf een Docker container
- PyInstaller en Cython gebruiken om een Python executable te maken
- SQLAlchemy: Gebruik van Cascade Deletes om verwante objecten te verwijderen
- Flask RESTful API verzoekparametervalidatie met Marshmallow-schema's