{"id":22218573,"url":"https://github.com/megahertz/mg-translate","last_synced_at":"2025-03-25T07:22:52.414Z","repository":{"id":57296157,"uuid":"50641673","full_name":"megahertz/mg-translate","owner":"megahertz","description":"Simple and lightweight (3kb) angular translate library with format similar to yii or drupal","archived":false,"fork":false,"pushed_at":"2016-03-26T05:07:51.000Z","size":1899,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-16T19:55:25.433Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://megahertz.github.io/mg-translate/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/megahertz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-01-29T06:04:30.000Z","updated_at":"2016-05-16T03:15:53.000Z","dependencies_parsed_at":"2022-08-31T00:01:04.026Z","dependency_job_id":null,"html_url":"https://github.com/megahertz/mg-translate","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/megahertz%2Fmg-translate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/megahertz%2Fmg-translate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/megahertz%2Fmg-translate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/megahertz%2Fmg-translate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/megahertz","download_url":"https://codeload.github.com/megahertz/mg-translate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245415608,"owners_count":20611577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-02T22:27:10.811Z","updated_at":"2025-03-25T07:22:52.386Z","avatar_url":"https://github.com/megahertz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mg-translate\nSimple and lightweight (~3kb) angular translate library with format similar to yii or drupal\n\n## Installation\n\n#### Install with Bower\n```sh\n$ bower install mg-translate\n```\n\n#### Install with NPM\n\n```sh\n$ npm install mg-translate\n```\n\n## Examples\n\nSee [a page on github.io](https://megahertz.github.io/mg-translate/) as a library example\n\n#### Using directive\n```html\n\u003c!-- Simple example --\u003e\n\u003ch1 t\u003eHello world\u003c/h1\u003e\n\u003ct\u003esample\u003c/t\u003e\n\n\u003c!-- Translate an attribute --\u003e\n\u003cinput type=\"email\" placeholder=\"Email\" t=\"placeholder\"\u003e\n\n\u003c!-- Using plural rules --\u003e\n\u003cspan t values=\"10\"\u003e{n} Day|{n} Days\u003c/span\u003e\n\n\u003c!-- Using additional variables --\u003e\n\u003ch1 t values=\"{ user: 'John' }\"\u003eHello, {user}\u003c/h1\u003e\n```\n\n#### Using filter\n```html\n\u003ch1\u003e{{ 'Welcome' | t }}\u003c/h1\u003e\n```\n\n#### Using service\n```javascript\nfunction SampleController(t) {\n    this.text = t('Welcome');\n}\n```\n\n## Load translations\n\n#### Using provider config\n```javascript\nangular\n    .module('app')\n    .config(function config(tProvider) {\n        tProvider.load('/languages/ru.json'); // Load translations from file\n        tProvider.load('ru', { // Load directly\n            'Test' : 'Тест'\n        });\n        tProvider.load('ru', '$plural', function(n) { // Load plural rules function\n            ...\n        });\n    });\n```\n\n#### Using service\n```javascript\nfunction SampleController(t) {\n    t.load('ru', { // Load directly\n            'Test' : 'Тест'\n        });\n    t.load('/languages/ru.json').then(function() { // Load translations from file\n        console.log('language is loaded');\n    });\n}\n```\n\n#### Load plural rules\nPlural rule is just a function which gets a number and returns the corresponding index. \nYou can get plural rules for required languages.\non [js-simple-plurals](https://github.com/megahertz/js-simple-plurals/tree/master/web).\n```javascript\nfunction SampleController(t) {\n    t.load('ru', '$plural', function(n) { // Load plural rules function\n       // function from https://github.com/megahertz/js-simple-plurals/blob/master/web/ru.js\n    });\n}\n```\n\n#### Load translation file\n```javascript\n// app.config.js:\nangular\n    .module('app')\n    .config(function config(tProvider) {\n        tProvider.load('/languages/ru.json');\n    });\n```    \n \nru.json:\n\n```json\n{\n    \"language\": \"ru\",\n    \"data\": {\n        \"Welcome\": \"Добро пожаловать\",\n        \"User\": \"Пользователь\",\n        …\n    },\n    \"$plural\": \"function (p) { var n = Math.abs(p)||0, i = Math.floor(n,10)||0, \n    v = ((p+'').split('.')[1]||'').length, i10 = i % 10, i100 = i % 100; \n    return v === 0 \u0026\u0026 i10 === 1 \u0026\u0026 i100 !== 11 ? 0 : v === 0 \u0026\u0026 (i10 \u003e= 2 \u0026\u0026 i10 \u003c= 4) \n    \u0026\u0026 !(i100 \u003e= 12 \u0026\u0026 i100 \u003c= 14) ? 1 : v === 0 \u0026\u0026 i10 === 0 || v === 0 \n    \u0026\u0026 (i10 \u003e= 5 \u0026\u0026 i10 \u003c= 9) || v === 0 \u0026\u0026 (i100 \u003e= 11 \u0026\u0026 i100 \u003c= 14) ? 2 : 3; }\"\n}\n```\n\n#### Load translations as a module config\n```javascript\n(function() {\n    'use strict';\n\n    var TRANSLATIONS = {\n        'Download' : 'Скачать',\n        …\n    };\n\n    angular\n        .module('mg.translate')\n        .config(config);\n\n    /** @ngInject */\n    function config(tProvider) {\n        tProvider.load('ru', '$plural', function(p) {\n            // plural rule\n        });\n\n        tProvider.load('ru', TRANSLATIONS);\n    }\n\n})();\n```\nJust load this file as regular angular file\n```html\n\u003cscript src=\"langs/ru.js\"\u003e\u003c/script\u003e\n```\n\n## API Documentation\n\n#### Provider tProvider\n\n - **load(url:string)** — Loads translation from a json file.\n - **load(language:string, [category:string='app'], translations:Object)** — \n Loads translations from Object.\n - **load(language:string, '$plural', pluralRules:Function)** — Loads plural rules.\n \n - **language(language:string)** — Sets an application language. If the language is \n not set the library tries to detect it automatically using a navigator object or \n a value from localStorage.lang. To disable autodetection you can set a false value.\n - **language()** — Returns an application language.\n  \n#### Service t\n - **t(text:string, [null, category:string='app'])** - Translates the text.\n - **t(text:string, number:number, [category:string='app'])** - Translates the text \n using plural rules. Or just\n replace {n} placeholder in text by the number.\n - **t(text:string, values:Object, [category:string='app'])** - Translates the text and \n replaces each placeholder by a corresponding value.\n \n - **t.load(url:string):Promise** — Loads translation from a json file\n - **t.load(language:string, [category:string='app'], translations:Object)** — \n Loads translations from Object.\n - **t.load(language:string, '$plural', pluralRules:Function)** — Loads plural rules.\n \n - **t.language(language:string)** — Sets an application language. If the language\n is not set the library tries to detect it automatically using a navigator object\n or a value from localStorage.lang. To disable autodetection you can set a false value.\n - **t.language()** — Returns an application language.\n \n#### Filter t\n\nThe t filter function is the same as t() service function.\n\n#### Directive t\n\nThe t directive can be used as an element or as an attribute. values and category\nparameters are the same as for t() service function.\n\n```html\n\u003cANY\n  [t=\"{string}\"]\n  [values=\"{number|Object}\"]\n  [category=\"{string}\"]\u003e\n\u003c/ANY\u003e\n\n\u003ct\n  [values=\"{number|Object}\"]\n  [category=\"{string}\"]\u003e\n\u003c/t\u003e\n```\n\nParameters\n\nName                | Default | Description\n--------------------|---------|---\nt (optional)        | 'html'  | A list of attributes which must be translated, separated by comma. The html means an element content\nvalues (optional)   | null    | Number for plural rules or values to replace placeholders\ncategory (optional) | 'app'   | Translations category\n  \n## License\n\nLicensed under MIT.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmegahertz%2Fmg-translate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmegahertz%2Fmg-translate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmegahertz%2Fmg-translate/lists"}