{"id":31642477,"url":"https://github.com/tameronline/llol_step04","last_synced_at":"2025-10-07T03:59:42.369Z","repository":{"id":298497611,"uuid":"999915969","full_name":"TamerOnLine/llol_step04","owner":"TamerOnLine","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-11T12:02:20.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-11T12:37:51.565Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TamerOnLine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-11T01:56:29.000Z","updated_at":"2025-06-11T12:02:23.000Z","dependencies_parsed_at":"2025-06-11T12:39:07.530Z","dependency_job_id":"fd81eb3a-47de-4f6e-b8ad-815a41e10125","html_url":"https://github.com/TamerOnLine/llol_step04","commit_stats":null,"previous_names":["tameronline/llol_step04"],"tags_count":0,"template":true,"template_full_name":"TamerOnLine/llol_step03","purl":"pkg:github/TamerOnLine/llol_step04","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step04","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step04/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step04/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step04/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TamerOnLine","download_url":"https://codeload.github.com/TamerOnLine/llol_step04/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TamerOnLine%2Fllol_step04/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278717435,"owners_count":26033542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-07T03:59:36.543Z","updated_at":"2025-10-07T03:59:42.363Z","avatar_url":"https://github.com/TamerOnLine.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Step 04 – Dynamic Translation Integration\n\nThis step represents a major breakthrough in building a multilingual-ready resume management system using Flask and Babel.\n\nInstead of relying on hardcoded translations, we now support **fully dynamic translation** of user-generated content, UI text, and database fields – including RTL support for Arabic.\n\n---\n\n## ✅ Key Accomplishments\n\n- Implemented dynamic translation fields (e.g. `title_translations`, `value_translations`)\n- Applied `force_locale(get_locale())` to enforce active language in UI rendering\n- Enabled flash message translations with context-aware control\n- Added `dir=\"rtl\"` support for Arabic in the HTML layout\n- Activated session-based language switching across all admin routes and templates\n\n---\n\n## 🧠 Why There Is No Manual Translation Here\n\n\u003e This project does **not** rely on manually written dual-language documentation.  \n\u003e All translatable elements are rendered **dynamically** based on the active language selected by the user.\n\n🌐 Instead of duplicating content in this README file, the system itself showcases how multilingual rendering works – live and in real time.\n\n---\n\n## 🌍 Try It Yourself\n\nTo experience dynamic translation in action, simply run the app and switch languages via the admin panel or by using URL parameters like:\n\n```\n/admin/resume_builder?lang=ar\n/admin/resume_builder?lang=en\n```\n\nThe content will be automatically rendered in the selected language, including layout direction.\n\n\n\n## 🛠️ Next Step\n\n\u003e 👉 [Go to llol_step05 →](https://github.com/TamerOnLine/llol_step05)\n\n- Language-aware admin forms\n- Live editing in multiple languages\n- Auto-translation features\n\n---\n\n## 📜 License\n\nThis project is open-source under the MIT License.  \nFeel free to explore and build upon it.\n\n---\n\n## 👨‍💻 Developer\n\nBy [@TamerOnLine](https://github.com/TamerOnLine)  \nUnder the umbrella of [Flask University](https://github.com/Flask-University)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftameronline%2Fllol_step04","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftameronline%2Fllol_step04","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftameronline%2Fllol_step04/lists"}