Data structures: what is a good data structure for locatable labels? (Like a blog post or questions in SE that are tagged with)

I am developing a web application where users can upload images and add tags. Because the audience is very international, I want both the application and the content to be searchable.
Most labels have a counterpart in all / other languages, but some do not.

Current situation

Table of images

+ --------- + -------------- +
| ImageId | ImageData ... |
+ --------- + -------------- +
| 32 | img1.png |
| 33 | img2.png |
+ --------- + -------------- +

Table TagsInImages

+ ------- + --------- +
| TagId | ImageId |
+ ------- + --------- +
| 521 | 32 |
| 522 | 32 |
| 342 | 33 |
| 123 | 33 |
+ ------- + --------- +

Tag table

+ ------- + --------------- +
| TagId | Tag name |
+ ------- + --------------- +
| 521 | Sausage |
| 522 | Chicken Wings |
| ... | ... |
| 342 | Hamburger |
| ... | ... |
| 123 | Beer |
+ ------- + --------------- +

objective

  • If a user labels an image, the label looks like the local version of the user.
  • The tag must be able to connect to other versions in other languages.
  • When the tag is new and created, there is no connection and / or translation. This maybe later or maybe not.
  • In the final labeled image, the language tags of the viewer must be displayed. (Person / different language) with the option to display labels in other languages. This could also be an alternative if there are no labels in the language of the viewer.

My idea is the following:

+ ------- + ----------- + ---------- + --------------- +
| TagId | LangGroup | Language | Tag name |
+ ------- + ----------- + ---------- + --------------- +
| 521 | 521 | in | Sausage |
| 643 | 521 | of | Wurst |
| 324 | 521 | ru | Kолбаса |
| 986 | 521 | is | Sausage |
| ... | ... | ... | ... |
| 522 | 522 | in | Chicken Wings |
| ... | ... | ... | ... |
| 470 | 420 | in | Hamburger |
| 465 | 420 | of | Hamburger |
| 420 | 420 | is | Hamburger |
| 455 | 420 | jp | ン バ ー ガ |
| ... | ... | ... | ... |
| 111 | 123 | in | Beer |
| 123 | 123 | of | Bier |
+ ------- + ----------- + ---------- + --------------- +

But I have two problems with this.

  1. Different language versions of a label can be used as different labels. You can assign "Sausage" (521) Y "Wurst" (643) to the same image It should be avoided in the business logic.

  2. The language version of the image creators is of type. primary label. The other languages ​​are only assigned indirectly. But from the point of view of business logic, they have the same weighting. It must also be resolved in the business layer.

So, what can I do to solve my problems?