-
-
Notifications
You must be signed in to change notification settings - Fork 874
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to manage i18n resource with API / JSON-LD / Hydra ? #127
Comments
Wow, nice work on that topic! It looks good! There is just one thing that hurts me: a resource is represented by an URL, so a translation is not a resource by itself but just a part of a resource. So what about issuing a 3 other small questions:
Cannot wait to see the code 😅 |
Yeah, it's a good point of view for the PUT section. Maybe to remove a translation use DELETE with a new endpoint ? Like the last point.
I don't know, it's a real interrogation for me ...
I think the base dev must be independant of these bundle. But we must propose an implementation to use these bundle quickly and simply.
Good idea, but where is the M-L ? |
I study another possibility to provide the i18n support on a resource. For example : GET http://api.example.com/countries/1?locale=fr-FR {
"@context": "http://schema.org",
"@type": "Country",
"@id": "/countries/1",
"@language": "fr-FR",
"nonLocalizedAttribute": 10,
"localization": {
"@type": "CountryLocalization",
"@id": "/country_localization/1/fr-FR",
"name": "Angleterre"
}
} GET http://api.example.com/countries/1 {
"@context": "http://schema.org",
"@type": "Country",
"@id": "/countries/1",
"nonLocalizedAttribute": 10,
"localizations":{
"en": {
"@type": "CountryLocalization",
"@id": "/country_localization/1/fr-FR",
"name": "Angleterre"
},
"fr-FR": {
"@type": "CountryLocalization",
"@id": "/country_localization/1/fr-FR",
"name": "England"
}
}
} This way he simpler for many reasons, but I think it's not very JSON-LD / Hydra compliant.
It's not JSON-LD / Hydra compliant because :
What do you think about this ? |
@dunglas if you want to view, here is my work but still in dev : https://github.com/MLKiiwy/DunglasApiBundle/tree/tdd-i18n-support |
Nice to see progress on that :) I prefer to keep with the standard: it's the only way to be interoperable with other systems (client-side JSON-LD / Hydra libraries, search engines...). Maybe the best thing to do is to create thread on the Hydra working group about that. You can register to the mailing list on the Hydra website (you just need a W3C account): http://www.hydra-cg.com/ |
Any further progress on this? |
@MLKiiwy have you gone further with this ? |
No sorry, I stop my development on this part because I don't need it anymore :/ but the solution is still valid but must be implement in the new version of api-platform core. maybe as a plugin ... |
Is this the "front line" regarding API Platform and I18N or am I missing something somewhere? |
No it was an old subject. I will close this. |
Imagine you have a "Country" (http://schema.org/Country) resource in your API.
How to manage i18N on it ?
Here is a detailed solution, i have design based on experience, and the JSON-LD spec.
Tell me if you think this is a good idea ?
If you think it's not ... tell me why ?
How to get a specific locale on a resource ? (=GET)
My solution
Add a GET specific parameter "locale"
Why ?
Sample 1 : No locale specified
GET http://api.example.com/countries/1
=> Will return resource with all locale data
Sample 2 : Use specific localization
GET http://api.example.com/countries/1?locale=fr-FR
=> Will return resource with requested locale
Note we use locale (on request + response) in W3C format (IETF's BCP 47), see http://www.w3.org/International/articles/language-tags/
It's the format used also with JSON-LD.
Sample 3 : Error localization don't exist
GET http://api.example.com/countries/1?locale=es-CA
=> Will return code "404 not found", because es-CA localization don't exist in my api.
How to get a specific locale on a list of resource ? (=GET)
My solution :
same as for one resource
Sample 1 : No locale specified
GET http://api.example.com/countries
=> Will return resources with all available localization
Sample 2 : Use specific localization
GET http://api.example.com/countries?locale=fr-FR
=> Will return resource with requested locale
Sample 3 : Error localization don't exist
GET http://api.example.com/countries?locale=es-CA
How to delete a localized resource ? (=DELETE)
My solution :
same as usual but the localization are also deleted completely
DELETE http://api.example.com/countries/1
=> Will delete country and all associed localization
DELETE http://api.example.com/countries/1?locale=fr-FR
=> Will delete country localization fr-FR only !
How to create a localized resource ? (POST)
My solution :
create with a locale container or indicate the language in context
POST http://api.example.com/countries
=> Will create country with two localized value
OR
POST http://api.example.com/countries
=> Will create country with one localized value
How to add a new locale to a localized resource ? (PUT)
My solution :
same as POST, you must specified @language or put all localized data
PUT http://api.example.com/countries/1
=> Will add or replace locale "it" name for the resource /countries/1
PUT http://api.example.com/countries/1
=> Will delete all localization for name and just have fr localization
How to list all available locale for a resource ?
My solution :
add a specific endpoint to api like :
GET http://api.example.com/countries/1/locales
=> Will return all available locale for the resource
For the "dev" part :
The text was updated successfully, but these errors were encountered: