[{"data":1,"prerenderedAt":18468},["ShallowReactive",2],{"navigation":3,"/internationalization-and-localization/locale-middleware":1016,"/internationalization-and-localization/locale-middleware-surround":18463},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":669,"body":1018,"description":1028,"extension":18458,"links":18459,"meta":18460,"navigation":1242,"path":670,"seo":18461,"stem":671,"__hash__":18462},"docs/17.internationalization-and-localization/05.locale-middleware.md",{"type":1019,"value":1020,"toc":18424},"minimark",[1021,1025,1029,1034,1039,1047,1090,1094,1546,1550,1554,4344,4348,4352,5907,5911,7720,7724,7728,9844,9848,9852,12072,12076,13746,13750,13754,14211,14215,14713,14717,14721,15496,15500,16098,16102,16106,17589,17593,17597,18418,18421],[1022,1023,669],"h1",{"id":1024},"locale-middleware",[1026,1027,1028],"p",{},"Django's locale middleware automatically detects and activates the appropriate language for each request, providing seamless internationalization without requiring manual language management. This chapter covers configuring, customizing, and optimizing locale middleware for sophisticated multilingual applications with advanced language detection and user preference management.",[1030,1031,1033],"h2",{"id":1032},"understanding-locale-middleware","Understanding Locale Middleware",[1035,1036,1038],"h3",{"id":1037},"how-locale-middleware-works","How Locale Middleware Works",[1026,1040,1041,1042,1046],{},"Django's ",[1043,1044,1045],"code",{},"LocaleMiddleware"," follows a specific order to determine the appropriate language:",[1048,1049,1050,1062,1068,1074,1080],"ol",{},[1051,1052,1053,1057,1058,1061],"li",{},[1054,1055,1056],"strong",{},"URL Language Prefix",": Check for language code in URL path (",[1043,1059,1060],{},"/es/blog/",")",[1051,1063,1064,1067],{},[1054,1065,1066],{},"Session Language",": Look for language preference in user session",[1051,1069,1070,1073],{},[1054,1071,1072],{},"Cookie Language",": Check for language preference in cookies",[1051,1075,1076,1079],{},[1054,1077,1078],{},"Accept-Language Header",": Parse browser's language preferences",[1051,1081,1082,1085,1086,1089],{},[1054,1083,1084],{},"Default Language",": Fall back to ",[1043,1087,1088],{},"LANGUAGE_CODE"," setting",[1035,1091,1093],{"id":1092},"basic-middleware-configuration","Basic Middleware Configuration",[1095,1096,1101],"pre",{"className":1097,"code":1098,"language":1099,"meta":1100,"style":1100},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# settings.py\nMIDDLEWARE = [\n    'django.middleware.security.SecurityMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.middleware.locale.LocaleMiddleware',  # Add after SessionMiddleware\n    'django.middleware.common.CommonMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    'django.middleware.clickjacking.XFrameOptionsMiddleware',\n]\n\n# Language configuration\nLANGUAGE_CODE = 'en'\nLANGUAGES = [\n    ('en', 'English'),\n    ('es', 'Español'),\n    ('fr', 'Français'),\n    ('de', 'Deutsch'),\n    ('ja', '日本語'),\n]\n\n# Language cookie settings\nLANGUAGE_COOKIE_NAME = 'django_language'\nLANGUAGE_COOKIE_AGE = 365 * 24 * 60 * 60  # 1 year\nLANGUAGE_COOKIE_DOMAIN = None\nLANGUAGE_COOKIE_PATH = '/'\nLANGUAGE_COOKIE_SECURE = False  # Set to True in production with HTTPS\nLANGUAGE_COOKIE_HTTPONLY = False\nLANGUAGE_COOKIE_SAMESITE = 'Lax'\n\n# Session language key\nLANGUAGE_SESSION_KEY = 'django_language'\n","python","",[1043,1102,1103,1112,1126,1143,1155,1171,1183,1195,1207,1219,1231,1237,1244,1250,1266,1276,1300,1323,1346,1369,1392,1397,1402,1408,1423,1454,1466,1481,1495,1506,1521,1526,1532],{"__ignoreMap":1100},[1104,1105,1108],"span",{"class":1106,"line":1107},"line",1,[1104,1109,1111],{"class":1110},"s9Tkl","# settings.py\n",[1104,1113,1115,1119,1123],{"class":1106,"line":1114},2,[1104,1116,1118],{"class":1117},"se3Ec","MIDDLEWARE",[1104,1120,1122],{"class":1121},"soVBu"," =",[1104,1124,1125],{"class":1121}," [\n",[1104,1127,1129,1133,1137,1140],{"class":1106,"line":1128},3,[1104,1130,1132],{"class":1131},"sbYkP","    '",[1104,1134,1136],{"class":1135},"sTbE_","django.middleware.security.SecurityMiddleware",[1104,1138,1139],{"class":1131},"'",[1104,1141,1142],{"class":1121},",\n",[1104,1144,1146,1148,1151,1153],{"class":1106,"line":1145},4,[1104,1147,1132],{"class":1131},[1104,1149,1150],{"class":1135},"django.contrib.sessions.middleware.SessionMiddleware",[1104,1152,1139],{"class":1131},[1104,1154,1142],{"class":1121},[1104,1156,1158,1160,1163,1165,1168],{"class":1106,"line":1157},5,[1104,1159,1132],{"class":1131},[1104,1161,1162],{"class":1135},"django.middleware.locale.LocaleMiddleware",[1104,1164,1139],{"class":1131},[1104,1166,1167],{"class":1121},",",[1104,1169,1170],{"class":1110},"  # Add after SessionMiddleware\n",[1104,1172,1174,1176,1179,1181],{"class":1106,"line":1173},6,[1104,1175,1132],{"class":1131},[1104,1177,1178],{"class":1135},"django.middleware.common.CommonMiddleware",[1104,1180,1139],{"class":1131},[1104,1182,1142],{"class":1121},[1104,1184,1186,1188,1191,1193],{"class":1106,"line":1185},7,[1104,1187,1132],{"class":1131},[1104,1189,1190],{"class":1135},"django.middleware.csrf.CsrfViewMiddleware",[1104,1192,1139],{"class":1131},[1104,1194,1142],{"class":1121},[1104,1196,1198,1200,1203,1205],{"class":1106,"line":1197},8,[1104,1199,1132],{"class":1131},[1104,1201,1202],{"class":1135},"django.contrib.auth.middleware.AuthenticationMiddleware",[1104,1204,1139],{"class":1131},[1104,1206,1142],{"class":1121},[1104,1208,1210,1212,1215,1217],{"class":1106,"line":1209},9,[1104,1211,1132],{"class":1131},[1104,1213,1214],{"class":1135},"django.contrib.messages.middleware.MessageMiddleware",[1104,1216,1139],{"class":1131},[1104,1218,1142],{"class":1121},[1104,1220,1222,1224,1227,1229],{"class":1106,"line":1221},10,[1104,1223,1132],{"class":1131},[1104,1225,1226],{"class":1135},"django.middleware.clickjacking.XFrameOptionsMiddleware",[1104,1228,1139],{"class":1131},[1104,1230,1142],{"class":1121},[1104,1232,1234],{"class":1106,"line":1233},11,[1104,1235,1236],{"class":1121},"]\n",[1104,1238,1240],{"class":1106,"line":1239},12,[1104,1241,1243],{"emptyLinePlaceholder":1242},true,"\n",[1104,1245,1247],{"class":1106,"line":1246},13,[1104,1248,1249],{"class":1110},"# Language configuration\n",[1104,1251,1253,1255,1257,1260,1263],{"class":1106,"line":1252},14,[1104,1254,1088],{"class":1117},[1104,1256,1122],{"class":1121},[1104,1258,1259],{"class":1131}," '",[1104,1261,1262],{"class":1135},"en",[1104,1264,1265],{"class":1131},"'\n",[1104,1267,1269,1272,1274],{"class":1106,"line":1268},15,[1104,1270,1271],{"class":1117},"LANGUAGES",[1104,1273,1122],{"class":1121},[1104,1275,1125],{"class":1121},[1104,1277,1279,1282,1284,1286,1288,1290,1292,1295,1297],{"class":1106,"line":1278},16,[1104,1280,1281],{"class":1121},"    (",[1104,1283,1139],{"class":1131},[1104,1285,1262],{"class":1135},[1104,1287,1139],{"class":1131},[1104,1289,1167],{"class":1121},[1104,1291,1259],{"class":1131},[1104,1293,1294],{"class":1135},"English",[1104,1296,1139],{"class":1131},[1104,1298,1299],{"class":1121},"),\n",[1104,1301,1303,1305,1307,1310,1312,1314,1316,1319,1321],{"class":1106,"line":1302},17,[1104,1304,1281],{"class":1121},[1104,1306,1139],{"class":1131},[1104,1308,1309],{"class":1135},"es",[1104,1311,1139],{"class":1131},[1104,1313,1167],{"class":1121},[1104,1315,1259],{"class":1131},[1104,1317,1318],{"class":1135},"Español",[1104,1320,1139],{"class":1131},[1104,1322,1299],{"class":1121},[1104,1324,1326,1328,1330,1333,1335,1337,1339,1342,1344],{"class":1106,"line":1325},18,[1104,1327,1281],{"class":1121},[1104,1329,1139],{"class":1131},[1104,1331,1332],{"class":1135},"fr",[1104,1334,1139],{"class":1131},[1104,1336,1167],{"class":1121},[1104,1338,1259],{"class":1131},[1104,1340,1341],{"class":1135},"Français",[1104,1343,1139],{"class":1131},[1104,1345,1299],{"class":1121},[1104,1347,1349,1351,1353,1356,1358,1360,1362,1365,1367],{"class":1106,"line":1348},19,[1104,1350,1281],{"class":1121},[1104,1352,1139],{"class":1131},[1104,1354,1355],{"class":1135},"de",[1104,1357,1139],{"class":1131},[1104,1359,1167],{"class":1121},[1104,1361,1259],{"class":1131},[1104,1363,1364],{"class":1135},"Deutsch",[1104,1366,1139],{"class":1131},[1104,1368,1299],{"class":1121},[1104,1370,1372,1374,1376,1379,1381,1383,1385,1388,1390],{"class":1106,"line":1371},20,[1104,1373,1281],{"class":1121},[1104,1375,1139],{"class":1131},[1104,1377,1378],{"class":1135},"ja",[1104,1380,1139],{"class":1131},[1104,1382,1167],{"class":1121},[1104,1384,1259],{"class":1131},[1104,1386,1387],{"class":1135},"日本語",[1104,1389,1139],{"class":1131},[1104,1391,1299],{"class":1121},[1104,1393,1395],{"class":1106,"line":1394},21,[1104,1396,1236],{"class":1121},[1104,1398,1400],{"class":1106,"line":1399},22,[1104,1401,1243],{"emptyLinePlaceholder":1242},[1104,1403,1405],{"class":1106,"line":1404},23,[1104,1406,1407],{"class":1110},"# Language cookie settings\n",[1104,1409,1411,1414,1416,1418,1421],{"class":1106,"line":1410},24,[1104,1412,1413],{"class":1117},"LANGUAGE_COOKIE_NAME",[1104,1415,1122],{"class":1121},[1104,1417,1259],{"class":1131},[1104,1419,1420],{"class":1135},"django_language",[1104,1422,1265],{"class":1131},[1104,1424,1426,1429,1431,1435,1439,1442,1444,1447,1449,1451],{"class":1106,"line":1425},25,[1104,1427,1428],{"class":1117},"LANGUAGE_COOKIE_AGE",[1104,1430,1122],{"class":1121},[1104,1432,1434],{"class":1433},"s7CZa"," 365",[1104,1436,1438],{"class":1437},"sVsLi"," *",[1104,1440,1441],{"class":1433}," 24",[1104,1443,1438],{"class":1437},[1104,1445,1446],{"class":1433}," 60",[1104,1448,1438],{"class":1437},[1104,1450,1446],{"class":1433},[1104,1452,1453],{"class":1110},"  # 1 year\n",[1104,1455,1457,1460,1462],{"class":1106,"line":1456},26,[1104,1458,1459],{"class":1117},"LANGUAGE_COOKIE_DOMAIN",[1104,1461,1122],{"class":1121},[1104,1463,1465],{"class":1464},"s8XtY"," None\n",[1104,1467,1469,1472,1474,1476,1479],{"class":1106,"line":1468},27,[1104,1470,1471],{"class":1117},"LANGUAGE_COOKIE_PATH",[1104,1473,1122],{"class":1121},[1104,1475,1259],{"class":1131},[1104,1477,1478],{"class":1135},"/",[1104,1480,1265],{"class":1131},[1104,1482,1484,1487,1489,1492],{"class":1106,"line":1483},28,[1104,1485,1486],{"class":1117},"LANGUAGE_COOKIE_SECURE",[1104,1488,1122],{"class":1121},[1104,1490,1491],{"class":1464}," False",[1104,1493,1494],{"class":1110},"  # Set to True in production with HTTPS\n",[1104,1496,1498,1501,1503],{"class":1106,"line":1497},29,[1104,1499,1500],{"class":1117},"LANGUAGE_COOKIE_HTTPONLY",[1104,1502,1122],{"class":1121},[1104,1504,1505],{"class":1464}," False\n",[1104,1507,1509,1512,1514,1516,1519],{"class":1106,"line":1508},30,[1104,1510,1511],{"class":1117},"LANGUAGE_COOKIE_SAMESITE",[1104,1513,1122],{"class":1121},[1104,1515,1259],{"class":1131},[1104,1517,1518],{"class":1135},"Lax",[1104,1520,1265],{"class":1131},[1104,1522,1524],{"class":1106,"line":1523},31,[1104,1525,1243],{"emptyLinePlaceholder":1242},[1104,1527,1529],{"class":1106,"line":1528},32,[1104,1530,1531],{"class":1110},"# Session language key\n",[1104,1533,1535,1538,1540,1542,1544],{"class":1106,"line":1534},33,[1104,1536,1537],{"class":1117},"LANGUAGE_SESSION_KEY",[1104,1539,1122],{"class":1121},[1104,1541,1259],{"class":1131},[1104,1543,1420],{"class":1135},[1104,1545,1265],{"class":1131},[1030,1547,1549],{"id":1548},"custom-locale-middleware","Custom Locale Middleware",[1035,1551,1553],{"id":1552},"enhanced-locale-middleware","Enhanced Locale Middleware",[1095,1555,1557],{"className":1097,"code":1556,"language":1099,"meta":1100,"style":1100},"# middleware/locale.py\nfrom django.middleware.locale import LocaleMiddleware\nfrom django.utils import translation\nfrom django.conf import settings\nfrom django.utils.cache import patch_vary_headers\nfrom django.utils.deprecation import MiddlewareMixin\nimport re\nimport logging\n\nlogger = logging.getLogger(__name__)\n\nclass EnhancedLocaleMiddleware(LocaleMiddleware):\n    \"\"\"Enhanced locale middleware with additional features.\"\"\"\n    \n    def __init__(self, get_response):\n        super().__init__(get_response)\n        self.get_response = get_response\n    \n    def process_request(self, request):\n        \"\"\"Process request with enhanced language detection.\"\"\"\n        # Store original language for comparison\n        original_language = translation.get_language()\n        \n        # Custom language detection\n        language = self.get_language_from_request(request)\n        \n        # Activate the detected language\n        translation.activate(language)\n        request.LANGUAGE_CODE = translation.get_language()\n        \n        # Log language detection for debugging\n        if settings.DEBUG:\n            logger.debug(f'Language detected: {language} for {request.path}')\n        \n        # Store language change for analytics\n        if hasattr(request, 'user') and request.user.is_authenticated:\n            self.track_language_usage(request, language)\n    \n    def process_response(self, request, response):\n        \"\"\"Process response with language-specific optimizations.\"\"\"\n        language = getattr(request, 'LANGUAGE_CODE', None)\n        \n        if language:\n            # Set language cookie if changed\n            current_cookie_lang = request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME)\n            if current_cookie_lang != language:\n                response.set_cookie(\n                    settings.LANGUAGE_COOKIE_NAME,\n                    language,\n                    max_age=settings.LANGUAGE_COOKIE_AGE,\n                    path=settings.LANGUAGE_COOKIE_PATH,\n                    domain=settings.LANGUAGE_COOKIE_DOMAIN,\n                    secure=settings.LANGUAGE_COOKIE_SECURE,\n                    httponly=settings.LANGUAGE_COOKIE_HTTPONLY,\n                    samesite=settings.LANGUAGE_COOKIE_SAMESITE,\n                )\n            \n            # Add language to response headers\n            response['Content-Language'] = language\n            \n            # Add Vary header for caching\n            patch_vary_headers(response, ('Accept-Language', 'Cookie'))\n        \n        return response\n    \n    def get_language_from_request(self, request):\n        \"\"\"Enhanced language detection with custom logic.\"\"\"\n        # 1. Check URL language prefix (handled by parent class)\n        language = super().get_language_from_request(request)\n        if language:\n            return language\n        \n        # 2. Check user profile language preference\n        if hasattr(request, 'user') and request.user.is_authenticated:\n            try:\n                profile_language = request.user.userprofile.language\n                if profile_language and self.is_language_supported(profile_language):\n                    return profile_language\n            except AttributeError:\n                pass\n        \n        # 3. Check subdomain-based language\n        subdomain_language = self.get_language_from_subdomain(request)\n        if subdomain_language:\n            return subdomain_language\n        \n        # 4. Check custom header (for API clients)\n        header_language = request.META.get('HTTP_X_LANGUAGE')\n        if header_language and self.is_language_supported(header_language):\n            return header_language\n        \n        # 5. Check GeoIP-based language detection\n        geoip_language = self.get_language_from_geoip(request)\n        if geoip_language:\n            return geoip_language\n        \n        # 6. Fall back to default detection\n        return translation.get_language_from_request(request, check_path=True)\n    \n    def get_language_from_subdomain(self, request):\n        \"\"\"Extract language from subdomain.\"\"\"\n        host = request.get_host().split(':')[0]  # Remove port\n        parts = host.split('.')\n        \n        if len(parts) > 2:  # Has subdomain\n            subdomain = parts[0]\n            if self.is_language_supported(subdomain):\n                return subdomain\n        \n        return None\n    \n    def get_language_from_geoip(self, request):\n        \"\"\"Get language based on user's geographic location.\"\"\"\n        try:\n            from django.contrib.gis.geoip2 import GeoIP2\n            \n            # Get client IP\n            ip = self.get_client_ip(request)\n            if not ip:\n                return None\n            \n            # Get country from IP\n            g = GeoIP2()\n            country = g.country_code(ip)\n            \n            # Map countries to languages\n            country_language_map = {\n                'ES': 'es',  # Spain -> Spanish\n                'MX': 'es',  # Mexico -> Spanish\n                'AR': 'es',  # Argentina -> Spanish\n                'FR': 'fr',  # France -> French\n                'CA': 'fr',  # Canada -> French (could be 'en' too)\n                'DE': 'de',  # Germany -> German\n                'AT': 'de',  # Austria -> German\n                'JP': 'ja',  # Japan -> Japanese\n                'CN': 'zh-hans',  # China -> Simplified Chinese\n                'TW': 'zh-hant',  # Taiwan -> Traditional Chinese\n            }\n            \n            language = country_language_map.get(country)\n            if language and self.is_language_supported(language):\n                return language\n        \n        except Exception as e:\n            logger.warning(f'GeoIP language detection failed: {e}')\n        \n        return None\n    \n    def get_client_ip(self, request):\n        \"\"\"Get client IP address.\"\"\"\n        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')\n        if x_forwarded_for:\n            ip = x_forwarded_for.split(',')[0]\n        else:\n            ip = request.META.get('REMOTE_ADDR')\n        return ip\n    \n    def is_language_supported(self, language_code):\n        \"\"\"Check if language is supported.\"\"\"\n        supported_languages = [lang[0] for lang in settings.LANGUAGES]\n        return language_code in supported_languages\n    \n    def track_language_usage(self, request, language):\n        \"\"\"Track language usage for analytics.\"\"\"\n        # This could be implemented to track language preferences\n        # for analytics or user behavior analysis\n        pass\n\nclass APILocaleMiddleware(MiddlewareMixin):\n    \"\"\"Specialized locale middleware for API endpoints.\"\"\"\n    \n    def process_request(self, request):\n        \"\"\"Process API requests with language detection.\"\"\"\n        # Only process API requests\n        if not request.path.startswith('/api/'):\n            return\n        \n        # Get language from various sources\n        language = (\n            request.META.get('HTTP_ACCEPT_LANGUAGE_OVERRIDE') or\n            request.GET.get('lang') or\n            request.META.get('HTTP_ACCEPT_LANGUAGE', '').split(',')[0].split('-')[0] or\n            settings.LANGUAGE_CODE\n        )\n        \n        # Validate and activate language\n        if language in [lang[0] for lang in settings.LANGUAGES]:\n            translation.activate(language)\n            request.LANGUAGE_CODE = language\n        else:\n            translation.activate(settings.LANGUAGE_CODE)\n            request.LANGUAGE_CODE = settings.LANGUAGE_CODE\n    \n    def process_response(self, request, response):\n        \"\"\"Add language headers to API responses.\"\"\"\n        if hasattr(request, 'LANGUAGE_CODE'):\n            response['Content-Language'] = request.LANGUAGE_CODE\n        return response\n",[1043,1558,1559,1564,1591,1607,1623,1644,1664,1671,1678,1682,1709,1713,1731,1744,1749,1772,1791,1806,1810,1829,1839,1844,1862,1867,1872,1894,1898,1903,1920,1940,1944,1949,1965,2010,2015,2021,2060,2082,2087,2110,2120,2149,2154,2163,2169,2200,2216,2230,2242,2250,2267,2283,2299,2315,2331,2347,2353,2359,2365,2389,2394,2400,2435,2440,2449,2454,2472,2482,2488,2508,2517,2525,2530,2536,2571,2579,2603,2629,2638,2649,2655,2660,2666,2687,2697,2705,2710,2716,2746,2769,2777,2782,2788,2809,2819,2827,2832,2838,2865,2870,2888,2898,2938,2963,2968,2994,3011,3029,3038,3043,3050,3055,3073,3083,3091,3119,3124,3130,3151,3164,3171,3176,3182,3195,3218,3223,3229,3240,3264,3287,3310,3333,3356,3379,3402,3425,3449,3473,3479,3484,3506,3528,3535,3540,3557,3585,3590,3597,3602,3620,3630,3659,3669,3696,3704,3732,3740,3745,3764,3774,3811,3824,3829,3851,3861,3867,3873,3879,3884,3899,3909,3914,3931,3941,3947,3976,3982,3987,3993,4003,4031,4057,4123,4134,4140,4145,4151,4185,4201,4214,4221,4240,4257,4262,4283,4293,4314,4337],{"__ignoreMap":1100},[1104,1560,1561],{"class":1106,"line":1107},[1104,1562,1563],{"class":1110},"# middleware/locale.py\n",[1104,1565,1566,1570,1574,1577,1580,1582,1585,1588],{"class":1106,"line":1114},[1104,1567,1569],{"class":1568},"siDh9","from",[1104,1571,1573],{"class":1572},"sftqT"," django",[1104,1575,1576],{"class":1121},".",[1104,1578,1579],{"class":1572},"middleware",[1104,1581,1576],{"class":1121},[1104,1583,1584],{"class":1572},"locale ",[1104,1586,1587],{"class":1568},"import",[1104,1589,1590],{"class":1572}," LocaleMiddleware\n",[1104,1592,1593,1595,1597,1599,1602,1604],{"class":1106,"line":1128},[1104,1594,1569],{"class":1568},[1104,1596,1573],{"class":1572},[1104,1598,1576],{"class":1121},[1104,1600,1601],{"class":1572},"utils ",[1104,1603,1587],{"class":1568},[1104,1605,1606],{"class":1572}," translation\n",[1104,1608,1609,1611,1613,1615,1618,1620],{"class":1106,"line":1145},[1104,1610,1569],{"class":1568},[1104,1612,1573],{"class":1572},[1104,1614,1576],{"class":1121},[1104,1616,1617],{"class":1572},"conf ",[1104,1619,1587],{"class":1568},[1104,1621,1622],{"class":1572}," settings\n",[1104,1624,1625,1627,1629,1631,1634,1636,1639,1641],{"class":1106,"line":1157},[1104,1626,1569],{"class":1568},[1104,1628,1573],{"class":1572},[1104,1630,1576],{"class":1121},[1104,1632,1633],{"class":1572},"utils",[1104,1635,1576],{"class":1121},[1104,1637,1638],{"class":1572},"cache ",[1104,1640,1587],{"class":1568},[1104,1642,1643],{"class":1572}," patch_vary_headers\n",[1104,1645,1646,1648,1650,1652,1654,1656,1659,1661],{"class":1106,"line":1173},[1104,1647,1569],{"class":1568},[1104,1649,1573],{"class":1572},[1104,1651,1576],{"class":1121},[1104,1653,1633],{"class":1572},[1104,1655,1576],{"class":1121},[1104,1657,1658],{"class":1572},"deprecation ",[1104,1660,1587],{"class":1568},[1104,1662,1663],{"class":1572}," MiddlewareMixin\n",[1104,1665,1666,1668],{"class":1106,"line":1185},[1104,1667,1587],{"class":1568},[1104,1669,1670],{"class":1572}," re\n",[1104,1672,1673,1675],{"class":1106,"line":1197},[1104,1674,1587],{"class":1568},[1104,1676,1677],{"class":1572}," logging\n",[1104,1679,1680],{"class":1106,"line":1209},[1104,1681,1243],{"emptyLinePlaceholder":1242},[1104,1683,1684,1687,1690,1693,1695,1699,1702,1706],{"class":1106,"line":1221},[1104,1685,1686],{"class":1572},"logger ",[1104,1688,1689],{"class":1121},"=",[1104,1691,1692],{"class":1572}," logging",[1104,1694,1576],{"class":1121},[1104,1696,1698],{"class":1697},"siWMO","getLogger",[1104,1700,1701],{"class":1121},"(",[1104,1703,1705],{"class":1704},"s131V","__name__",[1104,1707,1708],{"class":1121},")\n",[1104,1710,1711],{"class":1106,"line":1233},[1104,1712,1243],{"emptyLinePlaceholder":1242},[1104,1714,1715,1719,1723,1725,1728],{"class":1106,"line":1239},[1104,1716,1718],{"class":1717},"s5Kfy","class",[1104,1720,1722],{"class":1721},"sD-vU"," EnhancedLocaleMiddleware",[1104,1724,1701],{"class":1121},[1104,1726,1045],{"class":1727},"sYn-s",[1104,1729,1730],{"class":1121},"):\n",[1104,1732,1733,1737,1741],{"class":1106,"line":1246},[1104,1734,1736],{"class":1735},"sm7ve","    \"\"\"",[1104,1738,1740],{"class":1739},"sVyVU","Enhanced locale middleware with additional features.",[1104,1742,1743],{"class":1735},"\"\"\"\n",[1104,1745,1746],{"class":1106,"line":1252},[1104,1747,1748],{"class":1572},"    \n",[1104,1750,1751,1754,1758,1760,1764,1766,1770],{"class":1106,"line":1268},[1104,1752,1753],{"class":1717},"    def",[1104,1755,1757],{"class":1756},"sJdAF"," __init__",[1104,1759,1701],{"class":1121},[1104,1761,1763],{"class":1762},"sRjD_","self",[1104,1765,1167],{"class":1121},[1104,1767,1769],{"class":1768},"sCyAa"," get_response",[1104,1771,1730],{"class":1121},[1104,1773,1774,1778,1781,1784,1786,1789],{"class":1106,"line":1278},[1104,1775,1777],{"class":1776},"sa2tF","        super",[1104,1779,1780],{"class":1121},"().",[1104,1782,1783],{"class":1756},"__init__",[1104,1785,1701],{"class":1121},[1104,1787,1788],{"class":1697},"get_response",[1104,1790,1708],{"class":1121},[1104,1792,1793,1796,1798,1801,1803],{"class":1106,"line":1302},[1104,1794,1795],{"class":1117},"        self",[1104,1797,1576],{"class":1121},[1104,1799,1788],{"class":1800},"sBPpx",[1104,1802,1122],{"class":1121},[1104,1804,1805],{"class":1572}," get_response\n",[1104,1807,1808],{"class":1106,"line":1325},[1104,1809,1748],{"class":1572},[1104,1811,1812,1814,1818,1820,1822,1824,1827],{"class":1106,"line":1348},[1104,1813,1753],{"class":1717},[1104,1815,1817],{"class":1816},"sljsM"," process_request",[1104,1819,1701],{"class":1121},[1104,1821,1763],{"class":1762},[1104,1823,1167],{"class":1121},[1104,1825,1826],{"class":1768}," request",[1104,1828,1730],{"class":1121},[1104,1830,1831,1834,1837],{"class":1106,"line":1371},[1104,1832,1833],{"class":1735},"        \"\"\"",[1104,1835,1836],{"class":1739},"Process request with enhanced language detection.",[1104,1838,1743],{"class":1735},[1104,1840,1841],{"class":1106,"line":1394},[1104,1842,1843],{"class":1110},"        # Store original language for comparison\n",[1104,1845,1846,1849,1851,1854,1856,1859],{"class":1106,"line":1399},[1104,1847,1848],{"class":1572},"        original_language ",[1104,1850,1689],{"class":1121},[1104,1852,1853],{"class":1572}," translation",[1104,1855,1576],{"class":1121},[1104,1857,1858],{"class":1697},"get_language",[1104,1860,1861],{"class":1121},"()\n",[1104,1863,1864],{"class":1106,"line":1404},[1104,1865,1866],{"class":1572},"        \n",[1104,1868,1869],{"class":1106,"line":1410},[1104,1870,1871],{"class":1110},"        # Custom language detection\n",[1104,1873,1874,1877,1879,1882,1884,1887,1889,1892],{"class":1106,"line":1425},[1104,1875,1876],{"class":1572},"        language ",[1104,1878,1689],{"class":1121},[1104,1880,1881],{"class":1117}," self",[1104,1883,1576],{"class":1121},[1104,1885,1886],{"class":1697},"get_language_from_request",[1104,1888,1701],{"class":1121},[1104,1890,1891],{"class":1697},"request",[1104,1893,1708],{"class":1121},[1104,1895,1896],{"class":1106,"line":1456},[1104,1897,1866],{"class":1572},[1104,1899,1900],{"class":1106,"line":1468},[1104,1901,1902],{"class":1110},"        # Activate the detected language\n",[1104,1904,1905,1908,1910,1913,1915,1918],{"class":1106,"line":1483},[1104,1906,1907],{"class":1572},"        translation",[1104,1909,1576],{"class":1121},[1104,1911,1912],{"class":1697},"activate",[1104,1914,1701],{"class":1121},[1104,1916,1917],{"class":1697},"language",[1104,1919,1708],{"class":1121},[1104,1921,1922,1925,1927,1930,1932,1934,1936,1938],{"class":1106,"line":1497},[1104,1923,1924],{"class":1572},"        request",[1104,1926,1576],{"class":1121},[1104,1928,1088],{"class":1929},"sFGJz",[1104,1931,1122],{"class":1121},[1104,1933,1853],{"class":1572},[1104,1935,1576],{"class":1121},[1104,1937,1858],{"class":1697},[1104,1939,1861],{"class":1121},[1104,1941,1942],{"class":1106,"line":1508},[1104,1943,1866],{"class":1572},[1104,1945,1946],{"class":1106,"line":1523},[1104,1947,1948],{"class":1110},"        # Log language detection for debugging\n",[1104,1950,1951,1954,1957,1959,1962],{"class":1106,"line":1528},[1104,1952,1953],{"class":1568},"        if",[1104,1955,1956],{"class":1572}," settings",[1104,1958,1576],{"class":1121},[1104,1960,1961],{"class":1929},"DEBUG",[1104,1963,1964],{"class":1121},":\n",[1104,1966,1967,1970,1972,1975,1977,1980,1983,1987,1989,1992,1995,1997,1999,2001,2004,2006,2008],{"class":1106,"line":1534},[1104,1968,1969],{"class":1572},"            logger",[1104,1971,1576],{"class":1121},[1104,1973,1974],{"class":1697},"debug",[1104,1976,1701],{"class":1121},[1104,1978,1979],{"class":1717},"f",[1104,1981,1982],{"class":1135},"'Language detected: ",[1104,1984,1986],{"class":1985},"s3h35","{",[1104,1988,1917],{"class":1697},[1104,1990,1991],{"class":1985},"}",[1104,1993,1994],{"class":1135}," for ",[1104,1996,1986],{"class":1985},[1104,1998,1891],{"class":1697},[1104,2000,1576],{"class":1121},[1104,2002,2003],{"class":1800},"path",[1104,2005,1991],{"class":1985},[1104,2007,1139],{"class":1135},[1104,2009,1708],{"class":1121},[1104,2011,2013],{"class":1106,"line":2012},34,[1104,2014,1866],{"class":1572},[1104,2016,2018],{"class":1106,"line":2017},35,[1104,2019,2020],{"class":1110},"        # Store language change for analytics\n",[1104,2022,2024,2026,2029,2031,2033,2035,2037,2040,2042,2044,2047,2049,2051,2053,2055,2058],{"class":1106,"line":2023},36,[1104,2025,1953],{"class":1568},[1104,2027,2028],{"class":1756}," hasattr",[1104,2030,1701],{"class":1121},[1104,2032,1891],{"class":1697},[1104,2034,1167],{"class":1121},[1104,2036,1259],{"class":1131},[1104,2038,2039],{"class":1135},"user",[1104,2041,1139],{"class":1131},[1104,2043,1061],{"class":1121},[1104,2045,2046],{"class":1437}," and",[1104,2048,1826],{"class":1572},[1104,2050,1576],{"class":1121},[1104,2052,2039],{"class":1800},[1104,2054,1576],{"class":1121},[1104,2056,2057],{"class":1800},"is_authenticated",[1104,2059,1964],{"class":1121},[1104,2061,2063,2066,2068,2071,2073,2075,2077,2080],{"class":1106,"line":2062},37,[1104,2064,2065],{"class":1117},"            self",[1104,2067,1576],{"class":1121},[1104,2069,2070],{"class":1697},"track_language_usage",[1104,2072,1701],{"class":1121},[1104,2074,1891],{"class":1697},[1104,2076,1167],{"class":1121},[1104,2078,2079],{"class":1697}," language",[1104,2081,1708],{"class":1121},[1104,2083,2085],{"class":1106,"line":2084},38,[1104,2086,1748],{"class":1572},[1104,2088,2090,2092,2095,2097,2099,2101,2103,2105,2108],{"class":1106,"line":2089},39,[1104,2091,1753],{"class":1717},[1104,2093,2094],{"class":1816}," process_response",[1104,2096,1701],{"class":1121},[1104,2098,1763],{"class":1762},[1104,2100,1167],{"class":1121},[1104,2102,1826],{"class":1768},[1104,2104,1167],{"class":1121},[1104,2106,2107],{"class":1768}," response",[1104,2109,1730],{"class":1121},[1104,2111,2113,2115,2118],{"class":1106,"line":2112},40,[1104,2114,1833],{"class":1735},[1104,2116,2117],{"class":1739},"Process response with language-specific optimizations.",[1104,2119,1743],{"class":1735},[1104,2121,2123,2125,2127,2130,2132,2134,2136,2138,2140,2142,2144,2147],{"class":1106,"line":2122},41,[1104,2124,1876],{"class":1572},[1104,2126,1689],{"class":1121},[1104,2128,2129],{"class":1756}," getattr",[1104,2131,1701],{"class":1121},[1104,2133,1891],{"class":1697},[1104,2135,1167],{"class":1121},[1104,2137,1259],{"class":1131},[1104,2139,1088],{"class":1135},[1104,2141,1139],{"class":1131},[1104,2143,1167],{"class":1121},[1104,2145,2146],{"class":1464}," None",[1104,2148,1708],{"class":1121},[1104,2150,2152],{"class":1106,"line":2151},42,[1104,2153,1866],{"class":1572},[1104,2155,2157,2159,2161],{"class":1106,"line":2156},43,[1104,2158,1953],{"class":1568},[1104,2160,2079],{"class":1572},[1104,2162,1964],{"class":1121},[1104,2164,2166],{"class":1106,"line":2165},44,[1104,2167,2168],{"class":1110},"            # Set language cookie if changed\n",[1104,2170,2172,2175,2177,2179,2181,2184,2186,2189,2191,2194,2196,2198],{"class":1106,"line":2171},45,[1104,2173,2174],{"class":1572},"            current_cookie_lang ",[1104,2176,1689],{"class":1121},[1104,2178,1826],{"class":1572},[1104,2180,1576],{"class":1121},[1104,2182,2183],{"class":1929},"COOKIES",[1104,2185,1576],{"class":1121},[1104,2187,2188],{"class":1697},"get",[1104,2190,1701],{"class":1121},[1104,2192,2193],{"class":1697},"settings",[1104,2195,1576],{"class":1121},[1104,2197,1413],{"class":1929},[1104,2199,1708],{"class":1121},[1104,2201,2203,2206,2209,2212,2214],{"class":1106,"line":2202},46,[1104,2204,2205],{"class":1568},"            if",[1104,2207,2208],{"class":1572}," current_cookie_lang ",[1104,2210,2211],{"class":1437},"!=",[1104,2213,2079],{"class":1572},[1104,2215,1964],{"class":1121},[1104,2217,2219,2222,2224,2227],{"class":1106,"line":2218},47,[1104,2220,2221],{"class":1572},"                response",[1104,2223,1576],{"class":1121},[1104,2225,2226],{"class":1697},"set_cookie",[1104,2228,2229],{"class":1121},"(\n",[1104,2231,2233,2236,2238,2240],{"class":1106,"line":2232},48,[1104,2234,2235],{"class":1697},"                    settings",[1104,2237,1576],{"class":1121},[1104,2239,1413],{"class":1929},[1104,2241,1142],{"class":1121},[1104,2243,2245,2248],{"class":1106,"line":2244},49,[1104,2246,2247],{"class":1697},"                    language",[1104,2249,1142],{"class":1121},[1104,2251,2253,2257,2259,2261,2263,2265],{"class":1106,"line":2252},50,[1104,2254,2256],{"class":2255},"sqOPj","                    max_age",[1104,2258,1689],{"class":1121},[1104,2260,2193],{"class":1697},[1104,2262,1576],{"class":1121},[1104,2264,1428],{"class":1929},[1104,2266,1142],{"class":1121},[1104,2268,2270,2273,2275,2277,2279,2281],{"class":1106,"line":2269},51,[1104,2271,2272],{"class":2255},"                    path",[1104,2274,1689],{"class":1121},[1104,2276,2193],{"class":1697},[1104,2278,1576],{"class":1121},[1104,2280,1471],{"class":1929},[1104,2282,1142],{"class":1121},[1104,2284,2286,2289,2291,2293,2295,2297],{"class":1106,"line":2285},52,[1104,2287,2288],{"class":2255},"                    domain",[1104,2290,1689],{"class":1121},[1104,2292,2193],{"class":1697},[1104,2294,1576],{"class":1121},[1104,2296,1459],{"class":1929},[1104,2298,1142],{"class":1121},[1104,2300,2302,2305,2307,2309,2311,2313],{"class":1106,"line":2301},53,[1104,2303,2304],{"class":2255},"                    secure",[1104,2306,1689],{"class":1121},[1104,2308,2193],{"class":1697},[1104,2310,1576],{"class":1121},[1104,2312,1486],{"class":1929},[1104,2314,1142],{"class":1121},[1104,2316,2318,2321,2323,2325,2327,2329],{"class":1106,"line":2317},54,[1104,2319,2320],{"class":2255},"                    httponly",[1104,2322,1689],{"class":1121},[1104,2324,2193],{"class":1697},[1104,2326,1576],{"class":1121},[1104,2328,1500],{"class":1929},[1104,2330,1142],{"class":1121},[1104,2332,2334,2337,2339,2341,2343,2345],{"class":1106,"line":2333},55,[1104,2335,2336],{"class":2255},"                    samesite",[1104,2338,1689],{"class":1121},[1104,2340,2193],{"class":1697},[1104,2342,1576],{"class":1121},[1104,2344,1511],{"class":1929},[1104,2346,1142],{"class":1121},[1104,2348,2350],{"class":1106,"line":2349},56,[1104,2351,2352],{"class":1121},"                )\n",[1104,2354,2356],{"class":1106,"line":2355},57,[1104,2357,2358],{"class":1572},"            \n",[1104,2360,2362],{"class":1106,"line":2361},58,[1104,2363,2364],{"class":1110},"            # Add language to response headers\n",[1104,2366,2368,2371,2374,2376,2379,2381,2384,2386],{"class":1106,"line":2367},59,[1104,2369,2370],{"class":1572},"            response",[1104,2372,2373],{"class":1121},"[",[1104,2375,1139],{"class":1131},[1104,2377,2378],{"class":1135},"Content-Language",[1104,2380,1139],{"class":1131},[1104,2382,2383],{"class":1121},"]",[1104,2385,1122],{"class":1121},[1104,2387,2388],{"class":1572}," language\n",[1104,2390,2392],{"class":1106,"line":2391},60,[1104,2393,2358],{"class":1572},[1104,2395,2397],{"class":1106,"line":2396},61,[1104,2398,2399],{"class":1110},"            # Add Vary header for caching\n",[1104,2401,2403,2406,2408,2411,2413,2416,2418,2421,2423,2425,2427,2430,2432],{"class":1106,"line":2402},62,[1104,2404,2405],{"class":1697},"            patch_vary_headers",[1104,2407,1701],{"class":1121},[1104,2409,2410],{"class":1697},"response",[1104,2412,1167],{"class":1121},[1104,2414,2415],{"class":1121}," (",[1104,2417,1139],{"class":1131},[1104,2419,2420],{"class":1135},"Accept-Language",[1104,2422,1139],{"class":1131},[1104,2424,1167],{"class":1121},[1104,2426,1259],{"class":1131},[1104,2428,2429],{"class":1135},"Cookie",[1104,2431,1139],{"class":1131},[1104,2433,2434],{"class":1121},"))\n",[1104,2436,2438],{"class":1106,"line":2437},63,[1104,2439,1866],{"class":1572},[1104,2441,2443,2446],{"class":1106,"line":2442},64,[1104,2444,2445],{"class":1568},"        return",[1104,2447,2448],{"class":1572}," response\n",[1104,2450,2452],{"class":1106,"line":2451},65,[1104,2453,1748],{"class":1572},[1104,2455,2457,2459,2462,2464,2466,2468,2470],{"class":1106,"line":2456},66,[1104,2458,1753],{"class":1717},[1104,2460,2461],{"class":1816}," get_language_from_request",[1104,2463,1701],{"class":1121},[1104,2465,1763],{"class":1762},[1104,2467,1167],{"class":1121},[1104,2469,1826],{"class":1768},[1104,2471,1730],{"class":1121},[1104,2473,2475,2477,2480],{"class":1106,"line":2474},67,[1104,2476,1833],{"class":1735},[1104,2478,2479],{"class":1739},"Enhanced language detection with custom logic.",[1104,2481,1743],{"class":1735},[1104,2483,2485],{"class":1106,"line":2484},68,[1104,2486,2487],{"class":1110},"        # 1. Check URL language prefix (handled by parent class)\n",[1104,2489,2491,2493,2495,2498,2500,2502,2504,2506],{"class":1106,"line":2490},69,[1104,2492,1876],{"class":1572},[1104,2494,1689],{"class":1121},[1104,2496,2497],{"class":1776}," super",[1104,2499,1780],{"class":1121},[1104,2501,1886],{"class":1697},[1104,2503,1701],{"class":1121},[1104,2505,1891],{"class":1697},[1104,2507,1708],{"class":1121},[1104,2509,2511,2513,2515],{"class":1106,"line":2510},70,[1104,2512,1953],{"class":1568},[1104,2514,2079],{"class":1572},[1104,2516,1964],{"class":1121},[1104,2518,2520,2523],{"class":1106,"line":2519},71,[1104,2521,2522],{"class":1568},"            return",[1104,2524,2388],{"class":1572},[1104,2526,2528],{"class":1106,"line":2527},72,[1104,2529,1866],{"class":1572},[1104,2531,2533],{"class":1106,"line":2532},73,[1104,2534,2535],{"class":1110},"        # 2. Check user profile language preference\n",[1104,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569],{"class":1106,"line":2538},74,[1104,2540,1953],{"class":1568},[1104,2542,2028],{"class":1756},[1104,2544,1701],{"class":1121},[1104,2546,1891],{"class":1697},[1104,2548,1167],{"class":1121},[1104,2550,1259],{"class":1131},[1104,2552,2039],{"class":1135},[1104,2554,1139],{"class":1131},[1104,2556,1061],{"class":1121},[1104,2558,2046],{"class":1437},[1104,2560,1826],{"class":1572},[1104,2562,1576],{"class":1121},[1104,2564,2039],{"class":1800},[1104,2566,1576],{"class":1121},[1104,2568,2057],{"class":1800},[1104,2570,1964],{"class":1121},[1104,2572,2574,2577],{"class":1106,"line":2573},75,[1104,2575,2576],{"class":1568},"            try",[1104,2578,1964],{"class":1121},[1104,2580,2582,2585,2587,2589,2591,2593,2595,2598,2600],{"class":1106,"line":2581},76,[1104,2583,2584],{"class":1572},"                profile_language ",[1104,2586,1689],{"class":1121},[1104,2588,1826],{"class":1572},[1104,2590,1576],{"class":1121},[1104,2592,2039],{"class":1800},[1104,2594,1576],{"class":1121},[1104,2596,2597],{"class":1800},"userprofile",[1104,2599,1576],{"class":1121},[1104,2601,2602],{"class":1800},"language\n",[1104,2604,2606,2609,2612,2615,2617,2619,2622,2624,2627],{"class":1106,"line":2605},77,[1104,2607,2608],{"class":1568},"                if",[1104,2610,2611],{"class":1572}," profile_language ",[1104,2613,2614],{"class":1437},"and",[1104,2616,1881],{"class":1117},[1104,2618,1576],{"class":1121},[1104,2620,2621],{"class":1697},"is_language_supported",[1104,2623,1701],{"class":1121},[1104,2625,2626],{"class":1697},"profile_language",[1104,2628,1730],{"class":1121},[1104,2630,2632,2635],{"class":1106,"line":2631},78,[1104,2633,2634],{"class":1568},"                    return",[1104,2636,2637],{"class":1572}," profile_language\n",[1104,2639,2641,2644,2647],{"class":1106,"line":2640},79,[1104,2642,2643],{"class":1568},"            except",[1104,2645,2646],{"class":1776}," AttributeError",[1104,2648,1964],{"class":1121},[1104,2650,2652],{"class":1106,"line":2651},80,[1104,2653,2654],{"class":1568},"                pass\n",[1104,2656,2658],{"class":1106,"line":2657},81,[1104,2659,1866],{"class":1572},[1104,2661,2663],{"class":1106,"line":2662},82,[1104,2664,2665],{"class":1110},"        # 3. Check subdomain-based language\n",[1104,2667,2669,2672,2674,2676,2678,2681,2683,2685],{"class":1106,"line":2668},83,[1104,2670,2671],{"class":1572},"        subdomain_language ",[1104,2673,1689],{"class":1121},[1104,2675,1881],{"class":1117},[1104,2677,1576],{"class":1121},[1104,2679,2680],{"class":1697},"get_language_from_subdomain",[1104,2682,1701],{"class":1121},[1104,2684,1891],{"class":1697},[1104,2686,1708],{"class":1121},[1104,2688,2690,2692,2695],{"class":1106,"line":2689},84,[1104,2691,1953],{"class":1568},[1104,2693,2694],{"class":1572}," subdomain_language",[1104,2696,1964],{"class":1121},[1104,2698,2700,2702],{"class":1106,"line":2699},85,[1104,2701,2522],{"class":1568},[1104,2703,2704],{"class":1572}," subdomain_language\n",[1104,2706,2708],{"class":1106,"line":2707},86,[1104,2709,1866],{"class":1572},[1104,2711,2713],{"class":1106,"line":2712},87,[1104,2714,2715],{"class":1110},"        # 4. Check custom header (for API clients)\n",[1104,2717,2719,2722,2724,2726,2728,2731,2733,2735,2737,2739,2742,2744],{"class":1106,"line":2718},88,[1104,2720,2721],{"class":1572},"        header_language ",[1104,2723,1689],{"class":1121},[1104,2725,1826],{"class":1572},[1104,2727,1576],{"class":1121},[1104,2729,2730],{"class":1929},"META",[1104,2732,1576],{"class":1121},[1104,2734,2188],{"class":1697},[1104,2736,1701],{"class":1121},[1104,2738,1139],{"class":1131},[1104,2740,2741],{"class":1135},"HTTP_X_LANGUAGE",[1104,2743,1139],{"class":1131},[1104,2745,1708],{"class":1121},[1104,2747,2749,2751,2754,2756,2758,2760,2762,2764,2767],{"class":1106,"line":2748},89,[1104,2750,1953],{"class":1568},[1104,2752,2753],{"class":1572}," header_language ",[1104,2755,2614],{"class":1437},[1104,2757,1881],{"class":1117},[1104,2759,1576],{"class":1121},[1104,2761,2621],{"class":1697},[1104,2763,1701],{"class":1121},[1104,2765,2766],{"class":1697},"header_language",[1104,2768,1730],{"class":1121},[1104,2770,2772,2774],{"class":1106,"line":2771},90,[1104,2773,2522],{"class":1568},[1104,2775,2776],{"class":1572}," header_language\n",[1104,2778,2780],{"class":1106,"line":2779},91,[1104,2781,1866],{"class":1572},[1104,2783,2785],{"class":1106,"line":2784},92,[1104,2786,2787],{"class":1110},"        # 5. Check GeoIP-based language detection\n",[1104,2789,2791,2794,2796,2798,2800,2803,2805,2807],{"class":1106,"line":2790},93,[1104,2792,2793],{"class":1572},"        geoip_language ",[1104,2795,1689],{"class":1121},[1104,2797,1881],{"class":1117},[1104,2799,1576],{"class":1121},[1104,2801,2802],{"class":1697},"get_language_from_geoip",[1104,2804,1701],{"class":1121},[1104,2806,1891],{"class":1697},[1104,2808,1708],{"class":1121},[1104,2810,2812,2814,2817],{"class":1106,"line":2811},94,[1104,2813,1953],{"class":1568},[1104,2815,2816],{"class":1572}," geoip_language",[1104,2818,1964],{"class":1121},[1104,2820,2822,2824],{"class":1106,"line":2821},95,[1104,2823,2522],{"class":1568},[1104,2825,2826],{"class":1572}," geoip_language\n",[1104,2828,2830],{"class":1106,"line":2829},96,[1104,2831,1866],{"class":1572},[1104,2833,2835],{"class":1106,"line":2834},97,[1104,2836,2837],{"class":1110},"        # 6. Fall back to default detection\n",[1104,2839,2841,2843,2845,2847,2849,2851,2853,2855,2858,2860,2863],{"class":1106,"line":2840},98,[1104,2842,2445],{"class":1568},[1104,2844,1853],{"class":1572},[1104,2846,1576],{"class":1121},[1104,2848,1886],{"class":1697},[1104,2850,1701],{"class":1121},[1104,2852,1891],{"class":1697},[1104,2854,1167],{"class":1121},[1104,2856,2857],{"class":2255}," check_path",[1104,2859,1689],{"class":1121},[1104,2861,2862],{"class":1464},"True",[1104,2864,1708],{"class":1121},[1104,2866,2868],{"class":1106,"line":2867},99,[1104,2869,1748],{"class":1572},[1104,2871,2873,2875,2878,2880,2882,2884,2886],{"class":1106,"line":2872},100,[1104,2874,1753],{"class":1717},[1104,2876,2877],{"class":1816}," get_language_from_subdomain",[1104,2879,1701],{"class":1121},[1104,2881,1763],{"class":1762},[1104,2883,1167],{"class":1121},[1104,2885,1826],{"class":1768},[1104,2887,1730],{"class":1121},[1104,2889,2891,2893,2896],{"class":1106,"line":2890},101,[1104,2892,1833],{"class":1735},[1104,2894,2895],{"class":1739},"Extract language from subdomain.",[1104,2897,1743],{"class":1735},[1104,2899,2901,2904,2906,2908,2910,2913,2915,2918,2920,2922,2925,2927,2930,2933,2935],{"class":1106,"line":2900},102,[1104,2902,2903],{"class":1572},"        host ",[1104,2905,1689],{"class":1121},[1104,2907,1826],{"class":1572},[1104,2909,1576],{"class":1121},[1104,2911,2912],{"class":1697},"get_host",[1104,2914,1780],{"class":1121},[1104,2916,2917],{"class":1697},"split",[1104,2919,1701],{"class":1121},[1104,2921,1139],{"class":1131},[1104,2923,2924],{"class":1135},":",[1104,2926,1139],{"class":1131},[1104,2928,2929],{"class":1121},")[",[1104,2931,2932],{"class":1433},"0",[1104,2934,2383],{"class":1121},[1104,2936,2937],{"class":1110},"  # Remove port\n",[1104,2939,2941,2944,2946,2949,2951,2953,2955,2957,2959,2961],{"class":1106,"line":2940},103,[1104,2942,2943],{"class":1572},"        parts ",[1104,2945,1689],{"class":1121},[1104,2947,2948],{"class":1572}," host",[1104,2950,1576],{"class":1121},[1104,2952,2917],{"class":1697},[1104,2954,1701],{"class":1121},[1104,2956,1139],{"class":1131},[1104,2958,1576],{"class":1135},[1104,2960,1139],{"class":1131},[1104,2962,1708],{"class":1121},[1104,2964,2966],{"class":1106,"line":2965},104,[1104,2967,1866],{"class":1572},[1104,2969,2971,2973,2976,2978,2981,2983,2986,2989,2991],{"class":1106,"line":2970},105,[1104,2972,1953],{"class":1568},[1104,2974,2975],{"class":1756}," len",[1104,2977,1701],{"class":1121},[1104,2979,2980],{"class":1697},"parts",[1104,2982,1061],{"class":1121},[1104,2984,2985],{"class":1437}," >",[1104,2987,2988],{"class":1433}," 2",[1104,2990,2924],{"class":1121},[1104,2992,2993],{"class":1110},"  # Has subdomain\n",[1104,2995,2997,3000,3002,3005,3007,3009],{"class":1106,"line":2996},106,[1104,2998,2999],{"class":1572},"            subdomain ",[1104,3001,1689],{"class":1121},[1104,3003,3004],{"class":1572}," parts",[1104,3006,2373],{"class":1121},[1104,3008,2932],{"class":1433},[1104,3010,1236],{"class":1121},[1104,3012,3014,3016,3018,3020,3022,3024,3027],{"class":1106,"line":3013},107,[1104,3015,2205],{"class":1568},[1104,3017,1881],{"class":1117},[1104,3019,1576],{"class":1121},[1104,3021,2621],{"class":1697},[1104,3023,1701],{"class":1121},[1104,3025,3026],{"class":1697},"subdomain",[1104,3028,1730],{"class":1121},[1104,3030,3032,3035],{"class":1106,"line":3031},108,[1104,3033,3034],{"class":1568},"                return",[1104,3036,3037],{"class":1572}," subdomain\n",[1104,3039,3041],{"class":1106,"line":3040},109,[1104,3042,1866],{"class":1572},[1104,3044,3046,3048],{"class":1106,"line":3045},110,[1104,3047,2445],{"class":1568},[1104,3049,1465],{"class":1464},[1104,3051,3053],{"class":1106,"line":3052},111,[1104,3054,1748],{"class":1572},[1104,3056,3058,3060,3063,3065,3067,3069,3071],{"class":1106,"line":3057},112,[1104,3059,1753],{"class":1717},[1104,3061,3062],{"class":1816}," get_language_from_geoip",[1104,3064,1701],{"class":1121},[1104,3066,1763],{"class":1762},[1104,3068,1167],{"class":1121},[1104,3070,1826],{"class":1768},[1104,3072,1730],{"class":1121},[1104,3074,3076,3078,3081],{"class":1106,"line":3075},113,[1104,3077,1833],{"class":1735},[1104,3079,3080],{"class":1739},"Get language based on user's geographic location.",[1104,3082,1743],{"class":1735},[1104,3084,3086,3089],{"class":1106,"line":3085},114,[1104,3087,3088],{"class":1568},"        try",[1104,3090,1964],{"class":1121},[1104,3092,3094,3097,3099,3101,3104,3106,3109,3111,3114,3116],{"class":1106,"line":3093},115,[1104,3095,3096],{"class":1568},"            from",[1104,3098,1573],{"class":1572},[1104,3100,1576],{"class":1121},[1104,3102,3103],{"class":1572},"contrib",[1104,3105,1576],{"class":1121},[1104,3107,3108],{"class":1572},"gis",[1104,3110,1576],{"class":1121},[1104,3112,3113],{"class":1572},"geoip2 ",[1104,3115,1587],{"class":1568},[1104,3117,3118],{"class":1572}," GeoIP2\n",[1104,3120,3122],{"class":1106,"line":3121},116,[1104,3123,2358],{"class":1572},[1104,3125,3127],{"class":1106,"line":3126},117,[1104,3128,3129],{"class":1110},"            # Get client IP\n",[1104,3131,3133,3136,3138,3140,3142,3145,3147,3149],{"class":1106,"line":3132},118,[1104,3134,3135],{"class":1572},"            ip ",[1104,3137,1689],{"class":1121},[1104,3139,1881],{"class":1117},[1104,3141,1576],{"class":1121},[1104,3143,3144],{"class":1697},"get_client_ip",[1104,3146,1701],{"class":1121},[1104,3148,1891],{"class":1697},[1104,3150,1708],{"class":1121},[1104,3152,3154,3156,3159,3162],{"class":1106,"line":3153},119,[1104,3155,2205],{"class":1568},[1104,3157,3158],{"class":1437}," not",[1104,3160,3161],{"class":1572}," ip",[1104,3163,1964],{"class":1121},[1104,3165,3167,3169],{"class":1106,"line":3166},120,[1104,3168,3034],{"class":1568},[1104,3170,1465],{"class":1464},[1104,3172,3174],{"class":1106,"line":3173},121,[1104,3175,2358],{"class":1572},[1104,3177,3179],{"class":1106,"line":3178},122,[1104,3180,3181],{"class":1110},"            # Get country from IP\n",[1104,3183,3185,3188,3190,3193],{"class":1106,"line":3184},123,[1104,3186,3187],{"class":1572},"            g ",[1104,3189,1689],{"class":1121},[1104,3191,3192],{"class":1697}," GeoIP2",[1104,3194,1861],{"class":1121},[1104,3196,3198,3201,3203,3206,3208,3211,3213,3216],{"class":1106,"line":3197},124,[1104,3199,3200],{"class":1572},"            country ",[1104,3202,1689],{"class":1121},[1104,3204,3205],{"class":1572}," g",[1104,3207,1576],{"class":1121},[1104,3209,3210],{"class":1697},"country_code",[1104,3212,1701],{"class":1121},[1104,3214,3215],{"class":1697},"ip",[1104,3217,1708],{"class":1121},[1104,3219,3221],{"class":1106,"line":3220},125,[1104,3222,2358],{"class":1572},[1104,3224,3226],{"class":1106,"line":3225},126,[1104,3227,3228],{"class":1110},"            # Map countries to languages\n",[1104,3230,3232,3235,3237],{"class":1106,"line":3231},127,[1104,3233,3234],{"class":1572},"            country_language_map ",[1104,3236,1689],{"class":1121},[1104,3238,3239],{"class":1121}," {\n",[1104,3241,3243,3246,3249,3251,3253,3255,3257,3259,3261],{"class":1106,"line":3242},128,[1104,3244,3245],{"class":1131},"                '",[1104,3247,3248],{"class":1135},"ES",[1104,3250,1139],{"class":1131},[1104,3252,2924],{"class":1121},[1104,3254,1259],{"class":1131},[1104,3256,1309],{"class":1135},[1104,3258,1139],{"class":1131},[1104,3260,1167],{"class":1121},[1104,3262,3263],{"class":1110},"  # Spain -> Spanish\n",[1104,3265,3267,3269,3272,3274,3276,3278,3280,3282,3284],{"class":1106,"line":3266},129,[1104,3268,3245],{"class":1131},[1104,3270,3271],{"class":1135},"MX",[1104,3273,1139],{"class":1131},[1104,3275,2924],{"class":1121},[1104,3277,1259],{"class":1131},[1104,3279,1309],{"class":1135},[1104,3281,1139],{"class":1131},[1104,3283,1167],{"class":1121},[1104,3285,3286],{"class":1110},"  # Mexico -> Spanish\n",[1104,3288,3290,3292,3295,3297,3299,3301,3303,3305,3307],{"class":1106,"line":3289},130,[1104,3291,3245],{"class":1131},[1104,3293,3294],{"class":1135},"AR",[1104,3296,1139],{"class":1131},[1104,3298,2924],{"class":1121},[1104,3300,1259],{"class":1131},[1104,3302,1309],{"class":1135},[1104,3304,1139],{"class":1131},[1104,3306,1167],{"class":1121},[1104,3308,3309],{"class":1110},"  # Argentina -> Spanish\n",[1104,3311,3313,3315,3318,3320,3322,3324,3326,3328,3330],{"class":1106,"line":3312},131,[1104,3314,3245],{"class":1131},[1104,3316,3317],{"class":1135},"FR",[1104,3319,1139],{"class":1131},[1104,3321,2924],{"class":1121},[1104,3323,1259],{"class":1131},[1104,3325,1332],{"class":1135},[1104,3327,1139],{"class":1131},[1104,3329,1167],{"class":1121},[1104,3331,3332],{"class":1110},"  # France -> French\n",[1104,3334,3336,3338,3341,3343,3345,3347,3349,3351,3353],{"class":1106,"line":3335},132,[1104,3337,3245],{"class":1131},[1104,3339,3340],{"class":1135},"CA",[1104,3342,1139],{"class":1131},[1104,3344,2924],{"class":1121},[1104,3346,1259],{"class":1131},[1104,3348,1332],{"class":1135},[1104,3350,1139],{"class":1131},[1104,3352,1167],{"class":1121},[1104,3354,3355],{"class":1110},"  # Canada -> French (could be 'en' too)\n",[1104,3357,3359,3361,3364,3366,3368,3370,3372,3374,3376],{"class":1106,"line":3358},133,[1104,3360,3245],{"class":1131},[1104,3362,3363],{"class":1135},"DE",[1104,3365,1139],{"class":1131},[1104,3367,2924],{"class":1121},[1104,3369,1259],{"class":1131},[1104,3371,1355],{"class":1135},[1104,3373,1139],{"class":1131},[1104,3375,1167],{"class":1121},[1104,3377,3378],{"class":1110},"  # Germany -> German\n",[1104,3380,3382,3384,3387,3389,3391,3393,3395,3397,3399],{"class":1106,"line":3381},134,[1104,3383,3245],{"class":1131},[1104,3385,3386],{"class":1135},"AT",[1104,3388,1139],{"class":1131},[1104,3390,2924],{"class":1121},[1104,3392,1259],{"class":1131},[1104,3394,1355],{"class":1135},[1104,3396,1139],{"class":1131},[1104,3398,1167],{"class":1121},[1104,3400,3401],{"class":1110},"  # Austria -> German\n",[1104,3403,3405,3407,3410,3412,3414,3416,3418,3420,3422],{"class":1106,"line":3404},135,[1104,3406,3245],{"class":1131},[1104,3408,3409],{"class":1135},"JP",[1104,3411,1139],{"class":1131},[1104,3413,2924],{"class":1121},[1104,3415,1259],{"class":1131},[1104,3417,1378],{"class":1135},[1104,3419,1139],{"class":1131},[1104,3421,1167],{"class":1121},[1104,3423,3424],{"class":1110},"  # Japan -> Japanese\n",[1104,3426,3428,3430,3433,3435,3437,3439,3442,3444,3446],{"class":1106,"line":3427},136,[1104,3429,3245],{"class":1131},[1104,3431,3432],{"class":1135},"CN",[1104,3434,1139],{"class":1131},[1104,3436,2924],{"class":1121},[1104,3438,1259],{"class":1131},[1104,3440,3441],{"class":1135},"zh-hans",[1104,3443,1139],{"class":1131},[1104,3445,1167],{"class":1121},[1104,3447,3448],{"class":1110},"  # China -> Simplified Chinese\n",[1104,3450,3452,3454,3457,3459,3461,3463,3466,3468,3470],{"class":1106,"line":3451},137,[1104,3453,3245],{"class":1131},[1104,3455,3456],{"class":1135},"TW",[1104,3458,1139],{"class":1131},[1104,3460,2924],{"class":1121},[1104,3462,1259],{"class":1131},[1104,3464,3465],{"class":1135},"zh-hant",[1104,3467,1139],{"class":1131},[1104,3469,1167],{"class":1121},[1104,3471,3472],{"class":1110},"  # Taiwan -> Traditional Chinese\n",[1104,3474,3476],{"class":1106,"line":3475},138,[1104,3477,3478],{"class":1121},"            }\n",[1104,3480,3482],{"class":1106,"line":3481},139,[1104,3483,2358],{"class":1572},[1104,3485,3487,3490,3492,3495,3497,3499,3501,3504],{"class":1106,"line":3486},140,[1104,3488,3489],{"class":1572},"            language ",[1104,3491,1689],{"class":1121},[1104,3493,3494],{"class":1572}," country_language_map",[1104,3496,1576],{"class":1121},[1104,3498,2188],{"class":1697},[1104,3500,1701],{"class":1121},[1104,3502,3503],{"class":1697},"country",[1104,3505,1708],{"class":1121},[1104,3507,3509,3511,3514,3516,3518,3520,3522,3524,3526],{"class":1106,"line":3508},141,[1104,3510,2205],{"class":1568},[1104,3512,3513],{"class":1572}," language ",[1104,3515,2614],{"class":1437},[1104,3517,1881],{"class":1117},[1104,3519,1576],{"class":1121},[1104,3521,2621],{"class":1697},[1104,3523,1701],{"class":1121},[1104,3525,1917],{"class":1697},[1104,3527,1730],{"class":1121},[1104,3529,3531,3533],{"class":1106,"line":3530},142,[1104,3532,3034],{"class":1568},[1104,3534,2388],{"class":1572},[1104,3536,3538],{"class":1106,"line":3537},143,[1104,3539,1866],{"class":1572},[1104,3541,3543,3546,3549,3552,3555],{"class":1106,"line":3542},144,[1104,3544,3545],{"class":1568},"        except",[1104,3547,3548],{"class":1776}," Exception",[1104,3550,3551],{"class":1568}," as",[1104,3553,3554],{"class":1572}," e",[1104,3556,1964],{"class":1121},[1104,3558,3560,3562,3564,3567,3569,3571,3574,3576,3579,3581,3583],{"class":1106,"line":3559},145,[1104,3561,1969],{"class":1572},[1104,3563,1576],{"class":1121},[1104,3565,3566],{"class":1697},"warning",[1104,3568,1701],{"class":1121},[1104,3570,1979],{"class":1717},[1104,3572,3573],{"class":1135},"'GeoIP language detection failed: ",[1104,3575,1986],{"class":1985},[1104,3577,3578],{"class":1697},"e",[1104,3580,1991],{"class":1985},[1104,3582,1139],{"class":1135},[1104,3584,1708],{"class":1121},[1104,3586,3588],{"class":1106,"line":3587},146,[1104,3589,1866],{"class":1572},[1104,3591,3593,3595],{"class":1106,"line":3592},147,[1104,3594,2445],{"class":1568},[1104,3596,1465],{"class":1464},[1104,3598,3600],{"class":1106,"line":3599},148,[1104,3601,1748],{"class":1572},[1104,3603,3605,3607,3610,3612,3614,3616,3618],{"class":1106,"line":3604},149,[1104,3606,1753],{"class":1717},[1104,3608,3609],{"class":1816}," get_client_ip",[1104,3611,1701],{"class":1121},[1104,3613,1763],{"class":1762},[1104,3615,1167],{"class":1121},[1104,3617,1826],{"class":1768},[1104,3619,1730],{"class":1121},[1104,3621,3623,3625,3628],{"class":1106,"line":3622},150,[1104,3624,1833],{"class":1735},[1104,3626,3627],{"class":1739},"Get client IP address.",[1104,3629,1743],{"class":1735},[1104,3631,3633,3636,3638,3640,3642,3644,3646,3648,3650,3652,3655,3657],{"class":1106,"line":3632},151,[1104,3634,3635],{"class":1572},"        x_forwarded_for ",[1104,3637,1689],{"class":1121},[1104,3639,1826],{"class":1572},[1104,3641,1576],{"class":1121},[1104,3643,2730],{"class":1929},[1104,3645,1576],{"class":1121},[1104,3647,2188],{"class":1697},[1104,3649,1701],{"class":1121},[1104,3651,1139],{"class":1131},[1104,3653,3654],{"class":1135},"HTTP_X_FORWARDED_FOR",[1104,3656,1139],{"class":1131},[1104,3658,1708],{"class":1121},[1104,3660,3662,3664,3667],{"class":1106,"line":3661},152,[1104,3663,1953],{"class":1568},[1104,3665,3666],{"class":1572}," x_forwarded_for",[1104,3668,1964],{"class":1121},[1104,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694],{"class":1106,"line":3671},153,[1104,3673,3135],{"class":1572},[1104,3675,1689],{"class":1121},[1104,3677,3666],{"class":1572},[1104,3679,1576],{"class":1121},[1104,3681,2917],{"class":1697},[1104,3683,1701],{"class":1121},[1104,3685,1139],{"class":1131},[1104,3687,1167],{"class":1135},[1104,3689,1139],{"class":1131},[1104,3691,2929],{"class":1121},[1104,3693,2932],{"class":1433},[1104,3695,1236],{"class":1121},[1104,3697,3699,3702],{"class":1106,"line":3698},154,[1104,3700,3701],{"class":1568},"        else",[1104,3703,1964],{"class":1121},[1104,3705,3707,3709,3711,3713,3715,3717,3719,3721,3723,3725,3728,3730],{"class":1106,"line":3706},155,[1104,3708,3135],{"class":1572},[1104,3710,1689],{"class":1121},[1104,3712,1826],{"class":1572},[1104,3714,1576],{"class":1121},[1104,3716,2730],{"class":1929},[1104,3718,1576],{"class":1121},[1104,3720,2188],{"class":1697},[1104,3722,1701],{"class":1121},[1104,3724,1139],{"class":1131},[1104,3726,3727],{"class":1135},"REMOTE_ADDR",[1104,3729,1139],{"class":1131},[1104,3731,1708],{"class":1121},[1104,3733,3735,3737],{"class":1106,"line":3734},156,[1104,3736,2445],{"class":1568},[1104,3738,3739],{"class":1572}," ip\n",[1104,3741,3743],{"class":1106,"line":3742},157,[1104,3744,1748],{"class":1572},[1104,3746,3748,3750,3753,3755,3757,3759,3762],{"class":1106,"line":3747},158,[1104,3749,1753],{"class":1717},[1104,3751,3752],{"class":1816}," is_language_supported",[1104,3754,1701],{"class":1121},[1104,3756,1763],{"class":1762},[1104,3758,1167],{"class":1121},[1104,3760,3761],{"class":1768}," language_code",[1104,3763,1730],{"class":1121},[1104,3765,3767,3769,3772],{"class":1106,"line":3766},159,[1104,3768,1833],{"class":1735},[1104,3770,3771],{"class":1739},"Check if language is supported.",[1104,3773,1743],{"class":1735},[1104,3775,3777,3780,3782,3785,3788,3790,3792,3794,3797,3800,3803,3805,3807,3809],{"class":1106,"line":3776},160,[1104,3778,3779],{"class":1572},"        supported_languages ",[1104,3781,1689],{"class":1121},[1104,3783,3784],{"class":1121}," [",[1104,3786,3787],{"class":1572},"lang",[1104,3789,2373],{"class":1121},[1104,3791,2932],{"class":1433},[1104,3793,2383],{"class":1121},[1104,3795,3796],{"class":1568}," for",[1104,3798,3799],{"class":1572}," lang ",[1104,3801,3802],{"class":1568},"in",[1104,3804,1956],{"class":1572},[1104,3806,1576],{"class":1121},[1104,3808,1271],{"class":1929},[1104,3810,1236],{"class":1121},[1104,3812,3814,3816,3819,3821],{"class":1106,"line":3813},161,[1104,3815,2445],{"class":1568},[1104,3817,3818],{"class":1572}," language_code ",[1104,3820,3802],{"class":1437},[1104,3822,3823],{"class":1572}," supported_languages\n",[1104,3825,3827],{"class":1106,"line":3826},162,[1104,3828,1748],{"class":1572},[1104,3830,3832,3834,3837,3839,3841,3843,3845,3847,3849],{"class":1106,"line":3831},163,[1104,3833,1753],{"class":1717},[1104,3835,3836],{"class":1816}," track_language_usage",[1104,3838,1701],{"class":1121},[1104,3840,1763],{"class":1762},[1104,3842,1167],{"class":1121},[1104,3844,1826],{"class":1768},[1104,3846,1167],{"class":1121},[1104,3848,2079],{"class":1768},[1104,3850,1730],{"class":1121},[1104,3852,3854,3856,3859],{"class":1106,"line":3853},164,[1104,3855,1833],{"class":1735},[1104,3857,3858],{"class":1739},"Track language usage for analytics.",[1104,3860,1743],{"class":1735},[1104,3862,3864],{"class":1106,"line":3863},165,[1104,3865,3866],{"class":1110},"        # This could be implemented to track language preferences\n",[1104,3868,3870],{"class":1106,"line":3869},166,[1104,3871,3872],{"class":1110},"        # for analytics or user behavior analysis\n",[1104,3874,3876],{"class":1106,"line":3875},167,[1104,3877,3878],{"class":1568},"        pass\n",[1104,3880,3882],{"class":1106,"line":3881},168,[1104,3883,1243],{"emptyLinePlaceholder":1242},[1104,3885,3887,3889,3892,3894,3897],{"class":1106,"line":3886},169,[1104,3888,1718],{"class":1717},[1104,3890,3891],{"class":1721}," APILocaleMiddleware",[1104,3893,1701],{"class":1121},[1104,3895,3896],{"class":1727},"MiddlewareMixin",[1104,3898,1730],{"class":1121},[1104,3900,3902,3904,3907],{"class":1106,"line":3901},170,[1104,3903,1736],{"class":1735},[1104,3905,3906],{"class":1739},"Specialized locale middleware for API endpoints.",[1104,3908,1743],{"class":1735},[1104,3910,3912],{"class":1106,"line":3911},171,[1104,3913,1748],{"class":1572},[1104,3915,3917,3919,3921,3923,3925,3927,3929],{"class":1106,"line":3916},172,[1104,3918,1753],{"class":1717},[1104,3920,1817],{"class":1816},[1104,3922,1701],{"class":1121},[1104,3924,1763],{"class":1762},[1104,3926,1167],{"class":1121},[1104,3928,1826],{"class":1768},[1104,3930,1730],{"class":1121},[1104,3932,3934,3936,3939],{"class":1106,"line":3933},173,[1104,3935,1833],{"class":1735},[1104,3937,3938],{"class":1739},"Process API requests with language detection.",[1104,3940,1743],{"class":1735},[1104,3942,3944],{"class":1106,"line":3943},174,[1104,3945,3946],{"class":1110},"        # Only process API requests\n",[1104,3948,3950,3952,3954,3956,3958,3960,3962,3965,3967,3969,3972,3974],{"class":1106,"line":3949},175,[1104,3951,1953],{"class":1568},[1104,3953,3158],{"class":1437},[1104,3955,1826],{"class":1572},[1104,3957,1576],{"class":1121},[1104,3959,2003],{"class":1800},[1104,3961,1576],{"class":1121},[1104,3963,3964],{"class":1697},"startswith",[1104,3966,1701],{"class":1121},[1104,3968,1139],{"class":1131},[1104,3970,3971],{"class":1135},"/api/",[1104,3973,1139],{"class":1131},[1104,3975,1730],{"class":1121},[1104,3977,3979],{"class":1106,"line":3978},176,[1104,3980,3981],{"class":1568},"            return\n",[1104,3983,3985],{"class":1106,"line":3984},177,[1104,3986,1866],{"class":1572},[1104,3988,3990],{"class":1106,"line":3989},178,[1104,3991,3992],{"class":1110},"        # Get language from various sources\n",[1104,3994,3996,3998,4000],{"class":1106,"line":3995},179,[1104,3997,1876],{"class":1572},[1104,3999,1689],{"class":1121},[1104,4001,4002],{"class":1121}," (\n",[1104,4004,4006,4009,4011,4013,4015,4017,4019,4021,4024,4026,4028],{"class":1106,"line":4005},180,[1104,4007,4008],{"class":1572},"            request",[1104,4010,1576],{"class":1121},[1104,4012,2730],{"class":1929},[1104,4014,1576],{"class":1121},[1104,4016,2188],{"class":1697},[1104,4018,1701],{"class":1121},[1104,4020,1139],{"class":1131},[1104,4022,4023],{"class":1135},"HTTP_ACCEPT_LANGUAGE_OVERRIDE",[1104,4025,1139],{"class":1131},[1104,4027,1061],{"class":1121},[1104,4029,4030],{"class":1437}," or\n",[1104,4032,4034,4036,4038,4041,4043,4045,4047,4049,4051,4053,4055],{"class":1106,"line":4033},181,[1104,4035,4008],{"class":1572},[1104,4037,1576],{"class":1121},[1104,4039,4040],{"class":1929},"GET",[1104,4042,1576],{"class":1121},[1104,4044,2188],{"class":1697},[1104,4046,1701],{"class":1121},[1104,4048,1139],{"class":1131},[1104,4050,3787],{"class":1135},[1104,4052,1139],{"class":1131},[1104,4054,1061],{"class":1121},[1104,4056,4030],{"class":1437},[1104,4058,4060,4062,4064,4066,4068,4070,4072,4074,4077,4079,4081,4084,4087,4089,4091,4093,4095,4097,4099,4101,4104,4106,4108,4110,4113,4115,4117,4119,4121],{"class":1106,"line":4059},182,[1104,4061,4008],{"class":1572},[1104,4063,1576],{"class":1121},[1104,4065,2730],{"class":1929},[1104,4067,1576],{"class":1121},[1104,4069,2188],{"class":1697},[1104,4071,1701],{"class":1121},[1104,4073,1139],{"class":1131},[1104,4075,4076],{"class":1135},"HTTP_ACCEPT_LANGUAGE",[1104,4078,1139],{"class":1131},[1104,4080,1167],{"class":1121},[1104,4082,4083],{"class":1131}," ''",[1104,4085,4086],{"class":1121},").",[1104,4088,2917],{"class":1697},[1104,4090,1701],{"class":1121},[1104,4092,1139],{"class":1131},[1104,4094,1167],{"class":1135},[1104,4096,1139],{"class":1131},[1104,4098,2929],{"class":1121},[1104,4100,2932],{"class":1433},[1104,4102,4103],{"class":1121},"].",[1104,4105,2917],{"class":1697},[1104,4107,1701],{"class":1121},[1104,4109,1139],{"class":1131},[1104,4111,4112],{"class":1135},"-",[1104,4114,1139],{"class":1131},[1104,4116,2929],{"class":1121},[1104,4118,2932],{"class":1433},[1104,4120,2383],{"class":1121},[1104,4122,4030],{"class":1437},[1104,4124,4126,4129,4131],{"class":1106,"line":4125},183,[1104,4127,4128],{"class":1572},"            settings",[1104,4130,1576],{"class":1121},[1104,4132,4133],{"class":1929},"LANGUAGE_CODE\n",[1104,4135,4137],{"class":1106,"line":4136},184,[1104,4138,4139],{"class":1121},"        )\n",[1104,4141,4143],{"class":1106,"line":4142},185,[1104,4144,1866],{"class":1572},[1104,4146,4148],{"class":1106,"line":4147},186,[1104,4149,4150],{"class":1110},"        # Validate and activate language\n",[1104,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182],{"class":1106,"line":4153},187,[1104,4155,1953],{"class":1568},[1104,4157,3513],{"class":1572},[1104,4159,3802],{"class":1437},[1104,4161,3784],{"class":1121},[1104,4163,3787],{"class":1572},[1104,4165,2373],{"class":1121},[1104,4167,2932],{"class":1433},[1104,4169,2383],{"class":1121},[1104,4171,3796],{"class":1568},[1104,4173,3799],{"class":1572},[1104,4175,3802],{"class":1568},[1104,4177,1956],{"class":1572},[1104,4179,1576],{"class":1121},[1104,4181,1271],{"class":1929},[1104,4183,4184],{"class":1121},"]:\n",[1104,4186,4188,4191,4193,4195,4197,4199],{"class":1106,"line":4187},188,[1104,4189,4190],{"class":1572},"            translation",[1104,4192,1576],{"class":1121},[1104,4194,1912],{"class":1697},[1104,4196,1701],{"class":1121},[1104,4198,1917],{"class":1697},[1104,4200,1708],{"class":1121},[1104,4202,4204,4206,4208,4210,4212],{"class":1106,"line":4203},189,[1104,4205,4008],{"class":1572},[1104,4207,1576],{"class":1121},[1104,4209,1088],{"class":1929},[1104,4211,1122],{"class":1121},[1104,4213,2388],{"class":1572},[1104,4215,4217,4219],{"class":1106,"line":4216},190,[1104,4218,3701],{"class":1568},[1104,4220,1964],{"class":1121},[1104,4222,4224,4226,4228,4230,4232,4234,4236,4238],{"class":1106,"line":4223},191,[1104,4225,4190],{"class":1572},[1104,4227,1576],{"class":1121},[1104,4229,1912],{"class":1697},[1104,4231,1701],{"class":1121},[1104,4233,2193],{"class":1697},[1104,4235,1576],{"class":1121},[1104,4237,1088],{"class":1929},[1104,4239,1708],{"class":1121},[1104,4241,4243,4245,4247,4249,4251,4253,4255],{"class":1106,"line":4242},192,[1104,4244,4008],{"class":1572},[1104,4246,1576],{"class":1121},[1104,4248,1088],{"class":1929},[1104,4250,1122],{"class":1121},[1104,4252,1956],{"class":1572},[1104,4254,1576],{"class":1121},[1104,4256,4133],{"class":1929},[1104,4258,4260],{"class":1106,"line":4259},193,[1104,4261,1748],{"class":1572},[1104,4263,4265,4267,4269,4271,4273,4275,4277,4279,4281],{"class":1106,"line":4264},194,[1104,4266,1753],{"class":1717},[1104,4268,2094],{"class":1816},[1104,4270,1701],{"class":1121},[1104,4272,1763],{"class":1762},[1104,4274,1167],{"class":1121},[1104,4276,1826],{"class":1768},[1104,4278,1167],{"class":1121},[1104,4280,2107],{"class":1768},[1104,4282,1730],{"class":1121},[1104,4284,4286,4288,4291],{"class":1106,"line":4285},195,[1104,4287,1833],{"class":1735},[1104,4289,4290],{"class":1739},"Add language headers to API responses.",[1104,4292,1743],{"class":1735},[1104,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312],{"class":1106,"line":4295},196,[1104,4297,1953],{"class":1568},[1104,4299,2028],{"class":1756},[1104,4301,1701],{"class":1121},[1104,4303,1891],{"class":1697},[1104,4305,1167],{"class":1121},[1104,4307,1259],{"class":1131},[1104,4309,1088],{"class":1135},[1104,4311,1139],{"class":1131},[1104,4313,1730],{"class":1121},[1104,4315,4317,4319,4321,4323,4325,4327,4329,4331,4333,4335],{"class":1106,"line":4316},197,[1104,4318,2370],{"class":1572},[1104,4320,2373],{"class":1121},[1104,4322,1139],{"class":1131},[1104,4324,2378],{"class":1135},[1104,4326,1139],{"class":1131},[1104,4328,2383],{"class":1121},[1104,4330,1122],{"class":1121},[1104,4332,1826],{"class":1572},[1104,4334,1576],{"class":1121},[1104,4336,4133],{"class":1929},[1104,4338,4340,4342],{"class":1106,"line":4339},198,[1104,4341,2445],{"class":1568},[1104,4343,2448],{"class":1572},[1030,4345,4347],{"id":4346},"language-detection-strategies","Language Detection Strategies",[1035,4349,4351],{"id":4350},"user-preference-management","User Preference Management",[1095,4353,4355],{"className":1097,"code":4354,"language":1099,"meta":1100,"style":1100},"# models.py\nfrom django.db import models\nfrom django.contrib.auth.models import User\nfrom django.conf import settings\nfrom django.utils.translation import gettext_lazy as _\n\nclass UserLanguagePreference(models.Model):\n    \"\"\"Track user language preferences and history.\"\"\"\n    user = models.OneToOneField(\n        User, \n        on_delete=models.CASCADE,\n        related_name='language_preference'\n    )\n    primary_language = models.CharField(\n        max_length=10,\n        choices=settings.LANGUAGES,\n        default=settings.LANGUAGE_CODE,\n        verbose_name=_('Primary Language')\n    )\n    secondary_languages = models.JSONField(\n        default=list,\n        blank=True,\n        verbose_name=_('Secondary Languages'),\n        help_text=_('Additional languages the user understands')\n    )\n    auto_detect = models.BooleanField(\n        default=True,\n        verbose_name=_('Auto-detect language'),\n        help_text=_('Automatically detect language from browser')\n    )\n    last_detected_language = models.CharField(\n        max_length=10,\n        blank=True,\n        verbose_name=_('Last Detected Language')\n    )\n    detection_source = models.CharField(\n        max_length=20,\n        choices=[\n            ('manual', _('Manual Selection')),\n            ('browser', _('Browser Detection')),\n            ('geoip', _('Geographic Location')),\n            ('subdomain', _('Subdomain')),\n            ('profile', _('User Profile')),\n        ],\n        blank=True,\n        verbose_name=_('Detection Source')\n    )\n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    \n    class Meta:\n        verbose_name = _('User Language Preference')\n        verbose_name_plural = _('User Language Preferences')\n    \n    def get_preferred_language(self, available_languages=None):\n        \"\"\"Get user's preferred language from available options.\"\"\"\n        if available_languages is None:\n            available_languages = [lang[0] for lang in settings.LANGUAGES]\n        \n        # Check primary language\n        if self.primary_language in available_languages:\n            return self.primary_language\n        \n        # Check secondary languages\n        for lang in self.secondary_languages:\n            if lang in available_languages:\n                return lang\n        \n        # Fall back to default\n        return settings.LANGUAGE_CODE\n\nclass LanguageUsageLog(models.Model):\n    \"\"\"Log language usage for analytics.\"\"\"\n    user = models.ForeignKey(\n        User,\n        on_delete=models.CASCADE,\n        null=True,\n        blank=True\n    )\n    session_key = models.CharField(max_length=40, blank=True)\n    language_code = models.CharField(max_length=10)\n    detection_method = models.CharField(\n        max_length=20,\n        choices=[\n            ('url', 'URL Prefix'),\n            ('session', 'Session'),\n            ('cookie', 'Cookie'),\n            ('header', 'Accept-Language Header'),\n            ('profile', 'User Profile'),\n            ('geoip', 'GeoIP'),\n            ('subdomain', 'Subdomain'),\n            ('default', 'Default'),\n        ]\n    )\n    ip_address = models.GenericIPAddressField(null=True, blank=True)\n    user_agent = models.TextField(blank=True)\n    path = models.CharField(max_length=500)\n    timestamp = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        verbose_name = _('Language Usage Log')\n        verbose_name_plural = _('Language Usage Logs')\n        indexes = [\n            models.Index(fields=['timestamp', 'language_code']),\n            models.Index(fields=['user', 'timestamp']),\n        ]\n",[1043,4356,4357,4362,4378,4403,4417,4443,4447,4466,4475,4492,4502,4518,4532,4537,4553,4565,4580,4595,4616,4620,4636,4647,4658,4677,4697,4701,4717,4727,4746,4765,4769,4784,4794,4804,4823,4827,4842,4853,4860,4889,4915,4941,4966,4992,4997,5007,5026,5030,5055,5079,5083,5093,5113,5133,5137,5160,5169,5183,5214,5218,5223,5241,5252,5256,5261,5279,5291,5298,5302,5307,5317,5321,5338,5347,5362,5368,5382,5393,5402,5406,5440,5463,5478,5488,5494,5516,5538,5559,5580,5600,5621,5641,5663,5668,5672,5705,5730,5754,5777,5781,5789,5808,5827,5836,5873,5903],{"__ignoreMap":1100},[1104,4358,4359],{"class":1106,"line":1107},[1104,4360,4361],{"class":1110},"# models.py\n",[1104,4363,4364,4366,4368,4370,4373,4375],{"class":1106,"line":1114},[1104,4365,1569],{"class":1568},[1104,4367,1573],{"class":1572},[1104,4369,1576],{"class":1121},[1104,4371,4372],{"class":1572},"db ",[1104,4374,1587],{"class":1568},[1104,4376,4377],{"class":1572}," models\n",[1104,4379,4380,4382,4384,4386,4388,4390,4393,4395,4398,4400],{"class":1106,"line":1128},[1104,4381,1569],{"class":1568},[1104,4383,1573],{"class":1572},[1104,4385,1576],{"class":1121},[1104,4387,3103],{"class":1572},[1104,4389,1576],{"class":1121},[1104,4391,4392],{"class":1572},"auth",[1104,4394,1576],{"class":1121},[1104,4396,4397],{"class":1572},"models ",[1104,4399,1587],{"class":1568},[1104,4401,4402],{"class":1572}," User\n",[1104,4404,4405,4407,4409,4411,4413,4415],{"class":1106,"line":1145},[1104,4406,1569],{"class":1568},[1104,4408,1573],{"class":1572},[1104,4410,1576],{"class":1121},[1104,4412,1617],{"class":1572},[1104,4414,1587],{"class":1568},[1104,4416,1622],{"class":1572},[1104,4418,4419,4421,4423,4425,4427,4429,4432,4434,4437,4440],{"class":1106,"line":1157},[1104,4420,1569],{"class":1568},[1104,4422,1573],{"class":1572},[1104,4424,1576],{"class":1121},[1104,4426,1633],{"class":1572},[1104,4428,1576],{"class":1121},[1104,4430,4431],{"class":1572},"translation ",[1104,4433,1587],{"class":1568},[1104,4435,4436],{"class":1572}," gettext_lazy ",[1104,4438,4439],{"class":1568},"as",[1104,4441,4442],{"class":1572}," _\n",[1104,4444,4445],{"class":1106,"line":1173},[1104,4446,1243],{"emptyLinePlaceholder":1242},[1104,4448,4449,4451,4454,4456,4459,4461,4464],{"class":1106,"line":1185},[1104,4450,1718],{"class":1717},[1104,4452,4453],{"class":1721}," UserLanguagePreference",[1104,4455,1701],{"class":1121},[1104,4457,4458],{"class":1727},"models",[1104,4460,1576],{"class":1121},[1104,4462,4463],{"class":1727},"Model",[1104,4465,1730],{"class":1121},[1104,4467,4468,4470,4473],{"class":1106,"line":1197},[1104,4469,1736],{"class":1735},[1104,4471,4472],{"class":1739},"Track user language preferences and history.",[1104,4474,1743],{"class":1735},[1104,4476,4477,4480,4482,4485,4487,4490],{"class":1106,"line":1209},[1104,4478,4479],{"class":1572},"    user ",[1104,4481,1689],{"class":1121},[1104,4483,4484],{"class":1572}," models",[1104,4486,1576],{"class":1121},[1104,4488,4489],{"class":1697},"OneToOneField",[1104,4491,2229],{"class":1121},[1104,4493,4494,4497,4499],{"class":1106,"line":1221},[1104,4495,4496],{"class":1697},"        User",[1104,4498,1167],{"class":1121},[1104,4500,4501],{"class":1697}," \n",[1104,4503,4504,4507,4509,4511,4513,4516],{"class":1106,"line":1233},[1104,4505,4506],{"class":2255},"        on_delete",[1104,4508,1689],{"class":1121},[1104,4510,4458],{"class":1697},[1104,4512,1576],{"class":1121},[1104,4514,4515],{"class":1929},"CASCADE",[1104,4517,1142],{"class":1121},[1104,4519,4520,4523,4525,4527,4530],{"class":1106,"line":1239},[1104,4521,4522],{"class":2255},"        related_name",[1104,4524,1689],{"class":1121},[1104,4526,1139],{"class":1131},[1104,4528,4529],{"class":1135},"language_preference",[1104,4531,1265],{"class":1131},[1104,4533,4534],{"class":1106,"line":1246},[1104,4535,4536],{"class":1121},"    )\n",[1104,4538,4539,4542,4544,4546,4548,4551],{"class":1106,"line":1252},[1104,4540,4541],{"class":1572},"    primary_language ",[1104,4543,1689],{"class":1121},[1104,4545,4484],{"class":1572},[1104,4547,1576],{"class":1121},[1104,4549,4550],{"class":1697},"CharField",[1104,4552,2229],{"class":1121},[1104,4554,4555,4558,4560,4563],{"class":1106,"line":1268},[1104,4556,4557],{"class":2255},"        max_length",[1104,4559,1689],{"class":1121},[1104,4561,4562],{"class":1433},"10",[1104,4564,1142],{"class":1121},[1104,4566,4567,4570,4572,4574,4576,4578],{"class":1106,"line":1278},[1104,4568,4569],{"class":2255},"        choices",[1104,4571,1689],{"class":1121},[1104,4573,2193],{"class":1697},[1104,4575,1576],{"class":1121},[1104,4577,1271],{"class":1929},[1104,4579,1142],{"class":1121},[1104,4581,4582,4585,4587,4589,4591,4593],{"class":1106,"line":1302},[1104,4583,4584],{"class":2255},"        default",[1104,4586,1689],{"class":1121},[1104,4588,2193],{"class":1697},[1104,4590,1576],{"class":1121},[1104,4592,1088],{"class":1929},[1104,4594,1142],{"class":1121},[1104,4596,4597,4600,4602,4605,4607,4609,4612,4614],{"class":1106,"line":1325},[1104,4598,4599],{"class":2255},"        verbose_name",[1104,4601,1689],{"class":1121},[1104,4603,4604],{"class":1697},"_",[1104,4606,1701],{"class":1121},[1104,4608,1139],{"class":1131},[1104,4610,4611],{"class":1135},"Primary Language",[1104,4613,1139],{"class":1131},[1104,4615,1708],{"class":1121},[1104,4617,4618],{"class":1106,"line":1348},[1104,4619,4536],{"class":1121},[1104,4621,4622,4625,4627,4629,4631,4634],{"class":1106,"line":1371},[1104,4623,4624],{"class":1572},"    secondary_languages ",[1104,4626,1689],{"class":1121},[1104,4628,4484],{"class":1572},[1104,4630,1576],{"class":1121},[1104,4632,4633],{"class":1697},"JSONField",[1104,4635,2229],{"class":1121},[1104,4637,4638,4640,4642,4645],{"class":1106,"line":1394},[1104,4639,4584],{"class":2255},[1104,4641,1689],{"class":1121},[1104,4643,4644],{"class":1776},"list",[1104,4646,1142],{"class":1121},[1104,4648,4649,4652,4654,4656],{"class":1106,"line":1399},[1104,4650,4651],{"class":2255},"        blank",[1104,4653,1689],{"class":1121},[1104,4655,2862],{"class":1464},[1104,4657,1142],{"class":1121},[1104,4659,4660,4662,4664,4666,4668,4670,4673,4675],{"class":1106,"line":1404},[1104,4661,4599],{"class":2255},[1104,4663,1689],{"class":1121},[1104,4665,4604],{"class":1697},[1104,4667,1701],{"class":1121},[1104,4669,1139],{"class":1131},[1104,4671,4672],{"class":1135},"Secondary Languages",[1104,4674,1139],{"class":1131},[1104,4676,1299],{"class":1121},[1104,4678,4679,4682,4684,4686,4688,4690,4693,4695],{"class":1106,"line":1410},[1104,4680,4681],{"class":2255},"        help_text",[1104,4683,1689],{"class":1121},[1104,4685,4604],{"class":1697},[1104,4687,1701],{"class":1121},[1104,4689,1139],{"class":1131},[1104,4691,4692],{"class":1135},"Additional languages the user understands",[1104,4694,1139],{"class":1131},[1104,4696,1708],{"class":1121},[1104,4698,4699],{"class":1106,"line":1425},[1104,4700,4536],{"class":1121},[1104,4702,4703,4706,4708,4710,4712,4715],{"class":1106,"line":1456},[1104,4704,4705],{"class":1572},"    auto_detect ",[1104,4707,1689],{"class":1121},[1104,4709,4484],{"class":1572},[1104,4711,1576],{"class":1121},[1104,4713,4714],{"class":1697},"BooleanField",[1104,4716,2229],{"class":1121},[1104,4718,4719,4721,4723,4725],{"class":1106,"line":1468},[1104,4720,4584],{"class":2255},[1104,4722,1689],{"class":1121},[1104,4724,2862],{"class":1464},[1104,4726,1142],{"class":1121},[1104,4728,4729,4731,4733,4735,4737,4739,4742,4744],{"class":1106,"line":1483},[1104,4730,4599],{"class":2255},[1104,4732,1689],{"class":1121},[1104,4734,4604],{"class":1697},[1104,4736,1701],{"class":1121},[1104,4738,1139],{"class":1131},[1104,4740,4741],{"class":1135},"Auto-detect language",[1104,4743,1139],{"class":1131},[1104,4745,1299],{"class":1121},[1104,4747,4748,4750,4752,4754,4756,4758,4761,4763],{"class":1106,"line":1497},[1104,4749,4681],{"class":2255},[1104,4751,1689],{"class":1121},[1104,4753,4604],{"class":1697},[1104,4755,1701],{"class":1121},[1104,4757,1139],{"class":1131},[1104,4759,4760],{"class":1135},"Automatically detect language from browser",[1104,4762,1139],{"class":1131},[1104,4764,1708],{"class":1121},[1104,4766,4767],{"class":1106,"line":1508},[1104,4768,4536],{"class":1121},[1104,4770,4771,4774,4776,4778,4780,4782],{"class":1106,"line":1523},[1104,4772,4773],{"class":1572},"    last_detected_language ",[1104,4775,1689],{"class":1121},[1104,4777,4484],{"class":1572},[1104,4779,1576],{"class":1121},[1104,4781,4550],{"class":1697},[1104,4783,2229],{"class":1121},[1104,4785,4786,4788,4790,4792],{"class":1106,"line":1528},[1104,4787,4557],{"class":2255},[1104,4789,1689],{"class":1121},[1104,4791,4562],{"class":1433},[1104,4793,1142],{"class":1121},[1104,4795,4796,4798,4800,4802],{"class":1106,"line":1534},[1104,4797,4651],{"class":2255},[1104,4799,1689],{"class":1121},[1104,4801,2862],{"class":1464},[1104,4803,1142],{"class":1121},[1104,4805,4806,4808,4810,4812,4814,4816,4819,4821],{"class":1106,"line":2012},[1104,4807,4599],{"class":2255},[1104,4809,1689],{"class":1121},[1104,4811,4604],{"class":1697},[1104,4813,1701],{"class":1121},[1104,4815,1139],{"class":1131},[1104,4817,4818],{"class":1135},"Last Detected Language",[1104,4820,1139],{"class":1131},[1104,4822,1708],{"class":1121},[1104,4824,4825],{"class":1106,"line":2017},[1104,4826,4536],{"class":1121},[1104,4828,4829,4832,4834,4836,4838,4840],{"class":1106,"line":2023},[1104,4830,4831],{"class":1572},"    detection_source ",[1104,4833,1689],{"class":1121},[1104,4835,4484],{"class":1572},[1104,4837,1576],{"class":1121},[1104,4839,4550],{"class":1697},[1104,4841,2229],{"class":1121},[1104,4843,4844,4846,4848,4851],{"class":1106,"line":2062},[1104,4845,4557],{"class":2255},[1104,4847,1689],{"class":1121},[1104,4849,4850],{"class":1433},"20",[1104,4852,1142],{"class":1121},[1104,4854,4855,4857],{"class":1106,"line":2084},[1104,4856,4569],{"class":2255},[1104,4858,4859],{"class":1121},"=[\n",[1104,4861,4862,4865,4867,4870,4872,4874,4877,4879,4881,4884,4886],{"class":1106,"line":2089},[1104,4863,4864],{"class":1121},"            (",[1104,4866,1139],{"class":1131},[1104,4868,4869],{"class":1135},"manual",[1104,4871,1139],{"class":1131},[1104,4873,1167],{"class":1121},[1104,4875,4876],{"class":1697}," _",[1104,4878,1701],{"class":1121},[1104,4880,1139],{"class":1131},[1104,4882,4883],{"class":1135},"Manual Selection",[1104,4885,1139],{"class":1131},[1104,4887,4888],{"class":1121},")),\n",[1104,4890,4891,4893,4895,4898,4900,4902,4904,4906,4908,4911,4913],{"class":1106,"line":2112},[1104,4892,4864],{"class":1121},[1104,4894,1139],{"class":1131},[1104,4896,4897],{"class":1135},"browser",[1104,4899,1139],{"class":1131},[1104,4901,1167],{"class":1121},[1104,4903,4876],{"class":1697},[1104,4905,1701],{"class":1121},[1104,4907,1139],{"class":1131},[1104,4909,4910],{"class":1135},"Browser Detection",[1104,4912,1139],{"class":1131},[1104,4914,4888],{"class":1121},[1104,4916,4917,4919,4921,4924,4926,4928,4930,4932,4934,4937,4939],{"class":1106,"line":2122},[1104,4918,4864],{"class":1121},[1104,4920,1139],{"class":1131},[1104,4922,4923],{"class":1135},"geoip",[1104,4925,1139],{"class":1131},[1104,4927,1167],{"class":1121},[1104,4929,4876],{"class":1697},[1104,4931,1701],{"class":1121},[1104,4933,1139],{"class":1131},[1104,4935,4936],{"class":1135},"Geographic Location",[1104,4938,1139],{"class":1131},[1104,4940,4888],{"class":1121},[1104,4942,4943,4945,4947,4949,4951,4953,4955,4957,4959,4962,4964],{"class":1106,"line":2151},[1104,4944,4864],{"class":1121},[1104,4946,1139],{"class":1131},[1104,4948,3026],{"class":1135},[1104,4950,1139],{"class":1131},[1104,4952,1167],{"class":1121},[1104,4954,4876],{"class":1697},[1104,4956,1701],{"class":1121},[1104,4958,1139],{"class":1131},[1104,4960,4961],{"class":1135},"Subdomain",[1104,4963,1139],{"class":1131},[1104,4965,4888],{"class":1121},[1104,4967,4968,4970,4972,4975,4977,4979,4981,4983,4985,4988,4990],{"class":1106,"line":2156},[1104,4969,4864],{"class":1121},[1104,4971,1139],{"class":1131},[1104,4973,4974],{"class":1135},"profile",[1104,4976,1139],{"class":1131},[1104,4978,1167],{"class":1121},[1104,4980,4876],{"class":1697},[1104,4982,1701],{"class":1121},[1104,4984,1139],{"class":1131},[1104,4986,4987],{"class":1135},"User Profile",[1104,4989,1139],{"class":1131},[1104,4991,4888],{"class":1121},[1104,4993,4994],{"class":1106,"line":2165},[1104,4995,4996],{"class":1121},"        ],\n",[1104,4998,4999,5001,5003,5005],{"class":1106,"line":2171},[1104,5000,4651],{"class":2255},[1104,5002,1689],{"class":1121},[1104,5004,2862],{"class":1464},[1104,5006,1142],{"class":1121},[1104,5008,5009,5011,5013,5015,5017,5019,5022,5024],{"class":1106,"line":2202},[1104,5010,4599],{"class":2255},[1104,5012,1689],{"class":1121},[1104,5014,4604],{"class":1697},[1104,5016,1701],{"class":1121},[1104,5018,1139],{"class":1131},[1104,5020,5021],{"class":1135},"Detection Source",[1104,5023,1139],{"class":1131},[1104,5025,1708],{"class":1121},[1104,5027,5028],{"class":1106,"line":2218},[1104,5029,4536],{"class":1121},[1104,5031,5032,5035,5037,5039,5041,5044,5046,5049,5051,5053],{"class":1106,"line":2232},[1104,5033,5034],{"class":1572},"    created_at ",[1104,5036,1689],{"class":1121},[1104,5038,4484],{"class":1572},[1104,5040,1576],{"class":1121},[1104,5042,5043],{"class":1697},"DateTimeField",[1104,5045,1701],{"class":1121},[1104,5047,5048],{"class":2255},"auto_now_add",[1104,5050,1689],{"class":1121},[1104,5052,2862],{"class":1464},[1104,5054,1708],{"class":1121},[1104,5056,5057,5060,5062,5064,5066,5068,5070,5073,5075,5077],{"class":1106,"line":2244},[1104,5058,5059],{"class":1572},"    updated_at ",[1104,5061,1689],{"class":1121},[1104,5063,4484],{"class":1572},[1104,5065,1576],{"class":1121},[1104,5067,5043],{"class":1697},[1104,5069,1701],{"class":1121},[1104,5071,5072],{"class":2255},"auto_now",[1104,5074,1689],{"class":1121},[1104,5076,2862],{"class":1464},[1104,5078,1708],{"class":1121},[1104,5080,5081],{"class":1106,"line":2252},[1104,5082,1748],{"class":1572},[1104,5084,5085,5088,5091],{"class":1106,"line":2269},[1104,5086,5087],{"class":1717},"    class",[1104,5089,5090],{"class":1721}," Meta",[1104,5092,1964],{"class":1121},[1104,5094,5095,5098,5100,5102,5104,5106,5109,5111],{"class":1106,"line":2285},[1104,5096,5097],{"class":1572},"        verbose_name ",[1104,5099,1689],{"class":1121},[1104,5101,4876],{"class":1697},[1104,5103,1701],{"class":1121},[1104,5105,1139],{"class":1131},[1104,5107,5108],{"class":1135},"User Language Preference",[1104,5110,1139],{"class":1131},[1104,5112,1708],{"class":1121},[1104,5114,5115,5118,5120,5122,5124,5126,5129,5131],{"class":1106,"line":2301},[1104,5116,5117],{"class":1572},"        verbose_name_plural ",[1104,5119,1689],{"class":1121},[1104,5121,4876],{"class":1697},[1104,5123,1701],{"class":1121},[1104,5125,1139],{"class":1131},[1104,5127,5128],{"class":1135},"User Language Preferences",[1104,5130,1139],{"class":1131},[1104,5132,1708],{"class":1121},[1104,5134,5135],{"class":1106,"line":2317},[1104,5136,1748],{"class":1572},[1104,5138,5139,5141,5144,5146,5148,5150,5153,5155,5158],{"class":1106,"line":2333},[1104,5140,1753],{"class":1717},[1104,5142,5143],{"class":1816}," get_preferred_language",[1104,5145,1701],{"class":1121},[1104,5147,1763],{"class":1762},[1104,5149,1167],{"class":1121},[1104,5151,5152],{"class":1768}," available_languages",[1104,5154,1689],{"class":1437},[1104,5156,5157],{"class":1464},"None",[1104,5159,1730],{"class":1121},[1104,5161,5162,5164,5167],{"class":1106,"line":2349},[1104,5163,1833],{"class":1735},[1104,5165,5166],{"class":1739},"Get user's preferred language from available options.",[1104,5168,1743],{"class":1735},[1104,5170,5171,5173,5176,5179,5181],{"class":1106,"line":2355},[1104,5172,1953],{"class":1568},[1104,5174,5175],{"class":1572}," available_languages ",[1104,5177,5178],{"class":1437},"is",[1104,5180,2146],{"class":1464},[1104,5182,1964],{"class":1121},[1104,5184,5185,5188,5190,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212],{"class":1106,"line":2361},[1104,5186,5187],{"class":1572},"            available_languages ",[1104,5189,1689],{"class":1121},[1104,5191,3784],{"class":1121},[1104,5193,3787],{"class":1572},[1104,5195,2373],{"class":1121},[1104,5197,2932],{"class":1433},[1104,5199,2383],{"class":1121},[1104,5201,3796],{"class":1568},[1104,5203,3799],{"class":1572},[1104,5205,3802],{"class":1568},[1104,5207,1956],{"class":1572},[1104,5209,1576],{"class":1121},[1104,5211,1271],{"class":1929},[1104,5213,1236],{"class":1121},[1104,5215,5216],{"class":1106,"line":2367},[1104,5217,1866],{"class":1572},[1104,5219,5220],{"class":1106,"line":2391},[1104,5221,5222],{"class":1110},"        # Check primary language\n",[1104,5224,5225,5227,5229,5231,5234,5237,5239],{"class":1106,"line":2396},[1104,5226,1953],{"class":1568},[1104,5228,1881],{"class":1117},[1104,5230,1576],{"class":1121},[1104,5232,5233],{"class":1800},"primary_language",[1104,5235,5236],{"class":1437}," in",[1104,5238,5152],{"class":1572},[1104,5240,1964],{"class":1121},[1104,5242,5243,5245,5247,5249],{"class":1106,"line":2402},[1104,5244,2522],{"class":1568},[1104,5246,1881],{"class":1117},[1104,5248,1576],{"class":1121},[1104,5250,5251],{"class":1800},"primary_language\n",[1104,5253,5254],{"class":1106,"line":2437},[1104,5255,1866],{"class":1572},[1104,5257,5258],{"class":1106,"line":2442},[1104,5259,5260],{"class":1110},"        # Check secondary languages\n",[1104,5262,5263,5266,5268,5270,5272,5274,5277],{"class":1106,"line":2451},[1104,5264,5265],{"class":1568},"        for",[1104,5267,3799],{"class":1572},[1104,5269,3802],{"class":1568},[1104,5271,1881],{"class":1117},[1104,5273,1576],{"class":1121},[1104,5275,5276],{"class":1800},"secondary_languages",[1104,5278,1964],{"class":1121},[1104,5280,5281,5283,5285,5287,5289],{"class":1106,"line":2456},[1104,5282,2205],{"class":1568},[1104,5284,3799],{"class":1572},[1104,5286,3802],{"class":1437},[1104,5288,5152],{"class":1572},[1104,5290,1964],{"class":1121},[1104,5292,5293,5295],{"class":1106,"line":2474},[1104,5294,3034],{"class":1568},[1104,5296,5297],{"class":1572}," lang\n",[1104,5299,5300],{"class":1106,"line":2484},[1104,5301,1866],{"class":1572},[1104,5303,5304],{"class":1106,"line":2490},[1104,5305,5306],{"class":1110},"        # Fall back to default\n",[1104,5308,5309,5311,5313,5315],{"class":1106,"line":2510},[1104,5310,2445],{"class":1568},[1104,5312,1956],{"class":1572},[1104,5314,1576],{"class":1121},[1104,5316,4133],{"class":1929},[1104,5318,5319],{"class":1106,"line":2519},[1104,5320,1243],{"emptyLinePlaceholder":1242},[1104,5322,5323,5325,5328,5330,5332,5334,5336],{"class":1106,"line":2527},[1104,5324,1718],{"class":1717},[1104,5326,5327],{"class":1721}," LanguageUsageLog",[1104,5329,1701],{"class":1121},[1104,5331,4458],{"class":1727},[1104,5333,1576],{"class":1121},[1104,5335,4463],{"class":1727},[1104,5337,1730],{"class":1121},[1104,5339,5340,5342,5345],{"class":1106,"line":2532},[1104,5341,1736],{"class":1735},[1104,5343,5344],{"class":1739},"Log language usage for analytics.",[1104,5346,1743],{"class":1735},[1104,5348,5349,5351,5353,5355,5357,5360],{"class":1106,"line":2538},[1104,5350,4479],{"class":1572},[1104,5352,1689],{"class":1121},[1104,5354,4484],{"class":1572},[1104,5356,1576],{"class":1121},[1104,5358,5359],{"class":1697},"ForeignKey",[1104,5361,2229],{"class":1121},[1104,5363,5364,5366],{"class":1106,"line":2573},[1104,5365,4496],{"class":1697},[1104,5367,1142],{"class":1121},[1104,5369,5370,5372,5374,5376,5378,5380],{"class":1106,"line":2581},[1104,5371,4506],{"class":2255},[1104,5373,1689],{"class":1121},[1104,5375,4458],{"class":1697},[1104,5377,1576],{"class":1121},[1104,5379,4515],{"class":1929},[1104,5381,1142],{"class":1121},[1104,5383,5384,5387,5389,5391],{"class":1106,"line":2605},[1104,5385,5386],{"class":2255},"        null",[1104,5388,1689],{"class":1121},[1104,5390,2862],{"class":1464},[1104,5392,1142],{"class":1121},[1104,5394,5395,5397,5399],{"class":1106,"line":2631},[1104,5396,4651],{"class":2255},[1104,5398,1689],{"class":1121},[1104,5400,5401],{"class":1464},"True\n",[1104,5403,5404],{"class":1106,"line":2640},[1104,5405,4536],{"class":1121},[1104,5407,5408,5411,5413,5415,5417,5419,5421,5424,5426,5429,5431,5434,5436,5438],{"class":1106,"line":2651},[1104,5409,5410],{"class":1572},"    session_key ",[1104,5412,1689],{"class":1121},[1104,5414,4484],{"class":1572},[1104,5416,1576],{"class":1121},[1104,5418,4550],{"class":1697},[1104,5420,1701],{"class":1121},[1104,5422,5423],{"class":2255},"max_length",[1104,5425,1689],{"class":1121},[1104,5427,5428],{"class":1433},"40",[1104,5430,1167],{"class":1121},[1104,5432,5433],{"class":2255}," blank",[1104,5435,1689],{"class":1121},[1104,5437,2862],{"class":1464},[1104,5439,1708],{"class":1121},[1104,5441,5442,5445,5447,5449,5451,5453,5455,5457,5459,5461],{"class":1106,"line":2657},[1104,5443,5444],{"class":1572},"    language_code ",[1104,5446,1689],{"class":1121},[1104,5448,4484],{"class":1572},[1104,5450,1576],{"class":1121},[1104,5452,4550],{"class":1697},[1104,5454,1701],{"class":1121},[1104,5456,5423],{"class":2255},[1104,5458,1689],{"class":1121},[1104,5460,4562],{"class":1433},[1104,5462,1708],{"class":1121},[1104,5464,5465,5468,5470,5472,5474,5476],{"class":1106,"line":2662},[1104,5466,5467],{"class":1572},"    detection_method ",[1104,5469,1689],{"class":1121},[1104,5471,4484],{"class":1572},[1104,5473,1576],{"class":1121},[1104,5475,4550],{"class":1697},[1104,5477,2229],{"class":1121},[1104,5479,5480,5482,5484,5486],{"class":1106,"line":2668},[1104,5481,4557],{"class":2255},[1104,5483,1689],{"class":1121},[1104,5485,4850],{"class":1433},[1104,5487,1142],{"class":1121},[1104,5489,5490,5492],{"class":1106,"line":2689},[1104,5491,4569],{"class":2255},[1104,5493,4859],{"class":1121},[1104,5495,5496,5498,5500,5503,5505,5507,5509,5512,5514],{"class":1106,"line":2699},[1104,5497,4864],{"class":1121},[1104,5499,1139],{"class":1131},[1104,5501,5502],{"class":1135},"url",[1104,5504,1139],{"class":1131},[1104,5506,1167],{"class":1121},[1104,5508,1259],{"class":1131},[1104,5510,5511],{"class":1135},"URL Prefix",[1104,5513,1139],{"class":1131},[1104,5515,1299],{"class":1121},[1104,5517,5518,5520,5522,5525,5527,5529,5531,5534,5536],{"class":1106,"line":2707},[1104,5519,4864],{"class":1121},[1104,5521,1139],{"class":1131},[1104,5523,5524],{"class":1135},"session",[1104,5526,1139],{"class":1131},[1104,5528,1167],{"class":1121},[1104,5530,1259],{"class":1131},[1104,5532,5533],{"class":1135},"Session",[1104,5535,1139],{"class":1131},[1104,5537,1299],{"class":1121},[1104,5539,5540,5542,5544,5547,5549,5551,5553,5555,5557],{"class":1106,"line":2712},[1104,5541,4864],{"class":1121},[1104,5543,1139],{"class":1131},[1104,5545,5546],{"class":1135},"cookie",[1104,5548,1139],{"class":1131},[1104,5550,1167],{"class":1121},[1104,5552,1259],{"class":1131},[1104,5554,2429],{"class":1135},[1104,5556,1139],{"class":1131},[1104,5558,1299],{"class":1121},[1104,5560,5561,5563,5565,5568,5570,5572,5574,5576,5578],{"class":1106,"line":2718},[1104,5562,4864],{"class":1121},[1104,5564,1139],{"class":1131},[1104,5566,5567],{"class":1135},"header",[1104,5569,1139],{"class":1131},[1104,5571,1167],{"class":1121},[1104,5573,1259],{"class":1131},[1104,5575,1078],{"class":1135},[1104,5577,1139],{"class":1131},[1104,5579,1299],{"class":1121},[1104,5581,5582,5584,5586,5588,5590,5592,5594,5596,5598],{"class":1106,"line":2748},[1104,5583,4864],{"class":1121},[1104,5585,1139],{"class":1131},[1104,5587,4974],{"class":1135},[1104,5589,1139],{"class":1131},[1104,5591,1167],{"class":1121},[1104,5593,1259],{"class":1131},[1104,5595,4987],{"class":1135},[1104,5597,1139],{"class":1131},[1104,5599,1299],{"class":1121},[1104,5601,5602,5604,5606,5608,5610,5612,5614,5617,5619],{"class":1106,"line":2771},[1104,5603,4864],{"class":1121},[1104,5605,1139],{"class":1131},[1104,5607,4923],{"class":1135},[1104,5609,1139],{"class":1131},[1104,5611,1167],{"class":1121},[1104,5613,1259],{"class":1131},[1104,5615,5616],{"class":1135},"GeoIP",[1104,5618,1139],{"class":1131},[1104,5620,1299],{"class":1121},[1104,5622,5623,5625,5627,5629,5631,5633,5635,5637,5639],{"class":1106,"line":2779},[1104,5624,4864],{"class":1121},[1104,5626,1139],{"class":1131},[1104,5628,3026],{"class":1135},[1104,5630,1139],{"class":1131},[1104,5632,1167],{"class":1121},[1104,5634,1259],{"class":1131},[1104,5636,4961],{"class":1135},[1104,5638,1139],{"class":1131},[1104,5640,1299],{"class":1121},[1104,5642,5643,5645,5647,5650,5652,5654,5656,5659,5661],{"class":1106,"line":2784},[1104,5644,4864],{"class":1121},[1104,5646,1139],{"class":1131},[1104,5648,5649],{"class":1135},"default",[1104,5651,1139],{"class":1131},[1104,5653,1167],{"class":1121},[1104,5655,1259],{"class":1131},[1104,5657,5658],{"class":1135},"Default",[1104,5660,1139],{"class":1131},[1104,5662,1299],{"class":1121},[1104,5664,5665],{"class":1106,"line":2790},[1104,5666,5667],{"class":1121},"        ]\n",[1104,5669,5670],{"class":1106,"line":2811},[1104,5671,4536],{"class":1121},[1104,5673,5674,5677,5679,5681,5683,5686,5688,5691,5693,5695,5697,5699,5701,5703],{"class":1106,"line":2821},[1104,5675,5676],{"class":1572},"    ip_address ",[1104,5678,1689],{"class":1121},[1104,5680,4484],{"class":1572},[1104,5682,1576],{"class":1121},[1104,5684,5685],{"class":1697},"GenericIPAddressField",[1104,5687,1701],{"class":1121},[1104,5689,5690],{"class":2255},"null",[1104,5692,1689],{"class":1121},[1104,5694,2862],{"class":1464},[1104,5696,1167],{"class":1121},[1104,5698,5433],{"class":2255},[1104,5700,1689],{"class":1121},[1104,5702,2862],{"class":1464},[1104,5704,1708],{"class":1121},[1104,5706,5707,5710,5712,5714,5716,5719,5721,5724,5726,5728],{"class":1106,"line":2829},[1104,5708,5709],{"class":1572},"    user_agent ",[1104,5711,1689],{"class":1121},[1104,5713,4484],{"class":1572},[1104,5715,1576],{"class":1121},[1104,5717,5718],{"class":1697},"TextField",[1104,5720,1701],{"class":1121},[1104,5722,5723],{"class":2255},"blank",[1104,5725,1689],{"class":1121},[1104,5727,2862],{"class":1464},[1104,5729,1708],{"class":1121},[1104,5731,5732,5735,5737,5739,5741,5743,5745,5747,5749,5752],{"class":1106,"line":2834},[1104,5733,5734],{"class":1572},"    path ",[1104,5736,1689],{"class":1121},[1104,5738,4484],{"class":1572},[1104,5740,1576],{"class":1121},[1104,5742,4550],{"class":1697},[1104,5744,1701],{"class":1121},[1104,5746,5423],{"class":2255},[1104,5748,1689],{"class":1121},[1104,5750,5751],{"class":1433},"500",[1104,5753,1708],{"class":1121},[1104,5755,5756,5759,5761,5763,5765,5767,5769,5771,5773,5775],{"class":1106,"line":2840},[1104,5757,5758],{"class":1572},"    timestamp ",[1104,5760,1689],{"class":1121},[1104,5762,4484],{"class":1572},[1104,5764,1576],{"class":1121},[1104,5766,5043],{"class":1697},[1104,5768,1701],{"class":1121},[1104,5770,5048],{"class":2255},[1104,5772,1689],{"class":1121},[1104,5774,2862],{"class":1464},[1104,5776,1708],{"class":1121},[1104,5778,5779],{"class":1106,"line":2867},[1104,5780,1748],{"class":1572},[1104,5782,5783,5785,5787],{"class":1106,"line":2872},[1104,5784,5087],{"class":1717},[1104,5786,5090],{"class":1721},[1104,5788,1964],{"class":1121},[1104,5790,5791,5793,5795,5797,5799,5801,5804,5806],{"class":1106,"line":2890},[1104,5792,5097],{"class":1572},[1104,5794,1689],{"class":1121},[1104,5796,4876],{"class":1697},[1104,5798,1701],{"class":1121},[1104,5800,1139],{"class":1131},[1104,5802,5803],{"class":1135},"Language Usage Log",[1104,5805,1139],{"class":1131},[1104,5807,1708],{"class":1121},[1104,5809,5810,5812,5814,5816,5818,5820,5823,5825],{"class":1106,"line":2900},[1104,5811,5117],{"class":1572},[1104,5813,1689],{"class":1121},[1104,5815,4876],{"class":1697},[1104,5817,1701],{"class":1121},[1104,5819,1139],{"class":1131},[1104,5821,5822],{"class":1135},"Language Usage Logs",[1104,5824,1139],{"class":1131},[1104,5826,1708],{"class":1121},[1104,5828,5829,5832,5834],{"class":1106,"line":2940},[1104,5830,5831],{"class":1572},"        indexes ",[1104,5833,1689],{"class":1121},[1104,5835,1125],{"class":1121},[1104,5837,5838,5841,5843,5846,5848,5851,5854,5856,5859,5861,5863,5865,5868,5870],{"class":1106,"line":2965},[1104,5839,5840],{"class":1572},"            models",[1104,5842,1576],{"class":1121},[1104,5844,5845],{"class":1697},"Index",[1104,5847,1701],{"class":1121},[1104,5849,5850],{"class":2255},"fields",[1104,5852,5853],{"class":1121},"=[",[1104,5855,1139],{"class":1131},[1104,5857,5858],{"class":1135},"timestamp",[1104,5860,1139],{"class":1131},[1104,5862,1167],{"class":1121},[1104,5864,1259],{"class":1131},[1104,5866,5867],{"class":1135},"language_code",[1104,5869,1139],{"class":1131},[1104,5871,5872],{"class":1121},"]),\n",[1104,5874,5875,5877,5879,5881,5883,5885,5887,5889,5891,5893,5895,5897,5899,5901],{"class":1106,"line":2970},[1104,5876,5840],{"class":1572},[1104,5878,1576],{"class":1121},[1104,5880,5845],{"class":1697},[1104,5882,1701],{"class":1121},[1104,5884,5850],{"class":2255},[1104,5886,5853],{"class":1121},[1104,5888,1139],{"class":1131},[1104,5890,2039],{"class":1135},[1104,5892,1139],{"class":1131},[1104,5894,1167],{"class":1121},[1104,5896,1259],{"class":1131},[1104,5898,5858],{"class":1135},[1104,5900,1139],{"class":1131},[1104,5902,5872],{"class":1121},[1104,5904,5905],{"class":1106,"line":2996},[1104,5906,5667],{"class":1121},[1035,5908,5910],{"id":5909},"smart-language-detection","Smart Language Detection",[1095,5912,5914],{"className":1097,"code":5913,"language":1099,"meta":1100,"style":1100},"# utils/language_detection.py\nfrom django.conf import settings\nfrom django.utils import translation\nimport re\nfrom collections import Counter\n\nclass SmartLanguageDetector:\n    \"\"\"Advanced language detection with machine learning capabilities.\"\"\"\n    \n    def __init__(self):\n        self.language_patterns = self.build_language_patterns()\n    \n    def build_language_patterns(self):\n        \"\"\"Build patterns for language detection from content.\"\"\"\n        return {\n            'en': [\n                r'\\b(the|and|or|but|in|on|at|to|for|of|with|by)\\b',\n                r'\\b(this|that|these|those|here|there|where|when|what|how)\\b',\n            ],\n            'es': [\n                r'\\b(el|la|los|las|un|una|y|o|pero|en|de|con|por|para)\\b',\n                r'\\b(este|esta|estos|estas|aquí|allí|donde|cuando|qué|cómo)\\b',\n            ],\n            'fr': [\n                r'\\b(le|la|les|un|une|et|ou|mais|dans|de|avec|par|pour)\\b',\n                r'\\b(ce|cette|ces|ici|là|où|quand|que|comment)\\b',\n            ],\n            'de': [\n                r'\\b(der|die|das|ein|eine|und|oder|aber|in|von|mit|für)\\b',\n                r'\\b(dieser|diese|dieses|hier|dort|wo|wann|was|wie)\\b',\n            ],\n        }\n    \n    def detect_from_content(self, text):\n        \"\"\"Detect language from text content.\"\"\"\n        if not text:\n            return None\n        \n        text = text.lower()\n        scores = {}\n        \n        for lang, patterns in self.language_patterns.items():\n            score = 0\n            for pattern in patterns:\n                matches = re.findall(pattern, text, re.IGNORECASE)\n                score += len(matches)\n            scores[lang] = score\n        \n        if scores:\n            return max(scores, key=scores.get)\n        \n        return None\n    \n    def detect_from_user_behavior(self, user):\n        \"\"\"Detect language from user's historical behavior.\"\"\"\n        if not user.is_authenticated:\n            return None\n        \n        try:\n            # Get user's recent language usage\n            from .models import LanguageUsageLog\n            recent_logs = LanguageUsageLog.objects.filter(\n                user=user\n            ).order_by('-timestamp')[:50]\n            \n            if recent_logs:\n                languages = [log.language_code for log in recent_logs]\n                most_common = Counter(languages).most_common(1)\n                return most_common[0][0] if most_common else None\n        \n        except Exception:\n            pass\n        \n        return None\n    \n    def detect_from_browser_settings(self, request):\n        \"\"\"Enhanced browser language detection.\"\"\"\n        accept_language = request.META.get('HTTP_ACCEPT_LANGUAGE', '')\n        \n        if not accept_language:\n            return None\n        \n        # Parse Accept-Language header\n        languages = []\n        for item in accept_language.split(','):\n            if ';' in item:\n                lang, quality = item.split(';', 1)\n                try:\n                    q = float(quality.split('=')[1])\n                except (IndexError, ValueError):\n                    q = 1.0\n            else:\n                lang, q = item, 1.0\n            \n            lang = lang.strip().lower()\n            \n            # Handle language variants (e.g., en-US -> en)\n            if '-' in lang:\n                lang = lang.split('-')[0]\n            \n            # Check if language is supported\n            if lang in [l[0] for l in settings.LANGUAGES]:\n                languages.append((lang, q))\n        \n        # Sort by quality and return best match\n        if languages:\n            languages.sort(key=lambda x: x[1], reverse=True)\n            return languages[0][0]\n        \n        return None\n\ndetector = SmartLanguageDetector()\n",[1043,5915,5916,5921,5935,5949,5955,5967,5971,5980,5989,5993,6005,6025,6029,6042,6051,6057,6070,6149,6215,6220,6232,6316,6382,6386,6398,6476,6537,6541,6553,6628,6689,6693,6698,6702,6720,6729,6739,6745,6749,6765,6775,6779,6807,6817,6832,6867,6884,6900,6904,6913,6940,6944,6950,6954,6972,6981,6995,7001,7005,7011,7016,7030,7051,7061,7086,7090,7099,7126,7153,7182,7186,7194,7199,7203,7209,7213,7230,7239,7270,7274,7285,7291,7295,7300,7310,7335,7353,7386,7393,7427,7444,7453,7460,7477,7481,7501,7505,7510,7526,7553,7557,7562,7596,7618,7622,7627,7636,7679,7695,7699,7705,7709],{"__ignoreMap":1100},[1104,5917,5918],{"class":1106,"line":1107},[1104,5919,5920],{"class":1110},"# utils/language_detection.py\n",[1104,5922,5923,5925,5927,5929,5931,5933],{"class":1106,"line":1114},[1104,5924,1569],{"class":1568},[1104,5926,1573],{"class":1572},[1104,5928,1576],{"class":1121},[1104,5930,1617],{"class":1572},[1104,5932,1587],{"class":1568},[1104,5934,1622],{"class":1572},[1104,5936,5937,5939,5941,5943,5945,5947],{"class":1106,"line":1128},[1104,5938,1569],{"class":1568},[1104,5940,1573],{"class":1572},[1104,5942,1576],{"class":1121},[1104,5944,1601],{"class":1572},[1104,5946,1587],{"class":1568},[1104,5948,1606],{"class":1572},[1104,5950,5951,5953],{"class":1106,"line":1145},[1104,5952,1587],{"class":1568},[1104,5954,1670],{"class":1572},[1104,5956,5957,5959,5962,5964],{"class":1106,"line":1157},[1104,5958,1569],{"class":1568},[1104,5960,5961],{"class":1572}," collections ",[1104,5963,1587],{"class":1568},[1104,5965,5966],{"class":1572}," Counter\n",[1104,5968,5969],{"class":1106,"line":1173},[1104,5970,1243],{"emptyLinePlaceholder":1242},[1104,5972,5973,5975,5978],{"class":1106,"line":1185},[1104,5974,1718],{"class":1717},[1104,5976,5977],{"class":1721}," SmartLanguageDetector",[1104,5979,1964],{"class":1121},[1104,5981,5982,5984,5987],{"class":1106,"line":1197},[1104,5983,1736],{"class":1735},[1104,5985,5986],{"class":1739},"Advanced language detection with machine learning capabilities.",[1104,5988,1743],{"class":1735},[1104,5990,5991],{"class":1106,"line":1209},[1104,5992,1748],{"class":1572},[1104,5994,5995,5997,5999,6001,6003],{"class":1106,"line":1221},[1104,5996,1753],{"class":1717},[1104,5998,1757],{"class":1756},[1104,6000,1701],{"class":1121},[1104,6002,1763],{"class":1762},[1104,6004,1730],{"class":1121},[1104,6006,6007,6009,6011,6014,6016,6018,6020,6023],{"class":1106,"line":1233},[1104,6008,1795],{"class":1117},[1104,6010,1576],{"class":1121},[1104,6012,6013],{"class":1800},"language_patterns",[1104,6015,1122],{"class":1121},[1104,6017,1881],{"class":1117},[1104,6019,1576],{"class":1121},[1104,6021,6022],{"class":1697},"build_language_patterns",[1104,6024,1861],{"class":1121},[1104,6026,6027],{"class":1106,"line":1239},[1104,6028,1748],{"class":1572},[1104,6030,6031,6033,6036,6038,6040],{"class":1106,"line":1246},[1104,6032,1753],{"class":1717},[1104,6034,6035],{"class":1816}," build_language_patterns",[1104,6037,1701],{"class":1121},[1104,6039,1763],{"class":1762},[1104,6041,1730],{"class":1121},[1104,6043,6044,6046,6049],{"class":1106,"line":1252},[1104,6045,1833],{"class":1735},[1104,6047,6048],{"class":1739},"Build patterns for language detection from content.",[1104,6050,1743],{"class":1735},[1104,6052,6053,6055],{"class":1106,"line":1268},[1104,6054,2445],{"class":1568},[1104,6056,3239],{"class":1121},[1104,6058,6059,6062,6064,6066,6068],{"class":1106,"line":1278},[1104,6060,6061],{"class":1131},"            '",[1104,6063,1262],{"class":1135},[1104,6065,1139],{"class":1131},[1104,6067,2924],{"class":1121},[1104,6069,1125],{"class":1121},[1104,6071,6072,6075,6077,6081,6083,6087,6090,6092,6094,6097,6099,6102,6104,6106,6108,6111,6113,6116,6118,6121,6123,6126,6128,6131,6133,6136,6138,6141,6143,6145,6147],{"class":1106,"line":1302},[1104,6073,6074],{"class":1717},"                r",[1104,6076,1139],{"class":1131},[1104,6078,6080],{"class":6079},"sRJPX","\\b",[1104,6082,1701],{"class":1121},[1104,6084,6086],{"class":6085},"s27EL","the",[1104,6088,6089],{"class":1437},"|",[1104,6091,2614],{"class":6085},[1104,6093,6089],{"class":1437},[1104,6095,6096],{"class":6085},"or",[1104,6098,6089],{"class":1437},[1104,6100,6101],{"class":6085},"but",[1104,6103,6089],{"class":1437},[1104,6105,3802],{"class":6085},[1104,6107,6089],{"class":1437},[1104,6109,6110],{"class":6085},"on",[1104,6112,6089],{"class":1437},[1104,6114,6115],{"class":6085},"at",[1104,6117,6089],{"class":1437},[1104,6119,6120],{"class":6085},"to",[1104,6122,6089],{"class":1437},[1104,6124,6125],{"class":6085},"for",[1104,6127,6089],{"class":1437},[1104,6129,6130],{"class":6085},"of",[1104,6132,6089],{"class":1437},[1104,6134,6135],{"class":6085},"with",[1104,6137,6089],{"class":1437},[1104,6139,6140],{"class":6085},"by",[1104,6142,1061],{"class":1121},[1104,6144,6080],{"class":6079},[1104,6146,1139],{"class":1131},[1104,6148,1142],{"class":1121},[1104,6150,6151,6153,6155,6157,6159,6162,6164,6167,6169,6172,6174,6177,6179,6182,6184,6187,6189,6192,6194,6197,6199,6202,6204,6207,6209,6211,6213],{"class":1106,"line":1325},[1104,6152,6074],{"class":1717},[1104,6154,1139],{"class":1131},[1104,6156,6080],{"class":6079},[1104,6158,1701],{"class":1121},[1104,6160,6161],{"class":6085},"this",[1104,6163,6089],{"class":1437},[1104,6165,6166],{"class":6085},"that",[1104,6168,6089],{"class":1437},[1104,6170,6171],{"class":6085},"these",[1104,6173,6089],{"class":1437},[1104,6175,6176],{"class":6085},"those",[1104,6178,6089],{"class":1437},[1104,6180,6181],{"class":6085},"here",[1104,6183,6089],{"class":1437},[1104,6185,6186],{"class":6085},"there",[1104,6188,6089],{"class":1437},[1104,6190,6191],{"class":6085},"where",[1104,6193,6089],{"class":1437},[1104,6195,6196],{"class":6085},"when",[1104,6198,6089],{"class":1437},[1104,6200,6201],{"class":6085},"what",[1104,6203,6089],{"class":1437},[1104,6205,6206],{"class":6085},"how",[1104,6208,1061],{"class":1121},[1104,6210,6080],{"class":6079},[1104,6212,1139],{"class":1131},[1104,6214,1142],{"class":1121},[1104,6216,6217],{"class":1106,"line":1348},[1104,6218,6219],{"class":1121},"            ],\n",[1104,6221,6222,6224,6226,6228,6230],{"class":1106,"line":1371},[1104,6223,6061],{"class":1131},[1104,6225,1309],{"class":1135},[1104,6227,1139],{"class":1131},[1104,6229,2924],{"class":1121},[1104,6231,1125],{"class":1121},[1104,6233,6234,6236,6238,6240,6242,6245,6247,6250,6252,6255,6257,6260,6262,6265,6267,6270,6272,6275,6277,6280,6282,6285,6287,6289,6291,6293,6295,6298,6300,6303,6305,6308,6310,6312,6314],{"class":1106,"line":1394},[1104,6235,6074],{"class":1717},[1104,6237,1139],{"class":1131},[1104,6239,6080],{"class":6079},[1104,6241,1701],{"class":1121},[1104,6243,6244],{"class":6085},"el",[1104,6246,6089],{"class":1437},[1104,6248,6249],{"class":6085},"la",[1104,6251,6089],{"class":1437},[1104,6253,6254],{"class":6085},"los",[1104,6256,6089],{"class":1437},[1104,6258,6259],{"class":6085},"las",[1104,6261,6089],{"class":1437},[1104,6263,6264],{"class":6085},"un",[1104,6266,6089],{"class":1437},[1104,6268,6269],{"class":6085},"una",[1104,6271,6089],{"class":1437},[1104,6273,6274],{"class":6085},"y",[1104,6276,6089],{"class":1437},[1104,6278,6279],{"class":6085},"o",[1104,6281,6089],{"class":1437},[1104,6283,6284],{"class":6085},"pero",[1104,6286,6089],{"class":1437},[1104,6288,1262],{"class":6085},[1104,6290,6089],{"class":1437},[1104,6292,1355],{"class":6085},[1104,6294,6089],{"class":1437},[1104,6296,6297],{"class":6085},"con",[1104,6299,6089],{"class":1437},[1104,6301,6302],{"class":6085},"por",[1104,6304,6089],{"class":1437},[1104,6306,6307],{"class":6085},"para",[1104,6309,1061],{"class":1121},[1104,6311,6080],{"class":6079},[1104,6313,1139],{"class":1131},[1104,6315,1142],{"class":1121},[1104,6317,6318,6320,6322,6324,6326,6329,6331,6334,6336,6339,6341,6344,6346,6349,6351,6354,6356,6359,6361,6364,6366,6369,6371,6374,6376,6378,6380],{"class":1106,"line":1399},[1104,6319,6074],{"class":1717},[1104,6321,1139],{"class":1131},[1104,6323,6080],{"class":6079},[1104,6325,1701],{"class":1121},[1104,6327,6328],{"class":6085},"este",[1104,6330,6089],{"class":1437},[1104,6332,6333],{"class":6085},"esta",[1104,6335,6089],{"class":1437},[1104,6337,6338],{"class":6085},"estos",[1104,6340,6089],{"class":1437},[1104,6342,6343],{"class":6085},"estas",[1104,6345,6089],{"class":1437},[1104,6347,6348],{"class":6085},"aquí",[1104,6350,6089],{"class":1437},[1104,6352,6353],{"class":6085},"allí",[1104,6355,6089],{"class":1437},[1104,6357,6358],{"class":6085},"donde",[1104,6360,6089],{"class":1437},[1104,6362,6363],{"class":6085},"cuando",[1104,6365,6089],{"class":1437},[1104,6367,6368],{"class":6085},"qué",[1104,6370,6089],{"class":1437},[1104,6372,6373],{"class":6085},"cómo",[1104,6375,1061],{"class":1121},[1104,6377,6080],{"class":6079},[1104,6379,1139],{"class":1131},[1104,6381,1142],{"class":1121},[1104,6383,6384],{"class":1106,"line":1404},[1104,6385,6219],{"class":1121},[1104,6387,6388,6390,6392,6394,6396],{"class":1106,"line":1410},[1104,6389,6061],{"class":1131},[1104,6391,1332],{"class":1135},[1104,6393,1139],{"class":1131},[1104,6395,2924],{"class":1121},[1104,6397,1125],{"class":1121},[1104,6399,6400,6402,6404,6406,6408,6411,6413,6415,6417,6420,6422,6424,6426,6429,6431,6434,6436,6439,6441,6444,6446,6449,6451,6453,6455,6458,6460,6463,6465,6468,6470,6472,6474],{"class":1106,"line":1425},[1104,6401,6074],{"class":1717},[1104,6403,1139],{"class":1131},[1104,6405,6080],{"class":6079},[1104,6407,1701],{"class":1121},[1104,6409,6410],{"class":6085},"le",[1104,6412,6089],{"class":1437},[1104,6414,6249],{"class":6085},[1104,6416,6089],{"class":1437},[1104,6418,6419],{"class":6085},"les",[1104,6421,6089],{"class":1437},[1104,6423,6264],{"class":6085},[1104,6425,6089],{"class":1437},[1104,6427,6428],{"class":6085},"une",[1104,6430,6089],{"class":1437},[1104,6432,6433],{"class":6085},"et",[1104,6435,6089],{"class":1437},[1104,6437,6438],{"class":6085},"ou",[1104,6440,6089],{"class":1437},[1104,6442,6443],{"class":6085},"mais",[1104,6445,6089],{"class":1437},[1104,6447,6448],{"class":6085},"dans",[1104,6450,6089],{"class":1437},[1104,6452,1355],{"class":6085},[1104,6454,6089],{"class":1437},[1104,6456,6457],{"class":6085},"avec",[1104,6459,6089],{"class":1437},[1104,6461,6462],{"class":6085},"par",[1104,6464,6089],{"class":1437},[1104,6466,6467],{"class":6085},"pour",[1104,6469,1061],{"class":1121},[1104,6471,6080],{"class":6079},[1104,6473,1139],{"class":1131},[1104,6475,1142],{"class":1121},[1104,6477,6478,6480,6482,6484,6486,6489,6491,6494,6496,6499,6501,6504,6506,6509,6511,6514,6516,6519,6521,6524,6526,6529,6531,6533,6535],{"class":1106,"line":1456},[1104,6479,6074],{"class":1717},[1104,6481,1139],{"class":1131},[1104,6483,6080],{"class":6079},[1104,6485,1701],{"class":1121},[1104,6487,6488],{"class":6085},"ce",[1104,6490,6089],{"class":1437},[1104,6492,6493],{"class":6085},"cette",[1104,6495,6089],{"class":1437},[1104,6497,6498],{"class":6085},"ces",[1104,6500,6089],{"class":1437},[1104,6502,6503],{"class":6085},"ici",[1104,6505,6089],{"class":1437},[1104,6507,6508],{"class":6085},"là",[1104,6510,6089],{"class":1437},[1104,6512,6513],{"class":6085},"où",[1104,6515,6089],{"class":1437},[1104,6517,6518],{"class":6085},"quand",[1104,6520,6089],{"class":1437},[1104,6522,6523],{"class":6085},"que",[1104,6525,6089],{"class":1437},[1104,6527,6528],{"class":6085},"comment",[1104,6530,1061],{"class":1121},[1104,6532,6080],{"class":6079},[1104,6534,1139],{"class":1131},[1104,6536,1142],{"class":1121},[1104,6538,6539],{"class":1106,"line":1468},[1104,6540,6219],{"class":1121},[1104,6542,6543,6545,6547,6549,6551],{"class":1106,"line":1483},[1104,6544,6061],{"class":1131},[1104,6546,1355],{"class":1135},[1104,6548,1139],{"class":1131},[1104,6550,2924],{"class":1121},[1104,6552,1125],{"class":1121},[1104,6554,6555,6557,6559,6561,6563,6566,6568,6571,6573,6576,6578,6581,6583,6586,6588,6591,6593,6596,6598,6601,6603,6605,6607,6610,6612,6615,6617,6620,6622,6624,6626],{"class":1106,"line":1497},[1104,6556,6074],{"class":1717},[1104,6558,1139],{"class":1131},[1104,6560,6080],{"class":6079},[1104,6562,1701],{"class":1121},[1104,6564,6565],{"class":6085},"der",[1104,6567,6089],{"class":1437},[1104,6569,6570],{"class":6085},"die",[1104,6572,6089],{"class":1437},[1104,6574,6575],{"class":6085},"das",[1104,6577,6089],{"class":1437},[1104,6579,6580],{"class":6085},"ein",[1104,6582,6089],{"class":1437},[1104,6584,6585],{"class":6085},"eine",[1104,6587,6089],{"class":1437},[1104,6589,6590],{"class":6085},"und",[1104,6592,6089],{"class":1437},[1104,6594,6595],{"class":6085},"oder",[1104,6597,6089],{"class":1437},[1104,6599,6600],{"class":6085},"aber",[1104,6602,6089],{"class":1437},[1104,6604,3802],{"class":6085},[1104,6606,6089],{"class":1437},[1104,6608,6609],{"class":6085},"von",[1104,6611,6089],{"class":1437},[1104,6613,6614],{"class":6085},"mit",[1104,6616,6089],{"class":1437},[1104,6618,6619],{"class":6085},"für",[1104,6621,1061],{"class":1121},[1104,6623,6080],{"class":6079},[1104,6625,1139],{"class":1131},[1104,6627,1142],{"class":1121},[1104,6629,6630,6632,6634,6636,6638,6641,6643,6646,6648,6651,6653,6656,6658,6661,6663,6666,6668,6671,6673,6676,6678,6681,6683,6685,6687],{"class":1106,"line":1508},[1104,6631,6074],{"class":1717},[1104,6633,1139],{"class":1131},[1104,6635,6080],{"class":6079},[1104,6637,1701],{"class":1121},[1104,6639,6640],{"class":6085},"dieser",[1104,6642,6089],{"class":1437},[1104,6644,6645],{"class":6085},"diese",[1104,6647,6089],{"class":1437},[1104,6649,6650],{"class":6085},"dieses",[1104,6652,6089],{"class":1437},[1104,6654,6655],{"class":6085},"hier",[1104,6657,6089],{"class":1437},[1104,6659,6660],{"class":6085},"dort",[1104,6662,6089],{"class":1437},[1104,6664,6665],{"class":6085},"wo",[1104,6667,6089],{"class":1437},[1104,6669,6670],{"class":6085},"wann",[1104,6672,6089],{"class":1437},[1104,6674,6675],{"class":6085},"was",[1104,6677,6089],{"class":1437},[1104,6679,6680],{"class":6085},"wie",[1104,6682,1061],{"class":1121},[1104,6684,6080],{"class":6079},[1104,6686,1139],{"class":1131},[1104,6688,1142],{"class":1121},[1104,6690,6691],{"class":1106,"line":1523},[1104,6692,6219],{"class":1121},[1104,6694,6695],{"class":1106,"line":1528},[1104,6696,6697],{"class":1121},"        }\n",[1104,6699,6700],{"class":1106,"line":1534},[1104,6701,1748],{"class":1572},[1104,6703,6704,6706,6709,6711,6713,6715,6718],{"class":1106,"line":2012},[1104,6705,1753],{"class":1717},[1104,6707,6708],{"class":1816}," detect_from_content",[1104,6710,1701],{"class":1121},[1104,6712,1763],{"class":1762},[1104,6714,1167],{"class":1121},[1104,6716,6717],{"class":1768}," text",[1104,6719,1730],{"class":1121},[1104,6721,6722,6724,6727],{"class":1106,"line":2017},[1104,6723,1833],{"class":1735},[1104,6725,6726],{"class":1739},"Detect language from text content.",[1104,6728,1743],{"class":1735},[1104,6730,6731,6733,6735,6737],{"class":1106,"line":2023},[1104,6732,1953],{"class":1568},[1104,6734,3158],{"class":1437},[1104,6736,6717],{"class":1572},[1104,6738,1964],{"class":1121},[1104,6740,6741,6743],{"class":1106,"line":2062},[1104,6742,2522],{"class":1568},[1104,6744,1465],{"class":1464},[1104,6746,6747],{"class":1106,"line":2084},[1104,6748,1866],{"class":1572},[1104,6750,6751,6754,6756,6758,6760,6763],{"class":1106,"line":2089},[1104,6752,6753],{"class":1572},"        text ",[1104,6755,1689],{"class":1121},[1104,6757,6717],{"class":1572},[1104,6759,1576],{"class":1121},[1104,6761,6762],{"class":1697},"lower",[1104,6764,1861],{"class":1121},[1104,6766,6767,6770,6772],{"class":1106,"line":2112},[1104,6768,6769],{"class":1572},"        scores ",[1104,6771,1689],{"class":1121},[1104,6773,6774],{"class":1121}," {}\n",[1104,6776,6777],{"class":1106,"line":2122},[1104,6778,1866],{"class":1572},[1104,6780,6781,6783,6786,6788,6791,6793,6795,6797,6799,6801,6804],{"class":1106,"line":2151},[1104,6782,5265],{"class":1568},[1104,6784,6785],{"class":1572}," lang",[1104,6787,1167],{"class":1121},[1104,6789,6790],{"class":1572}," patterns ",[1104,6792,3802],{"class":1568},[1104,6794,1881],{"class":1117},[1104,6796,1576],{"class":1121},[1104,6798,6013],{"class":1800},[1104,6800,1576],{"class":1121},[1104,6802,6803],{"class":1697},"items",[1104,6805,6806],{"class":1121},"():\n",[1104,6808,6809,6812,6814],{"class":1106,"line":2156},[1104,6810,6811],{"class":1572},"            score ",[1104,6813,1689],{"class":1121},[1104,6815,6816],{"class":1433}," 0\n",[1104,6818,6819,6822,6825,6827,6830],{"class":1106,"line":2165},[1104,6820,6821],{"class":1568},"            for",[1104,6823,6824],{"class":1572}," pattern ",[1104,6826,3802],{"class":1568},[1104,6828,6829],{"class":1572}," patterns",[1104,6831,1964],{"class":1121},[1104,6833,6834,6837,6839,6842,6844,6847,6849,6852,6854,6856,6858,6860,6862,6865],{"class":1106,"line":2171},[1104,6835,6836],{"class":1572},"                matches ",[1104,6838,1689],{"class":1121},[1104,6840,6841],{"class":1572}," re",[1104,6843,1576],{"class":1121},[1104,6845,6846],{"class":1697},"findall",[1104,6848,1701],{"class":1121},[1104,6850,6851],{"class":1697},"pattern",[1104,6853,1167],{"class":1121},[1104,6855,6717],{"class":1697},[1104,6857,1167],{"class":1121},[1104,6859,6841],{"class":1697},[1104,6861,1576],{"class":1121},[1104,6863,6864],{"class":1929},"IGNORECASE",[1104,6866,1708],{"class":1121},[1104,6868,6869,6872,6875,6877,6879,6882],{"class":1106,"line":2202},[1104,6870,6871],{"class":1572},"                score ",[1104,6873,6874],{"class":1121},"+=",[1104,6876,2975],{"class":1756},[1104,6878,1701],{"class":1121},[1104,6880,6881],{"class":1697},"matches",[1104,6883,1708],{"class":1121},[1104,6885,6886,6889,6891,6893,6895,6897],{"class":1106,"line":2218},[1104,6887,6888],{"class":1572},"            scores",[1104,6890,2373],{"class":1121},[1104,6892,3787],{"class":1572},[1104,6894,2383],{"class":1121},[1104,6896,1122],{"class":1121},[1104,6898,6899],{"class":1572}," score\n",[1104,6901,6902],{"class":1106,"line":2232},[1104,6903,1866],{"class":1572},[1104,6905,6906,6908,6911],{"class":1106,"line":2244},[1104,6907,1953],{"class":1568},[1104,6909,6910],{"class":1572}," scores",[1104,6912,1964],{"class":1121},[1104,6914,6915,6917,6920,6922,6925,6927,6930,6932,6934,6936,6938],{"class":1106,"line":2252},[1104,6916,2522],{"class":1568},[1104,6918,6919],{"class":1756}," max",[1104,6921,1701],{"class":1121},[1104,6923,6924],{"class":1697},"scores",[1104,6926,1167],{"class":1121},[1104,6928,6929],{"class":2255}," key",[1104,6931,1689],{"class":1121},[1104,6933,6924],{"class":1697},[1104,6935,1576],{"class":1121},[1104,6937,2188],{"class":1800},[1104,6939,1708],{"class":1121},[1104,6941,6942],{"class":1106,"line":2269},[1104,6943,1866],{"class":1572},[1104,6945,6946,6948],{"class":1106,"line":2285},[1104,6947,2445],{"class":1568},[1104,6949,1465],{"class":1464},[1104,6951,6952],{"class":1106,"line":2301},[1104,6953,1748],{"class":1572},[1104,6955,6956,6958,6961,6963,6965,6967,6970],{"class":1106,"line":2317},[1104,6957,1753],{"class":1717},[1104,6959,6960],{"class":1816}," detect_from_user_behavior",[1104,6962,1701],{"class":1121},[1104,6964,1763],{"class":1762},[1104,6966,1167],{"class":1121},[1104,6968,6969],{"class":1768}," user",[1104,6971,1730],{"class":1121},[1104,6973,6974,6976,6979],{"class":1106,"line":2333},[1104,6975,1833],{"class":1735},[1104,6977,6978],{"class":1739},"Detect language from user's historical behavior.",[1104,6980,1743],{"class":1735},[1104,6982,6983,6985,6987,6989,6991,6993],{"class":1106,"line":2349},[1104,6984,1953],{"class":1568},[1104,6986,3158],{"class":1437},[1104,6988,6969],{"class":1572},[1104,6990,1576],{"class":1121},[1104,6992,2057],{"class":1800},[1104,6994,1964],{"class":1121},[1104,6996,6997,6999],{"class":1106,"line":2355},[1104,6998,2522],{"class":1568},[1104,7000,1465],{"class":1464},[1104,7002,7003],{"class":1106,"line":2361},[1104,7004,1866],{"class":1572},[1104,7006,7007,7009],{"class":1106,"line":2367},[1104,7008,3088],{"class":1568},[1104,7010,1964],{"class":1121},[1104,7012,7013],{"class":1106,"line":2391},[1104,7014,7015],{"class":1110},"            # Get user's recent language usage\n",[1104,7017,7018,7020,7023,7025,7027],{"class":1106,"line":2396},[1104,7019,3096],{"class":1568},[1104,7021,7022],{"class":1121}," .",[1104,7024,4397],{"class":1572},[1104,7026,1587],{"class":1568},[1104,7028,7029],{"class":1572}," LanguageUsageLog\n",[1104,7031,7032,7035,7037,7039,7041,7044,7046,7049],{"class":1106,"line":2402},[1104,7033,7034],{"class":1572},"            recent_logs ",[1104,7036,1689],{"class":1121},[1104,7038,5327],{"class":1572},[1104,7040,1576],{"class":1121},[1104,7042,7043],{"class":1800},"objects",[1104,7045,1576],{"class":1121},[1104,7047,7048],{"class":1697},"filter",[1104,7050,2229],{"class":1121},[1104,7052,7053,7056,7058],{"class":1106,"line":2437},[1104,7054,7055],{"class":2255},"                user",[1104,7057,1689],{"class":1121},[1104,7059,7060],{"class":1697},"user\n",[1104,7062,7063,7066,7069,7071,7073,7076,7078,7081,7084],{"class":1106,"line":2442},[1104,7064,7065],{"class":1121},"            ).",[1104,7067,7068],{"class":1697},"order_by",[1104,7070,1701],{"class":1121},[1104,7072,1139],{"class":1131},[1104,7074,7075],{"class":1135},"-timestamp",[1104,7077,1139],{"class":1131},[1104,7079,7080],{"class":1121},")[:",[1104,7082,7083],{"class":1433},"50",[1104,7085,1236],{"class":1121},[1104,7087,7088],{"class":1106,"line":2451},[1104,7089,2358],{"class":1572},[1104,7091,7092,7094,7097],{"class":1106,"line":2456},[1104,7093,2205],{"class":1568},[1104,7095,7096],{"class":1572}," recent_logs",[1104,7098,1964],{"class":1121},[1104,7100,7101,7104,7106,7108,7111,7113,7115,7117,7120,7122,7124],{"class":1106,"line":2474},[1104,7102,7103],{"class":1572},"                languages ",[1104,7105,1689],{"class":1121},[1104,7107,3784],{"class":1121},[1104,7109,7110],{"class":1572},"log",[1104,7112,1576],{"class":1121},[1104,7114,5867],{"class":1800},[1104,7116,3796],{"class":1568},[1104,7118,7119],{"class":1572}," log ",[1104,7121,3802],{"class":1568},[1104,7123,7096],{"class":1572},[1104,7125,1236],{"class":1121},[1104,7127,7128,7131,7133,7136,7138,7141,7143,7146,7148,7151],{"class":1106,"line":2484},[1104,7129,7130],{"class":1572},"                most_common ",[1104,7132,1689],{"class":1121},[1104,7134,7135],{"class":1697}," Counter",[1104,7137,1701],{"class":1121},[1104,7139,7140],{"class":1697},"languages",[1104,7142,4086],{"class":1121},[1104,7144,7145],{"class":1697},"most_common",[1104,7147,1701],{"class":1121},[1104,7149,7150],{"class":1433},"1",[1104,7152,1708],{"class":1121},[1104,7154,7155,7157,7160,7162,7164,7167,7169,7171,7174,7177,7180],{"class":1106,"line":2490},[1104,7156,3034],{"class":1568},[1104,7158,7159],{"class":1572}," most_common",[1104,7161,2373],{"class":1121},[1104,7163,2932],{"class":1433},[1104,7165,7166],{"class":1121},"][",[1104,7168,2932],{"class":1433},[1104,7170,2383],{"class":1121},[1104,7172,7173],{"class":1568}," if",[1104,7175,7176],{"class":1572}," most_common ",[1104,7178,7179],{"class":1568},"else",[1104,7181,1465],{"class":1464},[1104,7183,7184],{"class":1106,"line":2510},[1104,7185,1866],{"class":1572},[1104,7187,7188,7190,7192],{"class":1106,"line":2519},[1104,7189,3545],{"class":1568},[1104,7191,3548],{"class":1776},[1104,7193,1964],{"class":1121},[1104,7195,7196],{"class":1106,"line":2527},[1104,7197,7198],{"class":1568},"            pass\n",[1104,7200,7201],{"class":1106,"line":2532},[1104,7202,1866],{"class":1572},[1104,7204,7205,7207],{"class":1106,"line":2538},[1104,7206,2445],{"class":1568},[1104,7208,1465],{"class":1464},[1104,7210,7211],{"class":1106,"line":2573},[1104,7212,1748],{"class":1572},[1104,7214,7215,7217,7220,7222,7224,7226,7228],{"class":1106,"line":2581},[1104,7216,1753],{"class":1717},[1104,7218,7219],{"class":1816}," detect_from_browser_settings",[1104,7221,1701],{"class":1121},[1104,7223,1763],{"class":1762},[1104,7225,1167],{"class":1121},[1104,7227,1826],{"class":1768},[1104,7229,1730],{"class":1121},[1104,7231,7232,7234,7237],{"class":1106,"line":2605},[1104,7233,1833],{"class":1735},[1104,7235,7236],{"class":1739},"Enhanced browser language detection.",[1104,7238,1743],{"class":1735},[1104,7240,7241,7244,7246,7248,7250,7252,7254,7256,7258,7260,7262,7264,7266,7268],{"class":1106,"line":2631},[1104,7242,7243],{"class":1572},"        accept_language ",[1104,7245,1689],{"class":1121},[1104,7247,1826],{"class":1572},[1104,7249,1576],{"class":1121},[1104,7251,2730],{"class":1929},[1104,7253,1576],{"class":1121},[1104,7255,2188],{"class":1697},[1104,7257,1701],{"class":1121},[1104,7259,1139],{"class":1131},[1104,7261,4076],{"class":1135},[1104,7263,1139],{"class":1131},[1104,7265,1167],{"class":1121},[1104,7267,4083],{"class":1131},[1104,7269,1708],{"class":1121},[1104,7271,7272],{"class":1106,"line":2640},[1104,7273,1866],{"class":1572},[1104,7275,7276,7278,7280,7283],{"class":1106,"line":2651},[1104,7277,1953],{"class":1568},[1104,7279,3158],{"class":1437},[1104,7281,7282],{"class":1572}," accept_language",[1104,7284,1964],{"class":1121},[1104,7286,7287,7289],{"class":1106,"line":2657},[1104,7288,2522],{"class":1568},[1104,7290,1465],{"class":1464},[1104,7292,7293],{"class":1106,"line":2662},[1104,7294,1866],{"class":1572},[1104,7296,7297],{"class":1106,"line":2668},[1104,7298,7299],{"class":1110},"        # Parse Accept-Language header\n",[1104,7301,7302,7305,7307],{"class":1106,"line":2689},[1104,7303,7304],{"class":1572},"        languages ",[1104,7306,1689],{"class":1121},[1104,7308,7309],{"class":1121}," []\n",[1104,7311,7312,7314,7317,7319,7321,7323,7325,7327,7329,7331,7333],{"class":1106,"line":2699},[1104,7313,5265],{"class":1568},[1104,7315,7316],{"class":1572}," item ",[1104,7318,3802],{"class":1568},[1104,7320,7282],{"class":1572},[1104,7322,1576],{"class":1121},[1104,7324,2917],{"class":1697},[1104,7326,1701],{"class":1121},[1104,7328,1139],{"class":1131},[1104,7330,1167],{"class":1135},[1104,7332,1139],{"class":1131},[1104,7334,1730],{"class":1121},[1104,7336,7337,7339,7341,7344,7346,7348,7351],{"class":1106,"line":2707},[1104,7338,2205],{"class":1568},[1104,7340,1259],{"class":1131},[1104,7342,7343],{"class":1135},";",[1104,7345,1139],{"class":1131},[1104,7347,5236],{"class":1437},[1104,7349,7350],{"class":1572}," item",[1104,7352,1964],{"class":1121},[1104,7354,7355,7358,7360,7363,7365,7367,7369,7371,7373,7375,7377,7379,7381,7384],{"class":1106,"line":2712},[1104,7356,7357],{"class":1572},"                lang",[1104,7359,1167],{"class":1121},[1104,7361,7362],{"class":1572}," quality ",[1104,7364,1689],{"class":1121},[1104,7366,7350],{"class":1572},[1104,7368,1576],{"class":1121},[1104,7370,2917],{"class":1697},[1104,7372,1701],{"class":1121},[1104,7374,1139],{"class":1131},[1104,7376,7343],{"class":1135},[1104,7378,1139],{"class":1131},[1104,7380,1167],{"class":1121},[1104,7382,7383],{"class":1433}," 1",[1104,7385,1708],{"class":1121},[1104,7387,7388,7391],{"class":1106,"line":2718},[1104,7389,7390],{"class":1568},"                try",[1104,7392,1964],{"class":1121},[1104,7394,7395,7398,7400,7403,7405,7408,7410,7412,7414,7416,7418,7420,7422,7424],{"class":1106,"line":2748},[1104,7396,7397],{"class":1572},"                    q ",[1104,7399,1689],{"class":1121},[1104,7401,7402],{"class":1776}," float",[1104,7404,1701],{"class":1121},[1104,7406,7407],{"class":1697},"quality",[1104,7409,1576],{"class":1121},[1104,7411,2917],{"class":1697},[1104,7413,1701],{"class":1121},[1104,7415,1139],{"class":1131},[1104,7417,1689],{"class":1135},[1104,7419,1139],{"class":1131},[1104,7421,2929],{"class":1121},[1104,7423,7150],{"class":1433},[1104,7425,7426],{"class":1121},"])\n",[1104,7428,7429,7432,7434,7437,7439,7442],{"class":1106,"line":2771},[1104,7430,7431],{"class":1568},"                except",[1104,7433,2415],{"class":1121},[1104,7435,7436],{"class":1776},"IndexError",[1104,7438,1167],{"class":1121},[1104,7440,7441],{"class":1776}," ValueError",[1104,7443,1730],{"class":1121},[1104,7445,7446,7448,7450],{"class":1106,"line":2779},[1104,7447,7397],{"class":1572},[1104,7449,1689],{"class":1121},[1104,7451,7452],{"class":1433}," 1.0\n",[1104,7454,7455,7458],{"class":1106,"line":2784},[1104,7456,7457],{"class":1568},"            else",[1104,7459,1964],{"class":1121},[1104,7461,7462,7464,7466,7469,7471,7473,7475],{"class":1106,"line":2790},[1104,7463,7357],{"class":1572},[1104,7465,1167],{"class":1121},[1104,7467,7468],{"class":1572}," q ",[1104,7470,1689],{"class":1121},[1104,7472,7350],{"class":1572},[1104,7474,1167],{"class":1121},[1104,7476,7452],{"class":1433},[1104,7478,7479],{"class":1106,"line":2811},[1104,7480,2358],{"class":1572},[1104,7482,7483,7486,7488,7490,7492,7495,7497,7499],{"class":1106,"line":2821},[1104,7484,7485],{"class":1572},"            lang ",[1104,7487,1689],{"class":1121},[1104,7489,6785],{"class":1572},[1104,7491,1576],{"class":1121},[1104,7493,7494],{"class":1697},"strip",[1104,7496,1780],{"class":1121},[1104,7498,6762],{"class":1697},[1104,7500,1861],{"class":1121},[1104,7502,7503],{"class":1106,"line":2829},[1104,7504,2358],{"class":1572},[1104,7506,7507],{"class":1106,"line":2834},[1104,7508,7509],{"class":1110},"            # Handle language variants (e.g., en-US -> en)\n",[1104,7511,7512,7514,7516,7518,7520,7522,7524],{"class":1106,"line":2840},[1104,7513,2205],{"class":1568},[1104,7515,1259],{"class":1131},[1104,7517,4112],{"class":1135},[1104,7519,1139],{"class":1131},[1104,7521,5236],{"class":1437},[1104,7523,6785],{"class":1572},[1104,7525,1964],{"class":1121},[1104,7527,7528,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551],{"class":1106,"line":2867},[1104,7529,7530],{"class":1572},"                lang ",[1104,7532,1689],{"class":1121},[1104,7534,6785],{"class":1572},[1104,7536,1576],{"class":1121},[1104,7538,2917],{"class":1697},[1104,7540,1701],{"class":1121},[1104,7542,1139],{"class":1131},[1104,7544,4112],{"class":1135},[1104,7546,1139],{"class":1131},[1104,7548,2929],{"class":1121},[1104,7550,2932],{"class":1433},[1104,7552,1236],{"class":1121},[1104,7554,7555],{"class":1106,"line":2872},[1104,7556,2358],{"class":1572},[1104,7558,7559],{"class":1106,"line":2890},[1104,7560,7561],{"class":1110},"            # Check if language is supported\n",[1104,7563,7564,7566,7568,7570,7572,7575,7577,7579,7581,7583,7586,7588,7590,7592,7594],{"class":1106,"line":2900},[1104,7565,2205],{"class":1568},[1104,7567,3799],{"class":1572},[1104,7569,3802],{"class":1437},[1104,7571,3784],{"class":1121},[1104,7573,7574],{"class":1572},"l",[1104,7576,2373],{"class":1121},[1104,7578,2932],{"class":1433},[1104,7580,2383],{"class":1121},[1104,7582,3796],{"class":1568},[1104,7584,7585],{"class":1572}," l ",[1104,7587,3802],{"class":1568},[1104,7589,1956],{"class":1572},[1104,7591,1576],{"class":1121},[1104,7593,1271],{"class":1929},[1104,7595,4184],{"class":1121},[1104,7597,7598,7601,7603,7606,7609,7611,7613,7616],{"class":1106,"line":2940},[1104,7599,7600],{"class":1572},"                languages",[1104,7602,1576],{"class":1121},[1104,7604,7605],{"class":1697},"append",[1104,7607,7608],{"class":1121},"((",[1104,7610,3787],{"class":1697},[1104,7612,1167],{"class":1121},[1104,7614,7615],{"class":1697}," q",[1104,7617,2434],{"class":1121},[1104,7619,7620],{"class":1106,"line":2965},[1104,7621,1866],{"class":1572},[1104,7623,7624],{"class":1106,"line":2970},[1104,7625,7626],{"class":1110},"        # Sort by quality and return best match\n",[1104,7628,7629,7631,7634],{"class":1106,"line":2996},[1104,7630,1953],{"class":1568},[1104,7632,7633],{"class":1572}," languages",[1104,7635,1964],{"class":1121},[1104,7637,7638,7641,7643,7646,7648,7651,7653,7656,7659,7661,7663,7665,7667,7670,7673,7675,7677],{"class":1106,"line":3013},[1104,7639,7640],{"class":1572},"            languages",[1104,7642,1576],{"class":1121},[1104,7644,7645],{"class":1697},"sort",[1104,7647,1701],{"class":1121},[1104,7649,7650],{"class":2255},"key",[1104,7652,1689],{"class":1121},[1104,7654,7655],{"class":1717},"lambda",[1104,7657,7658],{"class":1768}," x",[1104,7660,2924],{"class":1121},[1104,7662,7658],{"class":1697},[1104,7664,2373],{"class":1121},[1104,7666,7150],{"class":1433},[1104,7668,7669],{"class":1121},"],",[1104,7671,7672],{"class":2255}," reverse",[1104,7674,1689],{"class":1121},[1104,7676,2862],{"class":1464},[1104,7678,1708],{"class":1121},[1104,7680,7681,7683,7685,7687,7689,7691,7693],{"class":1106,"line":3031},[1104,7682,2522],{"class":1568},[1104,7684,7633],{"class":1572},[1104,7686,2373],{"class":1121},[1104,7688,2932],{"class":1433},[1104,7690,7166],{"class":1121},[1104,7692,2932],{"class":1433},[1104,7694,1236],{"class":1121},[1104,7696,7697],{"class":1106,"line":3040},[1104,7698,1866],{"class":1572},[1104,7700,7701,7703],{"class":1106,"line":3045},[1104,7702,2445],{"class":1568},[1104,7704,1465],{"class":1464},[1104,7706,7707],{"class":1106,"line":3052},[1104,7708,1243],{"emptyLinePlaceholder":1242},[1104,7710,7711,7714,7716,7718],{"class":1106,"line":3057},[1104,7712,7713],{"class":1572},"detector ",[1104,7715,1689],{"class":1121},[1104,7717,5977],{"class":1697},[1104,7719,1861],{"class":1121},[1030,7721,7723],{"id":7722},"language-switching","Language Switching",[1035,7725,7727],{"id":7726},"language-switching-views","Language Switching Views",[1095,7729,7731],{"className":1097,"code":7730,"language":1099,"meta":1100,"style":1100},"# views.py\nfrom django.shortcuts import redirect\nfrom django.urls import reverse\nfrom django.utils import translation\nfrom django.http import JsonResponse\nfrom django.views.decorators.http import require_POST\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.contrib.auth.decorators import login_required\nfrom django.conf import settings\nimport json\n\n@require_POST\ndef set_language(request):\n    \"\"\"Set user's language preference.\"\"\"\n    language = request.POST.get('language')\n    next_url = request.POST.get('next', request.META.get('HTTP_REFERER', '/'))\n    \n    if language and language in [lang[0] for lang in settings.LANGUAGES]:\n        # Activate language\n        translation.activate(language)\n        \n        # Store in session\n        request.session[settings.LANGUAGE_SESSION_KEY] = language\n        \n        # Store in user profile if authenticated\n        if request.user.is_authenticated:\n            try:\n                preference, created = UserLanguagePreference.objects.get_or_create(\n                    user=request.user\n                )\n                preference.primary_language = language\n                preference.detection_source = 'manual'\n                preference.save()\n            except Exception:\n                pass\n        \n        # Log language change\n        log_language_usage(request, language, 'manual')\n    \n    # Redirect to next URL\n    response = redirect(next_url)\n    \n    # Set language cookie\n    if language:\n        response.set_cookie(\n            settings.LANGUAGE_COOKIE_NAME,\n            language,\n            max_age=settings.LANGUAGE_COOKIE_AGE,\n            path=settings.LANGUAGE_COOKIE_PATH,\n            secure=settings.LANGUAGE_COOKIE_SECURE,\n            httponly=settings.LANGUAGE_COOKIE_HTTPONLY,\n            samesite=settings.LANGUAGE_COOKIE_SAMESITE,\n        )\n    \n    return response\n\n@csrf_exempt\ndef api_set_language(request):\n    \"\"\"API endpoint for setting language.\"\"\"\n    if request.method != 'POST':\n        return JsonResponse({'error': 'Method not allowed'}, status=405)\n    \n    try:\n        data = json.loads(request.body)\n        language = data.get('language')\n    except (json.JSONDecodeError, AttributeError):\n        language = request.POST.get('language')\n    \n    if not language:\n        return JsonResponse({'error': 'Language not specified'}, status=400)\n    \n    if language not in [lang[0] for lang in settings.LANGUAGES]:\n        return JsonResponse({'error': 'Language not supported'}, status=400)\n    \n    # Set language in session\n    request.session[settings.LANGUAGE_SESSION_KEY] = language\n    \n    # Update user profile if authenticated\n    if request.user.is_authenticated:\n        try:\n            preference, created = UserLanguagePreference.objects.get_or_create(\n                user=request.user\n            )\n            preference.primary_language = language\n            preference.detection_source = 'manual'\n            preference.save()\n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n    \n    # Log language change\n    log_language_usage(request, language, 'api')\n    \n    return JsonResponse({\n        'success': True,\n        'language': language,\n        'message': f'Language set to {language}'\n    })\n\n@login_required\ndef language_preferences(request):\n    \"\"\"Manage user language preferences.\"\"\"\n    try:\n        preference = request.user.language_preference\n    except UserLanguagePreference.DoesNotExist:\n        preference = UserLanguagePreference.objects.create(user=request.user)\n    \n    if request.method == 'POST':\n        primary_language = request.POST.get('primary_language')\n        secondary_languages = request.POST.getlist('secondary_languages')\n        auto_detect = request.POST.get('auto_detect') == 'on'\n        \n        if primary_language in [lang[0] for lang in settings.LANGUAGES]:\n            preference.primary_language = primary_language\n            preference.secondary_languages = secondary_languages\n            preference.auto_detect = auto_detect\n            preference.save()\n            \n            # Activate new language\n            translation.activate(primary_language)\n            request.session[settings.LANGUAGE_SESSION_KEY] = primary_language\n            \n            return redirect('language_preferences')\n    \n    context = {\n        'preference': preference,\n        'available_languages': settings.LANGUAGES,\n    }\n    \n    return render(request, 'accounts/language_preferences.html', context)\n\ndef log_language_usage(request, language, method):\n    \"\"\"Log language usage for analytics.\"\"\"\n    try:\n        from .models import LanguageUsageLog\n        \n        LanguageUsageLog.objects.create(\n            user=request.user if request.user.is_authenticated else None,\n            session_key=request.session.session_key,\n            language_code=language,\n            detection_method=method,\n            ip_address=get_client_ip(request),\n            user_agent=request.META.get('HTTP_USER_AGENT', ''),\n            path=request.path,\n        )\n    except Exception:\n        # Don't let logging errors break the application\n        pass\n\ndef get_client_ip(request):\n    \"\"\"Get client IP address.\"\"\"\n    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')\n    if x_forwarded_for:\n        ip = x_forwarded_for.split(',')[0]\n    else:\n        ip = request.META.get('REMOTE_ADDR')\n    return ip\n",[1043,7732,7733,7738,7754,7770,7784,7800,7825,7849,7873,7887,7894,7898,7906,7920,7929,7957,8014,8018,8055,8060,8074,8078,8083,8105,8109,8114,8130,8136,8161,8174,8178,8190,8207,8218,8226,8230,8234,8239,8262,8266,8271,8288,8292,8297,8305,8316,8326,8333,8348,8363,8378,8393,8408,8412,8416,8423,8427,8434,8447,8456,8478,8517,8521,8528,8554,8577,8598,8624,8628,8638,8672,8676,8711,8744,8748,8753,8776,8780,8785,8801,8807,8830,8842,8847,8859,8875,8885,8897,8931,8935,8940,8964,8968,8977,8994,9008,9033,9038,9042,9049,9062,9071,9077,9095,9108,9139,9143,9164,9191,9219,9255,9259,9292,9305,9318,9331,9341,9345,9350,9364,9386,9390,9407,9411,9420,9436,9455,9460,9464,9491,9495,9517,9525,9531,9544,9548,9563,9595,9615,9626,9637,9652,9684,9698,9702,9710,9715,9719,9723,9735,9743,9770,9778,9805,9812,9838],{"__ignoreMap":1100},[1104,7734,7735],{"class":1106,"line":1107},[1104,7736,7737],{"class":1110},"# views.py\n",[1104,7739,7740,7742,7744,7746,7749,7751],{"class":1106,"line":1114},[1104,7741,1569],{"class":1568},[1104,7743,1573],{"class":1572},[1104,7745,1576],{"class":1121},[1104,7747,7748],{"class":1572},"shortcuts ",[1104,7750,1587],{"class":1568},[1104,7752,7753],{"class":1572}," redirect\n",[1104,7755,7756,7758,7760,7762,7765,7767],{"class":1106,"line":1128},[1104,7757,1569],{"class":1568},[1104,7759,1573],{"class":1572},[1104,7761,1576],{"class":1121},[1104,7763,7764],{"class":1572},"urls ",[1104,7766,1587],{"class":1568},[1104,7768,7769],{"class":1572}," reverse\n",[1104,7771,7772,7774,7776,7778,7780,7782],{"class":1106,"line":1145},[1104,7773,1569],{"class":1568},[1104,7775,1573],{"class":1572},[1104,7777,1576],{"class":1121},[1104,7779,1601],{"class":1572},[1104,7781,1587],{"class":1568},[1104,7783,1606],{"class":1572},[1104,7785,7786,7788,7790,7792,7795,7797],{"class":1106,"line":1157},[1104,7787,1569],{"class":1568},[1104,7789,1573],{"class":1572},[1104,7791,1576],{"class":1121},[1104,7793,7794],{"class":1572},"http ",[1104,7796,1587],{"class":1568},[1104,7798,7799],{"class":1572}," JsonResponse\n",[1104,7801,7802,7804,7806,7808,7811,7813,7816,7818,7820,7822],{"class":1106,"line":1173},[1104,7803,1569],{"class":1568},[1104,7805,1573],{"class":1572},[1104,7807,1576],{"class":1121},[1104,7809,7810],{"class":1572},"views",[1104,7812,1576],{"class":1121},[1104,7814,7815],{"class":1572},"decorators",[1104,7817,1576],{"class":1121},[1104,7819,7794],{"class":1572},[1104,7821,1587],{"class":1568},[1104,7823,7824],{"class":1572}," require_POST\n",[1104,7826,7827,7829,7831,7833,7835,7837,7839,7841,7844,7846],{"class":1106,"line":1185},[1104,7828,1569],{"class":1568},[1104,7830,1573],{"class":1572},[1104,7832,1576],{"class":1121},[1104,7834,7810],{"class":1572},[1104,7836,1576],{"class":1121},[1104,7838,7815],{"class":1572},[1104,7840,1576],{"class":1121},[1104,7842,7843],{"class":1572},"csrf ",[1104,7845,1587],{"class":1568},[1104,7847,7848],{"class":1572}," csrf_exempt\n",[1104,7850,7851,7853,7855,7857,7859,7861,7863,7865,7868,7870],{"class":1106,"line":1197},[1104,7852,1569],{"class":1568},[1104,7854,1573],{"class":1572},[1104,7856,1576],{"class":1121},[1104,7858,3103],{"class":1572},[1104,7860,1576],{"class":1121},[1104,7862,4392],{"class":1572},[1104,7864,1576],{"class":1121},[1104,7866,7867],{"class":1572},"decorators ",[1104,7869,1587],{"class":1568},[1104,7871,7872],{"class":1572}," login_required\n",[1104,7874,7875,7877,7879,7881,7883,7885],{"class":1106,"line":1209},[1104,7876,1569],{"class":1568},[1104,7878,1573],{"class":1572},[1104,7880,1576],{"class":1121},[1104,7882,1617],{"class":1572},[1104,7884,1587],{"class":1568},[1104,7886,1622],{"class":1572},[1104,7888,7889,7891],{"class":1106,"line":1221},[1104,7890,1587],{"class":1568},[1104,7892,7893],{"class":1572}," json\n",[1104,7895,7896],{"class":1106,"line":1233},[1104,7897,1243],{"emptyLinePlaceholder":1242},[1104,7899,7900,7903],{"class":1106,"line":1239},[1104,7901,7902],{"class":1121},"@",[1104,7904,7905],{"class":1816},"require_POST\n",[1104,7907,7908,7911,7914,7916,7918],{"class":1106,"line":1246},[1104,7909,7910],{"class":1717},"def",[1104,7912,7913],{"class":1816}," set_language",[1104,7915,1701],{"class":1121},[1104,7917,1891],{"class":1768},[1104,7919,1730],{"class":1121},[1104,7921,7922,7924,7927],{"class":1106,"line":1252},[1104,7923,1736],{"class":1735},[1104,7925,7926],{"class":1739},"Set user's language preference.",[1104,7928,1743],{"class":1735},[1104,7930,7931,7934,7936,7938,7940,7943,7945,7947,7949,7951,7953,7955],{"class":1106,"line":1268},[1104,7932,7933],{"class":1572},"    language ",[1104,7935,1689],{"class":1121},[1104,7937,1826],{"class":1572},[1104,7939,1576],{"class":1121},[1104,7941,7942],{"class":1929},"POST",[1104,7944,1576],{"class":1121},[1104,7946,2188],{"class":1697},[1104,7948,1701],{"class":1121},[1104,7950,1139],{"class":1131},[1104,7952,1917],{"class":1135},[1104,7954,1139],{"class":1131},[1104,7956,1708],{"class":1121},[1104,7958,7959,7962,7964,7966,7968,7970,7972,7974,7976,7978,7981,7983,7985,7987,7989,7991,7993,7995,7997,7999,8002,8004,8006,8008,8010,8012],{"class":1106,"line":1278},[1104,7960,7961],{"class":1572},"    next_url ",[1104,7963,1689],{"class":1121},[1104,7965,1826],{"class":1572},[1104,7967,1576],{"class":1121},[1104,7969,7942],{"class":1929},[1104,7971,1576],{"class":1121},[1104,7973,2188],{"class":1697},[1104,7975,1701],{"class":1121},[1104,7977,1139],{"class":1131},[1104,7979,7980],{"class":1135},"next",[1104,7982,1139],{"class":1131},[1104,7984,1167],{"class":1121},[1104,7986,1826],{"class":1697},[1104,7988,1576],{"class":1121},[1104,7990,2730],{"class":1929},[1104,7992,1576],{"class":1121},[1104,7994,2188],{"class":1697},[1104,7996,1701],{"class":1121},[1104,7998,1139],{"class":1131},[1104,8000,8001],{"class":1135},"HTTP_REFERER",[1104,8003,1139],{"class":1131},[1104,8005,1167],{"class":1121},[1104,8007,1259],{"class":1131},[1104,8009,1478],{"class":1135},[1104,8011,1139],{"class":1131},[1104,8013,2434],{"class":1121},[1104,8015,8016],{"class":1106,"line":1302},[1104,8017,1748],{"class":1572},[1104,8019,8020,8023,8025,8027,8029,8031,8033,8035,8037,8039,8041,8043,8045,8047,8049,8051,8053],{"class":1106,"line":1325},[1104,8021,8022],{"class":1568},"    if",[1104,8024,3513],{"class":1572},[1104,8026,2614],{"class":1437},[1104,8028,3513],{"class":1572},[1104,8030,3802],{"class":1437},[1104,8032,3784],{"class":1121},[1104,8034,3787],{"class":1572},[1104,8036,2373],{"class":1121},[1104,8038,2932],{"class":1433},[1104,8040,2383],{"class":1121},[1104,8042,3796],{"class":1568},[1104,8044,3799],{"class":1572},[1104,8046,3802],{"class":1568},[1104,8048,1956],{"class":1572},[1104,8050,1576],{"class":1121},[1104,8052,1271],{"class":1929},[1104,8054,4184],{"class":1121},[1104,8056,8057],{"class":1106,"line":1348},[1104,8058,8059],{"class":1110},"        # Activate language\n",[1104,8061,8062,8064,8066,8068,8070,8072],{"class":1106,"line":1371},[1104,8063,1907],{"class":1572},[1104,8065,1576],{"class":1121},[1104,8067,1912],{"class":1697},[1104,8069,1701],{"class":1121},[1104,8071,1917],{"class":1697},[1104,8073,1708],{"class":1121},[1104,8075,8076],{"class":1106,"line":1394},[1104,8077,1866],{"class":1572},[1104,8079,8080],{"class":1106,"line":1399},[1104,8081,8082],{"class":1110},"        # Store in session\n",[1104,8084,8085,8087,8089,8091,8093,8095,8097,8099,8101,8103],{"class":1106,"line":1404},[1104,8086,1924],{"class":1572},[1104,8088,1576],{"class":1121},[1104,8090,5524],{"class":1800},[1104,8092,2373],{"class":1121},[1104,8094,2193],{"class":1800},[1104,8096,1576],{"class":1121},[1104,8098,1537],{"class":1929},[1104,8100,2383],{"class":1121},[1104,8102,1122],{"class":1121},[1104,8104,2388],{"class":1572},[1104,8106,8107],{"class":1106,"line":1410},[1104,8108,1866],{"class":1572},[1104,8110,8111],{"class":1106,"line":1425},[1104,8112,8113],{"class":1110},"        # Store in user profile if authenticated\n",[1104,8115,8116,8118,8120,8122,8124,8126,8128],{"class":1106,"line":1456},[1104,8117,1953],{"class":1568},[1104,8119,1826],{"class":1572},[1104,8121,1576],{"class":1121},[1104,8123,2039],{"class":1800},[1104,8125,1576],{"class":1121},[1104,8127,2057],{"class":1800},[1104,8129,1964],{"class":1121},[1104,8131,8132,8134],{"class":1106,"line":1468},[1104,8133,2576],{"class":1568},[1104,8135,1964],{"class":1121},[1104,8137,8138,8141,8143,8146,8148,8150,8152,8154,8156,8159],{"class":1106,"line":1483},[1104,8139,8140],{"class":1572},"                preference",[1104,8142,1167],{"class":1121},[1104,8144,8145],{"class":1572}," created ",[1104,8147,1689],{"class":1121},[1104,8149,4453],{"class":1572},[1104,8151,1576],{"class":1121},[1104,8153,7043],{"class":1800},[1104,8155,1576],{"class":1121},[1104,8157,8158],{"class":1697},"get_or_create",[1104,8160,2229],{"class":1121},[1104,8162,8163,8166,8168,8170,8172],{"class":1106,"line":1497},[1104,8164,8165],{"class":2255},"                    user",[1104,8167,1689],{"class":1121},[1104,8169,1891],{"class":1697},[1104,8171,1576],{"class":1121},[1104,8173,7060],{"class":1800},[1104,8175,8176],{"class":1106,"line":1508},[1104,8177,2352],{"class":1121},[1104,8179,8180,8182,8184,8186,8188],{"class":1106,"line":1523},[1104,8181,8140],{"class":1572},[1104,8183,1576],{"class":1121},[1104,8185,5233],{"class":1800},[1104,8187,1122],{"class":1121},[1104,8189,2388],{"class":1572},[1104,8191,8192,8194,8196,8199,8201,8203,8205],{"class":1106,"line":1528},[1104,8193,8140],{"class":1572},[1104,8195,1576],{"class":1121},[1104,8197,8198],{"class":1800},"detection_source",[1104,8200,1122],{"class":1121},[1104,8202,1259],{"class":1131},[1104,8204,4869],{"class":1135},[1104,8206,1265],{"class":1131},[1104,8208,8209,8211,8213,8216],{"class":1106,"line":1534},[1104,8210,8140],{"class":1572},[1104,8212,1576],{"class":1121},[1104,8214,8215],{"class":1697},"save",[1104,8217,1861],{"class":1121},[1104,8219,8220,8222,8224],{"class":1106,"line":2012},[1104,8221,2643],{"class":1568},[1104,8223,3548],{"class":1776},[1104,8225,1964],{"class":1121},[1104,8227,8228],{"class":1106,"line":2017},[1104,8229,2654],{"class":1568},[1104,8231,8232],{"class":1106,"line":2023},[1104,8233,1866],{"class":1572},[1104,8235,8236],{"class":1106,"line":2062},[1104,8237,8238],{"class":1110},"        # Log language change\n",[1104,8240,8241,8244,8246,8248,8250,8252,8254,8256,8258,8260],{"class":1106,"line":2084},[1104,8242,8243],{"class":1697},"        log_language_usage",[1104,8245,1701],{"class":1121},[1104,8247,1891],{"class":1697},[1104,8249,1167],{"class":1121},[1104,8251,2079],{"class":1697},[1104,8253,1167],{"class":1121},[1104,8255,1259],{"class":1131},[1104,8257,4869],{"class":1135},[1104,8259,1139],{"class":1131},[1104,8261,1708],{"class":1121},[1104,8263,8264],{"class":1106,"line":2089},[1104,8265,1748],{"class":1572},[1104,8267,8268],{"class":1106,"line":2112},[1104,8269,8270],{"class":1110},"    # Redirect to next URL\n",[1104,8272,8273,8276,8278,8281,8283,8286],{"class":1106,"line":2122},[1104,8274,8275],{"class":1572},"    response ",[1104,8277,1689],{"class":1121},[1104,8279,8280],{"class":1697}," redirect",[1104,8282,1701],{"class":1121},[1104,8284,8285],{"class":1697},"next_url",[1104,8287,1708],{"class":1121},[1104,8289,8290],{"class":1106,"line":2151},[1104,8291,1748],{"class":1572},[1104,8293,8294],{"class":1106,"line":2156},[1104,8295,8296],{"class":1110},"    # Set language cookie\n",[1104,8298,8299,8301,8303],{"class":1106,"line":2165},[1104,8300,8022],{"class":1568},[1104,8302,2079],{"class":1572},[1104,8304,1964],{"class":1121},[1104,8306,8307,8310,8312,8314],{"class":1106,"line":2171},[1104,8308,8309],{"class":1572},"        response",[1104,8311,1576],{"class":1121},[1104,8313,2226],{"class":1697},[1104,8315,2229],{"class":1121},[1104,8317,8318,8320,8322,8324],{"class":1106,"line":2202},[1104,8319,4128],{"class":1697},[1104,8321,1576],{"class":1121},[1104,8323,1413],{"class":1929},[1104,8325,1142],{"class":1121},[1104,8327,8328,8331],{"class":1106,"line":2218},[1104,8329,8330],{"class":1697},"            language",[1104,8332,1142],{"class":1121},[1104,8334,8335,8338,8340,8342,8344,8346],{"class":1106,"line":2232},[1104,8336,8337],{"class":2255},"            max_age",[1104,8339,1689],{"class":1121},[1104,8341,2193],{"class":1697},[1104,8343,1576],{"class":1121},[1104,8345,1428],{"class":1929},[1104,8347,1142],{"class":1121},[1104,8349,8350,8353,8355,8357,8359,8361],{"class":1106,"line":2244},[1104,8351,8352],{"class":2255},"            path",[1104,8354,1689],{"class":1121},[1104,8356,2193],{"class":1697},[1104,8358,1576],{"class":1121},[1104,8360,1471],{"class":1929},[1104,8362,1142],{"class":1121},[1104,8364,8365,8368,8370,8372,8374,8376],{"class":1106,"line":2252},[1104,8366,8367],{"class":2255},"            secure",[1104,8369,1689],{"class":1121},[1104,8371,2193],{"class":1697},[1104,8373,1576],{"class":1121},[1104,8375,1486],{"class":1929},[1104,8377,1142],{"class":1121},[1104,8379,8380,8383,8385,8387,8389,8391],{"class":1106,"line":2269},[1104,8381,8382],{"class":2255},"            httponly",[1104,8384,1689],{"class":1121},[1104,8386,2193],{"class":1697},[1104,8388,1576],{"class":1121},[1104,8390,1500],{"class":1929},[1104,8392,1142],{"class":1121},[1104,8394,8395,8398,8400,8402,8404,8406],{"class":1106,"line":2285},[1104,8396,8397],{"class":2255},"            samesite",[1104,8399,1689],{"class":1121},[1104,8401,2193],{"class":1697},[1104,8403,1576],{"class":1121},[1104,8405,1511],{"class":1929},[1104,8407,1142],{"class":1121},[1104,8409,8410],{"class":1106,"line":2301},[1104,8411,4139],{"class":1121},[1104,8413,8414],{"class":1106,"line":2317},[1104,8415,1748],{"class":1572},[1104,8417,8418,8421],{"class":1106,"line":2333},[1104,8419,8420],{"class":1568},"    return",[1104,8422,2448],{"class":1572},[1104,8424,8425],{"class":1106,"line":2349},[1104,8426,1243],{"emptyLinePlaceholder":1242},[1104,8428,8429,8431],{"class":1106,"line":2355},[1104,8430,7902],{"class":1121},[1104,8432,8433],{"class":1816},"csrf_exempt\n",[1104,8435,8436,8438,8441,8443,8445],{"class":1106,"line":2361},[1104,8437,7910],{"class":1717},[1104,8439,8440],{"class":1816}," api_set_language",[1104,8442,1701],{"class":1121},[1104,8444,1891],{"class":1768},[1104,8446,1730],{"class":1121},[1104,8448,8449,8451,8454],{"class":1106,"line":2367},[1104,8450,1736],{"class":1735},[1104,8452,8453],{"class":1739},"API endpoint for setting language.",[1104,8455,1743],{"class":1735},[1104,8457,8458,8460,8462,8464,8467,8470,8472,8474,8476],{"class":1106,"line":2391},[1104,8459,8022],{"class":1568},[1104,8461,1826],{"class":1572},[1104,8463,1576],{"class":1121},[1104,8465,8466],{"class":1800},"method",[1104,8468,8469],{"class":1437}," !=",[1104,8471,1259],{"class":1131},[1104,8473,7942],{"class":1135},[1104,8475,1139],{"class":1131},[1104,8477,1964],{"class":1121},[1104,8479,8480,8482,8485,8488,8490,8493,8495,8497,8499,8502,8504,8507,8510,8512,8515],{"class":1106,"line":2396},[1104,8481,2445],{"class":1568},[1104,8483,8484],{"class":1697}," JsonResponse",[1104,8486,8487],{"class":1121},"({",[1104,8489,1139],{"class":1131},[1104,8491,8492],{"class":1135},"error",[1104,8494,1139],{"class":1131},[1104,8496,2924],{"class":1121},[1104,8498,1259],{"class":1131},[1104,8500,8501],{"class":1135},"Method not allowed",[1104,8503,1139],{"class":1131},[1104,8505,8506],{"class":1121},"},",[1104,8508,8509],{"class":2255}," status",[1104,8511,1689],{"class":1121},[1104,8513,8514],{"class":1433},"405",[1104,8516,1708],{"class":1121},[1104,8518,8519],{"class":1106,"line":2402},[1104,8520,1748],{"class":1572},[1104,8522,8523,8526],{"class":1106,"line":2437},[1104,8524,8525],{"class":1568},"    try",[1104,8527,1964],{"class":1121},[1104,8529,8530,8533,8535,8538,8540,8543,8545,8547,8549,8552],{"class":1106,"line":2442},[1104,8531,8532],{"class":1572},"        data ",[1104,8534,1689],{"class":1121},[1104,8536,8537],{"class":1572}," json",[1104,8539,1576],{"class":1121},[1104,8541,8542],{"class":1697},"loads",[1104,8544,1701],{"class":1121},[1104,8546,1891],{"class":1697},[1104,8548,1576],{"class":1121},[1104,8550,8551],{"class":1800},"body",[1104,8553,1708],{"class":1121},[1104,8555,8556,8558,8560,8563,8565,8567,8569,8571,8573,8575],{"class":1106,"line":2451},[1104,8557,1876],{"class":1572},[1104,8559,1689],{"class":1121},[1104,8561,8562],{"class":1572}," data",[1104,8564,1576],{"class":1121},[1104,8566,2188],{"class":1697},[1104,8568,1701],{"class":1121},[1104,8570,1139],{"class":1131},[1104,8572,1917],{"class":1135},[1104,8574,1139],{"class":1131},[1104,8576,1708],{"class":1121},[1104,8578,8579,8582,8584,8587,8589,8592,8594,8596],{"class":1106,"line":2456},[1104,8580,8581],{"class":1568},"    except",[1104,8583,2415],{"class":1121},[1104,8585,8586],{"class":1572},"json",[1104,8588,1576],{"class":1121},[1104,8590,8591],{"class":1800},"JSONDecodeError",[1104,8593,1167],{"class":1121},[1104,8595,2646],{"class":1776},[1104,8597,1730],{"class":1121},[1104,8599,8600,8602,8604,8606,8608,8610,8612,8614,8616,8618,8620,8622],{"class":1106,"line":2474},[1104,8601,1876],{"class":1572},[1104,8603,1689],{"class":1121},[1104,8605,1826],{"class":1572},[1104,8607,1576],{"class":1121},[1104,8609,7942],{"class":1929},[1104,8611,1576],{"class":1121},[1104,8613,2188],{"class":1697},[1104,8615,1701],{"class":1121},[1104,8617,1139],{"class":1131},[1104,8619,1917],{"class":1135},[1104,8621,1139],{"class":1131},[1104,8623,1708],{"class":1121},[1104,8625,8626],{"class":1106,"line":2484},[1104,8627,1748],{"class":1572},[1104,8629,8630,8632,8634,8636],{"class":1106,"line":2490},[1104,8631,8022],{"class":1568},[1104,8633,3158],{"class":1437},[1104,8635,2079],{"class":1572},[1104,8637,1964],{"class":1121},[1104,8639,8640,8642,8644,8646,8648,8650,8652,8654,8656,8659,8661,8663,8665,8667,8670],{"class":1106,"line":2510},[1104,8641,2445],{"class":1568},[1104,8643,8484],{"class":1697},[1104,8645,8487],{"class":1121},[1104,8647,1139],{"class":1131},[1104,8649,8492],{"class":1135},[1104,8651,1139],{"class":1131},[1104,8653,2924],{"class":1121},[1104,8655,1259],{"class":1131},[1104,8657,8658],{"class":1135},"Language not specified",[1104,8660,1139],{"class":1131},[1104,8662,8506],{"class":1121},[1104,8664,8509],{"class":2255},[1104,8666,1689],{"class":1121},[1104,8668,8669],{"class":1433},"400",[1104,8671,1708],{"class":1121},[1104,8673,8674],{"class":1106,"line":2519},[1104,8675,1748],{"class":1572},[1104,8677,8678,8680,8682,8685,8687,8689,8691,8693,8695,8697,8699,8701,8703,8705,8707,8709],{"class":1106,"line":2527},[1104,8679,8022],{"class":1568},[1104,8681,3513],{"class":1572},[1104,8683,8684],{"class":1437},"not",[1104,8686,5236],{"class":1437},[1104,8688,3784],{"class":1121},[1104,8690,3787],{"class":1572},[1104,8692,2373],{"class":1121},[1104,8694,2932],{"class":1433},[1104,8696,2383],{"class":1121},[1104,8698,3796],{"class":1568},[1104,8700,3799],{"class":1572},[1104,8702,3802],{"class":1568},[1104,8704,1956],{"class":1572},[1104,8706,1576],{"class":1121},[1104,8708,1271],{"class":1929},[1104,8710,4184],{"class":1121},[1104,8712,8713,8715,8717,8719,8721,8723,8725,8727,8729,8732,8734,8736,8738,8740,8742],{"class":1106,"line":2532},[1104,8714,2445],{"class":1568},[1104,8716,8484],{"class":1697},[1104,8718,8487],{"class":1121},[1104,8720,1139],{"class":1131},[1104,8722,8492],{"class":1135},[1104,8724,1139],{"class":1131},[1104,8726,2924],{"class":1121},[1104,8728,1259],{"class":1131},[1104,8730,8731],{"class":1135},"Language not supported",[1104,8733,1139],{"class":1131},[1104,8735,8506],{"class":1121},[1104,8737,8509],{"class":2255},[1104,8739,1689],{"class":1121},[1104,8741,8669],{"class":1433},[1104,8743,1708],{"class":1121},[1104,8745,8746],{"class":1106,"line":2538},[1104,8747,1748],{"class":1572},[1104,8749,8750],{"class":1106,"line":2573},[1104,8751,8752],{"class":1110},"    # Set language in session\n",[1104,8754,8755,8758,8760,8762,8764,8766,8768,8770,8772,8774],{"class":1106,"line":2581},[1104,8756,8757],{"class":1572},"    request",[1104,8759,1576],{"class":1121},[1104,8761,5524],{"class":1800},[1104,8763,2373],{"class":1121},[1104,8765,2193],{"class":1800},[1104,8767,1576],{"class":1121},[1104,8769,1537],{"class":1929},[1104,8771,2383],{"class":1121},[1104,8773,1122],{"class":1121},[1104,8775,2388],{"class":1572},[1104,8777,8778],{"class":1106,"line":2605},[1104,8779,1748],{"class":1572},[1104,8781,8782],{"class":1106,"line":2631},[1104,8783,8784],{"class":1110},"    # Update user profile if authenticated\n",[1104,8786,8787,8789,8791,8793,8795,8797,8799],{"class":1106,"line":2640},[1104,8788,8022],{"class":1568},[1104,8790,1826],{"class":1572},[1104,8792,1576],{"class":1121},[1104,8794,2039],{"class":1800},[1104,8796,1576],{"class":1121},[1104,8798,2057],{"class":1800},[1104,8800,1964],{"class":1121},[1104,8802,8803,8805],{"class":1106,"line":2651},[1104,8804,3088],{"class":1568},[1104,8806,1964],{"class":1121},[1104,8808,8809,8812,8814,8816,8818,8820,8822,8824,8826,8828],{"class":1106,"line":2657},[1104,8810,8811],{"class":1572},"            preference",[1104,8813,1167],{"class":1121},[1104,8815,8145],{"class":1572},[1104,8817,1689],{"class":1121},[1104,8819,4453],{"class":1572},[1104,8821,1576],{"class":1121},[1104,8823,7043],{"class":1800},[1104,8825,1576],{"class":1121},[1104,8827,8158],{"class":1697},[1104,8829,2229],{"class":1121},[1104,8831,8832,8834,8836,8838,8840],{"class":1106,"line":2662},[1104,8833,7055],{"class":2255},[1104,8835,1689],{"class":1121},[1104,8837,1891],{"class":1697},[1104,8839,1576],{"class":1121},[1104,8841,7060],{"class":1800},[1104,8843,8844],{"class":1106,"line":2668},[1104,8845,8846],{"class":1121},"            )\n",[1104,8848,8849,8851,8853,8855,8857],{"class":1106,"line":2689},[1104,8850,8811],{"class":1572},[1104,8852,1576],{"class":1121},[1104,8854,5233],{"class":1800},[1104,8856,1122],{"class":1121},[1104,8858,2388],{"class":1572},[1104,8860,8861,8863,8865,8867,8869,8871,8873],{"class":1106,"line":2699},[1104,8862,8811],{"class":1572},[1104,8864,1576],{"class":1121},[1104,8866,8198],{"class":1800},[1104,8868,1122],{"class":1121},[1104,8870,1259],{"class":1131},[1104,8872,4869],{"class":1135},[1104,8874,1265],{"class":1131},[1104,8876,8877,8879,8881,8883],{"class":1106,"line":2707},[1104,8878,8811],{"class":1572},[1104,8880,1576],{"class":1121},[1104,8882,8215],{"class":1697},[1104,8884,1861],{"class":1121},[1104,8886,8887,8889,8891,8893,8895],{"class":1106,"line":2712},[1104,8888,3545],{"class":1568},[1104,8890,3548],{"class":1776},[1104,8892,3551],{"class":1568},[1104,8894,3554],{"class":1572},[1104,8896,1964],{"class":1121},[1104,8898,8899,8901,8903,8905,8907,8909,8911,8913,8916,8918,8920,8923,8925,8927,8929],{"class":1106,"line":2718},[1104,8900,2522],{"class":1568},[1104,8902,8484],{"class":1697},[1104,8904,8487],{"class":1121},[1104,8906,1139],{"class":1131},[1104,8908,8492],{"class":1135},[1104,8910,1139],{"class":1131},[1104,8912,2924],{"class":1121},[1104,8914,8915],{"class":1776}," str",[1104,8917,1701],{"class":1121},[1104,8919,3578],{"class":1697},[1104,8921,8922],{"class":1121},")},",[1104,8924,8509],{"class":2255},[1104,8926,1689],{"class":1121},[1104,8928,5751],{"class":1433},[1104,8930,1708],{"class":1121},[1104,8932,8933],{"class":1106,"line":2748},[1104,8934,1748],{"class":1572},[1104,8936,8937],{"class":1106,"line":2771},[1104,8938,8939],{"class":1110},"    # Log language change\n",[1104,8941,8942,8945,8947,8949,8951,8953,8955,8957,8960,8962],{"class":1106,"line":2779},[1104,8943,8944],{"class":1697},"    log_language_usage",[1104,8946,1701],{"class":1121},[1104,8948,1891],{"class":1697},[1104,8950,1167],{"class":1121},[1104,8952,2079],{"class":1697},[1104,8954,1167],{"class":1121},[1104,8956,1259],{"class":1131},[1104,8958,8959],{"class":1135},"api",[1104,8961,1139],{"class":1131},[1104,8963,1708],{"class":1121},[1104,8965,8966],{"class":1106,"line":2784},[1104,8967,1748],{"class":1572},[1104,8969,8970,8972,8974],{"class":1106,"line":2790},[1104,8971,8420],{"class":1568},[1104,8973,8484],{"class":1697},[1104,8975,8976],{"class":1121},"({\n",[1104,8978,8979,8982,8985,8987,8989,8992],{"class":1106,"line":2811},[1104,8980,8981],{"class":1131},"        '",[1104,8983,8984],{"class":1135},"success",[1104,8986,1139],{"class":1131},[1104,8988,2924],{"class":1121},[1104,8990,8991],{"class":1464}," True",[1104,8993,1142],{"class":1121},[1104,8995,8996,8998,9000,9002,9004,9006],{"class":1106,"line":2821},[1104,8997,8981],{"class":1131},[1104,8999,1917],{"class":1135},[1104,9001,1139],{"class":1131},[1104,9003,2924],{"class":1121},[1104,9005,2079],{"class":1697},[1104,9007,1142],{"class":1121},[1104,9009,9010,9012,9015,9017,9019,9022,9025,9027,9029,9031],{"class":1106,"line":2829},[1104,9011,8981],{"class":1131},[1104,9013,9014],{"class":1135},"message",[1104,9016,1139],{"class":1131},[1104,9018,2924],{"class":1121},[1104,9020,9021],{"class":1717}," f",[1104,9023,9024],{"class":1135},"'Language set to ",[1104,9026,1986],{"class":1985},[1104,9028,1917],{"class":1697},[1104,9030,1991],{"class":1985},[1104,9032,1265],{"class":1135},[1104,9034,9035],{"class":1106,"line":2834},[1104,9036,9037],{"class":1121},"    })\n",[1104,9039,9040],{"class":1106,"line":2840},[1104,9041,1243],{"emptyLinePlaceholder":1242},[1104,9043,9044,9046],{"class":1106,"line":2867},[1104,9045,7902],{"class":1121},[1104,9047,9048],{"class":1816},"login_required\n",[1104,9050,9051,9053,9056,9058,9060],{"class":1106,"line":2872},[1104,9052,7910],{"class":1717},[1104,9054,9055],{"class":1816}," language_preferences",[1104,9057,1701],{"class":1121},[1104,9059,1891],{"class":1768},[1104,9061,1730],{"class":1121},[1104,9063,9064,9066,9069],{"class":1106,"line":2890},[1104,9065,1736],{"class":1735},[1104,9067,9068],{"class":1739},"Manage user language preferences.",[1104,9070,1743],{"class":1735},[1104,9072,9073,9075],{"class":1106,"line":2900},[1104,9074,8525],{"class":1568},[1104,9076,1964],{"class":1121},[1104,9078,9079,9082,9084,9086,9088,9090,9092],{"class":1106,"line":2940},[1104,9080,9081],{"class":1572},"        preference ",[1104,9083,1689],{"class":1121},[1104,9085,1826],{"class":1572},[1104,9087,1576],{"class":1121},[1104,9089,2039],{"class":1800},[1104,9091,1576],{"class":1121},[1104,9093,9094],{"class":1800},"language_preference\n",[1104,9096,9097,9099,9101,9103,9106],{"class":1106,"line":2965},[1104,9098,8581],{"class":1568},[1104,9100,4453],{"class":1572},[1104,9102,1576],{"class":1121},[1104,9104,9105],{"class":1800},"DoesNotExist",[1104,9107,1964],{"class":1121},[1104,9109,9110,9112,9114,9116,9118,9120,9122,9125,9127,9129,9131,9133,9135,9137],{"class":1106,"line":2970},[1104,9111,9081],{"class":1572},[1104,9113,1689],{"class":1121},[1104,9115,4453],{"class":1572},[1104,9117,1576],{"class":1121},[1104,9119,7043],{"class":1800},[1104,9121,1576],{"class":1121},[1104,9123,9124],{"class":1697},"create",[1104,9126,1701],{"class":1121},[1104,9128,2039],{"class":2255},[1104,9130,1689],{"class":1121},[1104,9132,1891],{"class":1697},[1104,9134,1576],{"class":1121},[1104,9136,2039],{"class":1800},[1104,9138,1708],{"class":1121},[1104,9140,9141],{"class":1106,"line":2996},[1104,9142,1748],{"class":1572},[1104,9144,9145,9147,9149,9151,9153,9156,9158,9160,9162],{"class":1106,"line":3013},[1104,9146,8022],{"class":1568},[1104,9148,1826],{"class":1572},[1104,9150,1576],{"class":1121},[1104,9152,8466],{"class":1800},[1104,9154,9155],{"class":1437}," ==",[1104,9157,1259],{"class":1131},[1104,9159,7942],{"class":1135},[1104,9161,1139],{"class":1131},[1104,9163,1964],{"class":1121},[1104,9165,9166,9169,9171,9173,9175,9177,9179,9181,9183,9185,9187,9189],{"class":1106,"line":3031},[1104,9167,9168],{"class":1572},"        primary_language ",[1104,9170,1689],{"class":1121},[1104,9172,1826],{"class":1572},[1104,9174,1576],{"class":1121},[1104,9176,7942],{"class":1929},[1104,9178,1576],{"class":1121},[1104,9180,2188],{"class":1697},[1104,9182,1701],{"class":1121},[1104,9184,1139],{"class":1131},[1104,9186,5233],{"class":1135},[1104,9188,1139],{"class":1131},[1104,9190,1708],{"class":1121},[1104,9192,9193,9196,9198,9200,9202,9204,9206,9209,9211,9213,9215,9217],{"class":1106,"line":3040},[1104,9194,9195],{"class":1572},"        secondary_languages ",[1104,9197,1689],{"class":1121},[1104,9199,1826],{"class":1572},[1104,9201,1576],{"class":1121},[1104,9203,7942],{"class":1929},[1104,9205,1576],{"class":1121},[1104,9207,9208],{"class":1697},"getlist",[1104,9210,1701],{"class":1121},[1104,9212,1139],{"class":1131},[1104,9214,5276],{"class":1135},[1104,9216,1139],{"class":1131},[1104,9218,1708],{"class":1121},[1104,9220,9221,9224,9226,9228,9230,9232,9234,9236,9238,9240,9243,9245,9247,9249,9251,9253],{"class":1106,"line":3045},[1104,9222,9223],{"class":1572},"        auto_detect ",[1104,9225,1689],{"class":1121},[1104,9227,1826],{"class":1572},[1104,9229,1576],{"class":1121},[1104,9231,7942],{"class":1929},[1104,9233,1576],{"class":1121},[1104,9235,2188],{"class":1697},[1104,9237,1701],{"class":1121},[1104,9239,1139],{"class":1131},[1104,9241,9242],{"class":1135},"auto_detect",[1104,9244,1139],{"class":1131},[1104,9246,1061],{"class":1121},[1104,9248,9155],{"class":1437},[1104,9250,1259],{"class":1131},[1104,9252,6110],{"class":1135},[1104,9254,1265],{"class":1131},[1104,9256,9257],{"class":1106,"line":3052},[1104,9258,1866],{"class":1572},[1104,9260,9261,9263,9266,9268,9270,9272,9274,9276,9278,9280,9282,9284,9286,9288,9290],{"class":1106,"line":3057},[1104,9262,1953],{"class":1568},[1104,9264,9265],{"class":1572}," primary_language ",[1104,9267,3802],{"class":1437},[1104,9269,3784],{"class":1121},[1104,9271,3787],{"class":1572},[1104,9273,2373],{"class":1121},[1104,9275,2932],{"class":1433},[1104,9277,2383],{"class":1121},[1104,9279,3796],{"class":1568},[1104,9281,3799],{"class":1572},[1104,9283,3802],{"class":1568},[1104,9285,1956],{"class":1572},[1104,9287,1576],{"class":1121},[1104,9289,1271],{"class":1929},[1104,9291,4184],{"class":1121},[1104,9293,9294,9296,9298,9300,9302],{"class":1106,"line":3075},[1104,9295,8811],{"class":1572},[1104,9297,1576],{"class":1121},[1104,9299,5233],{"class":1800},[1104,9301,1122],{"class":1121},[1104,9303,9304],{"class":1572}," primary_language\n",[1104,9306,9307,9309,9311,9313,9315],{"class":1106,"line":3085},[1104,9308,8811],{"class":1572},[1104,9310,1576],{"class":1121},[1104,9312,5276],{"class":1800},[1104,9314,1122],{"class":1121},[1104,9316,9317],{"class":1572}," secondary_languages\n",[1104,9319,9320,9322,9324,9326,9328],{"class":1106,"line":3093},[1104,9321,8811],{"class":1572},[1104,9323,1576],{"class":1121},[1104,9325,9242],{"class":1800},[1104,9327,1122],{"class":1121},[1104,9329,9330],{"class":1572}," auto_detect\n",[1104,9332,9333,9335,9337,9339],{"class":1106,"line":3121},[1104,9334,8811],{"class":1572},[1104,9336,1576],{"class":1121},[1104,9338,8215],{"class":1697},[1104,9340,1861],{"class":1121},[1104,9342,9343],{"class":1106,"line":3126},[1104,9344,2358],{"class":1572},[1104,9346,9347],{"class":1106,"line":3132},[1104,9348,9349],{"class":1110},"            # Activate new language\n",[1104,9351,9352,9354,9356,9358,9360,9362],{"class":1106,"line":3153},[1104,9353,4190],{"class":1572},[1104,9355,1576],{"class":1121},[1104,9357,1912],{"class":1697},[1104,9359,1701],{"class":1121},[1104,9361,5233],{"class":1697},[1104,9363,1708],{"class":1121},[1104,9365,9366,9368,9370,9372,9374,9376,9378,9380,9382,9384],{"class":1106,"line":3166},[1104,9367,4008],{"class":1572},[1104,9369,1576],{"class":1121},[1104,9371,5524],{"class":1800},[1104,9373,2373],{"class":1121},[1104,9375,2193],{"class":1800},[1104,9377,1576],{"class":1121},[1104,9379,1537],{"class":1929},[1104,9381,2383],{"class":1121},[1104,9383,1122],{"class":1121},[1104,9385,9304],{"class":1572},[1104,9387,9388],{"class":1106,"line":3173},[1104,9389,2358],{"class":1572},[1104,9391,9392,9394,9396,9398,9400,9403,9405],{"class":1106,"line":3178},[1104,9393,2522],{"class":1568},[1104,9395,8280],{"class":1697},[1104,9397,1701],{"class":1121},[1104,9399,1139],{"class":1131},[1104,9401,9402],{"class":1135},"language_preferences",[1104,9404,1139],{"class":1131},[1104,9406,1708],{"class":1121},[1104,9408,9409],{"class":1106,"line":3184},[1104,9410,1748],{"class":1572},[1104,9412,9413,9416,9418],{"class":1106,"line":3197},[1104,9414,9415],{"class":1572},"    context ",[1104,9417,1689],{"class":1121},[1104,9419,3239],{"class":1121},[1104,9421,9422,9424,9427,9429,9431,9434],{"class":1106,"line":3220},[1104,9423,8981],{"class":1131},[1104,9425,9426],{"class":1135},"preference",[1104,9428,1139],{"class":1131},[1104,9430,2924],{"class":1121},[1104,9432,9433],{"class":1572}," preference",[1104,9435,1142],{"class":1121},[1104,9437,9438,9440,9443,9445,9447,9449,9451,9453],{"class":1106,"line":3225},[1104,9439,8981],{"class":1131},[1104,9441,9442],{"class":1135},"available_languages",[1104,9444,1139],{"class":1131},[1104,9446,2924],{"class":1121},[1104,9448,1956],{"class":1572},[1104,9450,1576],{"class":1121},[1104,9452,1271],{"class":1929},[1104,9454,1142],{"class":1121},[1104,9456,9457],{"class":1106,"line":3231},[1104,9458,9459],{"class":1121},"    }\n",[1104,9461,9462],{"class":1106,"line":3242},[1104,9463,1748],{"class":1572},[1104,9465,9466,9468,9471,9473,9475,9477,9479,9482,9484,9486,9489],{"class":1106,"line":3266},[1104,9467,8420],{"class":1568},[1104,9469,9470],{"class":1697}," render",[1104,9472,1701],{"class":1121},[1104,9474,1891],{"class":1697},[1104,9476,1167],{"class":1121},[1104,9478,1259],{"class":1131},[1104,9480,9481],{"class":1135},"accounts/language_preferences.html",[1104,9483,1139],{"class":1131},[1104,9485,1167],{"class":1121},[1104,9487,9488],{"class":1697}," context",[1104,9490,1708],{"class":1121},[1104,9492,9493],{"class":1106,"line":3289},[1104,9494,1243],{"emptyLinePlaceholder":1242},[1104,9496,9497,9499,9502,9504,9506,9508,9510,9512,9515],{"class":1106,"line":3312},[1104,9498,7910],{"class":1717},[1104,9500,9501],{"class":1816}," log_language_usage",[1104,9503,1701],{"class":1121},[1104,9505,1891],{"class":1768},[1104,9507,1167],{"class":1121},[1104,9509,2079],{"class":1768},[1104,9511,1167],{"class":1121},[1104,9513,9514],{"class":1768}," method",[1104,9516,1730],{"class":1121},[1104,9518,9519,9521,9523],{"class":1106,"line":3335},[1104,9520,1736],{"class":1735},[1104,9522,5344],{"class":1739},[1104,9524,1743],{"class":1735},[1104,9526,9527,9529],{"class":1106,"line":3358},[1104,9528,8525],{"class":1568},[1104,9530,1964],{"class":1121},[1104,9532,9533,9536,9538,9540,9542],{"class":1106,"line":3381},[1104,9534,9535],{"class":1568},"        from",[1104,9537,7022],{"class":1121},[1104,9539,4397],{"class":1572},[1104,9541,1587],{"class":1568},[1104,9543,7029],{"class":1572},[1104,9545,9546],{"class":1106,"line":3404},[1104,9547,1866],{"class":1572},[1104,9549,9550,9553,9555,9557,9559,9561],{"class":1106,"line":3427},[1104,9551,9552],{"class":1572},"        LanguageUsageLog",[1104,9554,1576],{"class":1121},[1104,9556,7043],{"class":1800},[1104,9558,1576],{"class":1121},[1104,9560,9124],{"class":1697},[1104,9562,2229],{"class":1121},[1104,9564,9565,9568,9570,9572,9574,9576,9578,9580,9582,9584,9586,9588,9591,9593],{"class":1106,"line":3451},[1104,9566,9567],{"class":2255},"            user",[1104,9569,1689],{"class":1121},[1104,9571,1891],{"class":1697},[1104,9573,1576],{"class":1121},[1104,9575,2039],{"class":1800},[1104,9577,7173],{"class":1568},[1104,9579,1826],{"class":1697},[1104,9581,1576],{"class":1121},[1104,9583,2039],{"class":1800},[1104,9585,1576],{"class":1121},[1104,9587,2057],{"class":1800},[1104,9589,9590],{"class":1568}," else",[1104,9592,2146],{"class":1464},[1104,9594,1142],{"class":1121},[1104,9596,9597,9600,9602,9604,9606,9608,9610,9613],{"class":1106,"line":3475},[1104,9598,9599],{"class":2255},"            session_key",[1104,9601,1689],{"class":1121},[1104,9603,1891],{"class":1697},[1104,9605,1576],{"class":1121},[1104,9607,5524],{"class":1800},[1104,9609,1576],{"class":1121},[1104,9611,9612],{"class":1800},"session_key",[1104,9614,1142],{"class":1121},[1104,9616,9617,9620,9622,9624],{"class":1106,"line":3481},[1104,9618,9619],{"class":2255},"            language_code",[1104,9621,1689],{"class":1121},[1104,9623,1917],{"class":1697},[1104,9625,1142],{"class":1121},[1104,9627,9628,9631,9633,9635],{"class":1106,"line":3486},[1104,9629,9630],{"class":2255},"            detection_method",[1104,9632,1689],{"class":1121},[1104,9634,8466],{"class":1697},[1104,9636,1142],{"class":1121},[1104,9638,9639,9642,9644,9646,9648,9650],{"class":1106,"line":3508},[1104,9640,9641],{"class":2255},"            ip_address",[1104,9643,1689],{"class":1121},[1104,9645,3144],{"class":1697},[1104,9647,1701],{"class":1121},[1104,9649,1891],{"class":1697},[1104,9651,1299],{"class":1121},[1104,9653,9654,9657,9659,9661,9663,9665,9667,9669,9671,9673,9676,9678,9680,9682],{"class":1106,"line":3530},[1104,9655,9656],{"class":2255},"            user_agent",[1104,9658,1689],{"class":1121},[1104,9660,1891],{"class":1697},[1104,9662,1576],{"class":1121},[1104,9664,2730],{"class":1929},[1104,9666,1576],{"class":1121},[1104,9668,2188],{"class":1697},[1104,9670,1701],{"class":1121},[1104,9672,1139],{"class":1131},[1104,9674,9675],{"class":1135},"HTTP_USER_AGENT",[1104,9677,1139],{"class":1131},[1104,9679,1167],{"class":1121},[1104,9681,4083],{"class":1131},[1104,9683,1299],{"class":1121},[1104,9685,9686,9688,9690,9692,9694,9696],{"class":1106,"line":3537},[1104,9687,8352],{"class":2255},[1104,9689,1689],{"class":1121},[1104,9691,1891],{"class":1697},[1104,9693,1576],{"class":1121},[1104,9695,2003],{"class":1800},[1104,9697,1142],{"class":1121},[1104,9699,9700],{"class":1106,"line":3542},[1104,9701,4139],{"class":1121},[1104,9703,9704,9706,9708],{"class":1106,"line":3559},[1104,9705,8581],{"class":1568},[1104,9707,3548],{"class":1776},[1104,9709,1964],{"class":1121},[1104,9711,9712],{"class":1106,"line":3587},[1104,9713,9714],{"class":1110},"        # Don't let logging errors break the application\n",[1104,9716,9717],{"class":1106,"line":3592},[1104,9718,3878],{"class":1568},[1104,9720,9721],{"class":1106,"line":3599},[1104,9722,1243],{"emptyLinePlaceholder":1242},[1104,9724,9725,9727,9729,9731,9733],{"class":1106,"line":3604},[1104,9726,7910],{"class":1717},[1104,9728,3609],{"class":1816},[1104,9730,1701],{"class":1121},[1104,9732,1891],{"class":1768},[1104,9734,1730],{"class":1121},[1104,9736,9737,9739,9741],{"class":1106,"line":3622},[1104,9738,1736],{"class":1735},[1104,9740,3627],{"class":1739},[1104,9742,1743],{"class":1735},[1104,9744,9745,9748,9750,9752,9754,9756,9758,9760,9762,9764,9766,9768],{"class":1106,"line":3632},[1104,9746,9747],{"class":1572},"    x_forwarded_for ",[1104,9749,1689],{"class":1121},[1104,9751,1826],{"class":1572},[1104,9753,1576],{"class":1121},[1104,9755,2730],{"class":1929},[1104,9757,1576],{"class":1121},[1104,9759,2188],{"class":1697},[1104,9761,1701],{"class":1121},[1104,9763,1139],{"class":1131},[1104,9765,3654],{"class":1135},[1104,9767,1139],{"class":1131},[1104,9769,1708],{"class":1121},[1104,9771,9772,9774,9776],{"class":1106,"line":3661},[1104,9773,8022],{"class":1568},[1104,9775,3666],{"class":1572},[1104,9777,1964],{"class":1121},[1104,9779,9780,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801,9803],{"class":1106,"line":3671},[1104,9781,9782],{"class":1572},"        ip ",[1104,9784,1689],{"class":1121},[1104,9786,3666],{"class":1572},[1104,9788,1576],{"class":1121},[1104,9790,2917],{"class":1697},[1104,9792,1701],{"class":1121},[1104,9794,1139],{"class":1131},[1104,9796,1167],{"class":1135},[1104,9798,1139],{"class":1131},[1104,9800,2929],{"class":1121},[1104,9802,2932],{"class":1433},[1104,9804,1236],{"class":1121},[1104,9806,9807,9810],{"class":1106,"line":3698},[1104,9808,9809],{"class":1568},"    else",[1104,9811,1964],{"class":1121},[1104,9813,9814,9816,9818,9820,9822,9824,9826,9828,9830,9832,9834,9836],{"class":1106,"line":3706},[1104,9815,9782],{"class":1572},[1104,9817,1689],{"class":1121},[1104,9819,1826],{"class":1572},[1104,9821,1576],{"class":1121},[1104,9823,2730],{"class":1929},[1104,9825,1576],{"class":1121},[1104,9827,2188],{"class":1697},[1104,9829,1701],{"class":1121},[1104,9831,1139],{"class":1131},[1104,9833,3727],{"class":1135},[1104,9835,1139],{"class":1131},[1104,9837,1708],{"class":1121},[1104,9839,9840,9842],{"class":1106,"line":3734},[1104,9841,8420],{"class":1568},[1104,9843,3739],{"class":1572},[1030,9845,9847],{"id":9846},"template-integration","Template Integration",[1035,9849,9851],{"id":9850},"language-switching-templates","Language Switching Templates",[1095,9853,9857],{"className":9854,"code":9855,"language":9856,"meta":1100,"style":1100},"language-html shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","\u003C!-- templates/includes/language_switcher.html -->\n{% load i18n %}\n\n\u003Cdiv class=\"language-switcher\">\n    \u003Cdiv class=\"current-language\">\n        \u003Cspan class=\"language-icon\">🌐\u003C/span>\n        \u003Cspan class=\"language-name\">{{ LANGUAGE_CODE|upper }}\u003C/span>\n        \u003Cspan class=\"dropdown-arrow\">▼\u003C/span>\n    \u003C/div>\n    \n    \u003Cdiv class=\"language-dropdown\">\n        {% get_available_languages as LANGUAGES %}\n        {% get_current_language as LANGUAGE_CODE %}\n        \n        \u003Cform action=\"{% url 'set_language' %}\" method=\"post\" class=\"language-form\">\n            {% csrf_token %}\n            \u003Cinput name=\"next\" type=\"hidden\" value=\"{{ request.get_full_path }}\" />\n            \n            {% for language_code, language_name in LANGUAGES %}\n                \u003Cbutton \n                    type=\"submit\" \n                    name=\"language\" \n                    value=\"{{ language_code }}\"\n                    class=\"language-option {% if language_code == LANGUAGE_CODE %}active{% endif %}\"\n                    {% if language_code == LANGUAGE_CODE %}disabled{% endif %}\n                >\n                    \u003Cspan class=\"language-code\">{{ language_code|upper }}\u003C/span>\n                    \u003Cspan class=\"language-name\">{{ language_name }}\u003C/span>\n                    {% if language_code == LANGUAGE_CODE %}\n                        \u003Cspan class=\"current-indicator\">✓\u003C/span>\n                    {% endif %}\n                \u003C/button>\n            {% endfor %}\n        \u003C/form>\n    \u003C/div>\n\u003C/div>\n\n\u003Cscript>\ndocument.addEventListener('DOMContentLoaded', function() {\n    const switcher = document.querySelector('.language-switcher');\n    const dropdown = switcher.querySelector('.language-dropdown');\n    const currentLang = switcher.querySelector('.current-language');\n    \n    // Toggle dropdown\n    currentLang.addEventListener('click', function() {\n        dropdown.classList.toggle('show');\n    });\n    \n    // Close dropdown when clicking outside\n    document.addEventListener('click', function(event) {\n        if (!switcher.contains(event.target)) {\n            dropdown.classList.remove('show');\n        }\n    });\n    \n    // Handle language selection via AJAX\n    const form = switcher.querySelector('.language-form');\n    const buttons = form.querySelectorAll('.language-option');\n    \n    buttons.forEach(button => {\n        button.addEventListener('click', function(e) {\n            e.preventDefault();\n            \n            const language = this.value;\n            const formData = new FormData();\n            formData.append('language', language);\n            formData.append('next', window.location.pathname);\n            formData.append('csrfmiddlewaretoken', form.querySelector('[name=csrfmiddlewaretoken]').value);\n            \n            fetch('{% url \"api_set_language\" %}', {\n                method: 'POST',\n                body: formData,\n                headers: {\n                    'X-Requested-With': 'XMLHttpRequest'\n                }\n            })\n            .then(response => response.json())\n            .then(data => {\n                if (data.success) {\n                    // Reload page to apply new language\n                    window.location.reload();\n                } else {\n                    console.error('Language change failed:', data.error);\n                }\n            })\n            .catch(error => {\n                console.error('Error:', error);\n                // Fall back to form submission\n                form.submit();\n            });\n        });\n    });\n});\n\u003C/script>\n\n\u003Cstyle>\n.language-switcher {\n    position: relative;\n    display: inline-block;\n}\n\n.current-language {\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n    padding: 0.5rem 1rem;\n    background: #f8f9fa;\n    border: 1px solid #dee2e6;\n    border-radius: 0.375rem;\n    cursor: pointer;\n    user-select: none;\n}\n\n.current-language:hover {\n    background: #e9ecef;\n}\n\n.language-dropdown {\n    position: absolute;\n    top: 100%;\n    left: 0;\n    right: 0;\n    background: white;\n    border: 1px solid #dee2e6;\n    border-radius: 0.375rem;\n    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    z-index: 1000;\n    display: none;\n}\n\n.language-dropdown.show {\n    display: block;\n}\n\n.language-form {\n    margin: 0;\n}\n\n.language-option {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 100%;\n    padding: 0.75rem 1rem;\n    border: none;\n    background: none;\n    text-align: left;\n    cursor: pointer;\n    transition: background-color 0.15s ease-in-out;\n}\n\n.language-option:hover:not(:disabled) {\n    background: #f8f9fa;\n}\n\n.language-option.active {\n    background: #e7f3ff;\n    font-weight: 600;\n}\n\n.language-option:disabled {\n    cursor: default;\n}\n\n.current-indicator {\n    color: #0d6efd;\n    font-weight: bold;\n}\n\u003C/style>\n","html",[1043,9858,9859,9864,9869,9873,9899,9919,9950,9978,10006,10015,10019,10038,10043,10048,10052,10095,10100,10146,10150,10155,10166,10182,10197,10212,10226,10252,10257,10286,10313,10318,10347,10352,10361,10366,10375,10383,10391,10395,10404,10435,10468,10496,10524,10528,10533,10559,10587,10596,10600,10605,10635,10666,10692,10696,10704,10708,10713,10741,10770,10774,10794,10823,10837,10841,10861,10880,10905,10940,10984,10988,11006,11022,11033,11042,11062,11067,11074,11097,11112,11128,11133,11151,11160,11190,11194,11200,11215,11242,11247,11260,11268,11277,11285,11293,11301,11305,11314,11323,11336,11348,11353,11357,11365,11376,11388,11404,11421,11436,11458,11472,11484,11496,11500,11504,11517,11530,11534,11538,11546,11557,11572,11584,11595,11606,11624,11636,11676,11688,11698,11702,11706,11718,11729,11733,11737,11745,11756,11760,11764,11773,11783,11793,11805,11818,11835,11845,11855,11867,11877,11898,11902,11906,11930,11942,11946,11950,11963,11976,11988,11992,11996,12008,12019,12023,12027,12035,12049,12060,12064],{"__ignoreMap":1100},[1104,9860,9861],{"class":1106,"line":1107},[1104,9862,9863],{"class":1110},"\u003C!-- templates/includes/language_switcher.html -->\n",[1104,9865,9866],{"class":1106,"line":1114},[1104,9867,9868],{"class":1572},"{% load i18n %}\n",[1104,9870,9871],{"class":1106,"line":1128},[1104,9872,1243],{"emptyLinePlaceholder":1242},[1104,9874,9875,9878,9882,9886,9888,9891,9894,9896],{"class":1106,"line":1145},[1104,9876,9877],{"class":1121},"\u003C",[1104,9879,9881],{"class":9880},"sJFLg","div",[1104,9883,9885],{"class":9884},"s5q8q"," class",[1104,9887,1689],{"class":1121},[1104,9889,9890],{"class":1131},"\"",[1104,9892,9893],{"class":1135},"language-switcher",[1104,9895,9890],{"class":1131},[1104,9897,9898],{"class":1121},">\n",[1104,9900,9901,9904,9906,9908,9910,9912,9915,9917],{"class":1106,"line":1157},[1104,9902,9903],{"class":1121},"    \u003C",[1104,9905,9881],{"class":9880},[1104,9907,9885],{"class":9884},[1104,9909,1689],{"class":1121},[1104,9911,9890],{"class":1131},[1104,9913,9914],{"class":1135},"current-language",[1104,9916,9890],{"class":1131},[1104,9918,9898],{"class":1121},[1104,9920,9921,9924,9926,9928,9930,9932,9935,9937,9940,9943,9946,9948],{"class":1106,"line":1173},[1104,9922,9923],{"class":1121},"        \u003C",[1104,9925,1104],{"class":9880},[1104,9927,9885],{"class":9884},[1104,9929,1689],{"class":1121},[1104,9931,9890],{"class":1131},[1104,9933,9934],{"class":1135},"language-icon",[1104,9936,9890],{"class":1131},[1104,9938,9939],{"class":1121},">",[1104,9941,9942],{"class":1572},"🌐",[1104,9944,9945],{"class":1121},"\u003C/",[1104,9947,1104],{"class":9880},[1104,9949,9898],{"class":1121},[1104,9951,9952,9954,9956,9958,9960,9962,9965,9967,9969,9972,9974,9976],{"class":1106,"line":1185},[1104,9953,9923],{"class":1121},[1104,9955,1104],{"class":9880},[1104,9957,9885],{"class":9884},[1104,9959,1689],{"class":1121},[1104,9961,9890],{"class":1131},[1104,9963,9964],{"class":1135},"language-name",[1104,9966,9890],{"class":1131},[1104,9968,9939],{"class":1121},[1104,9970,9971],{"class":1572},"{{ LANGUAGE_CODE|upper }}",[1104,9973,9945],{"class":1121},[1104,9975,1104],{"class":9880},[1104,9977,9898],{"class":1121},[1104,9979,9980,9982,9984,9986,9988,9990,9993,9995,9997,10000,10002,10004],{"class":1106,"line":1197},[1104,9981,9923],{"class":1121},[1104,9983,1104],{"class":9880},[1104,9985,9885],{"class":9884},[1104,9987,1689],{"class":1121},[1104,9989,9890],{"class":1131},[1104,9991,9992],{"class":1135},"dropdown-arrow",[1104,9994,9890],{"class":1131},[1104,9996,9939],{"class":1121},[1104,9998,9999],{"class":1572},"▼",[1104,10001,9945],{"class":1121},[1104,10003,1104],{"class":9880},[1104,10005,9898],{"class":1121},[1104,10007,10008,10011,10013],{"class":1106,"line":1209},[1104,10009,10010],{"class":1121},"    \u003C/",[1104,10012,9881],{"class":9880},[1104,10014,9898],{"class":1121},[1104,10016,10017],{"class":1106,"line":1221},[1104,10018,1748],{"class":1572},[1104,10020,10021,10023,10025,10027,10029,10031,10034,10036],{"class":1106,"line":1233},[1104,10022,9903],{"class":1121},[1104,10024,9881],{"class":9880},[1104,10026,9885],{"class":9884},[1104,10028,1689],{"class":1121},[1104,10030,9890],{"class":1131},[1104,10032,10033],{"class":1135},"language-dropdown",[1104,10035,9890],{"class":1131},[1104,10037,9898],{"class":1121},[1104,10039,10040],{"class":1106,"line":1239},[1104,10041,10042],{"class":1572},"        {% get_available_languages as LANGUAGES %}\n",[1104,10044,10045],{"class":1106,"line":1246},[1104,10046,10047],{"class":1572},"        {% get_current_language as LANGUAGE_CODE %}\n",[1104,10049,10050],{"class":1106,"line":1252},[1104,10051,1866],{"class":1572},[1104,10053,10054,10056,10059,10062,10064,10066,10069,10071,10073,10075,10077,10080,10082,10084,10086,10088,10091,10093],{"class":1106,"line":1268},[1104,10055,9923],{"class":1121},[1104,10057,10058],{"class":9880},"form",[1104,10060,10061],{"class":9884}," action",[1104,10063,1689],{"class":1121},[1104,10065,9890],{"class":1131},[1104,10067,10068],{"class":1135},"{% url 'set_language' %}",[1104,10070,9890],{"class":1131},[1104,10072,9514],{"class":9884},[1104,10074,1689],{"class":1121},[1104,10076,9890],{"class":1131},[1104,10078,10079],{"class":1135},"post",[1104,10081,9890],{"class":1131},[1104,10083,9885],{"class":9884},[1104,10085,1689],{"class":1121},[1104,10087,9890],{"class":1131},[1104,10089,10090],{"class":1135},"language-form",[1104,10092,9890],{"class":1131},[1104,10094,9898],{"class":1121},[1104,10096,10097],{"class":1106,"line":1278},[1104,10098,10099],{"class":1572},"            {% csrf_token %}\n",[1104,10101,10102,10105,10108,10111,10113,10115,10117,10119,10122,10124,10126,10129,10131,10134,10136,10138,10141,10143],{"class":1106,"line":1302},[1104,10103,10104],{"class":1121},"            \u003C",[1104,10106,10107],{"class":9880},"input",[1104,10109,10110],{"class":9884}," name",[1104,10112,1689],{"class":1121},[1104,10114,9890],{"class":1131},[1104,10116,7980],{"class":1135},[1104,10118,9890],{"class":1131},[1104,10120,10121],{"class":9884}," type",[1104,10123,1689],{"class":1121},[1104,10125,9890],{"class":1131},[1104,10127,10128],{"class":1135},"hidden",[1104,10130,9890],{"class":1131},[1104,10132,10133],{"class":9884}," value",[1104,10135,1689],{"class":1121},[1104,10137,9890],{"class":1131},[1104,10139,10140],{"class":1135},"{{ request.get_full_path }}",[1104,10142,9890],{"class":1131},[1104,10144,10145],{"class":1121}," />\n",[1104,10147,10148],{"class":1106,"line":1325},[1104,10149,2358],{"class":1572},[1104,10151,10152],{"class":1106,"line":1348},[1104,10153,10154],{"class":1572},"            {% for language_code, language_name in LANGUAGES %}\n",[1104,10156,10157,10160,10163],{"class":1106,"line":1371},[1104,10158,10159],{"class":1121},"                \u003C",[1104,10161,10162],{"class":9880},"button",[1104,10164,4501],{"class":10165},"sHnae",[1104,10167,10168,10171,10173,10175,10178,10180],{"class":1106,"line":1394},[1104,10169,10170],{"class":9884},"                    type",[1104,10172,1689],{"class":1121},[1104,10174,9890],{"class":1131},[1104,10176,10177],{"class":1135},"submit",[1104,10179,9890],{"class":1131},[1104,10181,4501],{"class":10165},[1104,10183,10184,10187,10189,10191,10193,10195],{"class":1106,"line":1399},[1104,10185,10186],{"class":9884},"                    name",[1104,10188,1689],{"class":1121},[1104,10190,9890],{"class":1131},[1104,10192,1917],{"class":1135},[1104,10194,9890],{"class":1131},[1104,10196,4501],{"class":10165},[1104,10198,10199,10202,10204,10206,10209],{"class":1106,"line":1404},[1104,10200,10201],{"class":9884},"                    value",[1104,10203,1689],{"class":1121},[1104,10205,9890],{"class":1131},[1104,10207,10208],{"class":1135},"{{ language_code }}",[1104,10210,10211],{"class":1131},"\"\n",[1104,10213,10214,10217,10219,10221,10224],{"class":1106,"line":1410},[1104,10215,10216],{"class":9884},"                    class",[1104,10218,1689],{"class":1121},[1104,10220,9890],{"class":1131},[1104,10222,10223],{"class":1135},"language-option {% if language_code == LANGUAGE_CODE %}active{% endif %}",[1104,10225,10211],{"class":1131},[1104,10227,10228,10231,10233,10235,10237,10240,10243,10246,10249],{"class":1106,"line":1425},[1104,10229,10230],{"class":9884},"                    {%",[1104,10232,7173],{"class":9884},[1104,10234,3761],{"class":9884},[1104,10236,1122],{"class":1121},[1104,10238,1689],{"class":10239},"svtyB",[1104,10241,10242],{"class":1135}," LANGUAGE_CODE",[1104,10244,10245],{"class":9884}," %}disabled{%",[1104,10247,10248],{"class":9884}," endif",[1104,10250,10251],{"class":9884}," %}\n",[1104,10253,10254],{"class":1106,"line":1456},[1104,10255,10256],{"class":1121},"                >\n",[1104,10258,10259,10262,10264,10266,10268,10270,10273,10275,10277,10280,10282,10284],{"class":1106,"line":1468},[1104,10260,10261],{"class":1121},"                    \u003C",[1104,10263,1104],{"class":9880},[1104,10265,9885],{"class":9884},[1104,10267,1689],{"class":1121},[1104,10269,9890],{"class":1131},[1104,10271,10272],{"class":1135},"language-code",[1104,10274,9890],{"class":1131},[1104,10276,9939],{"class":1121},[1104,10278,10279],{"class":1572},"{{ language_code|upper }}",[1104,10281,9945],{"class":1121},[1104,10283,1104],{"class":9880},[1104,10285,9898],{"class":1121},[1104,10287,10288,10290,10292,10294,10296,10298,10300,10302,10304,10307,10309,10311],{"class":1106,"line":1483},[1104,10289,10261],{"class":1121},[1104,10291,1104],{"class":9880},[1104,10293,9885],{"class":9884},[1104,10295,1689],{"class":1121},[1104,10297,9890],{"class":1131},[1104,10299,9964],{"class":1135},[1104,10301,9890],{"class":1131},[1104,10303,9939],{"class":1121},[1104,10305,10306],{"class":1572},"{{ language_name }}",[1104,10308,9945],{"class":1121},[1104,10310,1104],{"class":9880},[1104,10312,9898],{"class":1121},[1104,10314,10315],{"class":1106,"line":1497},[1104,10316,10317],{"class":1572},"                    {% if language_code == LANGUAGE_CODE %}\n",[1104,10319,10320,10323,10325,10327,10329,10331,10334,10336,10338,10341,10343,10345],{"class":1106,"line":1508},[1104,10321,10322],{"class":1121},"                        \u003C",[1104,10324,1104],{"class":9880},[1104,10326,9885],{"class":9884},[1104,10328,1689],{"class":1121},[1104,10330,9890],{"class":1131},[1104,10332,10333],{"class":1135},"current-indicator",[1104,10335,9890],{"class":1131},[1104,10337,9939],{"class":1121},[1104,10339,10340],{"class":1572},"✓",[1104,10342,9945],{"class":1121},[1104,10344,1104],{"class":9880},[1104,10346,9898],{"class":1121},[1104,10348,10349],{"class":1106,"line":1523},[1104,10350,10351],{"class":1572},"                    {% endif %}\n",[1104,10353,10354,10357,10359],{"class":1106,"line":1528},[1104,10355,10356],{"class":1121},"                \u003C/",[1104,10358,10162],{"class":9880},[1104,10360,9898],{"class":1121},[1104,10362,10363],{"class":1106,"line":1534},[1104,10364,10365],{"class":1572},"            {% endfor %}\n",[1104,10367,10368,10371,10373],{"class":1106,"line":2012},[1104,10369,10370],{"class":1121},"        \u003C/",[1104,10372,10058],{"class":9880},[1104,10374,9898],{"class":1121},[1104,10376,10377,10379,10381],{"class":1106,"line":2017},[1104,10378,10010],{"class":1121},[1104,10380,9881],{"class":9880},[1104,10382,9898],{"class":1121},[1104,10384,10385,10387,10389],{"class":1106,"line":2023},[1104,10386,9945],{"class":1121},[1104,10388,9881],{"class":9880},[1104,10390,9898],{"class":1121},[1104,10392,10393],{"class":1106,"line":2062},[1104,10394,1243],{"emptyLinePlaceholder":1242},[1104,10396,10397,10399,10402],{"class":1106,"line":2084},[1104,10398,9877],{"class":1121},[1104,10400,10401],{"class":9880},"script",[1104,10403,9898],{"class":1121},[1104,10405,10406,10410,10412,10415,10418,10420,10423,10425,10427,10430,10433],{"class":1106,"line":2089},[1104,10407,10409],{"class":10408},"sSC40","document",[1104,10411,1576],{"class":1121},[1104,10413,10414],{"class":1816},"addEventListener",[1104,10416,1701],{"class":10417},"snCua",[1104,10419,1139],{"class":1131},[1104,10421,10422],{"class":1135},"DOMContentLoaded",[1104,10424,1139],{"class":1131},[1104,10426,1167],{"class":1121},[1104,10428,10429],{"class":1717}," function",[1104,10431,10432],{"class":1121},"()",[1104,10434,3239],{"class":1121},[1104,10436,10437,10440,10443,10445,10448,10450,10453,10456,10458,10461,10463,10465],{"class":1106,"line":2112},[1104,10438,10439],{"class":1717},"    const",[1104,10441,10442],{"class":10408}," switcher",[1104,10444,1122],{"class":1121},[1104,10446,10447],{"class":10408}," document",[1104,10449,1576],{"class":1121},[1104,10451,10452],{"class":1816},"querySelector",[1104,10454,1701],{"class":10455},"sLdnO",[1104,10457,1139],{"class":1131},[1104,10459,10460],{"class":1135},".language-switcher",[1104,10462,1139],{"class":1131},[1104,10464,1061],{"class":10455},[1104,10466,10467],{"class":1121},";\n",[1104,10469,10470,10472,10475,10477,10479,10481,10483,10485,10487,10490,10492,10494],{"class":1106,"line":2122},[1104,10471,10439],{"class":1717},[1104,10473,10474],{"class":10408}," dropdown",[1104,10476,1122],{"class":1121},[1104,10478,10442],{"class":10408},[1104,10480,1576],{"class":1121},[1104,10482,10452],{"class":1816},[1104,10484,1701],{"class":10455},[1104,10486,1139],{"class":1131},[1104,10488,10489],{"class":1135},".language-dropdown",[1104,10491,1139],{"class":1131},[1104,10493,1061],{"class":10455},[1104,10495,10467],{"class":1121},[1104,10497,10498,10500,10503,10505,10507,10509,10511,10513,10515,10518,10520,10522],{"class":1106,"line":2151},[1104,10499,10439],{"class":1717},[1104,10501,10502],{"class":10408}," currentLang",[1104,10504,1122],{"class":1121},[1104,10506,10442],{"class":10408},[1104,10508,1576],{"class":1121},[1104,10510,10452],{"class":1816},[1104,10512,1701],{"class":10455},[1104,10514,1139],{"class":1131},[1104,10516,10517],{"class":1135},".current-language",[1104,10519,1139],{"class":1131},[1104,10521,1061],{"class":10455},[1104,10523,10467],{"class":1121},[1104,10525,10526],{"class":1106,"line":2156},[1104,10527,1748],{"class":1800},[1104,10529,10530],{"class":1106,"line":2165},[1104,10531,10532],{"class":1110},"    // Toggle dropdown\n",[1104,10534,10535,10538,10540,10542,10544,10546,10549,10551,10553,10555,10557],{"class":1106,"line":2171},[1104,10536,10537],{"class":10408},"    currentLang",[1104,10539,1576],{"class":1121},[1104,10541,10414],{"class":1816},[1104,10543,1701],{"class":10455},[1104,10545,1139],{"class":1131},[1104,10547,10548],{"class":1135},"click",[1104,10550,1139],{"class":1131},[1104,10552,1167],{"class":1121},[1104,10554,10429],{"class":1717},[1104,10556,10432],{"class":1121},[1104,10558,3239],{"class":1121},[1104,10560,10561,10564,10566,10569,10571,10574,10576,10578,10581,10583,10585],{"class":1106,"line":2202},[1104,10562,10563],{"class":10408},"        dropdown",[1104,10565,1576],{"class":1121},[1104,10567,10568],{"class":10408},"classList",[1104,10570,1576],{"class":1121},[1104,10572,10573],{"class":1816},"toggle",[1104,10575,1701],{"class":10455},[1104,10577,1139],{"class":1131},[1104,10579,10580],{"class":1135},"show",[1104,10582,1139],{"class":1131},[1104,10584,1061],{"class":10455},[1104,10586,10467],{"class":1121},[1104,10588,10589,10592,10594],{"class":1106,"line":2218},[1104,10590,10591],{"class":1121},"    }",[1104,10593,1061],{"class":10455},[1104,10595,10467],{"class":1121},[1104,10597,10598],{"class":1106,"line":2232},[1104,10599,1748],{"class":1800},[1104,10601,10602],{"class":1106,"line":2244},[1104,10603,10604],{"class":1110},"    // Close dropdown when clicking outside\n",[1104,10606,10607,10610,10612,10614,10616,10618,10620,10622,10624,10626,10628,10631,10633],{"class":1106,"line":2252},[1104,10608,10609],{"class":10408},"    document",[1104,10611,1576],{"class":1121},[1104,10613,10414],{"class":1816},[1104,10615,1701],{"class":10455},[1104,10617,1139],{"class":1131},[1104,10619,10548],{"class":1135},[1104,10621,1139],{"class":1131},[1104,10623,1167],{"class":1121},[1104,10625,10429],{"class":1717},[1104,10627,1701],{"class":1121},[1104,10629,10630],{"class":2255},"event",[1104,10632,1061],{"class":1121},[1104,10634,3239],{"class":1121},[1104,10636,10637,10639,10641,10644,10647,10649,10652,10654,10656,10658,10661,10664],{"class":1106,"line":2269},[1104,10638,1953],{"class":1568},[1104,10640,2415],{"class":10455},[1104,10642,10643],{"class":1437},"!",[1104,10645,10646],{"class":10408},"switcher",[1104,10648,1576],{"class":1121},[1104,10650,10651],{"class":1816},"contains",[1104,10653,1701],{"class":10455},[1104,10655,10630],{"class":10408},[1104,10657,1576],{"class":1121},[1104,10659,10660],{"class":10408},"target",[1104,10662,10663],{"class":10455},"))",[1104,10665,3239],{"class":1121},[1104,10667,10668,10671,10673,10675,10677,10680,10682,10684,10686,10688,10690],{"class":1106,"line":2285},[1104,10669,10670],{"class":10408},"            dropdown",[1104,10672,1576],{"class":1121},[1104,10674,10568],{"class":10408},[1104,10676,1576],{"class":1121},[1104,10678,10679],{"class":1816},"remove",[1104,10681,1701],{"class":10455},[1104,10683,1139],{"class":1131},[1104,10685,10580],{"class":1135},[1104,10687,1139],{"class":1131},[1104,10689,1061],{"class":10455},[1104,10691,10467],{"class":1121},[1104,10693,10694],{"class":1106,"line":2301},[1104,10695,6697],{"class":1121},[1104,10697,10698,10700,10702],{"class":1106,"line":2317},[1104,10699,10591],{"class":1121},[1104,10701,1061],{"class":10455},[1104,10703,10467],{"class":1121},[1104,10705,10706],{"class":1106,"line":2333},[1104,10707,1748],{"class":1800},[1104,10709,10710],{"class":1106,"line":2349},[1104,10711,10712],{"class":1110},"    // Handle language selection via AJAX\n",[1104,10714,10715,10717,10720,10722,10724,10726,10728,10730,10732,10735,10737,10739],{"class":1106,"line":2355},[1104,10716,10439],{"class":1717},[1104,10718,10719],{"class":10408}," form",[1104,10721,1122],{"class":1121},[1104,10723,10442],{"class":10408},[1104,10725,1576],{"class":1121},[1104,10727,10452],{"class":1816},[1104,10729,1701],{"class":10455},[1104,10731,1139],{"class":1131},[1104,10733,10734],{"class":1135},".language-form",[1104,10736,1139],{"class":1131},[1104,10738,1061],{"class":10455},[1104,10740,10467],{"class":1121},[1104,10742,10743,10745,10748,10750,10752,10754,10757,10759,10761,10764,10766,10768],{"class":1106,"line":2361},[1104,10744,10439],{"class":1717},[1104,10746,10747],{"class":10408}," buttons",[1104,10749,1122],{"class":1121},[1104,10751,10719],{"class":10408},[1104,10753,1576],{"class":1121},[1104,10755,10756],{"class":1816},"querySelectorAll",[1104,10758,1701],{"class":10455},[1104,10760,1139],{"class":1131},[1104,10762,10763],{"class":1135},".language-option",[1104,10765,1139],{"class":1131},[1104,10767,1061],{"class":10455},[1104,10769,10467],{"class":1121},[1104,10771,10772],{"class":1106,"line":2367},[1104,10773,1748],{"class":1800},[1104,10775,10776,10779,10781,10784,10786,10788,10792],{"class":1106,"line":2391},[1104,10777,10778],{"class":10408},"    buttons",[1104,10780,1576],{"class":1121},[1104,10782,10783],{"class":1816},"forEach",[1104,10785,1701],{"class":10455},[1104,10787,10162],{"class":2255},[1104,10789,10791],{"class":10790},"sIOqK"," =>",[1104,10793,3239],{"class":1121},[1104,10795,10796,10799,10801,10803,10805,10807,10809,10811,10813,10815,10817,10819,10821],{"class":1106,"line":2396},[1104,10797,10798],{"class":10408},"        button",[1104,10800,1576],{"class":1121},[1104,10802,10414],{"class":1816},[1104,10804,1701],{"class":10455},[1104,10806,1139],{"class":1131},[1104,10808,10548],{"class":1135},[1104,10810,1139],{"class":1131},[1104,10812,1167],{"class":1121},[1104,10814,10429],{"class":1717},[1104,10816,1701],{"class":1121},[1104,10818,3578],{"class":2255},[1104,10820,1061],{"class":1121},[1104,10822,3239],{"class":1121},[1104,10824,10825,10828,10830,10833,10835],{"class":1106,"line":2402},[1104,10826,10827],{"class":10408},"            e",[1104,10829,1576],{"class":1121},[1104,10831,10832],{"class":1816},"preventDefault",[1104,10834,10432],{"class":10455},[1104,10836,10467],{"class":1121},[1104,10838,10839],{"class":1106,"line":2437},[1104,10840,2358],{"class":1800},[1104,10842,10843,10846,10848,10850,10854,10856,10859],{"class":1106,"line":2442},[1104,10844,10845],{"class":1717},"            const",[1104,10847,2079],{"class":10408},[1104,10849,1122],{"class":1121},[1104,10851,10853],{"class":10852},"sETVe"," this",[1104,10855,1576],{"class":1121},[1104,10857,10858],{"class":10408},"value",[1104,10860,10467],{"class":1121},[1104,10862,10863,10865,10868,10870,10873,10876,10878],{"class":1106,"line":2451},[1104,10864,10845],{"class":1717},[1104,10866,10867],{"class":10408}," formData",[1104,10869,1122],{"class":1121},[1104,10871,10872],{"class":1437}," new",[1104,10874,10875],{"class":1816}," FormData",[1104,10877,10432],{"class":10455},[1104,10879,10467],{"class":1121},[1104,10881,10882,10885,10887,10889,10891,10893,10895,10897,10899,10901,10903],{"class":1106,"line":2456},[1104,10883,10884],{"class":10408},"            formData",[1104,10886,1576],{"class":1121},[1104,10888,7605],{"class":1816},[1104,10890,1701],{"class":10455},[1104,10892,1139],{"class":1131},[1104,10894,1917],{"class":1135},[1104,10896,1139],{"class":1131},[1104,10898,1167],{"class":1121},[1104,10900,2079],{"class":10408},[1104,10902,1061],{"class":10455},[1104,10904,10467],{"class":1121},[1104,10906,10907,10909,10911,10913,10915,10917,10919,10921,10923,10926,10928,10931,10933,10936,10938],{"class":1106,"line":2474},[1104,10908,10884],{"class":10408},[1104,10910,1576],{"class":1121},[1104,10912,7605],{"class":1816},[1104,10914,1701],{"class":10455},[1104,10916,1139],{"class":1131},[1104,10918,7980],{"class":1135},[1104,10920,1139],{"class":1131},[1104,10922,1167],{"class":1121},[1104,10924,10925],{"class":10408}," window",[1104,10927,1576],{"class":1121},[1104,10929,10930],{"class":10408},"location",[1104,10932,1576],{"class":1121},[1104,10934,10935],{"class":10408},"pathname",[1104,10937,1061],{"class":10455},[1104,10939,10467],{"class":1121},[1104,10941,10942,10944,10946,10948,10950,10952,10955,10957,10959,10961,10963,10965,10967,10969,10972,10974,10976,10978,10980,10982],{"class":1106,"line":2484},[1104,10943,10884],{"class":10408},[1104,10945,1576],{"class":1121},[1104,10947,7605],{"class":1816},[1104,10949,1701],{"class":10455},[1104,10951,1139],{"class":1131},[1104,10953,10954],{"class":1135},"csrfmiddlewaretoken",[1104,10956,1139],{"class":1131},[1104,10958,1167],{"class":1121},[1104,10960,10719],{"class":10408},[1104,10962,1576],{"class":1121},[1104,10964,10452],{"class":1816},[1104,10966,1701],{"class":10455},[1104,10968,1139],{"class":1131},[1104,10970,10971],{"class":1135},"[name=csrfmiddlewaretoken]",[1104,10973,1139],{"class":1131},[1104,10975,1061],{"class":10455},[1104,10977,1576],{"class":1121},[1104,10979,10858],{"class":10408},[1104,10981,1061],{"class":10455},[1104,10983,10467],{"class":1121},[1104,10985,10986],{"class":1106,"line":2490},[1104,10987,2358],{"class":1800},[1104,10989,10990,10993,10995,10997,11000,11002,11004],{"class":1106,"line":2510},[1104,10991,10992],{"class":1816},"            fetch",[1104,10994,1701],{"class":10455},[1104,10996,1139],{"class":1131},[1104,10998,10999],{"class":1135},"{% url \"api_set_language\" %}",[1104,11001,1139],{"class":1131},[1104,11003,1167],{"class":1121},[1104,11005,3239],{"class":1121},[1104,11007,11008,11012,11014,11016,11018,11020],{"class":1106,"line":2519},[1104,11009,11011],{"class":11010},"suXOh","                method",[1104,11013,2924],{"class":1121},[1104,11015,1259],{"class":1131},[1104,11017,7942],{"class":1135},[1104,11019,1139],{"class":1131},[1104,11021,1142],{"class":1121},[1104,11023,11024,11027,11029,11031],{"class":1106,"line":2527},[1104,11025,11026],{"class":11010},"                body",[1104,11028,2924],{"class":1121},[1104,11030,10867],{"class":10408},[1104,11032,1142],{"class":1121},[1104,11034,11035,11038,11040],{"class":1106,"line":2532},[1104,11036,11037],{"class":11010},"                headers",[1104,11039,2924],{"class":1121},[1104,11041,3239],{"class":1121},[1104,11043,11044,11047,11051,11053,11055,11057,11060],{"class":1106,"line":2538},[1104,11045,11046],{"class":1131},"                    '",[1104,11048,11050],{"class":11049},"sQtxO","X-Requested-With",[1104,11052,1139],{"class":1131},[1104,11054,2924],{"class":1121},[1104,11056,1259],{"class":1131},[1104,11058,11059],{"class":1135},"XMLHttpRequest",[1104,11061,1265],{"class":1131},[1104,11063,11064],{"class":1106,"line":2573},[1104,11065,11066],{"class":1121},"                }\n",[1104,11068,11069,11072],{"class":1106,"line":2581},[1104,11070,11071],{"class":1121},"            }",[1104,11073,1708],{"class":10455},[1104,11075,11076,11079,11082,11084,11086,11088,11090,11092,11094],{"class":1106,"line":2605},[1104,11077,11078],{"class":1121},"            .",[1104,11080,11081],{"class":1816},"then",[1104,11083,1701],{"class":10455},[1104,11085,2410],{"class":2255},[1104,11087,10791],{"class":10790},[1104,11089,2107],{"class":10408},[1104,11091,1576],{"class":1121},[1104,11093,8586],{"class":1816},[1104,11095,11096],{"class":10455},"())\n",[1104,11098,11099,11101,11103,11105,11108,11110],{"class":1106,"line":2631},[1104,11100,11078],{"class":1121},[1104,11102,11081],{"class":1816},[1104,11104,1701],{"class":10455},[1104,11106,11107],{"class":2255},"data",[1104,11109,10791],{"class":10790},[1104,11111,3239],{"class":1121},[1104,11113,11114,11116,11118,11120,11122,11124,11126],{"class":1106,"line":2640},[1104,11115,2608],{"class":1568},[1104,11117,2415],{"class":10455},[1104,11119,11107],{"class":10408},[1104,11121,1576],{"class":1121},[1104,11123,8984],{"class":10408},[1104,11125,1061],{"class":10455},[1104,11127,3239],{"class":1121},[1104,11129,11130],{"class":1106,"line":2651},[1104,11131,11132],{"class":1110},"                    // Reload page to apply new language\n",[1104,11134,11135,11138,11140,11142,11144,11147,11149],{"class":1106,"line":2657},[1104,11136,11137],{"class":10408},"                    window",[1104,11139,1576],{"class":1121},[1104,11141,10930],{"class":10408},[1104,11143,1576],{"class":1121},[1104,11145,11146],{"class":1816},"reload",[1104,11148,10432],{"class":10455},[1104,11150,10467],{"class":1121},[1104,11152,11153,11156,11158],{"class":1106,"line":2662},[1104,11154,11155],{"class":1121},"                }",[1104,11157,9590],{"class":1568},[1104,11159,3239],{"class":1121},[1104,11161,11162,11165,11167,11169,11171,11173,11176,11178,11180,11182,11184,11186,11188],{"class":1106,"line":2668},[1104,11163,11164],{"class":10408},"                    console",[1104,11166,1576],{"class":1121},[1104,11168,8492],{"class":1816},[1104,11170,1701],{"class":10455},[1104,11172,1139],{"class":1131},[1104,11174,11175],{"class":1135},"Language change failed:",[1104,11177,1139],{"class":1131},[1104,11179,1167],{"class":1121},[1104,11181,8562],{"class":10408},[1104,11183,1576],{"class":1121},[1104,11185,8492],{"class":10408},[1104,11187,1061],{"class":10455},[1104,11189,10467],{"class":1121},[1104,11191,11192],{"class":1106,"line":2689},[1104,11193,11066],{"class":1121},[1104,11195,11196,11198],{"class":1106,"line":2699},[1104,11197,11071],{"class":1121},[1104,11199,1708],{"class":10455},[1104,11201,11202,11204,11207,11209,11211,11213],{"class":1106,"line":2707},[1104,11203,11078],{"class":1121},[1104,11205,11206],{"class":1816},"catch",[1104,11208,1701],{"class":10455},[1104,11210,8492],{"class":2255},[1104,11212,10791],{"class":10790},[1104,11214,3239],{"class":1121},[1104,11216,11217,11220,11222,11224,11226,11228,11231,11233,11235,11238,11240],{"class":1106,"line":2712},[1104,11218,11219],{"class":10408},"                console",[1104,11221,1576],{"class":1121},[1104,11223,8492],{"class":1816},[1104,11225,1701],{"class":10455},[1104,11227,1139],{"class":1131},[1104,11229,11230],{"class":1135},"Error:",[1104,11232,1139],{"class":1131},[1104,11234,1167],{"class":1121},[1104,11236,11237],{"class":10408}," error",[1104,11239,1061],{"class":10455},[1104,11241,10467],{"class":1121},[1104,11243,11244],{"class":1106,"line":2718},[1104,11245,11246],{"class":1110},"                // Fall back to form submission\n",[1104,11248,11249,11252,11254,11256,11258],{"class":1106,"line":2748},[1104,11250,11251],{"class":10408},"                form",[1104,11253,1576],{"class":1121},[1104,11255,10177],{"class":1816},[1104,11257,10432],{"class":10455},[1104,11259,10467],{"class":1121},[1104,11261,11262,11264,11266],{"class":1106,"line":2771},[1104,11263,11071],{"class":1121},[1104,11265,1061],{"class":10455},[1104,11267,10467],{"class":1121},[1104,11269,11270,11273,11275],{"class":1106,"line":2779},[1104,11271,11272],{"class":1121},"        }",[1104,11274,1061],{"class":10455},[1104,11276,10467],{"class":1121},[1104,11278,11279,11281,11283],{"class":1106,"line":2784},[1104,11280,10591],{"class":1121},[1104,11282,1061],{"class":10455},[1104,11284,10467],{"class":1121},[1104,11286,11287,11289,11291],{"class":1106,"line":2790},[1104,11288,1991],{"class":1121},[1104,11290,1061],{"class":10417},[1104,11292,10467],{"class":1121},[1104,11294,11295,11297,11299],{"class":1106,"line":2811},[1104,11296,9945],{"class":1121},[1104,11298,10401],{"class":9880},[1104,11300,9898],{"class":1121},[1104,11302,11303],{"class":1106,"line":2821},[1104,11304,1243],{"emptyLinePlaceholder":1242},[1104,11306,11307,11309,11312],{"class":1106,"line":2829},[1104,11308,9877],{"class":1121},[1104,11310,11311],{"class":9880},"style",[1104,11313,9898],{"class":1121},[1104,11315,11316,11318,11321],{"class":1106,"line":2834},[1104,11317,1576],{"class":1121},[1104,11319,9893],{"class":11320},"sKL33",[1104,11322,3239],{"class":1121},[1104,11324,11325,11329,11331,11334],{"class":1106,"line":2840},[1104,11326,11328],{"class":11327},"s5HLA","    position",[1104,11330,2924],{"class":1121},[1104,11332,11333],{"class":1117}," relative",[1104,11335,10467],{"class":1121},[1104,11337,11338,11341,11343,11346],{"class":1106,"line":2867},[1104,11339,11340],{"class":11327},"    display",[1104,11342,2924],{"class":1121},[1104,11344,11345],{"class":1117}," inline-block",[1104,11347,10467],{"class":1121},[1104,11349,11350],{"class":1106,"line":2872},[1104,11351,11352],{"class":1121},"}\n",[1104,11354,11355],{"class":1106,"line":2890},[1104,11356,1243],{"emptyLinePlaceholder":1242},[1104,11358,11359,11361,11363],{"class":1106,"line":2900},[1104,11360,1576],{"class":1121},[1104,11362,9914],{"class":11320},[1104,11364,3239],{"class":1121},[1104,11366,11367,11369,11371,11374],{"class":1106,"line":2940},[1104,11368,11340],{"class":11327},[1104,11370,2924],{"class":1121},[1104,11372,11373],{"class":1117}," flex",[1104,11375,10467],{"class":1121},[1104,11377,11378,11381,11383,11386],{"class":1106,"line":2965},[1104,11379,11380],{"class":11327},"    align-items",[1104,11382,2924],{"class":1121},[1104,11384,11385],{"class":1117}," center",[1104,11387,10467],{"class":1121},[1104,11389,11390,11393,11395,11398,11402],{"class":1106,"line":2970},[1104,11391,11392],{"class":11327},"    gap",[1104,11394,2924],{"class":1121},[1104,11396,11397],{"class":1433}," 0.5",[1104,11399,11401],{"class":11400},"sQBxk","rem",[1104,11403,10467],{"class":1121},[1104,11405,11406,11409,11411,11413,11415,11417,11419],{"class":1106,"line":2996},[1104,11407,11408],{"class":11327},"    padding",[1104,11410,2924],{"class":1121},[1104,11412,11397],{"class":1433},[1104,11414,11401],{"class":11400},[1104,11416,7383],{"class":1433},[1104,11418,11401],{"class":11400},[1104,11420,10467],{"class":1121},[1104,11422,11423,11426,11428,11431,11434],{"class":1106,"line":3013},[1104,11424,11425],{"class":11327},"    background",[1104,11427,2924],{"class":1121},[1104,11429,11430],{"class":1121}," #",[1104,11432,11433],{"class":1117},"f8f9fa",[1104,11435,10467],{"class":1121},[1104,11437,11438,11441,11443,11445,11448,11451,11453,11456],{"class":1106,"line":3031},[1104,11439,11440],{"class":11327},"    border",[1104,11442,2924],{"class":1121},[1104,11444,7383],{"class":1433},[1104,11446,11447],{"class":11400},"px",[1104,11449,11450],{"class":1117}," solid",[1104,11452,11430],{"class":1121},[1104,11454,11455],{"class":1117},"dee2e6",[1104,11457,10467],{"class":1121},[1104,11459,11460,11463,11465,11468,11470],{"class":1106,"line":3040},[1104,11461,11462],{"class":11327},"    border-radius",[1104,11464,2924],{"class":1121},[1104,11466,11467],{"class":1433}," 0.375",[1104,11469,11401],{"class":11400},[1104,11471,10467],{"class":1121},[1104,11473,11474,11477,11479,11482],{"class":1106,"line":3045},[1104,11475,11476],{"class":11327},"    cursor",[1104,11478,2924],{"class":1121},[1104,11480,11481],{"class":1117}," pointer",[1104,11483,10467],{"class":1121},[1104,11485,11486,11489,11491,11494],{"class":1106,"line":3052},[1104,11487,11488],{"class":11327},"    user-select",[1104,11490,2924],{"class":1121},[1104,11492,11493],{"class":1117}," none",[1104,11495,10467],{"class":1121},[1104,11497,11498],{"class":1106,"line":3057},[1104,11499,11352],{"class":1121},[1104,11501,11502],{"class":1106,"line":3075},[1104,11503,1243],{"emptyLinePlaceholder":1242},[1104,11505,11506,11508,11510,11512,11515],{"class":1106,"line":3085},[1104,11507,1576],{"class":1121},[1104,11509,9914],{"class":11320},[1104,11511,2924],{"class":1121},[1104,11513,11514],{"class":9884},"hover",[1104,11516,3239],{"class":1121},[1104,11518,11519,11521,11523,11525,11528],{"class":1106,"line":3093},[1104,11520,11425],{"class":11327},[1104,11522,2924],{"class":1121},[1104,11524,11430],{"class":1121},[1104,11526,11527],{"class":1117},"e9ecef",[1104,11529,10467],{"class":1121},[1104,11531,11532],{"class":1106,"line":3121},[1104,11533,11352],{"class":1121},[1104,11535,11536],{"class":1106,"line":3126},[1104,11537,1243],{"emptyLinePlaceholder":1242},[1104,11539,11540,11542,11544],{"class":1106,"line":3132},[1104,11541,1576],{"class":1121},[1104,11543,10033],{"class":11320},[1104,11545,3239],{"class":1121},[1104,11547,11548,11550,11552,11555],{"class":1106,"line":3153},[1104,11549,11328],{"class":11327},[1104,11551,2924],{"class":1121},[1104,11553,11554],{"class":1117}," absolute",[1104,11556,10467],{"class":1121},[1104,11558,11559,11562,11564,11567,11570],{"class":1106,"line":3166},[1104,11560,11561],{"class":11327},"    top",[1104,11563,2924],{"class":1121},[1104,11565,11566],{"class":1433}," 100",[1104,11568,11569],{"class":11400},"%",[1104,11571,10467],{"class":1121},[1104,11573,11574,11577,11579,11582],{"class":1106,"line":3173},[1104,11575,11576],{"class":11327},"    left",[1104,11578,2924],{"class":1121},[1104,11580,11581],{"class":1433}," 0",[1104,11583,10467],{"class":1121},[1104,11585,11586,11589,11591,11593],{"class":1106,"line":3178},[1104,11587,11588],{"class":11327},"    right",[1104,11590,2924],{"class":1121},[1104,11592,11581],{"class":1433},[1104,11594,10467],{"class":1121},[1104,11596,11597,11599,11601,11604],{"class":1106,"line":3184},[1104,11598,11425],{"class":11327},[1104,11600,2924],{"class":1121},[1104,11602,11603],{"class":1117}," white",[1104,11605,10467],{"class":1121},[1104,11607,11608,11610,11612,11614,11616,11618,11620,11622],{"class":1106,"line":3197},[1104,11609,11440],{"class":11327},[1104,11611,2924],{"class":1121},[1104,11613,7383],{"class":1433},[1104,11615,11447],{"class":11400},[1104,11617,11450],{"class":1117},[1104,11619,11430],{"class":1121},[1104,11621,11455],{"class":1117},[1104,11623,10467],{"class":1121},[1104,11625,11626,11628,11630,11632,11634],{"class":1106,"line":3220},[1104,11627,11462],{"class":11327},[1104,11629,2924],{"class":1121},[1104,11631,11467],{"class":1433},[1104,11633,11401],{"class":11400},[1104,11635,10467],{"class":1121},[1104,11637,11638,11641,11643,11645,11647,11649,11651,11653,11656,11658,11660,11662,11664,11666,11668,11670,11673],{"class":1106,"line":3225},[1104,11639,11640],{"class":11327},"    box-shadow",[1104,11642,2924],{"class":1121},[1104,11644,11581],{"class":1433},[1104,11646,11397],{"class":1433},[1104,11648,11401],{"class":11400},[1104,11650,7383],{"class":1433},[1104,11652,11401],{"class":11400},[1104,11654,11655],{"class":1756}," rgba",[1104,11657,1701],{"class":1121},[1104,11659,2932],{"class":1433},[1104,11661,1167],{"class":1121},[1104,11663,11581],{"class":1433},[1104,11665,1167],{"class":1121},[1104,11667,11581],{"class":1433},[1104,11669,1167],{"class":1121},[1104,11671,11672],{"class":1433}," 0.15",[1104,11674,11675],{"class":1121},");\n",[1104,11677,11678,11681,11683,11686],{"class":1106,"line":3231},[1104,11679,11680],{"class":11327},"    z-index",[1104,11682,2924],{"class":1121},[1104,11684,11685],{"class":1433}," 1000",[1104,11687,10467],{"class":1121},[1104,11689,11690,11692,11694,11696],{"class":1106,"line":3242},[1104,11691,11340],{"class":11327},[1104,11693,2924],{"class":1121},[1104,11695,11493],{"class":1117},[1104,11697,10467],{"class":1121},[1104,11699,11700],{"class":1106,"line":3266},[1104,11701,11352],{"class":1121},[1104,11703,11704],{"class":1106,"line":3289},[1104,11705,1243],{"emptyLinePlaceholder":1242},[1104,11707,11708,11710,11712,11714,11716],{"class":1106,"line":3312},[1104,11709,1576],{"class":1121},[1104,11711,10033],{"class":11320},[1104,11713,1576],{"class":1121},[1104,11715,10580],{"class":11320},[1104,11717,3239],{"class":1121},[1104,11719,11720,11722,11724,11727],{"class":1106,"line":3335},[1104,11721,11340],{"class":11327},[1104,11723,2924],{"class":1121},[1104,11725,11726],{"class":1117}," block",[1104,11728,10467],{"class":1121},[1104,11730,11731],{"class":1106,"line":3358},[1104,11732,11352],{"class":1121},[1104,11734,11735],{"class":1106,"line":3381},[1104,11736,1243],{"emptyLinePlaceholder":1242},[1104,11738,11739,11741,11743],{"class":1106,"line":3404},[1104,11740,1576],{"class":1121},[1104,11742,10090],{"class":11320},[1104,11744,3239],{"class":1121},[1104,11746,11747,11750,11752,11754],{"class":1106,"line":3427},[1104,11748,11749],{"class":11327},"    margin",[1104,11751,2924],{"class":1121},[1104,11753,11581],{"class":1433},[1104,11755,10467],{"class":1121},[1104,11757,11758],{"class":1106,"line":3451},[1104,11759,11352],{"class":1121},[1104,11761,11762],{"class":1106,"line":3475},[1104,11763,1243],{"emptyLinePlaceholder":1242},[1104,11765,11766,11768,11771],{"class":1106,"line":3481},[1104,11767,1576],{"class":1121},[1104,11769,11770],{"class":11320},"language-option",[1104,11772,3239],{"class":1121},[1104,11774,11775,11777,11779,11781],{"class":1106,"line":3486},[1104,11776,11340],{"class":11327},[1104,11778,2924],{"class":1121},[1104,11780,11373],{"class":1117},[1104,11782,10467],{"class":1121},[1104,11784,11785,11787,11789,11791],{"class":1106,"line":3508},[1104,11786,11380],{"class":11327},[1104,11788,2924],{"class":1121},[1104,11790,11385],{"class":1117},[1104,11792,10467],{"class":1121},[1104,11794,11795,11798,11800,11803],{"class":1106,"line":3530},[1104,11796,11797],{"class":11327},"    justify-content",[1104,11799,2924],{"class":1121},[1104,11801,11802],{"class":1117}," space-between",[1104,11804,10467],{"class":1121},[1104,11806,11807,11810,11812,11814,11816],{"class":1106,"line":3537},[1104,11808,11809],{"class":11327},"    width",[1104,11811,2924],{"class":1121},[1104,11813,11566],{"class":1433},[1104,11815,11569],{"class":11400},[1104,11817,10467],{"class":1121},[1104,11819,11820,11822,11824,11827,11829,11831,11833],{"class":1106,"line":3542},[1104,11821,11408],{"class":11327},[1104,11823,2924],{"class":1121},[1104,11825,11826],{"class":1433}," 0.75",[1104,11828,11401],{"class":11400},[1104,11830,7383],{"class":1433},[1104,11832,11401],{"class":11400},[1104,11834,10467],{"class":1121},[1104,11836,11837,11839,11841,11843],{"class":1106,"line":3559},[1104,11838,11440],{"class":11327},[1104,11840,2924],{"class":1121},[1104,11842,11493],{"class":1117},[1104,11844,10467],{"class":1121},[1104,11846,11847,11849,11851,11853],{"class":1106,"line":3587},[1104,11848,11425],{"class":11327},[1104,11850,2924],{"class":1121},[1104,11852,11493],{"class":1117},[1104,11854,10467],{"class":1121},[1104,11856,11857,11860,11862,11865],{"class":1106,"line":3592},[1104,11858,11859],{"class":11327},"    text-align",[1104,11861,2924],{"class":1121},[1104,11863,11864],{"class":1117}," left",[1104,11866,10467],{"class":1121},[1104,11868,11869,11871,11873,11875],{"class":1106,"line":3599},[1104,11870,11476],{"class":11327},[1104,11872,2924],{"class":1121},[1104,11874,11481],{"class":1117},[1104,11876,10467],{"class":1121},[1104,11878,11879,11882,11884,11887,11890,11893,11896],{"class":1106,"line":3604},[1104,11880,11881],{"class":11327},"    transition",[1104,11883,2924],{"class":1121},[1104,11885,11886],{"class":1572}," background-color ",[1104,11888,11889],{"class":1433},"0.15",[1104,11891,11892],{"class":11400},"s",[1104,11894,11895],{"class":1117}," ease-in-out",[1104,11897,10467],{"class":1121},[1104,11899,11900],{"class":1106,"line":3622},[1104,11901,11352],{"class":1121},[1104,11903,11904],{"class":1106,"line":3632},[1104,11905,1243],{"emptyLinePlaceholder":1242},[1104,11907,11908,11910,11912,11914,11916,11918,11920,11923,11926,11928],{"class":1106,"line":3661},[1104,11909,1576],{"class":1121},[1104,11911,11770],{"class":11320},[1104,11913,2924],{"class":1121},[1104,11915,11514],{"class":9884},[1104,11917,2924],{"class":1121},[1104,11919,8684],{"class":9884},[1104,11921,11922],{"class":1121},"(:",[1104,11924,11925],{"class":9884},"disabled",[1104,11927,1061],{"class":1121},[1104,11929,3239],{"class":1121},[1104,11931,11932,11934,11936,11938,11940],{"class":1106,"line":3671},[1104,11933,11425],{"class":11327},[1104,11935,2924],{"class":1121},[1104,11937,11430],{"class":1121},[1104,11939,11433],{"class":1117},[1104,11941,10467],{"class":1121},[1104,11943,11944],{"class":1106,"line":3698},[1104,11945,11352],{"class":1121},[1104,11947,11948],{"class":1106,"line":3706},[1104,11949,1243],{"emptyLinePlaceholder":1242},[1104,11951,11952,11954,11956,11958,11961],{"class":1106,"line":3734},[1104,11953,1576],{"class":1121},[1104,11955,11770],{"class":11320},[1104,11957,1576],{"class":1121},[1104,11959,11960],{"class":11320},"active",[1104,11962,3239],{"class":1121},[1104,11964,11965,11967,11969,11971,11974],{"class":1106,"line":3742},[1104,11966,11425],{"class":11327},[1104,11968,2924],{"class":1121},[1104,11970,11430],{"class":1121},[1104,11972,11973],{"class":1117},"e7f3ff",[1104,11975,10467],{"class":1121},[1104,11977,11978,11981,11983,11986],{"class":1106,"line":3747},[1104,11979,11980],{"class":11327},"    font-weight",[1104,11982,2924],{"class":1121},[1104,11984,11985],{"class":1433}," 600",[1104,11987,10467],{"class":1121},[1104,11989,11990],{"class":1106,"line":3766},[1104,11991,11352],{"class":1121},[1104,11993,11994],{"class":1106,"line":3776},[1104,11995,1243],{"emptyLinePlaceholder":1242},[1104,11997,11998,12000,12002,12004,12006],{"class":1106,"line":3813},[1104,11999,1576],{"class":1121},[1104,12001,11770],{"class":11320},[1104,12003,2924],{"class":1121},[1104,12005,11925],{"class":9884},[1104,12007,3239],{"class":1121},[1104,12009,12010,12012,12014,12017],{"class":1106,"line":3826},[1104,12011,11476],{"class":11327},[1104,12013,2924],{"class":1121},[1104,12015,12016],{"class":1117}," default",[1104,12018,10467],{"class":1121},[1104,12020,12021],{"class":1106,"line":3831},[1104,12022,11352],{"class":1121},[1104,12024,12025],{"class":1106,"line":3853},[1104,12026,1243],{"emptyLinePlaceholder":1242},[1104,12028,12029,12031,12033],{"class":1106,"line":3863},[1104,12030,1576],{"class":1121},[1104,12032,10333],{"class":11320},[1104,12034,3239],{"class":1121},[1104,12036,12037,12040,12042,12044,12047],{"class":1106,"line":3869},[1104,12038,12039],{"class":11327},"    color",[1104,12041,2924],{"class":1121},[1104,12043,11430],{"class":1121},[1104,12045,12046],{"class":1117},"0d6efd",[1104,12048,10467],{"class":1121},[1104,12050,12051,12053,12055,12058],{"class":1106,"line":3875},[1104,12052,11980],{"class":11327},[1104,12054,2924],{"class":1121},[1104,12056,12057],{"class":1117}," bold",[1104,12059,10467],{"class":1121},[1104,12061,12062],{"class":1106,"line":3881},[1104,12063,11352],{"class":1121},[1104,12065,12066,12068,12070],{"class":1106,"line":3886},[1104,12067,9945],{"class":1121},[1104,12069,11311],{"class":9880},[1104,12071,9898],{"class":1121},[1035,12073,12075],{"id":12074},"language-preferences-template","Language Preferences Template",[1095,12077,12079],{"className":9854,"code":12078,"language":9856,"meta":1100,"style":1100},"\u003C!-- templates/accounts/language_preferences.html -->\n{% extends 'base.html' %}\n{% load i18n %}\n\n{% block title %}{% trans \"Language Preferences\" %}{% endblock %}\n\n{% block content %}\n\u003Cdiv class=\"language-preferences\">\n    \u003Ch1>{% trans \"Language Preferences\" %}\u003C/h1>\n    \n    \u003Cform method=\"post\" class=\"preferences-form\">\n        {% csrf_token %}\n        \n        \u003Cdiv class=\"form-group\">\n            \u003Clabel for=\"primary_language\">{% trans \"Primary Language\" %}\u003C/label>\n            \u003Cselect name=\"primary_language\" id=\"primary_language\" class=\"form-control\">\n                {% for language_code, language_name in available_languages %}\n                    \u003Coption \n                        value=\"{{ language_code }}\"\n                        {% if language_code == preference.primary_language %}selected{% endif %}\n                    >\n                        {{ language_name }}\n                    \u003C/option>\n                {% endfor %}\n            \u003C/select>\n            \u003Csmall class=\"form-text\">{% trans \"Your preferred language for the interface\" %}\u003C/small>\n        \u003C/div>\n        \n        \u003Cdiv class=\"form-group\">\n            \u003Clabel>{% trans \"Secondary Languages\" %}\u003C/label>\n            \u003Cdiv class=\"checkbox-group\">\n                {% for language_code, language_name in available_languages %}\n                    \u003Cdiv class=\"form-check\">\n                        \u003Cinput \n                            type=\"checkbox\" \n                            name=\"secondary_languages\" \n                            value=\"{{ language_code }}\"\n                            id=\"secondary_{{ language_code }}\"\n                            class=\"form-check-input\"\n                            {% if language_code in preference.secondary_languages %}checked{% endif %}\n                        >\n                        \u003Clabel for=\"secondary_{{ language_code }}\" class=\"form-check-label\">\n                            {{ language_name }}\n                        \u003C/label>\n                    \u003C/div>\n                {% endfor %}\n            \u003C/div>\n            \u003Csmall class=\"form-text\">{% trans \"Languages you understand (used for fallback content)\" %}\u003C/small>\n        \u003C/div>\n        \n        \u003Cdiv class=\"form-group\">\n            \u003Cdiv class=\"form-check\">\n                \u003Cinput \n                    type=\"checkbox\" \n                    name=\"auto_detect\" \n                    id=\"auto_detect\"\n                    class=\"form-check-input\"\n                    {% if preference.auto_detect %}checked{% endif %}\n                >\n                \u003Clabel for=\"auto_detect\" class=\"form-check-label\">\n                    {% trans \"Auto-detect language from browser\" %}\n                \u003C/label>\n            \u003C/div>\n            \u003Csmall class=\"form-text\">\n                {% trans \"Automatically detect your preferred language from browser settings\" %}\n            \u003C/small>\n        \u003C/div>\n        \n        \u003Cdiv class=\"form-actions\">\n            \u003Cbutton type=\"submit\" class=\"btn btn-primary\">\n                {% trans \"Save Preferences\" %}\n            \u003C/button>\n            \u003Ca href=\"{% url 'profile' %}\" class=\"btn btn-secondary\">\n                {% trans \"Cancel\" %}\n            \u003C/a>\n        \u003C/div>\n    \u003C/form>\n    \n    \u003Cdiv class=\"language-info\">\n        \u003Ch3>{% trans \"Current Language Information\" %}\u003C/h3>\n        \u003Cdl class=\"info-list\">\n            \u003Cdt>{% trans \"Active Language\" %}\u003C/dt>\n            \u003Cdd>{{ LANGUAGE_CODE|upper }} - {% get_language_info for LANGUAGE_CODE as lang_info %}{{ lang_info.name_local }}\u003C/dd>\n            \n            \u003Cdt>{% trans \"Last Detection Source\" %}\u003C/dt>\n            \u003Cdd>{{ preference.get_detection_source_display|default:\"—\" }}\u003C/dd>\n            \n            \u003Cdt>{% trans \"Last Detected Language\" %}\u003C/dt>\n            \u003Cdd>{{ preference.last_detected_language|upper|default:\"—\" }}\u003C/dd>\n            \n            \u003Cdt>{% trans \"Browser Languages\" %}\u003C/dt>\n            \u003Cdd id=\"browser-languages\">{% trans \"Detecting...\" %}\u003C/dd>\n        \u003C/dl>\n    \u003C/div>\n\u003C/div>\n\n\u003Cscript>\n// Display browser language preferences\ndocument.addEventListener('DOMContentLoaded', function() {\n    const browserLangs = navigator.languages || [navigator.language];\n    const browserLangsElement = document.getElementById('browser-languages');\n    \n    if (browserLangs.length > 0) {\n        browserLangsElement.textContent = browserLangs.join(', ');\n    } else {\n        browserLangsElement.textContent = '{% trans \"Not available\" %}';\n    }\n    \n    // Handle primary language change\n    const primarySelect = document.getElementById('primary_language');\n    const secondaryCheckboxes = document.querySelectorAll('input[name=\"secondary_languages\"]');\n    \n    primarySelect.addEventListener('change', function() {\n        const selectedPrimary = this.value;\n        \n        // Uncheck the primary language from secondary languages\n        secondaryCheckboxes.forEach(checkbox => {\n            if (checkbox.value === selectedPrimary) {\n                checkbox.checked = false;\n                checkbox.disabled = true;\n            } else {\n                checkbox.disabled = false;\n            }\n        });\n    });\n    \n    // Trigger change event on load\n    primarySelect.dispatchEvent(new Event('change'));\n});\n\u003C/script>\n{% endblock %}\n",[1043,12080,12081,12086,12091,12095,12099,12104,12108,12113,12132,12149,12153,12182,12187,12191,12210,12238,12279,12284,12293,12306,12329,12334,12339,12348,12353,12362,12391,12399,12403,12421,12438,12457,12461,12480,12488,12504,12519,12532,12546,12560,12581,12586,12615,12620,12629,12637,12641,12649,12676,12684,12688,12706,12724,12732,12746,12760,12773,12785,12800,12804,12832,12837,12845,12853,12871,12876,12884,12892,12896,12915,12944,12949,12957,12989,12994,13002,13010,13018,13022,13041,13058,13078,13096,13114,13118,13135,13152,13156,13173,13190,13194,13211,13239,13247,13255,13263,13267,13275,13280,13304,13336,13364,13368,13390,13422,13430,13449,13453,13457,13462,13489,13517,13521,13547,13565,13569,13574,13591,13612,13630,13645,13653,13667,13671,13679,13687,13691,13696,13725,13733,13741],{"__ignoreMap":1100},[1104,12082,12083],{"class":1106,"line":1107},[1104,12084,12085],{"class":1110},"\u003C!-- templates/accounts/language_preferences.html -->\n",[1104,12087,12088],{"class":1106,"line":1114},[1104,12089,12090],{"class":1572},"{% extends 'base.html' %}\n",[1104,12092,12093],{"class":1106,"line":1128},[1104,12094,9868],{"class":1572},[1104,12096,12097],{"class":1106,"line":1145},[1104,12098,1243],{"emptyLinePlaceholder":1242},[1104,12100,12101],{"class":1106,"line":1157},[1104,12102,12103],{"class":1572},"{% block title %}{% trans \"Language Preferences\" %}{% endblock %}\n",[1104,12105,12106],{"class":1106,"line":1173},[1104,12107,1243],{"emptyLinePlaceholder":1242},[1104,12109,12110],{"class":1106,"line":1185},[1104,12111,12112],{"class":1572},"{% block content %}\n",[1104,12114,12115,12117,12119,12121,12123,12125,12128,12130],{"class":1106,"line":1197},[1104,12116,9877],{"class":1121},[1104,12118,9881],{"class":9880},[1104,12120,9885],{"class":9884},[1104,12122,1689],{"class":1121},[1104,12124,9890],{"class":1131},[1104,12126,12127],{"class":1135},"language-preferences",[1104,12129,9890],{"class":1131},[1104,12131,9898],{"class":1121},[1104,12133,12134,12136,12138,12140,12143,12145,12147],{"class":1106,"line":1209},[1104,12135,9903],{"class":1121},[1104,12137,1022],{"class":9880},[1104,12139,9939],{"class":1121},[1104,12141,12142],{"class":1572},"{% trans \"Language Preferences\" %}",[1104,12144,9945],{"class":1121},[1104,12146,1022],{"class":9880},[1104,12148,9898],{"class":1121},[1104,12150,12151],{"class":1106,"line":1221},[1104,12152,1748],{"class":1572},[1104,12154,12155,12157,12159,12161,12163,12165,12167,12169,12171,12173,12175,12178,12180],{"class":1106,"line":1233},[1104,12156,9903],{"class":1121},[1104,12158,10058],{"class":9880},[1104,12160,9514],{"class":9884},[1104,12162,1689],{"class":1121},[1104,12164,9890],{"class":1131},[1104,12166,10079],{"class":1135},[1104,12168,9890],{"class":1131},[1104,12170,9885],{"class":9884},[1104,12172,1689],{"class":1121},[1104,12174,9890],{"class":1131},[1104,12176,12177],{"class":1135},"preferences-form",[1104,12179,9890],{"class":1131},[1104,12181,9898],{"class":1121},[1104,12183,12184],{"class":1106,"line":1239},[1104,12185,12186],{"class":1572},"        {% csrf_token %}\n",[1104,12188,12189],{"class":1106,"line":1246},[1104,12190,1866],{"class":1572},[1104,12192,12193,12195,12197,12199,12201,12203,12206,12208],{"class":1106,"line":1252},[1104,12194,9923],{"class":1121},[1104,12196,9881],{"class":9880},[1104,12198,9885],{"class":9884},[1104,12200,1689],{"class":1121},[1104,12202,9890],{"class":1131},[1104,12204,12205],{"class":1135},"form-group",[1104,12207,9890],{"class":1131},[1104,12209,9898],{"class":1121},[1104,12211,12212,12214,12217,12219,12221,12223,12225,12227,12229,12232,12234,12236],{"class":1106,"line":1268},[1104,12213,10104],{"class":1121},[1104,12215,12216],{"class":9880},"label",[1104,12218,3796],{"class":9884},[1104,12220,1689],{"class":1121},[1104,12222,9890],{"class":1131},[1104,12224,5233],{"class":1135},[1104,12226,9890],{"class":1131},[1104,12228,9939],{"class":1121},[1104,12230,12231],{"class":1572},"{% trans \"Primary Language\" %}",[1104,12233,9945],{"class":1121},[1104,12235,12216],{"class":9880},[1104,12237,9898],{"class":1121},[1104,12239,12240,12242,12245,12247,12249,12251,12253,12255,12258,12260,12262,12264,12266,12268,12270,12272,12275,12277],{"class":1106,"line":1278},[1104,12241,10104],{"class":1121},[1104,12243,12244],{"class":9880},"select",[1104,12246,10110],{"class":9884},[1104,12248,1689],{"class":1121},[1104,12250,9890],{"class":1131},[1104,12252,5233],{"class":1135},[1104,12254,9890],{"class":1131},[1104,12256,12257],{"class":9884}," id",[1104,12259,1689],{"class":1121},[1104,12261,9890],{"class":1131},[1104,12263,5233],{"class":1135},[1104,12265,9890],{"class":1131},[1104,12267,9885],{"class":9884},[1104,12269,1689],{"class":1121},[1104,12271,9890],{"class":1131},[1104,12273,12274],{"class":1135},"form-control",[1104,12276,9890],{"class":1131},[1104,12278,9898],{"class":1121},[1104,12280,12281],{"class":1106,"line":1302},[1104,12282,12283],{"class":1572},"                {% for language_code, language_name in available_languages %}\n",[1104,12285,12286,12288,12291],{"class":1106,"line":1325},[1104,12287,10261],{"class":1121},[1104,12289,12290],{"class":9880},"option",[1104,12292,4501],{"class":10165},[1104,12294,12295,12298,12300,12302,12304],{"class":1106,"line":1348},[1104,12296,12297],{"class":9884},"                        value",[1104,12299,1689],{"class":1121},[1104,12301,9890],{"class":1131},[1104,12303,10208],{"class":1135},[1104,12305,10211],{"class":1131},[1104,12307,12308,12311,12313,12315,12317,12319,12322,12325,12327],{"class":1106,"line":1371},[1104,12309,12310],{"class":9884},"                        {%",[1104,12312,7173],{"class":9884},[1104,12314,3761],{"class":9884},[1104,12316,1122],{"class":1121},[1104,12318,1689],{"class":10239},[1104,12320,12321],{"class":1135}," preference.primary_language",[1104,12323,12324],{"class":9884}," %}selected{%",[1104,12326,10248],{"class":9884},[1104,12328,10251],{"class":9884},[1104,12330,12331],{"class":1106,"line":1394},[1104,12332,12333],{"class":1121},"                    >\n",[1104,12335,12336],{"class":1106,"line":1399},[1104,12337,12338],{"class":1572},"                        {{ language_name }}\n",[1104,12340,12341,12344,12346],{"class":1106,"line":1404},[1104,12342,12343],{"class":1121},"                    \u003C/",[1104,12345,12290],{"class":9880},[1104,12347,9898],{"class":1121},[1104,12349,12350],{"class":1106,"line":1410},[1104,12351,12352],{"class":1572},"                {% endfor %}\n",[1104,12354,12355,12358,12360],{"class":1106,"line":1425},[1104,12356,12357],{"class":1121},"            \u003C/",[1104,12359,12244],{"class":9880},[1104,12361,9898],{"class":1121},[1104,12363,12364,12366,12369,12371,12373,12375,12378,12380,12382,12385,12387,12389],{"class":1106,"line":1456},[1104,12365,10104],{"class":1121},[1104,12367,12368],{"class":9880},"small",[1104,12370,9885],{"class":9884},[1104,12372,1689],{"class":1121},[1104,12374,9890],{"class":1131},[1104,12376,12377],{"class":1135},"form-text",[1104,12379,9890],{"class":1131},[1104,12381,9939],{"class":1121},[1104,12383,12384],{"class":1572},"{% trans \"Your preferred language for the interface\" %}",[1104,12386,9945],{"class":1121},[1104,12388,12368],{"class":9880},[1104,12390,9898],{"class":1121},[1104,12392,12393,12395,12397],{"class":1106,"line":1468},[1104,12394,10370],{"class":1121},[1104,12396,9881],{"class":9880},[1104,12398,9898],{"class":1121},[1104,12400,12401],{"class":1106,"line":1483},[1104,12402,1866],{"class":1572},[1104,12404,12405,12407,12409,12411,12413,12415,12417,12419],{"class":1106,"line":1497},[1104,12406,9923],{"class":1121},[1104,12408,9881],{"class":9880},[1104,12410,9885],{"class":9884},[1104,12412,1689],{"class":1121},[1104,12414,9890],{"class":1131},[1104,12416,12205],{"class":1135},[1104,12418,9890],{"class":1131},[1104,12420,9898],{"class":1121},[1104,12422,12423,12425,12427,12429,12432,12434,12436],{"class":1106,"line":1508},[1104,12424,10104],{"class":1121},[1104,12426,12216],{"class":9880},[1104,12428,9939],{"class":1121},[1104,12430,12431],{"class":1572},"{% trans \"Secondary Languages\" %}",[1104,12433,9945],{"class":1121},[1104,12435,12216],{"class":9880},[1104,12437,9898],{"class":1121},[1104,12439,12440,12442,12444,12446,12448,12450,12453,12455],{"class":1106,"line":1523},[1104,12441,10104],{"class":1121},[1104,12443,9881],{"class":9880},[1104,12445,9885],{"class":9884},[1104,12447,1689],{"class":1121},[1104,12449,9890],{"class":1131},[1104,12451,12452],{"class":1135},"checkbox-group",[1104,12454,9890],{"class":1131},[1104,12456,9898],{"class":1121},[1104,12458,12459],{"class":1106,"line":1528},[1104,12460,12283],{"class":1572},[1104,12462,12463,12465,12467,12469,12471,12473,12476,12478],{"class":1106,"line":1534},[1104,12464,10261],{"class":1121},[1104,12466,9881],{"class":9880},[1104,12468,9885],{"class":9884},[1104,12470,1689],{"class":1121},[1104,12472,9890],{"class":1131},[1104,12474,12475],{"class":1135},"form-check",[1104,12477,9890],{"class":1131},[1104,12479,9898],{"class":1121},[1104,12481,12482,12484,12486],{"class":1106,"line":2012},[1104,12483,10322],{"class":1121},[1104,12485,10107],{"class":9880},[1104,12487,4501],{"class":1121},[1104,12489,12490,12493,12495,12497,12500,12502],{"class":1106,"line":2017},[1104,12491,12492],{"class":9884},"                            type",[1104,12494,1689],{"class":1121},[1104,12496,9890],{"class":1131},[1104,12498,12499],{"class":1135},"checkbox",[1104,12501,9890],{"class":1131},[1104,12503,4501],{"class":1121},[1104,12505,12506,12509,12511,12513,12515,12517],{"class":1106,"line":2023},[1104,12507,12508],{"class":9884},"                            name",[1104,12510,1689],{"class":1121},[1104,12512,9890],{"class":1131},[1104,12514,5276],{"class":1135},[1104,12516,9890],{"class":1131},[1104,12518,4501],{"class":1121},[1104,12520,12521,12524,12526,12528,12530],{"class":1106,"line":2062},[1104,12522,12523],{"class":9884},"                            value",[1104,12525,1689],{"class":1121},[1104,12527,9890],{"class":1131},[1104,12529,10208],{"class":1135},[1104,12531,10211],{"class":1131},[1104,12533,12534,12537,12539,12541,12544],{"class":1106,"line":2084},[1104,12535,12536],{"class":9884},"                            id",[1104,12538,1689],{"class":1121},[1104,12540,9890],{"class":1131},[1104,12542,12543],{"class":1135},"secondary_{{ language_code }}",[1104,12545,10211],{"class":1131},[1104,12547,12548,12551,12553,12555,12558],{"class":1106,"line":2089},[1104,12549,12550],{"class":9884},"                            class",[1104,12552,1689],{"class":1121},[1104,12554,9890],{"class":1131},[1104,12556,12557],{"class":1135},"form-check-input",[1104,12559,10211],{"class":1131},[1104,12561,12562,12565,12567,12569,12571,12574,12577,12579],{"class":1106,"line":2112},[1104,12563,12564],{"class":9884},"                            {%",[1104,12566,7173],{"class":9884},[1104,12568,3761],{"class":9884},[1104,12570,5236],{"class":9884},[1104,12572,12573],{"class":9884}," preference.secondary_languages",[1104,12575,12576],{"class":9884}," %}checked{%",[1104,12578,10248],{"class":9884},[1104,12580,10251],{"class":9884},[1104,12582,12583],{"class":1106,"line":2122},[1104,12584,12585],{"class":1121},"                        >\n",[1104,12587,12588,12590,12592,12594,12596,12598,12600,12602,12604,12606,12608,12611,12613],{"class":1106,"line":2151},[1104,12589,10322],{"class":1121},[1104,12591,12216],{"class":9880},[1104,12593,3796],{"class":9884},[1104,12595,1689],{"class":1121},[1104,12597,9890],{"class":1131},[1104,12599,12543],{"class":1135},[1104,12601,9890],{"class":1131},[1104,12603,9885],{"class":9884},[1104,12605,1689],{"class":1121},[1104,12607,9890],{"class":1131},[1104,12609,12610],{"class":1135},"form-check-label",[1104,12612,9890],{"class":1131},[1104,12614,9898],{"class":1121},[1104,12616,12617],{"class":1106,"line":2156},[1104,12618,12619],{"class":1572},"                            {{ language_name }}\n",[1104,12621,12622,12625,12627],{"class":1106,"line":2165},[1104,12623,12624],{"class":1121},"                        \u003C/",[1104,12626,12216],{"class":9880},[1104,12628,9898],{"class":1121},[1104,12630,12631,12633,12635],{"class":1106,"line":2171},[1104,12632,12343],{"class":1121},[1104,12634,9881],{"class":9880},[1104,12636,9898],{"class":1121},[1104,12638,12639],{"class":1106,"line":2202},[1104,12640,12352],{"class":1572},[1104,12642,12643,12645,12647],{"class":1106,"line":2218},[1104,12644,12357],{"class":1121},[1104,12646,9881],{"class":9880},[1104,12648,9898],{"class":1121},[1104,12650,12651,12653,12655,12657,12659,12661,12663,12665,12667,12670,12672,12674],{"class":1106,"line":2232},[1104,12652,10104],{"class":1121},[1104,12654,12368],{"class":9880},[1104,12656,9885],{"class":9884},[1104,12658,1689],{"class":1121},[1104,12660,9890],{"class":1131},[1104,12662,12377],{"class":1135},[1104,12664,9890],{"class":1131},[1104,12666,9939],{"class":1121},[1104,12668,12669],{"class":1572},"{% trans \"Languages you understand (used for fallback content)\" %}",[1104,12671,9945],{"class":1121},[1104,12673,12368],{"class":9880},[1104,12675,9898],{"class":1121},[1104,12677,12678,12680,12682],{"class":1106,"line":2244},[1104,12679,10370],{"class":1121},[1104,12681,9881],{"class":9880},[1104,12683,9898],{"class":1121},[1104,12685,12686],{"class":1106,"line":2252},[1104,12687,1866],{"class":1572},[1104,12689,12690,12692,12694,12696,12698,12700,12702,12704],{"class":1106,"line":2269},[1104,12691,9923],{"class":1121},[1104,12693,9881],{"class":9880},[1104,12695,9885],{"class":9884},[1104,12697,1689],{"class":1121},[1104,12699,9890],{"class":1131},[1104,12701,12205],{"class":1135},[1104,12703,9890],{"class":1131},[1104,12705,9898],{"class":1121},[1104,12707,12708,12710,12712,12714,12716,12718,12720,12722],{"class":1106,"line":2285},[1104,12709,10104],{"class":1121},[1104,12711,9881],{"class":9880},[1104,12713,9885],{"class":9884},[1104,12715,1689],{"class":1121},[1104,12717,9890],{"class":1131},[1104,12719,12475],{"class":1135},[1104,12721,9890],{"class":1131},[1104,12723,9898],{"class":1121},[1104,12725,12726,12728,12730],{"class":1106,"line":2301},[1104,12727,10159],{"class":1121},[1104,12729,10107],{"class":9880},[1104,12731,4501],{"class":1121},[1104,12733,12734,12736,12738,12740,12742,12744],{"class":1106,"line":2317},[1104,12735,10170],{"class":9884},[1104,12737,1689],{"class":1121},[1104,12739,9890],{"class":1131},[1104,12741,12499],{"class":1135},[1104,12743,9890],{"class":1131},[1104,12745,4501],{"class":1121},[1104,12747,12748,12750,12752,12754,12756,12758],{"class":1106,"line":2333},[1104,12749,10186],{"class":9884},[1104,12751,1689],{"class":1121},[1104,12753,9890],{"class":1131},[1104,12755,9242],{"class":1135},[1104,12757,9890],{"class":1131},[1104,12759,4501],{"class":1121},[1104,12761,12762,12765,12767,12769,12771],{"class":1106,"line":2349},[1104,12763,12764],{"class":9884},"                    id",[1104,12766,1689],{"class":1121},[1104,12768,9890],{"class":1131},[1104,12770,9242],{"class":1135},[1104,12772,10211],{"class":1131},[1104,12774,12775,12777,12779,12781,12783],{"class":1106,"line":2355},[1104,12776,10216],{"class":9884},[1104,12778,1689],{"class":1121},[1104,12780,9890],{"class":1131},[1104,12782,12557],{"class":1135},[1104,12784,10211],{"class":1131},[1104,12786,12787,12789,12791,12794,12796,12798],{"class":1106,"line":2361},[1104,12788,10230],{"class":9884},[1104,12790,7173],{"class":9884},[1104,12792,12793],{"class":9884}," preference.auto_detect",[1104,12795,12576],{"class":9884},[1104,12797,10248],{"class":9884},[1104,12799,10251],{"class":9884},[1104,12801,12802],{"class":1106,"line":2367},[1104,12803,10256],{"class":1121},[1104,12805,12806,12808,12810,12812,12814,12816,12818,12820,12822,12824,12826,12828,12830],{"class":1106,"line":2391},[1104,12807,10159],{"class":1121},[1104,12809,12216],{"class":9880},[1104,12811,3796],{"class":9884},[1104,12813,1689],{"class":1121},[1104,12815,9890],{"class":1131},[1104,12817,9242],{"class":1135},[1104,12819,9890],{"class":1131},[1104,12821,9885],{"class":9884},[1104,12823,1689],{"class":1121},[1104,12825,9890],{"class":1131},[1104,12827,12610],{"class":1135},[1104,12829,9890],{"class":1131},[1104,12831,9898],{"class":1121},[1104,12833,12834],{"class":1106,"line":2396},[1104,12835,12836],{"class":1572},"                    {% trans \"Auto-detect language from browser\" %}\n",[1104,12838,12839,12841,12843],{"class":1106,"line":2402},[1104,12840,10356],{"class":1121},[1104,12842,12216],{"class":9880},[1104,12844,9898],{"class":1121},[1104,12846,12847,12849,12851],{"class":1106,"line":2437},[1104,12848,12357],{"class":1121},[1104,12850,9881],{"class":9880},[1104,12852,9898],{"class":1121},[1104,12854,12855,12857,12859,12861,12863,12865,12867,12869],{"class":1106,"line":2442},[1104,12856,10104],{"class":1121},[1104,12858,12368],{"class":9880},[1104,12860,9885],{"class":9884},[1104,12862,1689],{"class":1121},[1104,12864,9890],{"class":1131},[1104,12866,12377],{"class":1135},[1104,12868,9890],{"class":1131},[1104,12870,9898],{"class":1121},[1104,12872,12873],{"class":1106,"line":2451},[1104,12874,12875],{"class":1572},"                {% trans \"Automatically detect your preferred language from browser settings\" %}\n",[1104,12877,12878,12880,12882],{"class":1106,"line":2456},[1104,12879,12357],{"class":1121},[1104,12881,12368],{"class":9880},[1104,12883,9898],{"class":1121},[1104,12885,12886,12888,12890],{"class":1106,"line":2474},[1104,12887,10370],{"class":1121},[1104,12889,9881],{"class":9880},[1104,12891,9898],{"class":1121},[1104,12893,12894],{"class":1106,"line":2484},[1104,12895,1866],{"class":1572},[1104,12897,12898,12900,12902,12904,12906,12908,12911,12913],{"class":1106,"line":2490},[1104,12899,9923],{"class":1121},[1104,12901,9881],{"class":9880},[1104,12903,9885],{"class":9884},[1104,12905,1689],{"class":1121},[1104,12907,9890],{"class":1131},[1104,12909,12910],{"class":1135},"form-actions",[1104,12912,9890],{"class":1131},[1104,12914,9898],{"class":1121},[1104,12916,12917,12919,12921,12923,12925,12927,12929,12931,12933,12935,12937,12940,12942],{"class":1106,"line":2510},[1104,12918,10104],{"class":1121},[1104,12920,10162],{"class":9880},[1104,12922,10121],{"class":9884},[1104,12924,1689],{"class":1121},[1104,12926,9890],{"class":1131},[1104,12928,10177],{"class":1135},[1104,12930,9890],{"class":1131},[1104,12932,9885],{"class":9884},[1104,12934,1689],{"class":1121},[1104,12936,9890],{"class":1131},[1104,12938,12939],{"class":1135},"btn btn-primary",[1104,12941,9890],{"class":1131},[1104,12943,9898],{"class":1121},[1104,12945,12946],{"class":1106,"line":2519},[1104,12947,12948],{"class":1572},"                {% trans \"Save Preferences\" %}\n",[1104,12950,12951,12953,12955],{"class":1106,"line":2527},[1104,12952,12357],{"class":1121},[1104,12954,10162],{"class":9880},[1104,12956,9898],{"class":1121},[1104,12958,12959,12961,12964,12967,12969,12971,12974,12976,12978,12980,12982,12985,12987],{"class":1106,"line":2532},[1104,12960,10104],{"class":1121},[1104,12962,12963],{"class":9880},"a",[1104,12965,12966],{"class":9884}," href",[1104,12968,1689],{"class":1121},[1104,12970,9890],{"class":1131},[1104,12972,12973],{"class":1135},"{% url 'profile' %}",[1104,12975,9890],{"class":1131},[1104,12977,9885],{"class":9884},[1104,12979,1689],{"class":1121},[1104,12981,9890],{"class":1131},[1104,12983,12984],{"class":1135},"btn btn-secondary",[1104,12986,9890],{"class":1131},[1104,12988,9898],{"class":1121},[1104,12990,12991],{"class":1106,"line":2538},[1104,12992,12993],{"class":1572},"                {% trans \"Cancel\" %}\n",[1104,12995,12996,12998,13000],{"class":1106,"line":2573},[1104,12997,12357],{"class":1121},[1104,12999,12963],{"class":9880},[1104,13001,9898],{"class":1121},[1104,13003,13004,13006,13008],{"class":1106,"line":2581},[1104,13005,10370],{"class":1121},[1104,13007,9881],{"class":9880},[1104,13009,9898],{"class":1121},[1104,13011,13012,13014,13016],{"class":1106,"line":2605},[1104,13013,10010],{"class":1121},[1104,13015,10058],{"class":9880},[1104,13017,9898],{"class":1121},[1104,13019,13020],{"class":1106,"line":2631},[1104,13021,1748],{"class":1572},[1104,13023,13024,13026,13028,13030,13032,13034,13037,13039],{"class":1106,"line":2640},[1104,13025,9903],{"class":1121},[1104,13027,9881],{"class":9880},[1104,13029,9885],{"class":9884},[1104,13031,1689],{"class":1121},[1104,13033,9890],{"class":1131},[1104,13035,13036],{"class":1135},"language-info",[1104,13038,9890],{"class":1131},[1104,13040,9898],{"class":1121},[1104,13042,13043,13045,13047,13049,13052,13054,13056],{"class":1106,"line":2651},[1104,13044,9923],{"class":1121},[1104,13046,1035],{"class":9880},[1104,13048,9939],{"class":1121},[1104,13050,13051],{"class":1572},"{% trans \"Current Language Information\" %}",[1104,13053,9945],{"class":1121},[1104,13055,1035],{"class":9880},[1104,13057,9898],{"class":1121},[1104,13059,13060,13062,13065,13067,13069,13071,13074,13076],{"class":1106,"line":2657},[1104,13061,9923],{"class":1121},[1104,13063,13064],{"class":9880},"dl",[1104,13066,9885],{"class":9884},[1104,13068,1689],{"class":1121},[1104,13070,9890],{"class":1131},[1104,13072,13073],{"class":1135},"info-list",[1104,13075,9890],{"class":1131},[1104,13077,9898],{"class":1121},[1104,13079,13080,13082,13085,13087,13090,13092,13094],{"class":1106,"line":2662},[1104,13081,10104],{"class":1121},[1104,13083,13084],{"class":9880},"dt",[1104,13086,9939],{"class":1121},[1104,13088,13089],{"class":1572},"{% trans \"Active Language\" %}",[1104,13091,9945],{"class":1121},[1104,13093,13084],{"class":9880},[1104,13095,9898],{"class":1121},[1104,13097,13098,13100,13103,13105,13108,13110,13112],{"class":1106,"line":2668},[1104,13099,10104],{"class":1121},[1104,13101,13102],{"class":9880},"dd",[1104,13104,9939],{"class":1121},[1104,13106,13107],{"class":1572},"{{ LANGUAGE_CODE|upper }} - {% get_language_info for LANGUAGE_CODE as lang_info %}{{ lang_info.name_local }}",[1104,13109,9945],{"class":1121},[1104,13111,13102],{"class":9880},[1104,13113,9898],{"class":1121},[1104,13115,13116],{"class":1106,"line":2689},[1104,13117,2358],{"class":1572},[1104,13119,13120,13122,13124,13126,13129,13131,13133],{"class":1106,"line":2699},[1104,13121,10104],{"class":1121},[1104,13123,13084],{"class":9880},[1104,13125,9939],{"class":1121},[1104,13127,13128],{"class":1572},"{% trans \"Last Detection Source\" %}",[1104,13130,9945],{"class":1121},[1104,13132,13084],{"class":9880},[1104,13134,9898],{"class":1121},[1104,13136,13137,13139,13141,13143,13146,13148,13150],{"class":1106,"line":2707},[1104,13138,10104],{"class":1121},[1104,13140,13102],{"class":9880},[1104,13142,9939],{"class":1121},[1104,13144,13145],{"class":1572},"{{ preference.get_detection_source_display|default:\"—\" }}",[1104,13147,9945],{"class":1121},[1104,13149,13102],{"class":9880},[1104,13151,9898],{"class":1121},[1104,13153,13154],{"class":1106,"line":2712},[1104,13155,2358],{"class":1572},[1104,13157,13158,13160,13162,13164,13167,13169,13171],{"class":1106,"line":2718},[1104,13159,10104],{"class":1121},[1104,13161,13084],{"class":9880},[1104,13163,9939],{"class":1121},[1104,13165,13166],{"class":1572},"{% trans \"Last Detected Language\" %}",[1104,13168,9945],{"class":1121},[1104,13170,13084],{"class":9880},[1104,13172,9898],{"class":1121},[1104,13174,13175,13177,13179,13181,13184,13186,13188],{"class":1106,"line":2748},[1104,13176,10104],{"class":1121},[1104,13178,13102],{"class":9880},[1104,13180,9939],{"class":1121},[1104,13182,13183],{"class":1572},"{{ preference.last_detected_language|upper|default:\"—\" }}",[1104,13185,9945],{"class":1121},[1104,13187,13102],{"class":9880},[1104,13189,9898],{"class":1121},[1104,13191,13192],{"class":1106,"line":2771},[1104,13193,2358],{"class":1572},[1104,13195,13196,13198,13200,13202,13205,13207,13209],{"class":1106,"line":2779},[1104,13197,10104],{"class":1121},[1104,13199,13084],{"class":9880},[1104,13201,9939],{"class":1121},[1104,13203,13204],{"class":1572},"{% trans \"Browser Languages\" %}",[1104,13206,9945],{"class":1121},[1104,13208,13084],{"class":9880},[1104,13210,9898],{"class":1121},[1104,13212,13213,13215,13217,13219,13221,13223,13226,13228,13230,13233,13235,13237],{"class":1106,"line":2784},[1104,13214,10104],{"class":1121},[1104,13216,13102],{"class":9880},[1104,13218,12257],{"class":9884},[1104,13220,1689],{"class":1121},[1104,13222,9890],{"class":1131},[1104,13224,13225],{"class":1135},"browser-languages",[1104,13227,9890],{"class":1131},[1104,13229,9939],{"class":1121},[1104,13231,13232],{"class":1572},"{% trans \"Detecting...\" %}",[1104,13234,9945],{"class":1121},[1104,13236,13102],{"class":9880},[1104,13238,9898],{"class":1121},[1104,13240,13241,13243,13245],{"class":1106,"line":2790},[1104,13242,10370],{"class":1121},[1104,13244,13064],{"class":9880},[1104,13246,9898],{"class":1121},[1104,13248,13249,13251,13253],{"class":1106,"line":2811},[1104,13250,10010],{"class":1121},[1104,13252,9881],{"class":9880},[1104,13254,9898],{"class":1121},[1104,13256,13257,13259,13261],{"class":1106,"line":2821},[1104,13258,9945],{"class":1121},[1104,13260,9881],{"class":9880},[1104,13262,9898],{"class":1121},[1104,13264,13265],{"class":1106,"line":2829},[1104,13266,1243],{"emptyLinePlaceholder":1242},[1104,13268,13269,13271,13273],{"class":1106,"line":2834},[1104,13270,9877],{"class":1121},[1104,13272,10401],{"class":9880},[1104,13274,9898],{"class":1121},[1104,13276,13277],{"class":1106,"line":2840},[1104,13278,13279],{"class":1110},"// Display browser language preferences\n",[1104,13281,13282,13284,13286,13288,13290,13292,13294,13296,13298,13300,13302],{"class":1106,"line":2867},[1104,13283,10409],{"class":10408},[1104,13285,1576],{"class":1121},[1104,13287,10414],{"class":1816},[1104,13289,1701],{"class":10417},[1104,13291,1139],{"class":1131},[1104,13293,10422],{"class":1135},[1104,13295,1139],{"class":1131},[1104,13297,1167],{"class":1121},[1104,13299,10429],{"class":1717},[1104,13301,10432],{"class":1121},[1104,13303,3239],{"class":1121},[1104,13305,13306,13308,13311,13313,13316,13318,13320,13323,13325,13328,13330,13332,13334],{"class":1106,"line":2872},[1104,13307,10439],{"class":1717},[1104,13309,13310],{"class":10408}," browserLangs",[1104,13312,1122],{"class":1121},[1104,13314,13315],{"class":10408}," navigator",[1104,13317,1576],{"class":1121},[1104,13319,7140],{"class":10408},[1104,13321,13322],{"class":1437}," ||",[1104,13324,3784],{"class":10455},[1104,13326,13327],{"class":10408},"navigator",[1104,13329,1576],{"class":1121},[1104,13331,1917],{"class":10408},[1104,13333,2383],{"class":10455},[1104,13335,10467],{"class":1121},[1104,13337,13338,13340,13343,13345,13347,13349,13352,13354,13356,13358,13360,13362],{"class":1106,"line":2890},[1104,13339,10439],{"class":1717},[1104,13341,13342],{"class":10408}," browserLangsElement",[1104,13344,1122],{"class":1121},[1104,13346,10447],{"class":10408},[1104,13348,1576],{"class":1121},[1104,13350,13351],{"class":1816},"getElementById",[1104,13353,1701],{"class":10455},[1104,13355,1139],{"class":1131},[1104,13357,13225],{"class":1135},[1104,13359,1139],{"class":1131},[1104,13361,1061],{"class":10455},[1104,13363,10467],{"class":1121},[1104,13365,13366],{"class":1106,"line":2900},[1104,13367,1748],{"class":1800},[1104,13369,13370,13372,13374,13377,13379,13382,13384,13386,13388],{"class":1106,"line":2940},[1104,13371,8022],{"class":1568},[1104,13373,2415],{"class":10455},[1104,13375,13376],{"class":10408},"browserLangs",[1104,13378,1576],{"class":1121},[1104,13380,13381],{"class":1704},"length",[1104,13383,2985],{"class":1121},[1104,13385,11581],{"class":1433},[1104,13387,1061],{"class":10455},[1104,13389,3239],{"class":1121},[1104,13391,13392,13395,13397,13400,13402,13404,13406,13409,13411,13413,13416,13418,13420],{"class":1106,"line":2965},[1104,13393,13394],{"class":10408},"        browserLangsElement",[1104,13396,1576],{"class":1121},[1104,13398,13399],{"class":10408},"textContent",[1104,13401,1122],{"class":1121},[1104,13403,13310],{"class":10408},[1104,13405,1576],{"class":1121},[1104,13407,13408],{"class":1816},"join",[1104,13410,1701],{"class":10455},[1104,13412,1139],{"class":1131},[1104,13414,13415],{"class":1135},", ",[1104,13417,1139],{"class":1131},[1104,13419,1061],{"class":10455},[1104,13421,10467],{"class":1121},[1104,13423,13424,13426,13428],{"class":1106,"line":2970},[1104,13425,10591],{"class":1121},[1104,13427,9590],{"class":1568},[1104,13429,3239],{"class":1121},[1104,13431,13432,13434,13436,13438,13440,13442,13445,13447],{"class":1106,"line":2996},[1104,13433,13394],{"class":10408},[1104,13435,1576],{"class":1121},[1104,13437,13399],{"class":10408},[1104,13439,1122],{"class":1121},[1104,13441,1259],{"class":1131},[1104,13443,13444],{"class":1135},"{% trans \"Not available\" %}",[1104,13446,1139],{"class":1131},[1104,13448,10467],{"class":1121},[1104,13450,13451],{"class":1106,"line":3013},[1104,13452,9459],{"class":1121},[1104,13454,13455],{"class":1106,"line":3031},[1104,13456,1748],{"class":1800},[1104,13458,13459],{"class":1106,"line":3040},[1104,13460,13461],{"class":1110},"    // Handle primary language change\n",[1104,13463,13464,13466,13469,13471,13473,13475,13477,13479,13481,13483,13485,13487],{"class":1106,"line":3045},[1104,13465,10439],{"class":1717},[1104,13467,13468],{"class":10408}," primarySelect",[1104,13470,1122],{"class":1121},[1104,13472,10447],{"class":10408},[1104,13474,1576],{"class":1121},[1104,13476,13351],{"class":1816},[1104,13478,1701],{"class":10455},[1104,13480,1139],{"class":1131},[1104,13482,5233],{"class":1135},[1104,13484,1139],{"class":1131},[1104,13486,1061],{"class":10455},[1104,13488,10467],{"class":1121},[1104,13490,13491,13493,13496,13498,13500,13502,13504,13506,13508,13511,13513,13515],{"class":1106,"line":3052},[1104,13492,10439],{"class":1717},[1104,13494,13495],{"class":10408}," secondaryCheckboxes",[1104,13497,1122],{"class":1121},[1104,13499,10447],{"class":10408},[1104,13501,1576],{"class":1121},[1104,13503,10756],{"class":1816},[1104,13505,1701],{"class":10455},[1104,13507,1139],{"class":1131},[1104,13509,13510],{"class":1135},"input[name=\"secondary_languages\"]",[1104,13512,1139],{"class":1131},[1104,13514,1061],{"class":10455},[1104,13516,10467],{"class":1121},[1104,13518,13519],{"class":1106,"line":3057},[1104,13520,1748],{"class":1800},[1104,13522,13523,13526,13528,13530,13532,13534,13537,13539,13541,13543,13545],{"class":1106,"line":3075},[1104,13524,13525],{"class":10408},"    primarySelect",[1104,13527,1576],{"class":1121},[1104,13529,10414],{"class":1816},[1104,13531,1701],{"class":10455},[1104,13533,1139],{"class":1131},[1104,13535,13536],{"class":1135},"change",[1104,13538,1139],{"class":1131},[1104,13540,1167],{"class":1121},[1104,13542,10429],{"class":1717},[1104,13544,10432],{"class":1121},[1104,13546,3239],{"class":1121},[1104,13548,13549,13552,13555,13557,13559,13561,13563],{"class":1106,"line":3085},[1104,13550,13551],{"class":1717},"        const",[1104,13553,13554],{"class":10408}," selectedPrimary",[1104,13556,1122],{"class":1121},[1104,13558,10853],{"class":10852},[1104,13560,1576],{"class":1121},[1104,13562,10858],{"class":10408},[1104,13564,10467],{"class":1121},[1104,13566,13567],{"class":1106,"line":3093},[1104,13568,1866],{"class":1800},[1104,13570,13571],{"class":1106,"line":3121},[1104,13572,13573],{"class":1110},"        // Uncheck the primary language from secondary languages\n",[1104,13575,13576,13579,13581,13583,13585,13587,13589],{"class":1106,"line":3126},[1104,13577,13578],{"class":10408},"        secondaryCheckboxes",[1104,13580,1576],{"class":1121},[1104,13582,10783],{"class":1816},[1104,13584,1701],{"class":10455},[1104,13586,12499],{"class":2255},[1104,13588,10791],{"class":10790},[1104,13590,3239],{"class":1121},[1104,13592,13593,13595,13597,13599,13601,13603,13606,13608,13610],{"class":1106,"line":3132},[1104,13594,2205],{"class":1568},[1104,13596,2415],{"class":10455},[1104,13598,12499],{"class":10408},[1104,13600,1576],{"class":1121},[1104,13602,10858],{"class":10408},[1104,13604,13605],{"class":1437}," ===",[1104,13607,13554],{"class":10408},[1104,13609,1061],{"class":10455},[1104,13611,3239],{"class":1121},[1104,13613,13614,13617,13619,13622,13624,13628],{"class":1106,"line":3153},[1104,13615,13616],{"class":10408},"                checkbox",[1104,13618,1576],{"class":1121},[1104,13620,13621],{"class":10408},"checked",[1104,13623,1122],{"class":1121},[1104,13625,13627],{"class":13626},"sq3J1"," false",[1104,13629,10467],{"class":1121},[1104,13631,13632,13634,13636,13638,13640,13643],{"class":1106,"line":3166},[1104,13633,13616],{"class":10408},[1104,13635,1576],{"class":1121},[1104,13637,11925],{"class":10408},[1104,13639,1122],{"class":1121},[1104,13641,13642],{"class":13626}," true",[1104,13644,10467],{"class":1121},[1104,13646,13647,13649,13651],{"class":1106,"line":3173},[1104,13648,11071],{"class":1121},[1104,13650,9590],{"class":1568},[1104,13652,3239],{"class":1121},[1104,13654,13655,13657,13659,13661,13663,13665],{"class":1106,"line":3178},[1104,13656,13616],{"class":10408},[1104,13658,1576],{"class":1121},[1104,13660,11925],{"class":10408},[1104,13662,1122],{"class":1121},[1104,13664,13627],{"class":13626},[1104,13666,10467],{"class":1121},[1104,13668,13669],{"class":1106,"line":3184},[1104,13670,3478],{"class":1121},[1104,13672,13673,13675,13677],{"class":1106,"line":3197},[1104,13674,11272],{"class":1121},[1104,13676,1061],{"class":10455},[1104,13678,10467],{"class":1121},[1104,13680,13681,13683,13685],{"class":1106,"line":3220},[1104,13682,10591],{"class":1121},[1104,13684,1061],{"class":10455},[1104,13686,10467],{"class":1121},[1104,13688,13689],{"class":1106,"line":3225},[1104,13690,1748],{"class":1800},[1104,13692,13693],{"class":1106,"line":3231},[1104,13694,13695],{"class":1110},"    // Trigger change event on load\n",[1104,13697,13698,13700,13702,13705,13707,13710,13713,13715,13717,13719,13721,13723],{"class":1106,"line":3242},[1104,13699,13525],{"class":10408},[1104,13701,1576],{"class":1121},[1104,13703,13704],{"class":1816},"dispatchEvent",[1104,13706,1701],{"class":10455},[1104,13708,13709],{"class":1437},"new",[1104,13711,13712],{"class":1816}," Event",[1104,13714,1701],{"class":10455},[1104,13716,1139],{"class":1131},[1104,13718,13536],{"class":1135},[1104,13720,1139],{"class":1131},[1104,13722,10663],{"class":10455},[1104,13724,10467],{"class":1121},[1104,13726,13727,13729,13731],{"class":1106,"line":3266},[1104,13728,1991],{"class":1121},[1104,13730,1061],{"class":10417},[1104,13732,10467],{"class":1121},[1104,13734,13735,13737,13739],{"class":1106,"line":3289},[1104,13736,9945],{"class":1121},[1104,13738,10401],{"class":9880},[1104,13740,9898],{"class":1121},[1104,13742,13743],{"class":1106,"line":3312},[1104,13744,13745],{"class":1572},"{% endblock %}\n",[1030,13747,13749],{"id":13748},"url-configuration","URL Configuration",[1035,13751,13753],{"id":13752},"language-aware-urls","Language-Aware URLs",[1095,13755,13757],{"className":1097,"code":13756,"language":1099,"meta":1100,"style":1100},"# urls.py\nfrom django.conf import settings\nfrom django.conf.urls.i18n import i18n_patterns\nfrom django.urls import path, include\nfrom django.views.i18n import set_language\nfrom . import views\n\n# Non-translatable URLs\nurlpatterns = [\n    # Language switching\n    path('set-language/', set_language, name='set_language'),\n    path('api/set-language/', views.api_set_language, name='api_set_language'),\n    \n    # API endpoints (no language prefix)\n    path('api/', include('api.urls')),\n    \n    # Health checks and admin\n    path('health/', include('health.urls')),\n    path('admin/', admin.site.urls),\n]\n\n# Translatable URLs with language prefix\nurlpatterns += i18n_patterns(\n    path('', include('blog.urls')),\n    path('accounts/', include('accounts.urls')),\n    path('preferences/language/', views.language_preferences, name='language_preferences'),\n    \n    # Prefix default language in URLs (optional)\n    prefix_default_language=False,\n)\n\n# Custom 404 handler for language-aware URLs\nhandler404 = 'myapp.views.custom_404'\n",[1043,13758,13759,13764,13778,13804,13824,13843,13855,13859,13864,13873,13878,13911,13948,13952,13957,13986,13990,13995,14023,14052,14056,14060,14065,14076,14100,14128,14163,14167,14172,14184,14188,14192,14197],{"__ignoreMap":1100},[1104,13760,13761],{"class":1106,"line":1107},[1104,13762,13763],{"class":1110},"# urls.py\n",[1104,13765,13766,13768,13770,13772,13774,13776],{"class":1106,"line":1114},[1104,13767,1569],{"class":1568},[1104,13769,1573],{"class":1572},[1104,13771,1576],{"class":1121},[1104,13773,1617],{"class":1572},[1104,13775,1587],{"class":1568},[1104,13777,1622],{"class":1572},[1104,13779,13780,13782,13784,13786,13789,13791,13794,13796,13799,13801],{"class":1106,"line":1128},[1104,13781,1569],{"class":1568},[1104,13783,1573],{"class":1572},[1104,13785,1576],{"class":1121},[1104,13787,13788],{"class":1572},"conf",[1104,13790,1576],{"class":1121},[1104,13792,13793],{"class":1572},"urls",[1104,13795,1576],{"class":1121},[1104,13797,13798],{"class":1572},"i18n ",[1104,13800,1587],{"class":1568},[1104,13802,13803],{"class":1572}," i18n_patterns\n",[1104,13805,13806,13808,13810,13812,13814,13816,13819,13821],{"class":1106,"line":1145},[1104,13807,1569],{"class":1568},[1104,13809,1573],{"class":1572},[1104,13811,1576],{"class":1121},[1104,13813,7764],{"class":1572},[1104,13815,1587],{"class":1568},[1104,13817,13818],{"class":1572}," path",[1104,13820,1167],{"class":1121},[1104,13822,13823],{"class":1572}," include\n",[1104,13825,13826,13828,13830,13832,13834,13836,13838,13840],{"class":1106,"line":1157},[1104,13827,1569],{"class":1568},[1104,13829,1573],{"class":1572},[1104,13831,1576],{"class":1121},[1104,13833,7810],{"class":1572},[1104,13835,1576],{"class":1121},[1104,13837,13798],{"class":1572},[1104,13839,1587],{"class":1568},[1104,13841,13842],{"class":1572}," set_language\n",[1104,13844,13845,13847,13849,13852],{"class":1106,"line":1173},[1104,13846,1569],{"class":1568},[1104,13848,7022],{"class":1121},[1104,13850,13851],{"class":1568}," import",[1104,13853,13854],{"class":1572}," views\n",[1104,13856,13857],{"class":1106,"line":1185},[1104,13858,1243],{"emptyLinePlaceholder":1242},[1104,13860,13861],{"class":1106,"line":1197},[1104,13862,13863],{"class":1110},"# Non-translatable URLs\n",[1104,13865,13866,13869,13871],{"class":1106,"line":1209},[1104,13867,13868],{"class":1572},"urlpatterns ",[1104,13870,1689],{"class":1121},[1104,13872,1125],{"class":1121},[1104,13874,13875],{"class":1106,"line":1221},[1104,13876,13877],{"class":1110},"    # Language switching\n",[1104,13879,13880,13883,13885,13887,13890,13892,13894,13896,13898,13900,13902,13904,13907,13909],{"class":1106,"line":1233},[1104,13881,13882],{"class":1697},"    path",[1104,13884,1701],{"class":1121},[1104,13886,1139],{"class":1131},[1104,13888,13889],{"class":1135},"set-language/",[1104,13891,1139],{"class":1131},[1104,13893,1167],{"class":1121},[1104,13895,7913],{"class":1697},[1104,13897,1167],{"class":1121},[1104,13899,10110],{"class":2255},[1104,13901,1689],{"class":1121},[1104,13903,1139],{"class":1131},[1104,13905,13906],{"class":1135},"set_language",[1104,13908,1139],{"class":1131},[1104,13910,1299],{"class":1121},[1104,13912,13913,13915,13917,13919,13922,13924,13926,13929,13931,13934,13936,13938,13940,13942,13944,13946],{"class":1106,"line":1239},[1104,13914,13882],{"class":1697},[1104,13916,1701],{"class":1121},[1104,13918,1139],{"class":1131},[1104,13920,13921],{"class":1135},"api/set-language/",[1104,13923,1139],{"class":1131},[1104,13925,1167],{"class":1121},[1104,13927,13928],{"class":1697}," views",[1104,13930,1576],{"class":1121},[1104,13932,13933],{"class":1800},"api_set_language",[1104,13935,1167],{"class":1121},[1104,13937,10110],{"class":2255},[1104,13939,1689],{"class":1121},[1104,13941,1139],{"class":1131},[1104,13943,13933],{"class":1135},[1104,13945,1139],{"class":1131},[1104,13947,1299],{"class":1121},[1104,13949,13950],{"class":1106,"line":1246},[1104,13951,1748],{"class":1572},[1104,13953,13954],{"class":1106,"line":1252},[1104,13955,13956],{"class":1110},"    # API endpoints (no language prefix)\n",[1104,13958,13959,13961,13963,13965,13968,13970,13972,13975,13977,13979,13982,13984],{"class":1106,"line":1268},[1104,13960,13882],{"class":1697},[1104,13962,1701],{"class":1121},[1104,13964,1139],{"class":1131},[1104,13966,13967],{"class":1135},"api/",[1104,13969,1139],{"class":1131},[1104,13971,1167],{"class":1121},[1104,13973,13974],{"class":1697}," include",[1104,13976,1701],{"class":1121},[1104,13978,1139],{"class":1131},[1104,13980,13981],{"class":1135},"api.urls",[1104,13983,1139],{"class":1131},[1104,13985,4888],{"class":1121},[1104,13987,13988],{"class":1106,"line":1278},[1104,13989,1748],{"class":1572},[1104,13991,13992],{"class":1106,"line":1302},[1104,13993,13994],{"class":1110},"    # Health checks and admin\n",[1104,13996,13997,13999,14001,14003,14006,14008,14010,14012,14014,14016,14019,14021],{"class":1106,"line":1325},[1104,13998,13882],{"class":1697},[1104,14000,1701],{"class":1121},[1104,14002,1139],{"class":1131},[1104,14004,14005],{"class":1135},"health/",[1104,14007,1139],{"class":1131},[1104,14009,1167],{"class":1121},[1104,14011,13974],{"class":1697},[1104,14013,1701],{"class":1121},[1104,14015,1139],{"class":1131},[1104,14017,14018],{"class":1135},"health.urls",[1104,14020,1139],{"class":1131},[1104,14022,4888],{"class":1121},[1104,14024,14025,14027,14029,14031,14034,14036,14038,14041,14043,14046,14048,14050],{"class":1106,"line":1348},[1104,14026,13882],{"class":1697},[1104,14028,1701],{"class":1121},[1104,14030,1139],{"class":1131},[1104,14032,14033],{"class":1135},"admin/",[1104,14035,1139],{"class":1131},[1104,14037,1167],{"class":1121},[1104,14039,14040],{"class":1697}," admin",[1104,14042,1576],{"class":1121},[1104,14044,14045],{"class":1800},"site",[1104,14047,1576],{"class":1121},[1104,14049,13793],{"class":1800},[1104,14051,1299],{"class":1121},[1104,14053,14054],{"class":1106,"line":1371},[1104,14055,1236],{"class":1121},[1104,14057,14058],{"class":1106,"line":1394},[1104,14059,1243],{"emptyLinePlaceholder":1242},[1104,14061,14062],{"class":1106,"line":1399},[1104,14063,14064],{"class":1110},"# Translatable URLs with language prefix\n",[1104,14066,14067,14069,14071,14074],{"class":1106,"line":1404},[1104,14068,13868],{"class":1572},[1104,14070,6874],{"class":1121},[1104,14072,14073],{"class":1697}," i18n_patterns",[1104,14075,2229],{"class":1121},[1104,14077,14078,14080,14082,14085,14087,14089,14091,14093,14096,14098],{"class":1106,"line":1410},[1104,14079,13882],{"class":1697},[1104,14081,1701],{"class":1121},[1104,14083,14084],{"class":1131},"''",[1104,14086,1167],{"class":1121},[1104,14088,13974],{"class":1697},[1104,14090,1701],{"class":1121},[1104,14092,1139],{"class":1131},[1104,14094,14095],{"class":1135},"blog.urls",[1104,14097,1139],{"class":1131},[1104,14099,4888],{"class":1121},[1104,14101,14102,14104,14106,14108,14111,14113,14115,14117,14119,14121,14124,14126],{"class":1106,"line":1425},[1104,14103,13882],{"class":1697},[1104,14105,1701],{"class":1121},[1104,14107,1139],{"class":1131},[1104,14109,14110],{"class":1135},"accounts/",[1104,14112,1139],{"class":1131},[1104,14114,1167],{"class":1121},[1104,14116,13974],{"class":1697},[1104,14118,1701],{"class":1121},[1104,14120,1139],{"class":1131},[1104,14122,14123],{"class":1135},"accounts.urls",[1104,14125,1139],{"class":1131},[1104,14127,4888],{"class":1121},[1104,14129,14130,14132,14134,14136,14139,14141,14143,14145,14147,14149,14151,14153,14155,14157,14159,14161],{"class":1106,"line":1456},[1104,14131,13882],{"class":1697},[1104,14133,1701],{"class":1121},[1104,14135,1139],{"class":1131},[1104,14137,14138],{"class":1135},"preferences/language/",[1104,14140,1139],{"class":1131},[1104,14142,1167],{"class":1121},[1104,14144,13928],{"class":1697},[1104,14146,1576],{"class":1121},[1104,14148,9402],{"class":1800},[1104,14150,1167],{"class":1121},[1104,14152,10110],{"class":2255},[1104,14154,1689],{"class":1121},[1104,14156,1139],{"class":1131},[1104,14158,9402],{"class":1135},[1104,14160,1139],{"class":1131},[1104,14162,1299],{"class":1121},[1104,14164,14165],{"class":1106,"line":1468},[1104,14166,1748],{"class":1697},[1104,14168,14169],{"class":1106,"line":1483},[1104,14170,14171],{"class":1110},"    # Prefix default language in URLs (optional)\n",[1104,14173,14174,14177,14179,14182],{"class":1106,"line":1497},[1104,14175,14176],{"class":2255},"    prefix_default_language",[1104,14178,1689],{"class":1121},[1104,14180,14181],{"class":1464},"False",[1104,14183,1142],{"class":1121},[1104,14185,14186],{"class":1106,"line":1508},[1104,14187,1708],{"class":1121},[1104,14189,14190],{"class":1106,"line":1523},[1104,14191,1243],{"emptyLinePlaceholder":1242},[1104,14193,14194],{"class":1106,"line":1528},[1104,14195,14196],{"class":1110},"# Custom 404 handler for language-aware URLs\n",[1104,14198,14199,14202,14204,14206,14209],{"class":1106,"line":1534},[1104,14200,14201],{"class":1572},"handler404 ",[1104,14203,1689],{"class":1121},[1104,14205,1259],{"class":1131},[1104,14207,14208],{"class":1135},"myapp.views.custom_404",[1104,14210,1265],{"class":1131},[1035,14212,14214],{"id":14213},"language-specific-url-patterns","Language-Specific URL Patterns",[1095,14216,14218],{"className":1097,"code":14217,"language":1099,"meta":1100,"style":1100},"# blog/urls.py\nfrom django.urls import path\nfrom django.utils.translation import gettext_lazy as _\nfrom . import views\n\napp_name = 'blog'\n\nurlpatterns = [\n    path('', views.PostListView.as_view(), name='post_list'),\n    \n    # Translatable URL patterns\n    path(_('posts/'), views.PostListView.as_view(), name='posts'),\n    path(_('post/\u003Cslug:slug>/'), views.PostDetailView.as_view(), name='post_detail'),\n    path(_('category/\u003Cslug:slug>/'), views.CategoryView.as_view(), name='category'),\n    path(_('tag/\u003Cslug:slug>/'), views.TagView.as_view(), name='tag'),\n    path(_('archive/\u003Cint:year>/'), views.YearArchiveView.as_view(), name='year_archive'),\n    path(_('archive/\u003Cint:year>/\u003Cint:month>/'), views.MonthArchiveView.as_view(), name='month_archive'),\n    path(_('search/'), views.SearchView.as_view(), name='search'),\n    path(_('feed/'), views.PostFeedView.as_view(), name='feed'),\n]\n",[1043,14219,14220,14225,14240,14262,14272,14276,14290,14294,14302,14340,14344,14349,14394,14439,14484,14529,14574,14619,14664,14709],{"__ignoreMap":1100},[1104,14221,14222],{"class":1106,"line":1107},[1104,14223,14224],{"class":1110},"# blog/urls.py\n",[1104,14226,14227,14229,14231,14233,14235,14237],{"class":1106,"line":1114},[1104,14228,1569],{"class":1568},[1104,14230,1573],{"class":1572},[1104,14232,1576],{"class":1121},[1104,14234,7764],{"class":1572},[1104,14236,1587],{"class":1568},[1104,14238,14239],{"class":1572}," path\n",[1104,14241,14242,14244,14246,14248,14250,14252,14254,14256,14258,14260],{"class":1106,"line":1128},[1104,14243,1569],{"class":1568},[1104,14245,1573],{"class":1572},[1104,14247,1576],{"class":1121},[1104,14249,1633],{"class":1572},[1104,14251,1576],{"class":1121},[1104,14253,4431],{"class":1572},[1104,14255,1587],{"class":1568},[1104,14257,4436],{"class":1572},[1104,14259,4439],{"class":1568},[1104,14261,4442],{"class":1572},[1104,14263,14264,14266,14268,14270],{"class":1106,"line":1145},[1104,14265,1569],{"class":1568},[1104,14267,7022],{"class":1121},[1104,14269,13851],{"class":1568},[1104,14271,13854],{"class":1572},[1104,14273,14274],{"class":1106,"line":1157},[1104,14275,1243],{"emptyLinePlaceholder":1242},[1104,14277,14278,14281,14283,14285,14288],{"class":1106,"line":1173},[1104,14279,14280],{"class":1572},"app_name ",[1104,14282,1689],{"class":1121},[1104,14284,1259],{"class":1131},[1104,14286,14287],{"class":1135},"blog",[1104,14289,1265],{"class":1131},[1104,14291,14292],{"class":1106,"line":1185},[1104,14293,1243],{"emptyLinePlaceholder":1242},[1104,14295,14296,14298,14300],{"class":1106,"line":1197},[1104,14297,13868],{"class":1572},[1104,14299,1689],{"class":1121},[1104,14301,1125],{"class":1121},[1104,14303,14304,14306,14308,14310,14312,14314,14316,14319,14321,14324,14327,14329,14331,14333,14336,14338],{"class":1106,"line":1209},[1104,14305,13882],{"class":1697},[1104,14307,1701],{"class":1121},[1104,14309,14084],{"class":1131},[1104,14311,1167],{"class":1121},[1104,14313,13928],{"class":1697},[1104,14315,1576],{"class":1121},[1104,14317,14318],{"class":1800},"PostListView",[1104,14320,1576],{"class":1121},[1104,14322,14323],{"class":1697},"as_view",[1104,14325,14326],{"class":1121},"(),",[1104,14328,10110],{"class":2255},[1104,14330,1689],{"class":1121},[1104,14332,1139],{"class":1131},[1104,14334,14335],{"class":1135},"post_list",[1104,14337,1139],{"class":1131},[1104,14339,1299],{"class":1121},[1104,14341,14342],{"class":1106,"line":1221},[1104,14343,1748],{"class":1572},[1104,14345,14346],{"class":1106,"line":1233},[1104,14347,14348],{"class":1110},"    # Translatable URL patterns\n",[1104,14350,14351,14353,14355,14357,14359,14361,14364,14366,14369,14371,14373,14375,14377,14379,14381,14383,14385,14387,14390,14392],{"class":1106,"line":1239},[1104,14352,13882],{"class":1697},[1104,14354,1701],{"class":1121},[1104,14356,4604],{"class":1697},[1104,14358,1701],{"class":1121},[1104,14360,1139],{"class":1131},[1104,14362,14363],{"class":1135},"posts/",[1104,14365,1139],{"class":1131},[1104,14367,14368],{"class":1121},"),",[1104,14370,13928],{"class":1697},[1104,14372,1576],{"class":1121},[1104,14374,14318],{"class":1800},[1104,14376,1576],{"class":1121},[1104,14378,14323],{"class":1697},[1104,14380,14326],{"class":1121},[1104,14382,10110],{"class":2255},[1104,14384,1689],{"class":1121},[1104,14386,1139],{"class":1131},[1104,14388,14389],{"class":1135},"posts",[1104,14391,1139],{"class":1131},[1104,14393,1299],{"class":1121},[1104,14395,14396,14398,14400,14402,14404,14406,14409,14411,14413,14415,14417,14420,14422,14424,14426,14428,14430,14432,14435,14437],{"class":1106,"line":1246},[1104,14397,13882],{"class":1697},[1104,14399,1701],{"class":1121},[1104,14401,4604],{"class":1697},[1104,14403,1701],{"class":1121},[1104,14405,1139],{"class":1131},[1104,14407,14408],{"class":1135},"post/\u003Cslug:slug>/",[1104,14410,1139],{"class":1131},[1104,14412,14368],{"class":1121},[1104,14414,13928],{"class":1697},[1104,14416,1576],{"class":1121},[1104,14418,14419],{"class":1800},"PostDetailView",[1104,14421,1576],{"class":1121},[1104,14423,14323],{"class":1697},[1104,14425,14326],{"class":1121},[1104,14427,10110],{"class":2255},[1104,14429,1689],{"class":1121},[1104,14431,1139],{"class":1131},[1104,14433,14434],{"class":1135},"post_detail",[1104,14436,1139],{"class":1131},[1104,14438,1299],{"class":1121},[1104,14440,14441,14443,14445,14447,14449,14451,14454,14456,14458,14460,14462,14465,14467,14469,14471,14473,14475,14477,14480,14482],{"class":1106,"line":1252},[1104,14442,13882],{"class":1697},[1104,14444,1701],{"class":1121},[1104,14446,4604],{"class":1697},[1104,14448,1701],{"class":1121},[1104,14450,1139],{"class":1131},[1104,14452,14453],{"class":1135},"category/\u003Cslug:slug>/",[1104,14455,1139],{"class":1131},[1104,14457,14368],{"class":1121},[1104,14459,13928],{"class":1697},[1104,14461,1576],{"class":1121},[1104,14463,14464],{"class":1800},"CategoryView",[1104,14466,1576],{"class":1121},[1104,14468,14323],{"class":1697},[1104,14470,14326],{"class":1121},[1104,14472,10110],{"class":2255},[1104,14474,1689],{"class":1121},[1104,14476,1139],{"class":1131},[1104,14478,14479],{"class":1135},"category",[1104,14481,1139],{"class":1131},[1104,14483,1299],{"class":1121},[1104,14485,14486,14488,14490,14492,14494,14496,14499,14501,14503,14505,14507,14510,14512,14514,14516,14518,14520,14522,14525,14527],{"class":1106,"line":1268},[1104,14487,13882],{"class":1697},[1104,14489,1701],{"class":1121},[1104,14491,4604],{"class":1697},[1104,14493,1701],{"class":1121},[1104,14495,1139],{"class":1131},[1104,14497,14498],{"class":1135},"tag/\u003Cslug:slug>/",[1104,14500,1139],{"class":1131},[1104,14502,14368],{"class":1121},[1104,14504,13928],{"class":1697},[1104,14506,1576],{"class":1121},[1104,14508,14509],{"class":1800},"TagView",[1104,14511,1576],{"class":1121},[1104,14513,14323],{"class":1697},[1104,14515,14326],{"class":1121},[1104,14517,10110],{"class":2255},[1104,14519,1689],{"class":1121},[1104,14521,1139],{"class":1131},[1104,14523,14524],{"class":1135},"tag",[1104,14526,1139],{"class":1131},[1104,14528,1299],{"class":1121},[1104,14530,14531,14533,14535,14537,14539,14541,14544,14546,14548,14550,14552,14555,14557,14559,14561,14563,14565,14567,14570,14572],{"class":1106,"line":1278},[1104,14532,13882],{"class":1697},[1104,14534,1701],{"class":1121},[1104,14536,4604],{"class":1697},[1104,14538,1701],{"class":1121},[1104,14540,1139],{"class":1131},[1104,14542,14543],{"class":1135},"archive/\u003Cint:year>/",[1104,14545,1139],{"class":1131},[1104,14547,14368],{"class":1121},[1104,14549,13928],{"class":1697},[1104,14551,1576],{"class":1121},[1104,14553,14554],{"class":1800},"YearArchiveView",[1104,14556,1576],{"class":1121},[1104,14558,14323],{"class":1697},[1104,14560,14326],{"class":1121},[1104,14562,10110],{"class":2255},[1104,14564,1689],{"class":1121},[1104,14566,1139],{"class":1131},[1104,14568,14569],{"class":1135},"year_archive",[1104,14571,1139],{"class":1131},[1104,14573,1299],{"class":1121},[1104,14575,14576,14578,14580,14582,14584,14586,14589,14591,14593,14595,14597,14600,14602,14604,14606,14608,14610,14612,14615,14617],{"class":1106,"line":1302},[1104,14577,13882],{"class":1697},[1104,14579,1701],{"class":1121},[1104,14581,4604],{"class":1697},[1104,14583,1701],{"class":1121},[1104,14585,1139],{"class":1131},[1104,14587,14588],{"class":1135},"archive/\u003Cint:year>/\u003Cint:month>/",[1104,14590,1139],{"class":1131},[1104,14592,14368],{"class":1121},[1104,14594,13928],{"class":1697},[1104,14596,1576],{"class":1121},[1104,14598,14599],{"class":1800},"MonthArchiveView",[1104,14601,1576],{"class":1121},[1104,14603,14323],{"class":1697},[1104,14605,14326],{"class":1121},[1104,14607,10110],{"class":2255},[1104,14609,1689],{"class":1121},[1104,14611,1139],{"class":1131},[1104,14613,14614],{"class":1135},"month_archive",[1104,14616,1139],{"class":1131},[1104,14618,1299],{"class":1121},[1104,14620,14621,14623,14625,14627,14629,14631,14634,14636,14638,14640,14642,14645,14647,14649,14651,14653,14655,14657,14660,14662],{"class":1106,"line":1325},[1104,14622,13882],{"class":1697},[1104,14624,1701],{"class":1121},[1104,14626,4604],{"class":1697},[1104,14628,1701],{"class":1121},[1104,14630,1139],{"class":1131},[1104,14632,14633],{"class":1135},"search/",[1104,14635,1139],{"class":1131},[1104,14637,14368],{"class":1121},[1104,14639,13928],{"class":1697},[1104,14641,1576],{"class":1121},[1104,14643,14644],{"class":1800},"SearchView",[1104,14646,1576],{"class":1121},[1104,14648,14323],{"class":1697},[1104,14650,14326],{"class":1121},[1104,14652,10110],{"class":2255},[1104,14654,1689],{"class":1121},[1104,14656,1139],{"class":1131},[1104,14658,14659],{"class":1135},"search",[1104,14661,1139],{"class":1131},[1104,14663,1299],{"class":1121},[1104,14665,14666,14668,14670,14672,14674,14676,14679,14681,14683,14685,14687,14690,14692,14694,14696,14698,14700,14702,14705,14707],{"class":1106,"line":1348},[1104,14667,13882],{"class":1697},[1104,14669,1701],{"class":1121},[1104,14671,4604],{"class":1697},[1104,14673,1701],{"class":1121},[1104,14675,1139],{"class":1131},[1104,14677,14678],{"class":1135},"feed/",[1104,14680,1139],{"class":1131},[1104,14682,14368],{"class":1121},[1104,14684,13928],{"class":1697},[1104,14686,1576],{"class":1121},[1104,14688,14689],{"class":1800},"PostFeedView",[1104,14691,1576],{"class":1121},[1104,14693,14323],{"class":1697},[1104,14695,14326],{"class":1121},[1104,14697,10110],{"class":2255},[1104,14699,1689],{"class":1121},[1104,14701,1139],{"class":1131},[1104,14703,14704],{"class":1135},"feed",[1104,14706,1139],{"class":1131},[1104,14708,1299],{"class":1121},[1104,14710,14711],{"class":1106,"line":1371},[1104,14712,1236],{"class":1121},[1030,14714,14716],{"id":14715},"performance-optimization","Performance Optimization",[1035,14718,14720],{"id":14719},"caching-with-language-support","Caching with Language Support",[1095,14722,14724],{"className":1097,"code":14723,"language":1099,"meta":1100,"style":1100},"# utils/cache.py\nfrom django.core.cache import cache\nfrom django.utils import translation\nfrom django.conf import settings\nimport hashlib\n\ndef get_language_cache_key(base_key, language=None):\n    \"\"\"Generate cache key with language suffix.\"\"\"\n    if language is None:\n        language = translation.get_language()\n    \n    return f\"{base_key}_{language}\"\n\ndef cache_per_language(timeout=3600):\n    \"\"\"Decorator to cache function results per language.\"\"\"\n    def decorator(func):\n        def wrapper(*args, **kwargs):\n            # Generate cache key\n            key_parts = [func.__name__]\n            key_parts.extend(str(arg) for arg in args)\n            key_parts.extend(f\"{k}={v}\" for k, v in sorted(kwargs.items()))\n            \n            base_key = hashlib.md5('_'.join(key_parts).encode()).hexdigest()\n            cache_key = get_language_cache_key(base_key)\n            \n            # Try to get from cache\n            result = cache.get(cache_key)\n            if result is not None:\n                return result\n            \n            # Execute function and cache result\n            result = func(*args, **kwargs)\n            cache.set(cache_key, result, timeout)\n            \n            return result\n        return wrapper\n    return decorator\n\n# Cache configuration for multilingual content\nCACHES = {\n    'default': {\n        'BACKEND': 'django.core.cache.backends.redis.RedisCache',\n        'LOCATION': 'redis://127.0.0.1:6379/1',\n        'KEY_PREFIX': f'myapp_{settings.LANGUAGE_CODE}',\n        'OPTIONS': {\n            'CLIENT_CLASS': 'django_redis.client.DefaultClient',\n        }\n    },\n    'translations': {\n        'BACKEND': 'django.core.cache.backends.redis.RedisCache',\n        'LOCATION': 'redis://127.0.0.1:6379/2',\n        'KEY_PREFIX': 'translations',\n        'TIMEOUT': 86400,  # 24 hours\n    }\n}\n",[1043,14725,14726,14731,14751,14765,14779,14786,14790,14812,14821,14833,14847,14851,14875,14879,14898,14907,14921,14947,14952,14969,15003,15061,15065,15110,15125,15129,15134,15155,15170,15177,15181,15186,15209,15235,15239,15245,15252,15259,15263,15268,15277,15289,15309,15329,15359,15372,15392,15396,15401,15414,15432,15451,15469,15488,15492],{"__ignoreMap":1100},[1104,14727,14728],{"class":1106,"line":1107},[1104,14729,14730],{"class":1110},"# utils/cache.py\n",[1104,14732,14733,14735,14737,14739,14742,14744,14746,14748],{"class":1106,"line":1114},[1104,14734,1569],{"class":1568},[1104,14736,1573],{"class":1572},[1104,14738,1576],{"class":1121},[1104,14740,14741],{"class":1572},"core",[1104,14743,1576],{"class":1121},[1104,14745,1638],{"class":1572},[1104,14747,1587],{"class":1568},[1104,14749,14750],{"class":1572}," cache\n",[1104,14752,14753,14755,14757,14759,14761,14763],{"class":1106,"line":1128},[1104,14754,1569],{"class":1568},[1104,14756,1573],{"class":1572},[1104,14758,1576],{"class":1121},[1104,14760,1601],{"class":1572},[1104,14762,1587],{"class":1568},[1104,14764,1606],{"class":1572},[1104,14766,14767,14769,14771,14773,14775,14777],{"class":1106,"line":1145},[1104,14768,1569],{"class":1568},[1104,14770,1573],{"class":1572},[1104,14772,1576],{"class":1121},[1104,14774,1617],{"class":1572},[1104,14776,1587],{"class":1568},[1104,14778,1622],{"class":1572},[1104,14780,14781,14783],{"class":1106,"line":1157},[1104,14782,1587],{"class":1568},[1104,14784,14785],{"class":1572}," hashlib\n",[1104,14787,14788],{"class":1106,"line":1173},[1104,14789,1243],{"emptyLinePlaceholder":1242},[1104,14791,14792,14794,14797,14799,14802,14804,14806,14808,14810],{"class":1106,"line":1185},[1104,14793,7910],{"class":1717},[1104,14795,14796],{"class":1816}," get_language_cache_key",[1104,14798,1701],{"class":1121},[1104,14800,14801],{"class":1768},"base_key",[1104,14803,1167],{"class":1121},[1104,14805,2079],{"class":1768},[1104,14807,1689],{"class":1437},[1104,14809,5157],{"class":1464},[1104,14811,1730],{"class":1121},[1104,14813,14814,14816,14819],{"class":1106,"line":1197},[1104,14815,1736],{"class":1735},[1104,14817,14818],{"class":1739},"Generate cache key with language suffix.",[1104,14820,1743],{"class":1735},[1104,14822,14823,14825,14827,14829,14831],{"class":1106,"line":1209},[1104,14824,8022],{"class":1568},[1104,14826,3513],{"class":1572},[1104,14828,5178],{"class":1437},[1104,14830,2146],{"class":1464},[1104,14832,1964],{"class":1121},[1104,14834,14835,14837,14839,14841,14843,14845],{"class":1106,"line":1221},[1104,14836,1876],{"class":1572},[1104,14838,1689],{"class":1121},[1104,14840,1853],{"class":1572},[1104,14842,1576],{"class":1121},[1104,14844,1858],{"class":1697},[1104,14846,1861],{"class":1121},[1104,14848,14849],{"class":1106,"line":1233},[1104,14850,1748],{"class":1572},[1104,14852,14853,14855,14857,14859,14861,14863,14865,14867,14869,14871,14873],{"class":1106,"line":1239},[1104,14854,8420],{"class":1568},[1104,14856,9021],{"class":1717},[1104,14858,9890],{"class":1135},[1104,14860,1986],{"class":1985},[1104,14862,14801],{"class":1572},[1104,14864,1991],{"class":1985},[1104,14866,4604],{"class":1135},[1104,14868,1986],{"class":1985},[1104,14870,1917],{"class":1572},[1104,14872,1991],{"class":1985},[1104,14874,10211],{"class":1135},[1104,14876,14877],{"class":1106,"line":1246},[1104,14878,1243],{"emptyLinePlaceholder":1242},[1104,14880,14881,14883,14886,14888,14891,14893,14896],{"class":1106,"line":1252},[1104,14882,7910],{"class":1717},[1104,14884,14885],{"class":1816}," cache_per_language",[1104,14887,1701],{"class":1121},[1104,14889,14890],{"class":1768},"timeout",[1104,14892,1689],{"class":1437},[1104,14894,14895],{"class":1433},"3600",[1104,14897,1730],{"class":1121},[1104,14899,14900,14902,14905],{"class":1106,"line":1268},[1104,14901,1736],{"class":1735},[1104,14903,14904],{"class":1739},"Decorator to cache function results per language.",[1104,14906,1743],{"class":1735},[1104,14908,14909,14911,14914,14916,14919],{"class":1106,"line":1278},[1104,14910,1753],{"class":1717},[1104,14912,14913],{"class":1816}," decorator",[1104,14915,1701],{"class":1121},[1104,14917,14918],{"class":1768},"func",[1104,14920,1730],{"class":1121},[1104,14922,14923,14926,14929,14931,14934,14937,14939,14942,14945],{"class":1106,"line":1302},[1104,14924,14925],{"class":1717},"        def",[1104,14927,14928],{"class":1816}," wrapper",[1104,14930,1701],{"class":1121},[1104,14932,14933],{"class":1437},"*",[1104,14935,14936],{"class":1768},"args",[1104,14938,1167],{"class":1121},[1104,14940,14941],{"class":1437}," **",[1104,14943,14944],{"class":1768},"kwargs",[1104,14946,1730],{"class":1121},[1104,14948,14949],{"class":1106,"line":1325},[1104,14950,14951],{"class":1110},"            # Generate cache key\n",[1104,14953,14954,14957,14959,14961,14963,14965,14967],{"class":1106,"line":1348},[1104,14955,14956],{"class":1572},"            key_parts ",[1104,14958,1689],{"class":1121},[1104,14960,3784],{"class":1121},[1104,14962,14918],{"class":1572},[1104,14964,1576],{"class":1121},[1104,14966,1705],{"class":1704},[1104,14968,1236],{"class":1121},[1104,14970,14971,14974,14976,14979,14981,14984,14986,14989,14991,14993,14996,14998,15001],{"class":1106,"line":1371},[1104,14972,14973],{"class":1572},"            key_parts",[1104,14975,1576],{"class":1121},[1104,14977,14978],{"class":1697},"extend",[1104,14980,1701],{"class":1121},[1104,14982,14983],{"class":1776},"str",[1104,14985,1701],{"class":1121},[1104,14987,14988],{"class":1697},"arg",[1104,14990,1061],{"class":1121},[1104,14992,3796],{"class":1568},[1104,14994,14995],{"class":1697}," arg ",[1104,14997,3802],{"class":1568},[1104,14999,15000],{"class":1697}," args",[1104,15002,1708],{"class":1121},[1104,15004,15005,15007,15009,15011,15013,15015,15017,15019,15022,15024,15026,15028,15031,15033,15035,15037,15040,15042,15045,15047,15050,15052,15054,15056,15058],{"class":1106,"line":1394},[1104,15006,14973],{"class":1572},[1104,15008,1576],{"class":1121},[1104,15010,14978],{"class":1697},[1104,15012,1701],{"class":1121},[1104,15014,1979],{"class":1717},[1104,15016,9890],{"class":1135},[1104,15018,1986],{"class":1985},[1104,15020,15021],{"class":1697},"k",[1104,15023,1991],{"class":1985},[1104,15025,1689],{"class":1135},[1104,15027,1986],{"class":1985},[1104,15029,15030],{"class":1697},"v",[1104,15032,1991],{"class":1985},[1104,15034,9890],{"class":1135},[1104,15036,3796],{"class":1568},[1104,15038,15039],{"class":1697}," k",[1104,15041,1167],{"class":1121},[1104,15043,15044],{"class":1697}," v ",[1104,15046,3802],{"class":1568},[1104,15048,15049],{"class":1756}," sorted",[1104,15051,1701],{"class":1121},[1104,15053,14944],{"class":1697},[1104,15055,1576],{"class":1121},[1104,15057,6803],{"class":1697},[1104,15059,15060],{"class":1121},"()))\n",[1104,15062,15063],{"class":1106,"line":1399},[1104,15064,2358],{"class":1572},[1104,15066,15067,15070,15072,15075,15077,15080,15082,15084,15086,15088,15090,15092,15094,15097,15099,15102,15105,15108],{"class":1106,"line":1404},[1104,15068,15069],{"class":1572},"            base_key ",[1104,15071,1689],{"class":1121},[1104,15073,15074],{"class":1572}," hashlib",[1104,15076,1576],{"class":1121},[1104,15078,15079],{"class":1697},"md5",[1104,15081,1701],{"class":1121},[1104,15083,1139],{"class":1131},[1104,15085,4604],{"class":1135},[1104,15087,1139],{"class":1131},[1104,15089,1576],{"class":1121},[1104,15091,13408],{"class":1697},[1104,15093,1701],{"class":1121},[1104,15095,15096],{"class":1697},"key_parts",[1104,15098,4086],{"class":1121},[1104,15100,15101],{"class":1697},"encode",[1104,15103,15104],{"class":1121},"()).",[1104,15106,15107],{"class":1697},"hexdigest",[1104,15109,1861],{"class":1121},[1104,15111,15112,15115,15117,15119,15121,15123],{"class":1106,"line":1410},[1104,15113,15114],{"class":1572},"            cache_key ",[1104,15116,1689],{"class":1121},[1104,15118,14796],{"class":1697},[1104,15120,1701],{"class":1121},[1104,15122,14801],{"class":1697},[1104,15124,1708],{"class":1121},[1104,15126,15127],{"class":1106,"line":1425},[1104,15128,2358],{"class":1572},[1104,15130,15131],{"class":1106,"line":1456},[1104,15132,15133],{"class":1110},"            # Try to get from cache\n",[1104,15135,15136,15139,15141,15144,15146,15148,15150,15153],{"class":1106,"line":1468},[1104,15137,15138],{"class":1572},"            result ",[1104,15140,1689],{"class":1121},[1104,15142,15143],{"class":1572}," cache",[1104,15145,1576],{"class":1121},[1104,15147,2188],{"class":1697},[1104,15149,1701],{"class":1121},[1104,15151,15152],{"class":1697},"cache_key",[1104,15154,1708],{"class":1121},[1104,15156,15157,15159,15162,15164,15166,15168],{"class":1106,"line":1483},[1104,15158,2205],{"class":1568},[1104,15160,15161],{"class":1572}," result ",[1104,15163,5178],{"class":1437},[1104,15165,3158],{"class":1437},[1104,15167,2146],{"class":1464},[1104,15169,1964],{"class":1121},[1104,15171,15172,15174],{"class":1106,"line":1497},[1104,15173,3034],{"class":1568},[1104,15175,15176],{"class":1572}," result\n",[1104,15178,15179],{"class":1106,"line":1508},[1104,15180,2358],{"class":1572},[1104,15182,15183],{"class":1106,"line":1523},[1104,15184,15185],{"class":1110},"            # Execute function and cache result\n",[1104,15187,15188,15190,15192,15195,15197,15199,15201,15203,15205,15207],{"class":1106,"line":1528},[1104,15189,15138],{"class":1572},[1104,15191,1689],{"class":1121},[1104,15193,15194],{"class":1697}," func",[1104,15196,1701],{"class":1121},[1104,15198,14933],{"class":1437},[1104,15200,14936],{"class":1697},[1104,15202,1167],{"class":1121},[1104,15204,14941],{"class":1437},[1104,15206,14944],{"class":1697},[1104,15208,1708],{"class":1121},[1104,15210,15211,15214,15216,15219,15221,15223,15225,15228,15230,15233],{"class":1106,"line":1534},[1104,15212,15213],{"class":1572},"            cache",[1104,15215,1576],{"class":1121},[1104,15217,15218],{"class":1697},"set",[1104,15220,1701],{"class":1121},[1104,15222,15152],{"class":1697},[1104,15224,1167],{"class":1121},[1104,15226,15227],{"class":1697}," result",[1104,15229,1167],{"class":1121},[1104,15231,15232],{"class":1697}," timeout",[1104,15234,1708],{"class":1121},[1104,15236,15237],{"class":1106,"line":2012},[1104,15238,2358],{"class":1572},[1104,15240,15241,15243],{"class":1106,"line":2017},[1104,15242,2522],{"class":1568},[1104,15244,15176],{"class":1572},[1104,15246,15247,15249],{"class":1106,"line":2023},[1104,15248,2445],{"class":1568},[1104,15250,15251],{"class":1572}," wrapper\n",[1104,15253,15254,15256],{"class":1106,"line":2062},[1104,15255,8420],{"class":1568},[1104,15257,15258],{"class":1572}," decorator\n",[1104,15260,15261],{"class":1106,"line":2084},[1104,15262,1243],{"emptyLinePlaceholder":1242},[1104,15264,15265],{"class":1106,"line":2089},[1104,15266,15267],{"class":1110},"# Cache configuration for multilingual content\n",[1104,15269,15270,15273,15275],{"class":1106,"line":2112},[1104,15271,15272],{"class":1117},"CACHES",[1104,15274,1122],{"class":1121},[1104,15276,3239],{"class":1121},[1104,15278,15279,15281,15283,15285,15287],{"class":1106,"line":2122},[1104,15280,1132],{"class":1131},[1104,15282,5649],{"class":1135},[1104,15284,1139],{"class":1131},[1104,15286,2924],{"class":1121},[1104,15288,3239],{"class":1121},[1104,15290,15291,15293,15296,15298,15300,15302,15305,15307],{"class":1106,"line":2151},[1104,15292,8981],{"class":1131},[1104,15294,15295],{"class":1135},"BACKEND",[1104,15297,1139],{"class":1131},[1104,15299,2924],{"class":1121},[1104,15301,1259],{"class":1131},[1104,15303,15304],{"class":1135},"django.core.cache.backends.redis.RedisCache",[1104,15306,1139],{"class":1131},[1104,15308,1142],{"class":1121},[1104,15310,15311,15313,15316,15318,15320,15322,15325,15327],{"class":1106,"line":2156},[1104,15312,8981],{"class":1131},[1104,15314,15315],{"class":1135},"LOCATION",[1104,15317,1139],{"class":1131},[1104,15319,2924],{"class":1121},[1104,15321,1259],{"class":1131},[1104,15323,15324],{"class":1135},"redis://127.0.0.1:6379/1",[1104,15326,1139],{"class":1131},[1104,15328,1142],{"class":1121},[1104,15330,15331,15333,15336,15338,15340,15342,15345,15347,15349,15351,15353,15355,15357],{"class":1106,"line":2165},[1104,15332,8981],{"class":1131},[1104,15334,15335],{"class":1135},"KEY_PREFIX",[1104,15337,1139],{"class":1131},[1104,15339,2924],{"class":1121},[1104,15341,9021],{"class":1717},[1104,15343,15344],{"class":1135},"'myapp_",[1104,15346,1986],{"class":1985},[1104,15348,2193],{"class":1572},[1104,15350,1576],{"class":1121},[1104,15352,1088],{"class":1929},[1104,15354,1991],{"class":1985},[1104,15356,1139],{"class":1135},[1104,15358,1142],{"class":1121},[1104,15360,15361,15363,15366,15368,15370],{"class":1106,"line":2171},[1104,15362,8981],{"class":1131},[1104,15364,15365],{"class":1135},"OPTIONS",[1104,15367,1139],{"class":1131},[1104,15369,2924],{"class":1121},[1104,15371,3239],{"class":1121},[1104,15373,15374,15376,15379,15381,15383,15385,15388,15390],{"class":1106,"line":2202},[1104,15375,6061],{"class":1131},[1104,15377,15378],{"class":1135},"CLIENT_CLASS",[1104,15380,1139],{"class":1131},[1104,15382,2924],{"class":1121},[1104,15384,1259],{"class":1131},[1104,15386,15387],{"class":1135},"django_redis.client.DefaultClient",[1104,15389,1139],{"class":1131},[1104,15391,1142],{"class":1121},[1104,15393,15394],{"class":1106,"line":2218},[1104,15395,6697],{"class":1121},[1104,15397,15398],{"class":1106,"line":2232},[1104,15399,15400],{"class":1121},"    },\n",[1104,15402,15403,15405,15408,15410,15412],{"class":1106,"line":2244},[1104,15404,1132],{"class":1131},[1104,15406,15407],{"class":1135},"translations",[1104,15409,1139],{"class":1131},[1104,15411,2924],{"class":1121},[1104,15413,3239],{"class":1121},[1104,15415,15416,15418,15420,15422,15424,15426,15428,15430],{"class":1106,"line":2252},[1104,15417,8981],{"class":1131},[1104,15419,15295],{"class":1135},[1104,15421,1139],{"class":1131},[1104,15423,2924],{"class":1121},[1104,15425,1259],{"class":1131},[1104,15427,15304],{"class":1135},[1104,15429,1139],{"class":1131},[1104,15431,1142],{"class":1121},[1104,15433,15434,15436,15438,15440,15442,15444,15447,15449],{"class":1106,"line":2269},[1104,15435,8981],{"class":1131},[1104,15437,15315],{"class":1135},[1104,15439,1139],{"class":1131},[1104,15441,2924],{"class":1121},[1104,15443,1259],{"class":1131},[1104,15445,15446],{"class":1135},"redis://127.0.0.1:6379/2",[1104,15448,1139],{"class":1131},[1104,15450,1142],{"class":1121},[1104,15452,15453,15455,15457,15459,15461,15463,15465,15467],{"class":1106,"line":2285},[1104,15454,8981],{"class":1131},[1104,15456,15335],{"class":1135},[1104,15458,1139],{"class":1131},[1104,15460,2924],{"class":1121},[1104,15462,1259],{"class":1131},[1104,15464,15407],{"class":1135},[1104,15466,1139],{"class":1131},[1104,15468,1142],{"class":1121},[1104,15470,15471,15473,15476,15478,15480,15483,15485],{"class":1106,"line":2301},[1104,15472,8981],{"class":1131},[1104,15474,15475],{"class":1135},"TIMEOUT",[1104,15477,1139],{"class":1131},[1104,15479,2924],{"class":1121},[1104,15481,15482],{"class":1433}," 86400",[1104,15484,1167],{"class":1121},[1104,15486,15487],{"class":1110},"  # 24 hours\n",[1104,15489,15490],{"class":1106,"line":2317},[1104,15491,9459],{"class":1121},[1104,15493,15494],{"class":1106,"line":2333},[1104,15495,11352],{"class":1121},[1035,15497,15499],{"id":15498},"middleware-performance-optimization","Middleware Performance Optimization",[1095,15501,15503],{"className":1097,"code":15502,"language":1099,"meta":1100,"style":1100},"# middleware/optimized_locale.py\nfrom django.middleware.locale import LocaleMiddleware\nfrom django.utils import translation\nfrom django.core.cache import cache\nfrom django.conf import settings\n\nclass OptimizedLocaleMiddleware(LocaleMiddleware):\n    \"\"\"Optimized locale middleware with caching.\"\"\"\n    \n    def __init__(self, get_response):\n        super().__init__(get_response)\n        self.cache_timeout = getattr(settings, 'LANGUAGE_DETECTION_CACHE_TIMEOUT', 300)\n    \n    def process_request(self, request):\n        \"\"\"Optimized language detection with caching.\"\"\"\n        # Generate cache key for this request\n        cache_key = self.get_cache_key(request)\n        \n        # Try to get language from cache\n        language = cache.get(cache_key)\n        \n        if language is None:\n            # Detect language using parent method\n            language = translation.get_language_from_request(request, check_path=True)\n            \n            # Cache the result\n            cache.set(cache_key, language, self.cache_timeout)\n        \n        # Activate language\n        translation.activate(language)\n        request.LANGUAGE_CODE = language\n    \n    def get_cache_key(self, request):\n        \"\"\"Generate cache key for language detection.\"\"\"\n        key_parts = [\n            'lang_detect',\n            request.path_info,\n            request.META.get('HTTP_ACCEPT_LANGUAGE', ''),\n            request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME, ''),\n        ]\n        \n        # Add user ID if authenticated\n        if hasattr(request, 'user') and request.user.is_authenticated:\n            key_parts.append(str(request.user.id))\n        \n        return '_'.join(str(part) for part in key_parts if part)\n",[1043,15504,15505,15510,15528,15542,15560,15574,15578,15591,15600,15604,15620,15634,15667,15671,15687,15696,15701,15721,15725,15730,15748,15752,15764,15769,15795,15799,15804,15830,15834,15838,15852,15864,15868,15885,15894,15903,15914,15925,15951,15977,15981,15985,15990,16024,16051,16055],{"__ignoreMap":1100},[1104,15506,15507],{"class":1106,"line":1107},[1104,15508,15509],{"class":1110},"# middleware/optimized_locale.py\n",[1104,15511,15512,15514,15516,15518,15520,15522,15524,15526],{"class":1106,"line":1114},[1104,15513,1569],{"class":1568},[1104,15515,1573],{"class":1572},[1104,15517,1576],{"class":1121},[1104,15519,1579],{"class":1572},[1104,15521,1576],{"class":1121},[1104,15523,1584],{"class":1572},[1104,15525,1587],{"class":1568},[1104,15527,1590],{"class":1572},[1104,15529,15530,15532,15534,15536,15538,15540],{"class":1106,"line":1128},[1104,15531,1569],{"class":1568},[1104,15533,1573],{"class":1572},[1104,15535,1576],{"class":1121},[1104,15537,1601],{"class":1572},[1104,15539,1587],{"class":1568},[1104,15541,1606],{"class":1572},[1104,15543,15544,15546,15548,15550,15552,15554,15556,15558],{"class":1106,"line":1145},[1104,15545,1569],{"class":1568},[1104,15547,1573],{"class":1572},[1104,15549,1576],{"class":1121},[1104,15551,14741],{"class":1572},[1104,15553,1576],{"class":1121},[1104,15555,1638],{"class":1572},[1104,15557,1587],{"class":1568},[1104,15559,14750],{"class":1572},[1104,15561,15562,15564,15566,15568,15570,15572],{"class":1106,"line":1157},[1104,15563,1569],{"class":1568},[1104,15565,1573],{"class":1572},[1104,15567,1576],{"class":1121},[1104,15569,1617],{"class":1572},[1104,15571,1587],{"class":1568},[1104,15573,1622],{"class":1572},[1104,15575,15576],{"class":1106,"line":1173},[1104,15577,1243],{"emptyLinePlaceholder":1242},[1104,15579,15580,15582,15585,15587,15589],{"class":1106,"line":1185},[1104,15581,1718],{"class":1717},[1104,15583,15584],{"class":1721}," OptimizedLocaleMiddleware",[1104,15586,1701],{"class":1121},[1104,15588,1045],{"class":1727},[1104,15590,1730],{"class":1121},[1104,15592,15593,15595,15598],{"class":1106,"line":1197},[1104,15594,1736],{"class":1735},[1104,15596,15597],{"class":1739},"Optimized locale middleware with caching.",[1104,15599,1743],{"class":1735},[1104,15601,15602],{"class":1106,"line":1209},[1104,15603,1748],{"class":1572},[1104,15605,15606,15608,15610,15612,15614,15616,15618],{"class":1106,"line":1221},[1104,15607,1753],{"class":1717},[1104,15609,1757],{"class":1756},[1104,15611,1701],{"class":1121},[1104,15613,1763],{"class":1762},[1104,15615,1167],{"class":1121},[1104,15617,1769],{"class":1768},[1104,15619,1730],{"class":1121},[1104,15621,15622,15624,15626,15628,15630,15632],{"class":1106,"line":1233},[1104,15623,1777],{"class":1776},[1104,15625,1780],{"class":1121},[1104,15627,1783],{"class":1756},[1104,15629,1701],{"class":1121},[1104,15631,1788],{"class":1697},[1104,15633,1708],{"class":1121},[1104,15635,15636,15638,15640,15643,15645,15647,15649,15651,15653,15655,15658,15660,15662,15665],{"class":1106,"line":1239},[1104,15637,1795],{"class":1117},[1104,15639,1576],{"class":1121},[1104,15641,15642],{"class":1800},"cache_timeout",[1104,15644,1122],{"class":1121},[1104,15646,2129],{"class":1756},[1104,15648,1701],{"class":1121},[1104,15650,2193],{"class":1697},[1104,15652,1167],{"class":1121},[1104,15654,1259],{"class":1131},[1104,15656,15657],{"class":1135},"LANGUAGE_DETECTION_CACHE_TIMEOUT",[1104,15659,1139],{"class":1131},[1104,15661,1167],{"class":1121},[1104,15663,15664],{"class":1433}," 300",[1104,15666,1708],{"class":1121},[1104,15668,15669],{"class":1106,"line":1246},[1104,15670,1748],{"class":1572},[1104,15672,15673,15675,15677,15679,15681,15683,15685],{"class":1106,"line":1252},[1104,15674,1753],{"class":1717},[1104,15676,1817],{"class":1816},[1104,15678,1701],{"class":1121},[1104,15680,1763],{"class":1762},[1104,15682,1167],{"class":1121},[1104,15684,1826],{"class":1768},[1104,15686,1730],{"class":1121},[1104,15688,15689,15691,15694],{"class":1106,"line":1268},[1104,15690,1833],{"class":1735},[1104,15692,15693],{"class":1739},"Optimized language detection with caching.",[1104,15695,1743],{"class":1735},[1104,15697,15698],{"class":1106,"line":1278},[1104,15699,15700],{"class":1110},"        # Generate cache key for this request\n",[1104,15702,15703,15706,15708,15710,15712,15715,15717,15719],{"class":1106,"line":1302},[1104,15704,15705],{"class":1572},"        cache_key ",[1104,15707,1689],{"class":1121},[1104,15709,1881],{"class":1117},[1104,15711,1576],{"class":1121},[1104,15713,15714],{"class":1697},"get_cache_key",[1104,15716,1701],{"class":1121},[1104,15718,1891],{"class":1697},[1104,15720,1708],{"class":1121},[1104,15722,15723],{"class":1106,"line":1325},[1104,15724,1866],{"class":1572},[1104,15726,15727],{"class":1106,"line":1348},[1104,15728,15729],{"class":1110},"        # Try to get language from cache\n",[1104,15731,15732,15734,15736,15738,15740,15742,15744,15746],{"class":1106,"line":1371},[1104,15733,1876],{"class":1572},[1104,15735,1689],{"class":1121},[1104,15737,15143],{"class":1572},[1104,15739,1576],{"class":1121},[1104,15741,2188],{"class":1697},[1104,15743,1701],{"class":1121},[1104,15745,15152],{"class":1697},[1104,15747,1708],{"class":1121},[1104,15749,15750],{"class":1106,"line":1394},[1104,15751,1866],{"class":1572},[1104,15753,15754,15756,15758,15760,15762],{"class":1106,"line":1399},[1104,15755,1953],{"class":1568},[1104,15757,3513],{"class":1572},[1104,15759,5178],{"class":1437},[1104,15761,2146],{"class":1464},[1104,15763,1964],{"class":1121},[1104,15765,15766],{"class":1106,"line":1404},[1104,15767,15768],{"class":1110},"            # Detect language using parent method\n",[1104,15770,15771,15773,15775,15777,15779,15781,15783,15785,15787,15789,15791,15793],{"class":1106,"line":1410},[1104,15772,3489],{"class":1572},[1104,15774,1689],{"class":1121},[1104,15776,1853],{"class":1572},[1104,15778,1576],{"class":1121},[1104,15780,1886],{"class":1697},[1104,15782,1701],{"class":1121},[1104,15784,1891],{"class":1697},[1104,15786,1167],{"class":1121},[1104,15788,2857],{"class":2255},[1104,15790,1689],{"class":1121},[1104,15792,2862],{"class":1464},[1104,15794,1708],{"class":1121},[1104,15796,15797],{"class":1106,"line":1425},[1104,15798,2358],{"class":1572},[1104,15800,15801],{"class":1106,"line":1456},[1104,15802,15803],{"class":1110},"            # Cache the result\n",[1104,15805,15806,15808,15810,15812,15814,15816,15818,15820,15822,15824,15826,15828],{"class":1106,"line":1468},[1104,15807,15213],{"class":1572},[1104,15809,1576],{"class":1121},[1104,15811,15218],{"class":1697},[1104,15813,1701],{"class":1121},[1104,15815,15152],{"class":1697},[1104,15817,1167],{"class":1121},[1104,15819,2079],{"class":1697},[1104,15821,1167],{"class":1121},[1104,15823,1881],{"class":1117},[1104,15825,1576],{"class":1121},[1104,15827,15642],{"class":1800},[1104,15829,1708],{"class":1121},[1104,15831,15832],{"class":1106,"line":1483},[1104,15833,1866],{"class":1572},[1104,15835,15836],{"class":1106,"line":1497},[1104,15837,8059],{"class":1110},[1104,15839,15840,15842,15844,15846,15848,15850],{"class":1106,"line":1508},[1104,15841,1907],{"class":1572},[1104,15843,1576],{"class":1121},[1104,15845,1912],{"class":1697},[1104,15847,1701],{"class":1121},[1104,15849,1917],{"class":1697},[1104,15851,1708],{"class":1121},[1104,15853,15854,15856,15858,15860,15862],{"class":1106,"line":1523},[1104,15855,1924],{"class":1572},[1104,15857,1576],{"class":1121},[1104,15859,1088],{"class":1929},[1104,15861,1122],{"class":1121},[1104,15863,2388],{"class":1572},[1104,15865,15866],{"class":1106,"line":1528},[1104,15867,1748],{"class":1572},[1104,15869,15870,15872,15875,15877,15879,15881,15883],{"class":1106,"line":1534},[1104,15871,1753],{"class":1717},[1104,15873,15874],{"class":1816}," get_cache_key",[1104,15876,1701],{"class":1121},[1104,15878,1763],{"class":1762},[1104,15880,1167],{"class":1121},[1104,15882,1826],{"class":1768},[1104,15884,1730],{"class":1121},[1104,15886,15887,15889,15892],{"class":1106,"line":2012},[1104,15888,1833],{"class":1735},[1104,15890,15891],{"class":1739},"Generate cache key for language detection.",[1104,15893,1743],{"class":1735},[1104,15895,15896,15899,15901],{"class":1106,"line":2017},[1104,15897,15898],{"class":1572},"        key_parts ",[1104,15900,1689],{"class":1121},[1104,15902,1125],{"class":1121},[1104,15904,15905,15907,15910,15912],{"class":1106,"line":2023},[1104,15906,6061],{"class":1131},[1104,15908,15909],{"class":1135},"lang_detect",[1104,15911,1139],{"class":1131},[1104,15913,1142],{"class":1121},[1104,15915,15916,15918,15920,15923],{"class":1106,"line":2062},[1104,15917,4008],{"class":1572},[1104,15919,1576],{"class":1121},[1104,15921,15922],{"class":1800},"path_info",[1104,15924,1142],{"class":1121},[1104,15926,15927,15929,15931,15933,15935,15937,15939,15941,15943,15945,15947,15949],{"class":1106,"line":2084},[1104,15928,4008],{"class":1572},[1104,15930,1576],{"class":1121},[1104,15932,2730],{"class":1929},[1104,15934,1576],{"class":1121},[1104,15936,2188],{"class":1697},[1104,15938,1701],{"class":1121},[1104,15940,1139],{"class":1131},[1104,15942,4076],{"class":1135},[1104,15944,1139],{"class":1131},[1104,15946,1167],{"class":1121},[1104,15948,4083],{"class":1131},[1104,15950,1299],{"class":1121},[1104,15952,15953,15955,15957,15959,15961,15963,15965,15967,15969,15971,15973,15975],{"class":1106,"line":2089},[1104,15954,4008],{"class":1572},[1104,15956,1576],{"class":1121},[1104,15958,2183],{"class":1929},[1104,15960,1576],{"class":1121},[1104,15962,2188],{"class":1697},[1104,15964,1701],{"class":1121},[1104,15966,2193],{"class":1697},[1104,15968,1576],{"class":1121},[1104,15970,1413],{"class":1929},[1104,15972,1167],{"class":1121},[1104,15974,4083],{"class":1131},[1104,15976,1299],{"class":1121},[1104,15978,15979],{"class":1106,"line":2112},[1104,15980,5667],{"class":1121},[1104,15982,15983],{"class":1106,"line":2122},[1104,15984,1866],{"class":1572},[1104,15986,15987],{"class":1106,"line":2151},[1104,15988,15989],{"class":1110},"        # Add user ID if authenticated\n",[1104,15991,15992,15994,15996,15998,16000,16002,16004,16006,16008,16010,16012,16014,16016,16018,16020,16022],{"class":1106,"line":2156},[1104,15993,1953],{"class":1568},[1104,15995,2028],{"class":1756},[1104,15997,1701],{"class":1121},[1104,15999,1891],{"class":1697},[1104,16001,1167],{"class":1121},[1104,16003,1259],{"class":1131},[1104,16005,2039],{"class":1135},[1104,16007,1139],{"class":1131},[1104,16009,1061],{"class":1121},[1104,16011,2046],{"class":1437},[1104,16013,1826],{"class":1572},[1104,16015,1576],{"class":1121},[1104,16017,2039],{"class":1800},[1104,16019,1576],{"class":1121},[1104,16021,2057],{"class":1800},[1104,16023,1964],{"class":1121},[1104,16025,16026,16028,16030,16032,16034,16036,16038,16040,16042,16044,16046,16049],{"class":1106,"line":2165},[1104,16027,14973],{"class":1572},[1104,16029,1576],{"class":1121},[1104,16031,7605],{"class":1697},[1104,16033,1701],{"class":1121},[1104,16035,14983],{"class":1776},[1104,16037,1701],{"class":1121},[1104,16039,1891],{"class":1697},[1104,16041,1576],{"class":1121},[1104,16043,2039],{"class":1800},[1104,16045,1576],{"class":1121},[1104,16047,16048],{"class":1800},"id",[1104,16050,2434],{"class":1121},[1104,16052,16053],{"class":1106,"line":2171},[1104,16054,1866],{"class":1572},[1104,16056,16057,16059,16061,16063,16065,16067,16069,16071,16073,16075,16078,16080,16082,16085,16087,16090,16093,16096],{"class":1106,"line":2202},[1104,16058,2445],{"class":1568},[1104,16060,1259],{"class":1131},[1104,16062,4604],{"class":1135},[1104,16064,1139],{"class":1131},[1104,16066,1576],{"class":1121},[1104,16068,13408],{"class":1697},[1104,16070,1701],{"class":1121},[1104,16072,14983],{"class":1776},[1104,16074,1701],{"class":1121},[1104,16076,16077],{"class":1697},"part",[1104,16079,1061],{"class":1121},[1104,16081,3796],{"class":1568},[1104,16083,16084],{"class":1697}," part ",[1104,16086,3802],{"class":1568},[1104,16088,16089],{"class":1697}," key_parts ",[1104,16091,16092],{"class":1568},"if",[1104,16094,16095],{"class":1697}," part",[1104,16097,1708],{"class":1121},[1030,16099,16101],{"id":16100},"testing-locale-middleware","Testing Locale Middleware",[1035,16103,16105],{"id":16104},"middleware-tests","Middleware Tests",[1095,16107,16109],{"className":1097,"code":16108,"language":1099,"meta":1100,"style":1100},"# tests/test_locale_middleware.py\nfrom django.test import TestCase, RequestFactory, override_settings\nfrom django.contrib.auth.models import User\nfrom django.utils import translation\nfrom django.conf import settings\nfrom middleware.locale import EnhancedLocaleMiddleware\n\nclass LocaleMiddlewareTestCase(TestCase):\n    def setUp(self):\n        self.factory = RequestFactory()\n        self.middleware = EnhancedLocaleMiddleware(lambda r: None)\n        self.user = User.objects.create_user(\n            username='testuser',\n            password='testpass'\n        )\n    \n    def test_url_language_detection(self):\n        \"\"\"Test language detection from URL prefix.\"\"\"\n        request = self.factory.get('/es/blog/')\n        request.user = self.user\n        \n        self.middleware.process_request(request)\n        \n        self.assertEqual(request.LANGUAGE_CODE, 'es')\n    \n    def test_user_profile_language(self):\n        \"\"\"Test language detection from user profile.\"\"\"\n        # Set user's preferred language\n        profile = self.user.userprofile\n        profile.language = 'fr'\n        profile.save()\n        \n        request = self.factory.get('/blog/')\n        request.user = self.user\n        request.session = {}\n        request.COOKIES = {}\n        \n        self.middleware.process_request(request)\n        \n        self.assertEqual(request.LANGUAGE_CODE, 'fr')\n    \n    def test_cookie_language_detection(self):\n        \"\"\"Test language detection from cookie.\"\"\"\n        request = self.factory.get('/blog/')\n        request.user = self.user\n        request.session = {}\n        request.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'de'}\n        \n        self.middleware.process_request(request)\n        \n        self.assertEqual(request.LANGUAGE_CODE, 'de')\n    \n    def test_accept_language_header(self):\n        \"\"\"Test language detection from Accept-Language header.\"\"\"\n        request = self.factory.get('/blog/', HTTP_ACCEPT_LANGUAGE='ja,en;q=0.9')\n        request.user = self.user\n        request.session = {}\n        request.COOKIES = {}\n        \n        self.middleware.process_request(request)\n        \n        self.assertEqual(request.LANGUAGE_CODE, 'ja')\n    \n    def test_subdomain_language_detection(self):\n        \"\"\"Test language detection from subdomain.\"\"\"\n        request = self.factory.get('/blog/', HTTP_HOST='es.example.com')\n        request.user = self.user\n        request.session = {}\n        request.COOKIES = {}\n        \n        language = self.middleware.get_language_from_subdomain(request)\n        \n        self.assertEqual(language, 'es')\n    \n    @override_settings(LANGUAGES=[('en', 'English'), ('es', 'Spanish')])\n    def test_unsupported_language_fallback(self):\n        \"\"\"Test fallback to default language for unsupported languages.\"\"\"\n        request = self.factory.get('/blog/', HTTP_ACCEPT_LANGUAGE='zh-cn')\n        request.user = self.user\n        request.session = {}\n        request.COOKIES = {}\n        \n        self.middleware.process_request(request)\n        \n        self.assertEqual(request.LANGUAGE_CODE, settings.LANGUAGE_CODE)\n    \n    def test_language_cookie_setting(self):\n        \"\"\"Test that language cookie is set in response.\"\"\"\n        request = self.factory.get('/blog/')\n        request.user = self.user\n        request.session = {}\n        request.COOKIES = {}\n        request.LANGUAGE_CODE = 'es'\n        \n        from django.http import HttpResponse\n        response = HttpResponse()\n        \n        response = self.middleware.process_response(request, response)\n        \n        # Check if cookie is set\n        self.assertIn(settings.LANGUAGE_COOKIE_NAME, response.cookies)\n        self.assertEqual(response.cookies[settings.LANGUAGE_COOKIE_NAME].value, 'es')\n",[1043,16110,16111,16116,16142,16164,16178,16192,16208,16212,16226,16239,16254,16279,16303,16319,16333,16337,16341,16354,16363,16390,16406,16410,16429,16433,16460,16464,16477,16486,16491,16509,16526,16536,16540,16567,16583,16595,16607,16611,16629,16633,16659,16663,16676,16685,16711,16727,16739,16768,16772,16790,16794,16820,16824,16837,16846,16886,16902,16914,16926,16930,16948,16952,16978,16982,16995,17004,17044,17060,17072,17084,17088,17110,17114,17136,17140,17191,17204,17213,17252,17268,17280,17292,17296,17314,17318,17344,17348,17361,17370,17396,17412,17424,17436,17452,17456,17471,17483,17487,17514,17518,17523,17551],{"__ignoreMap":1100},[1104,16112,16113],{"class":1106,"line":1107},[1104,16114,16115],{"class":1110},"# tests/test_locale_middleware.py\n",[1104,16117,16118,16120,16122,16124,16127,16129,16132,16134,16137,16139],{"class":1106,"line":1114},[1104,16119,1569],{"class":1568},[1104,16121,1573],{"class":1572},[1104,16123,1576],{"class":1121},[1104,16125,16126],{"class":1572},"test ",[1104,16128,1587],{"class":1568},[1104,16130,16131],{"class":1572}," TestCase",[1104,16133,1167],{"class":1121},[1104,16135,16136],{"class":1572}," RequestFactory",[1104,16138,1167],{"class":1121},[1104,16140,16141],{"class":1572}," override_settings\n",[1104,16143,16144,16146,16148,16150,16152,16154,16156,16158,16160,16162],{"class":1106,"line":1128},[1104,16145,1569],{"class":1568},[1104,16147,1573],{"class":1572},[1104,16149,1576],{"class":1121},[1104,16151,3103],{"class":1572},[1104,16153,1576],{"class":1121},[1104,16155,4392],{"class":1572},[1104,16157,1576],{"class":1121},[1104,16159,4397],{"class":1572},[1104,16161,1587],{"class":1568},[1104,16163,4402],{"class":1572},[1104,16165,16166,16168,16170,16172,16174,16176],{"class":1106,"line":1145},[1104,16167,1569],{"class":1568},[1104,16169,1573],{"class":1572},[1104,16171,1576],{"class":1121},[1104,16173,1601],{"class":1572},[1104,16175,1587],{"class":1568},[1104,16177,1606],{"class":1572},[1104,16179,16180,16182,16184,16186,16188,16190],{"class":1106,"line":1157},[1104,16181,1569],{"class":1568},[1104,16183,1573],{"class":1572},[1104,16185,1576],{"class":1121},[1104,16187,1617],{"class":1572},[1104,16189,1587],{"class":1568},[1104,16191,1622],{"class":1572},[1104,16193,16194,16196,16199,16201,16203,16205],{"class":1106,"line":1173},[1104,16195,1569],{"class":1568},[1104,16197,16198],{"class":1572}," middleware",[1104,16200,1576],{"class":1121},[1104,16202,1584],{"class":1572},[1104,16204,1587],{"class":1568},[1104,16206,16207],{"class":1572}," EnhancedLocaleMiddleware\n",[1104,16209,16210],{"class":1106,"line":1185},[1104,16211,1243],{"emptyLinePlaceholder":1242},[1104,16213,16214,16216,16219,16221,16224],{"class":1106,"line":1197},[1104,16215,1718],{"class":1717},[1104,16217,16218],{"class":1721}," LocaleMiddlewareTestCase",[1104,16220,1701],{"class":1121},[1104,16222,16223],{"class":1727},"TestCase",[1104,16225,1730],{"class":1121},[1104,16227,16228,16230,16233,16235,16237],{"class":1106,"line":1209},[1104,16229,1753],{"class":1717},[1104,16231,16232],{"class":1816}," setUp",[1104,16234,1701],{"class":1121},[1104,16236,1763],{"class":1762},[1104,16238,1730],{"class":1121},[1104,16240,16241,16243,16245,16248,16250,16252],{"class":1106,"line":1221},[1104,16242,1795],{"class":1117},[1104,16244,1576],{"class":1121},[1104,16246,16247],{"class":1800},"factory",[1104,16249,1122],{"class":1121},[1104,16251,16136],{"class":1697},[1104,16253,1861],{"class":1121},[1104,16255,16256,16258,16260,16262,16264,16266,16268,16270,16273,16275,16277],{"class":1106,"line":1233},[1104,16257,1795],{"class":1117},[1104,16259,1576],{"class":1121},[1104,16261,1579],{"class":1800},[1104,16263,1122],{"class":1121},[1104,16265,1722],{"class":1697},[1104,16267,1701],{"class":1121},[1104,16269,7655],{"class":1717},[1104,16271,16272],{"class":1768}," r",[1104,16274,2924],{"class":1121},[1104,16276,2146],{"class":1464},[1104,16278,1708],{"class":1121},[1104,16280,16281,16283,16285,16287,16289,16292,16294,16296,16298,16301],{"class":1106,"line":1239},[1104,16282,1795],{"class":1117},[1104,16284,1576],{"class":1121},[1104,16286,2039],{"class":1800},[1104,16288,1122],{"class":1121},[1104,16290,16291],{"class":1572}," User",[1104,16293,1576],{"class":1121},[1104,16295,7043],{"class":1800},[1104,16297,1576],{"class":1121},[1104,16299,16300],{"class":1697},"create_user",[1104,16302,2229],{"class":1121},[1104,16304,16305,16308,16310,16312,16315,16317],{"class":1106,"line":1246},[1104,16306,16307],{"class":2255},"            username",[1104,16309,1689],{"class":1121},[1104,16311,1139],{"class":1131},[1104,16313,16314],{"class":1135},"testuser",[1104,16316,1139],{"class":1131},[1104,16318,1142],{"class":1121},[1104,16320,16321,16324,16326,16328,16331],{"class":1106,"line":1252},[1104,16322,16323],{"class":2255},"            password",[1104,16325,1689],{"class":1121},[1104,16327,1139],{"class":1131},[1104,16329,16330],{"class":1135},"testpass",[1104,16332,1265],{"class":1131},[1104,16334,16335],{"class":1106,"line":1268},[1104,16336,4139],{"class":1121},[1104,16338,16339],{"class":1106,"line":1278},[1104,16340,1748],{"class":1572},[1104,16342,16343,16345,16348,16350,16352],{"class":1106,"line":1302},[1104,16344,1753],{"class":1717},[1104,16346,16347],{"class":1816}," test_url_language_detection",[1104,16349,1701],{"class":1121},[1104,16351,1763],{"class":1762},[1104,16353,1730],{"class":1121},[1104,16355,16356,16358,16361],{"class":1106,"line":1325},[1104,16357,1833],{"class":1735},[1104,16359,16360],{"class":1739},"Test language detection from URL prefix.",[1104,16362,1743],{"class":1735},[1104,16364,16365,16368,16370,16372,16374,16376,16378,16380,16382,16384,16386,16388],{"class":1106,"line":1348},[1104,16366,16367],{"class":1572},"        request ",[1104,16369,1689],{"class":1121},[1104,16371,1881],{"class":1117},[1104,16373,1576],{"class":1121},[1104,16375,16247],{"class":1800},[1104,16377,1576],{"class":1121},[1104,16379,2188],{"class":1697},[1104,16381,1701],{"class":1121},[1104,16383,1139],{"class":1131},[1104,16385,1060],{"class":1135},[1104,16387,1139],{"class":1131},[1104,16389,1708],{"class":1121},[1104,16391,16392,16394,16396,16398,16400,16402,16404],{"class":1106,"line":1371},[1104,16393,1924],{"class":1572},[1104,16395,1576],{"class":1121},[1104,16397,2039],{"class":1800},[1104,16399,1122],{"class":1121},[1104,16401,1881],{"class":1117},[1104,16403,1576],{"class":1121},[1104,16405,7060],{"class":1800},[1104,16407,16408],{"class":1106,"line":1394},[1104,16409,1866],{"class":1572},[1104,16411,16412,16414,16416,16418,16420,16423,16425,16427],{"class":1106,"line":1399},[1104,16413,1795],{"class":1117},[1104,16415,1576],{"class":1121},[1104,16417,1579],{"class":1800},[1104,16419,1576],{"class":1121},[1104,16421,16422],{"class":1697},"process_request",[1104,16424,1701],{"class":1121},[1104,16426,1891],{"class":1697},[1104,16428,1708],{"class":1121},[1104,16430,16431],{"class":1106,"line":1404},[1104,16432,1866],{"class":1572},[1104,16434,16435,16437,16439,16442,16444,16446,16448,16450,16452,16454,16456,16458],{"class":1106,"line":1410},[1104,16436,1795],{"class":1117},[1104,16438,1576],{"class":1121},[1104,16440,16441],{"class":1697},"assertEqual",[1104,16443,1701],{"class":1121},[1104,16445,1891],{"class":1697},[1104,16447,1576],{"class":1121},[1104,16449,1088],{"class":1929},[1104,16451,1167],{"class":1121},[1104,16453,1259],{"class":1131},[1104,16455,1309],{"class":1135},[1104,16457,1139],{"class":1131},[1104,16459,1708],{"class":1121},[1104,16461,16462],{"class":1106,"line":1425},[1104,16463,1748],{"class":1572},[1104,16465,16466,16468,16471,16473,16475],{"class":1106,"line":1456},[1104,16467,1753],{"class":1717},[1104,16469,16470],{"class":1816}," test_user_profile_language",[1104,16472,1701],{"class":1121},[1104,16474,1763],{"class":1762},[1104,16476,1730],{"class":1121},[1104,16478,16479,16481,16484],{"class":1106,"line":1468},[1104,16480,1833],{"class":1735},[1104,16482,16483],{"class":1739},"Test language detection from user profile.",[1104,16485,1743],{"class":1735},[1104,16487,16488],{"class":1106,"line":1483},[1104,16489,16490],{"class":1110},"        # Set user's preferred language\n",[1104,16492,16493,16496,16498,16500,16502,16504,16506],{"class":1106,"line":1497},[1104,16494,16495],{"class":1572},"        profile ",[1104,16497,1689],{"class":1121},[1104,16499,1881],{"class":1117},[1104,16501,1576],{"class":1121},[1104,16503,2039],{"class":1800},[1104,16505,1576],{"class":1121},[1104,16507,16508],{"class":1800},"userprofile\n",[1104,16510,16511,16514,16516,16518,16520,16522,16524],{"class":1106,"line":1508},[1104,16512,16513],{"class":1572},"        profile",[1104,16515,1576],{"class":1121},[1104,16517,1917],{"class":1800},[1104,16519,1122],{"class":1121},[1104,16521,1259],{"class":1131},[1104,16523,1332],{"class":1135},[1104,16525,1265],{"class":1131},[1104,16527,16528,16530,16532,16534],{"class":1106,"line":1523},[1104,16529,16513],{"class":1572},[1104,16531,1576],{"class":1121},[1104,16533,8215],{"class":1697},[1104,16535,1861],{"class":1121},[1104,16537,16538],{"class":1106,"line":1528},[1104,16539,1866],{"class":1572},[1104,16541,16542,16544,16546,16548,16550,16552,16554,16556,16558,16560,16563,16565],{"class":1106,"line":1534},[1104,16543,16367],{"class":1572},[1104,16545,1689],{"class":1121},[1104,16547,1881],{"class":1117},[1104,16549,1576],{"class":1121},[1104,16551,16247],{"class":1800},[1104,16553,1576],{"class":1121},[1104,16555,2188],{"class":1697},[1104,16557,1701],{"class":1121},[1104,16559,1139],{"class":1131},[1104,16561,16562],{"class":1135},"/blog/",[1104,16564,1139],{"class":1131},[1104,16566,1708],{"class":1121},[1104,16568,16569,16571,16573,16575,16577,16579,16581],{"class":1106,"line":2012},[1104,16570,1924],{"class":1572},[1104,16572,1576],{"class":1121},[1104,16574,2039],{"class":1800},[1104,16576,1122],{"class":1121},[1104,16578,1881],{"class":1117},[1104,16580,1576],{"class":1121},[1104,16582,7060],{"class":1800},[1104,16584,16585,16587,16589,16591,16593],{"class":1106,"line":2017},[1104,16586,1924],{"class":1572},[1104,16588,1576],{"class":1121},[1104,16590,5524],{"class":1800},[1104,16592,1122],{"class":1121},[1104,16594,6774],{"class":1121},[1104,16596,16597,16599,16601,16603,16605],{"class":1106,"line":2023},[1104,16598,1924],{"class":1572},[1104,16600,1576],{"class":1121},[1104,16602,2183],{"class":1929},[1104,16604,1122],{"class":1121},[1104,16606,6774],{"class":1121},[1104,16608,16609],{"class":1106,"line":2062},[1104,16610,1866],{"class":1572},[1104,16612,16613,16615,16617,16619,16621,16623,16625,16627],{"class":1106,"line":2084},[1104,16614,1795],{"class":1117},[1104,16616,1576],{"class":1121},[1104,16618,1579],{"class":1800},[1104,16620,1576],{"class":1121},[1104,16622,16422],{"class":1697},[1104,16624,1701],{"class":1121},[1104,16626,1891],{"class":1697},[1104,16628,1708],{"class":1121},[1104,16630,16631],{"class":1106,"line":2089},[1104,16632,1866],{"class":1572},[1104,16634,16635,16637,16639,16641,16643,16645,16647,16649,16651,16653,16655,16657],{"class":1106,"line":2112},[1104,16636,1795],{"class":1117},[1104,16638,1576],{"class":1121},[1104,16640,16441],{"class":1697},[1104,16642,1701],{"class":1121},[1104,16644,1891],{"class":1697},[1104,16646,1576],{"class":1121},[1104,16648,1088],{"class":1929},[1104,16650,1167],{"class":1121},[1104,16652,1259],{"class":1131},[1104,16654,1332],{"class":1135},[1104,16656,1139],{"class":1131},[1104,16658,1708],{"class":1121},[1104,16660,16661],{"class":1106,"line":2122},[1104,16662,1748],{"class":1572},[1104,16664,16665,16667,16670,16672,16674],{"class":1106,"line":2151},[1104,16666,1753],{"class":1717},[1104,16668,16669],{"class":1816}," test_cookie_language_detection",[1104,16671,1701],{"class":1121},[1104,16673,1763],{"class":1762},[1104,16675,1730],{"class":1121},[1104,16677,16678,16680,16683],{"class":1106,"line":2156},[1104,16679,1833],{"class":1735},[1104,16681,16682],{"class":1739},"Test language detection from cookie.",[1104,16684,1743],{"class":1735},[1104,16686,16687,16689,16691,16693,16695,16697,16699,16701,16703,16705,16707,16709],{"class":1106,"line":2165},[1104,16688,16367],{"class":1572},[1104,16690,1689],{"class":1121},[1104,16692,1881],{"class":1117},[1104,16694,1576],{"class":1121},[1104,16696,16247],{"class":1800},[1104,16698,1576],{"class":1121},[1104,16700,2188],{"class":1697},[1104,16702,1701],{"class":1121},[1104,16704,1139],{"class":1131},[1104,16706,16562],{"class":1135},[1104,16708,1139],{"class":1131},[1104,16710,1708],{"class":1121},[1104,16712,16713,16715,16717,16719,16721,16723,16725],{"class":1106,"line":2171},[1104,16714,1924],{"class":1572},[1104,16716,1576],{"class":1121},[1104,16718,2039],{"class":1800},[1104,16720,1122],{"class":1121},[1104,16722,1881],{"class":1117},[1104,16724,1576],{"class":1121},[1104,16726,7060],{"class":1800},[1104,16728,16729,16731,16733,16735,16737],{"class":1106,"line":2202},[1104,16730,1924],{"class":1572},[1104,16732,1576],{"class":1121},[1104,16734,5524],{"class":1800},[1104,16736,1122],{"class":1121},[1104,16738,6774],{"class":1121},[1104,16740,16741,16743,16745,16747,16749,16752,16754,16756,16758,16760,16762,16764,16766],{"class":1106,"line":2218},[1104,16742,1924],{"class":1572},[1104,16744,1576],{"class":1121},[1104,16746,2183],{"class":1929},[1104,16748,1122],{"class":1121},[1104,16750,16751],{"class":1121}," {",[1104,16753,2193],{"class":1572},[1104,16755,1576],{"class":1121},[1104,16757,1413],{"class":1929},[1104,16759,2924],{"class":1121},[1104,16761,1259],{"class":1131},[1104,16763,1355],{"class":1135},[1104,16765,1139],{"class":1131},[1104,16767,11352],{"class":1121},[1104,16769,16770],{"class":1106,"line":2232},[1104,16771,1866],{"class":1572},[1104,16773,16774,16776,16778,16780,16782,16784,16786,16788],{"class":1106,"line":2244},[1104,16775,1795],{"class":1117},[1104,16777,1576],{"class":1121},[1104,16779,1579],{"class":1800},[1104,16781,1576],{"class":1121},[1104,16783,16422],{"class":1697},[1104,16785,1701],{"class":1121},[1104,16787,1891],{"class":1697},[1104,16789,1708],{"class":1121},[1104,16791,16792],{"class":1106,"line":2252},[1104,16793,1866],{"class":1572},[1104,16795,16796,16798,16800,16802,16804,16806,16808,16810,16812,16814,16816,16818],{"class":1106,"line":2269},[1104,16797,1795],{"class":1117},[1104,16799,1576],{"class":1121},[1104,16801,16441],{"class":1697},[1104,16803,1701],{"class":1121},[1104,16805,1891],{"class":1697},[1104,16807,1576],{"class":1121},[1104,16809,1088],{"class":1929},[1104,16811,1167],{"class":1121},[1104,16813,1259],{"class":1131},[1104,16815,1355],{"class":1135},[1104,16817,1139],{"class":1131},[1104,16819,1708],{"class":1121},[1104,16821,16822],{"class":1106,"line":2285},[1104,16823,1748],{"class":1572},[1104,16825,16826,16828,16831,16833,16835],{"class":1106,"line":2301},[1104,16827,1753],{"class":1717},[1104,16829,16830],{"class":1816}," test_accept_language_header",[1104,16832,1701],{"class":1121},[1104,16834,1763],{"class":1762},[1104,16836,1730],{"class":1121},[1104,16838,16839,16841,16844],{"class":1106,"line":2317},[1104,16840,1833],{"class":1735},[1104,16842,16843],{"class":1739},"Test language detection from Accept-Language header.",[1104,16845,1743],{"class":1735},[1104,16847,16848,16850,16852,16854,16856,16858,16860,16862,16864,16866,16868,16870,16872,16875,16877,16879,16882,16884],{"class":1106,"line":2333},[1104,16849,16367],{"class":1572},[1104,16851,1689],{"class":1121},[1104,16853,1881],{"class":1117},[1104,16855,1576],{"class":1121},[1104,16857,16247],{"class":1800},[1104,16859,1576],{"class":1121},[1104,16861,2188],{"class":1697},[1104,16863,1701],{"class":1121},[1104,16865,1139],{"class":1131},[1104,16867,16562],{"class":1135},[1104,16869,1139],{"class":1131},[1104,16871,1167],{"class":1121},[1104,16873,16874],{"class":2255}," HTTP_ACCEPT_LANGUAGE",[1104,16876,1689],{"class":1121},[1104,16878,1139],{"class":1131},[1104,16880,16881],{"class":1135},"ja,en;q=0.9",[1104,16883,1139],{"class":1131},[1104,16885,1708],{"class":1121},[1104,16887,16888,16890,16892,16894,16896,16898,16900],{"class":1106,"line":2349},[1104,16889,1924],{"class":1572},[1104,16891,1576],{"class":1121},[1104,16893,2039],{"class":1800},[1104,16895,1122],{"class":1121},[1104,16897,1881],{"class":1117},[1104,16899,1576],{"class":1121},[1104,16901,7060],{"class":1800},[1104,16903,16904,16906,16908,16910,16912],{"class":1106,"line":2355},[1104,16905,1924],{"class":1572},[1104,16907,1576],{"class":1121},[1104,16909,5524],{"class":1800},[1104,16911,1122],{"class":1121},[1104,16913,6774],{"class":1121},[1104,16915,16916,16918,16920,16922,16924],{"class":1106,"line":2361},[1104,16917,1924],{"class":1572},[1104,16919,1576],{"class":1121},[1104,16921,2183],{"class":1929},[1104,16923,1122],{"class":1121},[1104,16925,6774],{"class":1121},[1104,16927,16928],{"class":1106,"line":2367},[1104,16929,1866],{"class":1572},[1104,16931,16932,16934,16936,16938,16940,16942,16944,16946],{"class":1106,"line":2391},[1104,16933,1795],{"class":1117},[1104,16935,1576],{"class":1121},[1104,16937,1579],{"class":1800},[1104,16939,1576],{"class":1121},[1104,16941,16422],{"class":1697},[1104,16943,1701],{"class":1121},[1104,16945,1891],{"class":1697},[1104,16947,1708],{"class":1121},[1104,16949,16950],{"class":1106,"line":2396},[1104,16951,1866],{"class":1572},[1104,16953,16954,16956,16958,16960,16962,16964,16966,16968,16970,16972,16974,16976],{"class":1106,"line":2402},[1104,16955,1795],{"class":1117},[1104,16957,1576],{"class":1121},[1104,16959,16441],{"class":1697},[1104,16961,1701],{"class":1121},[1104,16963,1891],{"class":1697},[1104,16965,1576],{"class":1121},[1104,16967,1088],{"class":1929},[1104,16969,1167],{"class":1121},[1104,16971,1259],{"class":1131},[1104,16973,1378],{"class":1135},[1104,16975,1139],{"class":1131},[1104,16977,1708],{"class":1121},[1104,16979,16980],{"class":1106,"line":2437},[1104,16981,1748],{"class":1572},[1104,16983,16984,16986,16989,16991,16993],{"class":1106,"line":2442},[1104,16985,1753],{"class":1717},[1104,16987,16988],{"class":1816}," test_subdomain_language_detection",[1104,16990,1701],{"class":1121},[1104,16992,1763],{"class":1762},[1104,16994,1730],{"class":1121},[1104,16996,16997,16999,17002],{"class":1106,"line":2451},[1104,16998,1833],{"class":1735},[1104,17000,17001],{"class":1739},"Test language detection from subdomain.",[1104,17003,1743],{"class":1735},[1104,17005,17006,17008,17010,17012,17014,17016,17018,17020,17022,17024,17026,17028,17030,17033,17035,17037,17040,17042],{"class":1106,"line":2456},[1104,17007,16367],{"class":1572},[1104,17009,1689],{"class":1121},[1104,17011,1881],{"class":1117},[1104,17013,1576],{"class":1121},[1104,17015,16247],{"class":1800},[1104,17017,1576],{"class":1121},[1104,17019,2188],{"class":1697},[1104,17021,1701],{"class":1121},[1104,17023,1139],{"class":1131},[1104,17025,16562],{"class":1135},[1104,17027,1139],{"class":1131},[1104,17029,1167],{"class":1121},[1104,17031,17032],{"class":2255}," HTTP_HOST",[1104,17034,1689],{"class":1121},[1104,17036,1139],{"class":1131},[1104,17038,17039],{"class":1135},"es.example.com",[1104,17041,1139],{"class":1131},[1104,17043,1708],{"class":1121},[1104,17045,17046,17048,17050,17052,17054,17056,17058],{"class":1106,"line":2474},[1104,17047,1924],{"class":1572},[1104,17049,1576],{"class":1121},[1104,17051,2039],{"class":1800},[1104,17053,1122],{"class":1121},[1104,17055,1881],{"class":1117},[1104,17057,1576],{"class":1121},[1104,17059,7060],{"class":1800},[1104,17061,17062,17064,17066,17068,17070],{"class":1106,"line":2484},[1104,17063,1924],{"class":1572},[1104,17065,1576],{"class":1121},[1104,17067,5524],{"class":1800},[1104,17069,1122],{"class":1121},[1104,17071,6774],{"class":1121},[1104,17073,17074,17076,17078,17080,17082],{"class":1106,"line":2490},[1104,17075,1924],{"class":1572},[1104,17077,1576],{"class":1121},[1104,17079,2183],{"class":1929},[1104,17081,1122],{"class":1121},[1104,17083,6774],{"class":1121},[1104,17085,17086],{"class":1106,"line":2510},[1104,17087,1866],{"class":1572},[1104,17089,17090,17092,17094,17096,17098,17100,17102,17104,17106,17108],{"class":1106,"line":2519},[1104,17091,1876],{"class":1572},[1104,17093,1689],{"class":1121},[1104,17095,1881],{"class":1117},[1104,17097,1576],{"class":1121},[1104,17099,1579],{"class":1800},[1104,17101,1576],{"class":1121},[1104,17103,2680],{"class":1697},[1104,17105,1701],{"class":1121},[1104,17107,1891],{"class":1697},[1104,17109,1708],{"class":1121},[1104,17111,17112],{"class":1106,"line":2527},[1104,17113,1866],{"class":1572},[1104,17115,17116,17118,17120,17122,17124,17126,17128,17130,17132,17134],{"class":1106,"line":2532},[1104,17117,1795],{"class":1117},[1104,17119,1576],{"class":1121},[1104,17121,16441],{"class":1697},[1104,17123,1701],{"class":1121},[1104,17125,1917],{"class":1697},[1104,17127,1167],{"class":1121},[1104,17129,1259],{"class":1131},[1104,17131,1309],{"class":1135},[1104,17133,1139],{"class":1131},[1104,17135,1708],{"class":1121},[1104,17137,17138],{"class":1106,"line":2538},[1104,17139,1748],{"class":1572},[1104,17141,17142,17145,17148,17150,17152,17155,17157,17159,17161,17163,17165,17167,17169,17171,17173,17175,17177,17179,17181,17183,17186,17188],{"class":1106,"line":2573},[1104,17143,17144],{"class":1121},"    @",[1104,17146,17147],{"class":1816},"override_settings",[1104,17149,1701],{"class":1121},[1104,17151,1271],{"class":2255},[1104,17153,17154],{"class":1121},"=[(",[1104,17156,1139],{"class":1131},[1104,17158,1262],{"class":1135},[1104,17160,1139],{"class":1131},[1104,17162,1167],{"class":1121},[1104,17164,1259],{"class":1131},[1104,17166,1294],{"class":1135},[1104,17168,1139],{"class":1131},[1104,17170,14368],{"class":1121},[1104,17172,2415],{"class":1121},[1104,17174,1139],{"class":1131},[1104,17176,1309],{"class":1135},[1104,17178,1139],{"class":1131},[1104,17180,1167],{"class":1121},[1104,17182,1259],{"class":1131},[1104,17184,17185],{"class":1135},"Spanish",[1104,17187,1139],{"class":1131},[1104,17189,17190],{"class":1121},")])\n",[1104,17192,17193,17195,17198,17200,17202],{"class":1106,"line":2581},[1104,17194,1753],{"class":1717},[1104,17196,17197],{"class":1816}," test_unsupported_language_fallback",[1104,17199,1701],{"class":1121},[1104,17201,1763],{"class":1762},[1104,17203,1730],{"class":1121},[1104,17205,17206,17208,17211],{"class":1106,"line":2605},[1104,17207,1833],{"class":1735},[1104,17209,17210],{"class":1739},"Test fallback to default language for unsupported languages.",[1104,17212,1743],{"class":1735},[1104,17214,17215,17217,17219,17221,17223,17225,17227,17229,17231,17233,17235,17237,17239,17241,17243,17245,17248,17250],{"class":1106,"line":2631},[1104,17216,16367],{"class":1572},[1104,17218,1689],{"class":1121},[1104,17220,1881],{"class":1117},[1104,17222,1576],{"class":1121},[1104,17224,16247],{"class":1800},[1104,17226,1576],{"class":1121},[1104,17228,2188],{"class":1697},[1104,17230,1701],{"class":1121},[1104,17232,1139],{"class":1131},[1104,17234,16562],{"class":1135},[1104,17236,1139],{"class":1131},[1104,17238,1167],{"class":1121},[1104,17240,16874],{"class":2255},[1104,17242,1689],{"class":1121},[1104,17244,1139],{"class":1131},[1104,17246,17247],{"class":1135},"zh-cn",[1104,17249,1139],{"class":1131},[1104,17251,1708],{"class":1121},[1104,17253,17254,17256,17258,17260,17262,17264,17266],{"class":1106,"line":2640},[1104,17255,1924],{"class":1572},[1104,17257,1576],{"class":1121},[1104,17259,2039],{"class":1800},[1104,17261,1122],{"class":1121},[1104,17263,1881],{"class":1117},[1104,17265,1576],{"class":1121},[1104,17267,7060],{"class":1800},[1104,17269,17270,17272,17274,17276,17278],{"class":1106,"line":2651},[1104,17271,1924],{"class":1572},[1104,17273,1576],{"class":1121},[1104,17275,5524],{"class":1800},[1104,17277,1122],{"class":1121},[1104,17279,6774],{"class":1121},[1104,17281,17282,17284,17286,17288,17290],{"class":1106,"line":2657},[1104,17283,1924],{"class":1572},[1104,17285,1576],{"class":1121},[1104,17287,2183],{"class":1929},[1104,17289,1122],{"class":1121},[1104,17291,6774],{"class":1121},[1104,17293,17294],{"class":1106,"line":2662},[1104,17295,1866],{"class":1572},[1104,17297,17298,17300,17302,17304,17306,17308,17310,17312],{"class":1106,"line":2668},[1104,17299,1795],{"class":1117},[1104,17301,1576],{"class":1121},[1104,17303,1579],{"class":1800},[1104,17305,1576],{"class":1121},[1104,17307,16422],{"class":1697},[1104,17309,1701],{"class":1121},[1104,17311,1891],{"class":1697},[1104,17313,1708],{"class":1121},[1104,17315,17316],{"class":1106,"line":2689},[1104,17317,1866],{"class":1572},[1104,17319,17320,17322,17324,17326,17328,17330,17332,17334,17336,17338,17340,17342],{"class":1106,"line":2699},[1104,17321,1795],{"class":1117},[1104,17323,1576],{"class":1121},[1104,17325,16441],{"class":1697},[1104,17327,1701],{"class":1121},[1104,17329,1891],{"class":1697},[1104,17331,1576],{"class":1121},[1104,17333,1088],{"class":1929},[1104,17335,1167],{"class":1121},[1104,17337,1956],{"class":1697},[1104,17339,1576],{"class":1121},[1104,17341,1088],{"class":1929},[1104,17343,1708],{"class":1121},[1104,17345,17346],{"class":1106,"line":2707},[1104,17347,1748],{"class":1572},[1104,17349,17350,17352,17355,17357,17359],{"class":1106,"line":2712},[1104,17351,1753],{"class":1717},[1104,17353,17354],{"class":1816}," test_language_cookie_setting",[1104,17356,1701],{"class":1121},[1104,17358,1763],{"class":1762},[1104,17360,1730],{"class":1121},[1104,17362,17363,17365,17368],{"class":1106,"line":2718},[1104,17364,1833],{"class":1735},[1104,17366,17367],{"class":1739},"Test that language cookie is set in response.",[1104,17369,1743],{"class":1735},[1104,17371,17372,17374,17376,17378,17380,17382,17384,17386,17388,17390,17392,17394],{"class":1106,"line":2748},[1104,17373,16367],{"class":1572},[1104,17375,1689],{"class":1121},[1104,17377,1881],{"class":1117},[1104,17379,1576],{"class":1121},[1104,17381,16247],{"class":1800},[1104,17383,1576],{"class":1121},[1104,17385,2188],{"class":1697},[1104,17387,1701],{"class":1121},[1104,17389,1139],{"class":1131},[1104,17391,16562],{"class":1135},[1104,17393,1139],{"class":1131},[1104,17395,1708],{"class":1121},[1104,17397,17398,17400,17402,17404,17406,17408,17410],{"class":1106,"line":2771},[1104,17399,1924],{"class":1572},[1104,17401,1576],{"class":1121},[1104,17403,2039],{"class":1800},[1104,17405,1122],{"class":1121},[1104,17407,1881],{"class":1117},[1104,17409,1576],{"class":1121},[1104,17411,7060],{"class":1800},[1104,17413,17414,17416,17418,17420,17422],{"class":1106,"line":2779},[1104,17415,1924],{"class":1572},[1104,17417,1576],{"class":1121},[1104,17419,5524],{"class":1800},[1104,17421,1122],{"class":1121},[1104,17423,6774],{"class":1121},[1104,17425,17426,17428,17430,17432,17434],{"class":1106,"line":2784},[1104,17427,1924],{"class":1572},[1104,17429,1576],{"class":1121},[1104,17431,2183],{"class":1929},[1104,17433,1122],{"class":1121},[1104,17435,6774],{"class":1121},[1104,17437,17438,17440,17442,17444,17446,17448,17450],{"class":1106,"line":2790},[1104,17439,1924],{"class":1572},[1104,17441,1576],{"class":1121},[1104,17443,1088],{"class":1929},[1104,17445,1122],{"class":1121},[1104,17447,1259],{"class":1131},[1104,17449,1309],{"class":1135},[1104,17451,1265],{"class":1131},[1104,17453,17454],{"class":1106,"line":2811},[1104,17455,1866],{"class":1572},[1104,17457,17458,17460,17462,17464,17466,17468],{"class":1106,"line":2821},[1104,17459,9535],{"class":1568},[1104,17461,1573],{"class":1572},[1104,17463,1576],{"class":1121},[1104,17465,7794],{"class":1572},[1104,17467,1587],{"class":1568},[1104,17469,17470],{"class":1572}," HttpResponse\n",[1104,17472,17473,17476,17478,17481],{"class":1106,"line":2829},[1104,17474,17475],{"class":1572},"        response ",[1104,17477,1689],{"class":1121},[1104,17479,17480],{"class":1697}," HttpResponse",[1104,17482,1861],{"class":1121},[1104,17484,17485],{"class":1106,"line":2834},[1104,17486,1866],{"class":1572},[1104,17488,17489,17491,17493,17495,17497,17499,17501,17504,17506,17508,17510,17512],{"class":1106,"line":2840},[1104,17490,17475],{"class":1572},[1104,17492,1689],{"class":1121},[1104,17494,1881],{"class":1117},[1104,17496,1576],{"class":1121},[1104,17498,1579],{"class":1800},[1104,17500,1576],{"class":1121},[1104,17502,17503],{"class":1697},"process_response",[1104,17505,1701],{"class":1121},[1104,17507,1891],{"class":1697},[1104,17509,1167],{"class":1121},[1104,17511,2107],{"class":1697},[1104,17513,1708],{"class":1121},[1104,17515,17516],{"class":1106,"line":2867},[1104,17517,1866],{"class":1572},[1104,17519,17520],{"class":1106,"line":2872},[1104,17521,17522],{"class":1110},"        # Check if cookie is set\n",[1104,17524,17525,17527,17529,17532,17534,17536,17538,17540,17542,17544,17546,17549],{"class":1106,"line":2890},[1104,17526,1795],{"class":1117},[1104,17528,1576],{"class":1121},[1104,17530,17531],{"class":1697},"assertIn",[1104,17533,1701],{"class":1121},[1104,17535,2193],{"class":1697},[1104,17537,1576],{"class":1121},[1104,17539,1413],{"class":1929},[1104,17541,1167],{"class":1121},[1104,17543,2107],{"class":1697},[1104,17545,1576],{"class":1121},[1104,17547,17548],{"class":1800},"cookies",[1104,17550,1708],{"class":1121},[1104,17552,17553,17555,17557,17559,17561,17563,17565,17567,17569,17571,17573,17575,17577,17579,17581,17583,17585,17587],{"class":1106,"line":2900},[1104,17554,1795],{"class":1117},[1104,17556,1576],{"class":1121},[1104,17558,16441],{"class":1697},[1104,17560,1701],{"class":1121},[1104,17562,2410],{"class":1697},[1104,17564,1576],{"class":1121},[1104,17566,17548],{"class":1800},[1104,17568,2373],{"class":1121},[1104,17570,2193],{"class":1800},[1104,17572,1576],{"class":1121},[1104,17574,1413],{"class":1929},[1104,17576,4103],{"class":1121},[1104,17578,10858],{"class":1800},[1104,17580,1167],{"class":1121},[1104,17582,1259],{"class":1131},[1104,17584,1309],{"class":1135},[1104,17586,1139],{"class":1131},[1104,17588,1708],{"class":1121},[1030,17590,17592],{"id":17591},"analytics-and-monitoring","Analytics and Monitoring",[1035,17594,17596],{"id":17595},"language-usage-analytics","Language Usage Analytics",[1095,17598,17600],{"className":1097,"code":17599,"language":1099,"meta":1100,"style":1100},"# analytics/language_analytics.py\nfrom django.db.models import Count, Q\nfrom django.utils import timezone\nfrom datetime import timedelta\nfrom .models import LanguageUsageLog\n\nclass LanguageAnalytics:\n    \"\"\"Analytics for language usage patterns.\"\"\"\n    \n    def get_language_distribution(self, days=30):\n        \"\"\"Get language usage distribution over time period.\"\"\"\n        since = timezone.now() - timedelta(days=days)\n        \n        return LanguageUsageLog.objects.filter(\n            timestamp__gte=since\n        ).values('language_code').annotate(\n            count=Count('id')\n        ).order_by('-count')\n    \n    def get_detection_method_stats(self, days=30):\n        \"\"\"Get statistics on language detection methods.\"\"\"\n        since = timezone.now() - timedelta(days=days)\n        \n        return LanguageUsageLog.objects.filter(\n            timestamp__gte=since\n        ).values('detection_method').annotate(\n            count=Count('id')\n        ).order_by('-count')\n    \n    def get_user_language_preferences(self):\n        \"\"\"Get user language preference statistics.\"\"\"\n        from .models import UserLanguagePreference\n        \n        return UserLanguagePreference.objects.values(\n            'primary_language'\n        ).annotate(\n            count=Count('id')\n        ).order_by('-count')\n    \n    def get_geographic_language_distribution(self):\n        \"\"\"Get language distribution by geographic location.\"\"\"\n        # This would require GeoIP integration\n        pass\n    \n    def generate_language_report(self, days=30):\n        \"\"\"Generate comprehensive language usage report.\"\"\"\n        return {\n            'language_distribution': self.get_language_distribution(days),\n            'detection_methods': self.get_detection_method_stats(days),\n            'user_preferences': self.get_user_language_preferences(),\n            'total_requests': LanguageUsageLog.objects.filter(\n                timestamp__gte=timezone.now() - timedelta(days=days)\n            ).count(),\n            'unique_users': LanguageUsageLog.objects.filter(\n                timestamp__gte=timezone.now() - timedelta(days=days),\n                user__isnull=False\n            ).values('user').distinct().count(),\n        }\n\nanalytics = LanguageAnalytics()\n",[1043,17601,17602,17607,17632,17647,17659,17671,17675,17684,17693,17697,17720,17729,17763,17767,17783,17793,17816,17836,17853,17857,17878,17887,17915,17919,17935,17943,17964,17982,17998,18002,18015,18024,18037,18041,18057,18065,18073,18091,18107,18111,18124,18133,18138,18142,18146,18167,18176,18182,18206,18230,18251,18274,18304,18313,18336,18364,18374,18399,18403,18407],{"__ignoreMap":1100},[1104,17603,17604],{"class":1106,"line":1107},[1104,17605,17606],{"class":1110},"# analytics/language_analytics.py\n",[1104,17608,17609,17611,17613,17615,17618,17620,17622,17624,17627,17629],{"class":1106,"line":1114},[1104,17610,1569],{"class":1568},[1104,17612,1573],{"class":1572},[1104,17614,1576],{"class":1121},[1104,17616,17617],{"class":1572},"db",[1104,17619,1576],{"class":1121},[1104,17621,4397],{"class":1572},[1104,17623,1587],{"class":1568},[1104,17625,17626],{"class":1572}," Count",[1104,17628,1167],{"class":1121},[1104,17630,17631],{"class":1572}," Q\n",[1104,17633,17634,17636,17638,17640,17642,17644],{"class":1106,"line":1128},[1104,17635,1569],{"class":1568},[1104,17637,1573],{"class":1572},[1104,17639,1576],{"class":1121},[1104,17641,1601],{"class":1572},[1104,17643,1587],{"class":1568},[1104,17645,17646],{"class":1572}," timezone\n",[1104,17648,17649,17651,17654,17656],{"class":1106,"line":1145},[1104,17650,1569],{"class":1568},[1104,17652,17653],{"class":1572}," datetime ",[1104,17655,1587],{"class":1568},[1104,17657,17658],{"class":1572}," timedelta\n",[1104,17660,17661,17663,17665,17667,17669],{"class":1106,"line":1157},[1104,17662,1569],{"class":1568},[1104,17664,7022],{"class":1121},[1104,17666,4397],{"class":1572},[1104,17668,1587],{"class":1568},[1104,17670,7029],{"class":1572},[1104,17672,17673],{"class":1106,"line":1173},[1104,17674,1243],{"emptyLinePlaceholder":1242},[1104,17676,17677,17679,17682],{"class":1106,"line":1185},[1104,17678,1718],{"class":1717},[1104,17680,17681],{"class":1721}," LanguageAnalytics",[1104,17683,1964],{"class":1121},[1104,17685,17686,17688,17691],{"class":1106,"line":1197},[1104,17687,1736],{"class":1735},[1104,17689,17690],{"class":1739},"Analytics for language usage patterns.",[1104,17692,1743],{"class":1735},[1104,17694,17695],{"class":1106,"line":1209},[1104,17696,1748],{"class":1572},[1104,17698,17699,17701,17704,17706,17708,17710,17713,17715,17718],{"class":1106,"line":1221},[1104,17700,1753],{"class":1717},[1104,17702,17703],{"class":1816}," get_language_distribution",[1104,17705,1701],{"class":1121},[1104,17707,1763],{"class":1762},[1104,17709,1167],{"class":1121},[1104,17711,17712],{"class":1768}," days",[1104,17714,1689],{"class":1437},[1104,17716,17717],{"class":1433},"30",[1104,17719,1730],{"class":1121},[1104,17721,17722,17724,17727],{"class":1106,"line":1233},[1104,17723,1833],{"class":1735},[1104,17725,17726],{"class":1739},"Get language usage distribution over time period.",[1104,17728,1743],{"class":1735},[1104,17730,17731,17734,17736,17739,17741,17744,17746,17749,17752,17754,17757,17759,17761],{"class":1106,"line":1239},[1104,17732,17733],{"class":1572},"        since ",[1104,17735,1689],{"class":1121},[1104,17737,17738],{"class":1572}," timezone",[1104,17740,1576],{"class":1121},[1104,17742,17743],{"class":1697},"now",[1104,17745,10432],{"class":1121},[1104,17747,17748],{"class":1437}," -",[1104,17750,17751],{"class":1697}," timedelta",[1104,17753,1701],{"class":1121},[1104,17755,17756],{"class":2255},"days",[1104,17758,1689],{"class":1121},[1104,17760,17756],{"class":1697},[1104,17762,1708],{"class":1121},[1104,17764,17765],{"class":1106,"line":1246},[1104,17766,1866],{"class":1572},[1104,17768,17769,17771,17773,17775,17777,17779,17781],{"class":1106,"line":1252},[1104,17770,2445],{"class":1568},[1104,17772,5327],{"class":1572},[1104,17774,1576],{"class":1121},[1104,17776,7043],{"class":1800},[1104,17778,1576],{"class":1121},[1104,17780,7048],{"class":1697},[1104,17782,2229],{"class":1121},[1104,17784,17785,17788,17790],{"class":1106,"line":1268},[1104,17786,17787],{"class":2255},"            timestamp__gte",[1104,17789,1689],{"class":1121},[1104,17791,17792],{"class":1697},"since\n",[1104,17794,17795,17798,17801,17803,17805,17807,17809,17811,17814],{"class":1106,"line":1278},[1104,17796,17797],{"class":1121},"        ).",[1104,17799,17800],{"class":1697},"values",[1104,17802,1701],{"class":1121},[1104,17804,1139],{"class":1131},[1104,17806,5867],{"class":1135},[1104,17808,1139],{"class":1131},[1104,17810,4086],{"class":1121},[1104,17812,17813],{"class":1697},"annotate",[1104,17815,2229],{"class":1121},[1104,17817,17818,17821,17823,17826,17828,17830,17832,17834],{"class":1106,"line":1302},[1104,17819,17820],{"class":2255},"            count",[1104,17822,1689],{"class":1121},[1104,17824,17825],{"class":1697},"Count",[1104,17827,1701],{"class":1121},[1104,17829,1139],{"class":1131},[1104,17831,16048],{"class":1135},[1104,17833,1139],{"class":1131},[1104,17835,1708],{"class":1121},[1104,17837,17838,17840,17842,17844,17846,17849,17851],{"class":1106,"line":1325},[1104,17839,17797],{"class":1121},[1104,17841,7068],{"class":1697},[1104,17843,1701],{"class":1121},[1104,17845,1139],{"class":1131},[1104,17847,17848],{"class":1135},"-count",[1104,17850,1139],{"class":1131},[1104,17852,1708],{"class":1121},[1104,17854,17855],{"class":1106,"line":1348},[1104,17856,1748],{"class":1572},[1104,17858,17859,17861,17864,17866,17868,17870,17872,17874,17876],{"class":1106,"line":1371},[1104,17860,1753],{"class":1717},[1104,17862,17863],{"class":1816}," get_detection_method_stats",[1104,17865,1701],{"class":1121},[1104,17867,1763],{"class":1762},[1104,17869,1167],{"class":1121},[1104,17871,17712],{"class":1768},[1104,17873,1689],{"class":1437},[1104,17875,17717],{"class":1433},[1104,17877,1730],{"class":1121},[1104,17879,17880,17882,17885],{"class":1106,"line":1394},[1104,17881,1833],{"class":1735},[1104,17883,17884],{"class":1739},"Get statistics on language detection methods.",[1104,17886,1743],{"class":1735},[1104,17888,17889,17891,17893,17895,17897,17899,17901,17903,17905,17907,17909,17911,17913],{"class":1106,"line":1399},[1104,17890,17733],{"class":1572},[1104,17892,1689],{"class":1121},[1104,17894,17738],{"class":1572},[1104,17896,1576],{"class":1121},[1104,17898,17743],{"class":1697},[1104,17900,10432],{"class":1121},[1104,17902,17748],{"class":1437},[1104,17904,17751],{"class":1697},[1104,17906,1701],{"class":1121},[1104,17908,17756],{"class":2255},[1104,17910,1689],{"class":1121},[1104,17912,17756],{"class":1697},[1104,17914,1708],{"class":1121},[1104,17916,17917],{"class":1106,"line":1404},[1104,17918,1866],{"class":1572},[1104,17920,17921,17923,17925,17927,17929,17931,17933],{"class":1106,"line":1410},[1104,17922,2445],{"class":1568},[1104,17924,5327],{"class":1572},[1104,17926,1576],{"class":1121},[1104,17928,7043],{"class":1800},[1104,17930,1576],{"class":1121},[1104,17932,7048],{"class":1697},[1104,17934,2229],{"class":1121},[1104,17936,17937,17939,17941],{"class":1106,"line":1425},[1104,17938,17787],{"class":2255},[1104,17940,1689],{"class":1121},[1104,17942,17792],{"class":1697},[1104,17944,17945,17947,17949,17951,17953,17956,17958,17960,17962],{"class":1106,"line":1456},[1104,17946,17797],{"class":1121},[1104,17948,17800],{"class":1697},[1104,17950,1701],{"class":1121},[1104,17952,1139],{"class":1131},[1104,17954,17955],{"class":1135},"detection_method",[1104,17957,1139],{"class":1131},[1104,17959,4086],{"class":1121},[1104,17961,17813],{"class":1697},[1104,17963,2229],{"class":1121},[1104,17965,17966,17968,17970,17972,17974,17976,17978,17980],{"class":1106,"line":1468},[1104,17967,17820],{"class":2255},[1104,17969,1689],{"class":1121},[1104,17971,17825],{"class":1697},[1104,17973,1701],{"class":1121},[1104,17975,1139],{"class":1131},[1104,17977,16048],{"class":1135},[1104,17979,1139],{"class":1131},[1104,17981,1708],{"class":1121},[1104,17983,17984,17986,17988,17990,17992,17994,17996],{"class":1106,"line":1483},[1104,17985,17797],{"class":1121},[1104,17987,7068],{"class":1697},[1104,17989,1701],{"class":1121},[1104,17991,1139],{"class":1131},[1104,17993,17848],{"class":1135},[1104,17995,1139],{"class":1131},[1104,17997,1708],{"class":1121},[1104,17999,18000],{"class":1106,"line":1497},[1104,18001,1748],{"class":1572},[1104,18003,18004,18006,18009,18011,18013],{"class":1106,"line":1508},[1104,18005,1753],{"class":1717},[1104,18007,18008],{"class":1816}," get_user_language_preferences",[1104,18010,1701],{"class":1121},[1104,18012,1763],{"class":1762},[1104,18014,1730],{"class":1121},[1104,18016,18017,18019,18022],{"class":1106,"line":1523},[1104,18018,1833],{"class":1735},[1104,18020,18021],{"class":1739},"Get user language preference statistics.",[1104,18023,1743],{"class":1735},[1104,18025,18026,18028,18030,18032,18034],{"class":1106,"line":1528},[1104,18027,9535],{"class":1568},[1104,18029,7022],{"class":1121},[1104,18031,4397],{"class":1572},[1104,18033,1587],{"class":1568},[1104,18035,18036],{"class":1572}," UserLanguagePreference\n",[1104,18038,18039],{"class":1106,"line":1534},[1104,18040,1866],{"class":1572},[1104,18042,18043,18045,18047,18049,18051,18053,18055],{"class":1106,"line":2012},[1104,18044,2445],{"class":1568},[1104,18046,4453],{"class":1572},[1104,18048,1576],{"class":1121},[1104,18050,7043],{"class":1800},[1104,18052,1576],{"class":1121},[1104,18054,17800],{"class":1697},[1104,18056,2229],{"class":1121},[1104,18058,18059,18061,18063],{"class":1106,"line":2017},[1104,18060,6061],{"class":1131},[1104,18062,5233],{"class":1135},[1104,18064,1265],{"class":1131},[1104,18066,18067,18069,18071],{"class":1106,"line":2023},[1104,18068,17797],{"class":1121},[1104,18070,17813],{"class":1697},[1104,18072,2229],{"class":1121},[1104,18074,18075,18077,18079,18081,18083,18085,18087,18089],{"class":1106,"line":2062},[1104,18076,17820],{"class":2255},[1104,18078,1689],{"class":1121},[1104,18080,17825],{"class":1697},[1104,18082,1701],{"class":1121},[1104,18084,1139],{"class":1131},[1104,18086,16048],{"class":1135},[1104,18088,1139],{"class":1131},[1104,18090,1708],{"class":1121},[1104,18092,18093,18095,18097,18099,18101,18103,18105],{"class":1106,"line":2084},[1104,18094,17797],{"class":1121},[1104,18096,7068],{"class":1697},[1104,18098,1701],{"class":1121},[1104,18100,1139],{"class":1131},[1104,18102,17848],{"class":1135},[1104,18104,1139],{"class":1131},[1104,18106,1708],{"class":1121},[1104,18108,18109],{"class":1106,"line":2089},[1104,18110,1748],{"class":1572},[1104,18112,18113,18115,18118,18120,18122],{"class":1106,"line":2112},[1104,18114,1753],{"class":1717},[1104,18116,18117],{"class":1816}," get_geographic_language_distribution",[1104,18119,1701],{"class":1121},[1104,18121,1763],{"class":1762},[1104,18123,1730],{"class":1121},[1104,18125,18126,18128,18131],{"class":1106,"line":2122},[1104,18127,1833],{"class":1735},[1104,18129,18130],{"class":1739},"Get language distribution by geographic location.",[1104,18132,1743],{"class":1735},[1104,18134,18135],{"class":1106,"line":2151},[1104,18136,18137],{"class":1110},"        # This would require GeoIP integration\n",[1104,18139,18140],{"class":1106,"line":2156},[1104,18141,3878],{"class":1568},[1104,18143,18144],{"class":1106,"line":2165},[1104,18145,1748],{"class":1572},[1104,18147,18148,18150,18153,18155,18157,18159,18161,18163,18165],{"class":1106,"line":2171},[1104,18149,1753],{"class":1717},[1104,18151,18152],{"class":1816}," generate_language_report",[1104,18154,1701],{"class":1121},[1104,18156,1763],{"class":1762},[1104,18158,1167],{"class":1121},[1104,18160,17712],{"class":1768},[1104,18162,1689],{"class":1437},[1104,18164,17717],{"class":1433},[1104,18166,1730],{"class":1121},[1104,18168,18169,18171,18174],{"class":1106,"line":2202},[1104,18170,1833],{"class":1735},[1104,18172,18173],{"class":1739},"Generate comprehensive language usage report.",[1104,18175,1743],{"class":1735},[1104,18177,18178,18180],{"class":1106,"line":2218},[1104,18179,2445],{"class":1568},[1104,18181,3239],{"class":1121},[1104,18183,18184,18186,18189,18191,18193,18195,18197,18200,18202,18204],{"class":1106,"line":2232},[1104,18185,6061],{"class":1131},[1104,18187,18188],{"class":1135},"language_distribution",[1104,18190,1139],{"class":1131},[1104,18192,2924],{"class":1121},[1104,18194,1881],{"class":1117},[1104,18196,1576],{"class":1121},[1104,18198,18199],{"class":1697},"get_language_distribution",[1104,18201,1701],{"class":1121},[1104,18203,17756],{"class":1697},[1104,18205,1299],{"class":1121},[1104,18207,18208,18210,18213,18215,18217,18219,18221,18224,18226,18228],{"class":1106,"line":2244},[1104,18209,6061],{"class":1131},[1104,18211,18212],{"class":1135},"detection_methods",[1104,18214,1139],{"class":1131},[1104,18216,2924],{"class":1121},[1104,18218,1881],{"class":1117},[1104,18220,1576],{"class":1121},[1104,18222,18223],{"class":1697},"get_detection_method_stats",[1104,18225,1701],{"class":1121},[1104,18227,17756],{"class":1697},[1104,18229,1299],{"class":1121},[1104,18231,18232,18234,18237,18239,18241,18243,18245,18248],{"class":1106,"line":2252},[1104,18233,6061],{"class":1131},[1104,18235,18236],{"class":1135},"user_preferences",[1104,18238,1139],{"class":1131},[1104,18240,2924],{"class":1121},[1104,18242,1881],{"class":1117},[1104,18244,1576],{"class":1121},[1104,18246,18247],{"class":1697},"get_user_language_preferences",[1104,18249,18250],{"class":1121},"(),\n",[1104,18252,18253,18255,18258,18260,18262,18264,18266,18268,18270,18272],{"class":1106,"line":2269},[1104,18254,6061],{"class":1131},[1104,18256,18257],{"class":1135},"total_requests",[1104,18259,1139],{"class":1131},[1104,18261,2924],{"class":1121},[1104,18263,5327],{"class":1572},[1104,18265,1576],{"class":1121},[1104,18267,7043],{"class":1800},[1104,18269,1576],{"class":1121},[1104,18271,7048],{"class":1697},[1104,18273,2229],{"class":1121},[1104,18275,18276,18279,18281,18284,18286,18288,18290,18292,18294,18296,18298,18300,18302],{"class":1106,"line":2285},[1104,18277,18278],{"class":2255},"                timestamp__gte",[1104,18280,1689],{"class":1121},[1104,18282,18283],{"class":1697},"timezone",[1104,18285,1576],{"class":1121},[1104,18287,17743],{"class":1697},[1104,18289,10432],{"class":1121},[1104,18291,17748],{"class":1437},[1104,18293,17751],{"class":1697},[1104,18295,1701],{"class":1121},[1104,18297,17756],{"class":2255},[1104,18299,1689],{"class":1121},[1104,18301,17756],{"class":1697},[1104,18303,1708],{"class":1121},[1104,18305,18306,18308,18311],{"class":1106,"line":2301},[1104,18307,7065],{"class":1121},[1104,18309,18310],{"class":1697},"count",[1104,18312,18250],{"class":1121},[1104,18314,18315,18317,18320,18322,18324,18326,18328,18330,18332,18334],{"class":1106,"line":2317},[1104,18316,6061],{"class":1131},[1104,18318,18319],{"class":1135},"unique_users",[1104,18321,1139],{"class":1131},[1104,18323,2924],{"class":1121},[1104,18325,5327],{"class":1572},[1104,18327,1576],{"class":1121},[1104,18329,7043],{"class":1800},[1104,18331,1576],{"class":1121},[1104,18333,7048],{"class":1697},[1104,18335,2229],{"class":1121},[1104,18337,18338,18340,18342,18344,18346,18348,18350,18352,18354,18356,18358,18360,18362],{"class":1106,"line":2333},[1104,18339,18278],{"class":2255},[1104,18341,1689],{"class":1121},[1104,18343,18283],{"class":1697},[1104,18345,1576],{"class":1121},[1104,18347,17743],{"class":1697},[1104,18349,10432],{"class":1121},[1104,18351,17748],{"class":1437},[1104,18353,17751],{"class":1697},[1104,18355,1701],{"class":1121},[1104,18357,17756],{"class":2255},[1104,18359,1689],{"class":1121},[1104,18361,17756],{"class":1697},[1104,18363,1299],{"class":1121},[1104,18365,18366,18369,18371],{"class":1106,"line":2349},[1104,18367,18368],{"class":2255},"                user__isnull",[1104,18370,1689],{"class":1121},[1104,18372,18373],{"class":1464},"False\n",[1104,18375,18376,18378,18380,18382,18384,18386,18388,18390,18393,18395,18397],{"class":1106,"line":2355},[1104,18377,7065],{"class":1121},[1104,18379,17800],{"class":1697},[1104,18381,1701],{"class":1121},[1104,18383,1139],{"class":1131},[1104,18385,2039],{"class":1135},[1104,18387,1139],{"class":1131},[1104,18389,4086],{"class":1121},[1104,18391,18392],{"class":1697},"distinct",[1104,18394,1780],{"class":1121},[1104,18396,18310],{"class":1697},[1104,18398,18250],{"class":1121},[1104,18400,18401],{"class":1106,"line":2361},[1104,18402,6697],{"class":1121},[1104,18404,18405],{"class":1106,"line":2367},[1104,18406,1243],{"emptyLinePlaceholder":1242},[1104,18408,18409,18412,18414,18416],{"class":1106,"line":2391},[1104,18410,18411],{"class":1572},"analytics ",[1104,18413,1689],{"class":1121},[1104,18415,17681],{"class":1697},[1104,18417,1861],{"class":1121},[1026,18419,18420],{},"Django's locale middleware provides the foundation for sophisticated multilingual applications. By customizing language detection logic, implementing user preferences, and optimizing performance through caching, you can create applications that automatically adapt to users' language preferences while maintaining excellent performance. The key is balancing automatic detection with user control, ensuring that language switching is both seamless and predictable.",[11311,18422,18423],{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sRJPX, html code.shiki .sRJPX{--shiki-light:#91B859;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s27EL, html code.shiki .s27EL{--shiki-light:#91B859;--shiki-default:#AB5E3F;--shiki-dark:#C4704F}html pre.shiki code .sJFLg, html code.shiki .sJFLg{--shiki-light:#E53935;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .s5q8q, html code.shiki .s5q8q{--shiki-light:#9C3EDA;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sHnae, html code.shiki .sHnae{--shiki-light:#39ADB5;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .svtyB, html code.shiki .svtyB{--shiki-light:#39ADB5;--shiki-light-font-style:inherit;--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .snCua, html code.shiki .snCua{--shiki-light:#90A4AE;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sLdnO, html code.shiki .sLdnO{--shiki-light:#E53935;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sIOqK, html code.shiki .sIOqK{--shiki-light:#9C3EDA;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sETVe, html code.shiki .sETVe{--shiki-light:#39ADB5;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sQtxO, html code.shiki .sQtxO{--shiki-light:#E53935;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sKL33, html code.shiki .sKL33{--shiki-light:#E2931D;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .s5HLA, html code.shiki .s5HLA{--shiki-light:#8796B0;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sQBxk, html code.shiki .sQBxk{--shiki-light:#F76D47;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sq3J1, html code.shiki .sq3J1{--shiki-light:#FF5370;--shiki-default:#1E754F;--shiki-dark:#4D9375}",{"title":1100,"searchDepth":1107,"depth":1114,"links":18425},[18426,18430,18433,18437,18440,18444,18448,18452,18455],{"id":1032,"depth":1114,"text":1033,"children":18427},[18428,18429],{"id":1037,"depth":1128,"text":1038},{"id":1092,"depth":1128,"text":1093},{"id":1548,"depth":1114,"text":1549,"children":18431},[18432],{"id":1552,"depth":1128,"text":1553},{"id":4346,"depth":1114,"text":4347,"children":18434},[18435,18436],{"id":4350,"depth":1128,"text":4351},{"id":5909,"depth":1128,"text":5910},{"id":7722,"depth":1114,"text":7723,"children":18438},[18439],{"id":7726,"depth":1128,"text":7727},{"id":9846,"depth":1114,"text":9847,"children":18441},[18442,18443],{"id":9850,"depth":1128,"text":9851},{"id":12074,"depth":1128,"text":12075},{"id":13748,"depth":1114,"text":13749,"children":18445},[18446,18447],{"id":13752,"depth":1128,"text":13753},{"id":14213,"depth":1128,"text":14214},{"id":14715,"depth":1114,"text":14716,"children":18449},[18450,18451],{"id":14719,"depth":1128,"text":14720},{"id":15498,"depth":1128,"text":15499},{"id":16100,"depth":1114,"text":16101,"children":18453},[18454],{"id":16104,"depth":1128,"text":16105},{"id":17591,"depth":1114,"text":17592,"children":18456},[18457],{"id":17595,"depth":1128,"text":17596},"md",null,{},{"title":669,"description":1028},"Dx5e73unZeTEnd_xzaeAI_DT5vhf6lyFn83ul66VcQM",[18464,18466],{"title":665,"path":666,"stem":667,"description":18465,"children":-1},"Modern web applications serve users across multiple time zones, making proper timezone handling essential for accurate time display and scheduling. Django provides comprehensive timezone support that automatically handles timezone conversion, user preferences, and daylight saving time transitions while maintaining data integrity and user experience.",{"title":673,"path":674,"stem":675,"description":18467,"children":-1},"Caching is one of the most effective techniques for improving web application performance, reducing database load, and enhancing user experience. Django provides a comprehensive caching framework that supports multiple backends, granular caching strategies, and sophisticated cache invalidation patterns. This guide covers everything from basic cache configuration to advanced deployment-level caching architectures.",1772474946535]