Freebase extension internationalized

Added IT translation
This commit is contained in:
Blakko 2013-06-27 12:03:51 +02:00
parent 817c6cc8d4
commit 3acc5291ce
15 changed files with 614 additions and 121 deletions

View File

@ -59,6 +59,7 @@ function init() {
RS.registerCommand(module, "import-qa-data", new Packages.com.google.refine.freebase.commands.ImportQADataCommand()); RS.registerCommand(module, "import-qa-data", new Packages.com.google.refine.freebase.commands.ImportQADataCommand());
RS.registerCommand(module, "mqlread", new Packages.com.google.refine.freebase.commands.MQLReadCommand()); RS.registerCommand(module, "mqlread", new Packages.com.google.refine.freebase.commands.MQLReadCommand());
RS.registerCommand(module, "mqlwrite", new Packages.com.google.refine.freebase.commands.MQLWriteCommand()); RS.registerCommand(module, "mqlwrite", new Packages.com.google.refine.freebase.commands.MQLWriteCommand());
RS.registerCommand(module, "load-language", new Packages.com.google.refine.freebase.commands.LoadLanguageCommand());
var OR = Packages.com.google.refine.operations.OperationRegistry; var OR = Packages.com.google.refine.operations.OperationRegistry;

View File

@ -0,0 +1,114 @@
{
"fb-schema-alignment": {
"close-confirm": "There are unsaved changes. Close anyway?",
"status-warning": "There are unsaved changes.",
"assert-link-found": "Assert link when 'true' is found in column",
"search-pick-property": "Search for a property or pick one below",
"search-property": "Search for a property",
"cell": "cell",
"cells": "cells",
"which-column": "Which column?",
"configure": "Configure...",
"which-topic": "Which topic?",
"what-value": "What value?",
"anonymous": "anonymous",
"add-property": "add property",
"anonymous-node": "Anonymous Node",
"freebase-topic": "Freebase Topic",
"value": "Value",
"skeleton-node": "Schema Alignment Skeleton Node",
"text": "text",
"int": "int",
"float": "float",
"double": "double",
"boolean": "boolean",
"date-time": "date/time",
"rawstring": "rawstring",
"set-to-cell": "Set to Cell in Column",
"cell-content-used": "The cell's content is used ...",
"specify-fb-topic": "to specify a Freebase topic, as reconciled",
"type-new-topics": "Type new topics as",
"literal-value": "as a literal value",
"literal-type": "Literal type",
"text-language": "Text language",
"key-namespace": "as a key in a namespace",
"namespace": "Namespace",
"generate-anonymous": "Generate an anonymous graph node",
"assign-type": "Assign a type to the node",
"use-existing-topic": "Use one existing Freebase topic",
"value-type": "Value type",
"language": "Language",
"use-literal-value": "Use a literal value",
"column-warning": "You must select at least one column",
"new-node-warning": "For creating a new graph node, you need to specify a type for it.",
"namespace-warning": "Please specify the namespace.",
"anonymous-node-warning": "For generating an anonymous graph node, you need to specify a type for it",
"specify-topic-warning": "Please specify which existing Freebase topic to use",
"specify-value-warning": "Please specify the value to use"
},
"fb-interface": {
"dialog-header": "Align to Freebase's Schemas",
"body-text": "The schema alignment skeleton below specifies how your grid-shaped data will be transformed into graph-shaped data in Freebase's schemas.",
"find-more": "Find out more ...",
"skeleton": "Skeleton",
"mql-preview": "MQL-like Preview",
"tripleloader-preview": "TripleLoader Preview"
},
"fb-dialogs": {
"sign-in": "Sign into Freebase",
"enable-loading": "to enable loading",
"error-new-topic": "Error creating new topic",
"error-loading-data": "Error loading data",
"add-info-source": "Click here to add a new information source",
"dialog-header": "Load Data into Freebase",
"no-triples-dataset": "This dataset has no triples",
"warning-aligned": "Have you aligned it with Freebase's schemas yet?",
"name-of-data": "Name of data load",
"source-id": "Source ID (optional)",
"bodytext-1": "Note: Your data will only be loaded into",
"bodytext-2": "Sandbox is where everyone can experiment with Freebase technologies without disruption to the official",
"bodytext-3": "Sandbox gets",
"sandbox-link": " Sandbox",
"freebase-link": " Freebase",
"refreshed-link": " refreshed periodically",
"bodytext-4": "In order to load your data into the official Freebase, you must first load it into Sandbox. Then it must pass a Quality Assurance (QA) process before it can be loaded into Freebase proper.",
"quality-assurance": "Quality assurance",
"bodytext-5": "After loaded into Sandbox, enlist other people's help to double-check this data load's quality so that it can be loaded into Freebase.",
"triple-schedule": "triples successfully scheduled for loading",
"follow-progress": "Follow the loading progress in the ",
"refinery-link": "Freebase Refinery",
"signed-as": "Signed in as:",
"sign-out": "Sign Out"
},
"fb-qa": {
"header": "QA Data Load?",
"bodytext-1": "Other people will be enlisted to help double-check your data load for quality assurance purposes. Their time and labor have a cost.",
"bodytext-2": "You yourself should have taken all reasonable measures to eliminate errors from your data load. Your prudence is greatly appreciated.",
"tell-more": "Tell me more ...",
"ok-button": "Yes, QA Data Load"
},
"fb-extend": {
"add-column": "Add Columns from Freebase Based on Column",
"warning-add-properties": "Please add some properties first.",
"querying-freebase": "Querying Freebase ...",
"remove-column": "Remove this column",
"add-constraints": "Add constraints to this column",
"mql-constraints": "Enter MQL query constraints as JSON",
"warning-valid-json": "Please ensure that the JSON you enter is valid.",
"warning-json-obj": "The JSON you enter must be an object, that is, it is of this form { ... }.",
"app-property": "Add Property",
"suggested-properties": "Suggested Properties"
},
"fb-buttons": {
"save": "Save",
"save-load": "Save & Load",
"close": "Close",
"reset": "Reset",
"cancel": "Cancel",
"align-now": "Align Now",
"settings": "Settings",
"preview": "Preview",
"load-sandbox": "Load to Sandbox",
"ok": "Ok"
}
}

View File

@ -0,0 +1,124 @@
{
"fb-schema-alignment": {
"close-confirm": "There are unsaved changes. Close anyway?",
"status-warning": "There are unsaved changes.",
"assert-link-found": "Assert link when 'true' is found in column",
"search-pick-property": "Search for a property or pick one below",
"search-property": "Search for a property",
"cell": "cell",
"cells": "cells",
"which-column": "Which column?",
"configure": "Configure...",
"which-topic": "Which topic?",
"what-value": "What value?",
"anonymous": "anonymous",
"add-property": "add property",
"anonymous-node": "Anonymous Node",
"freebase-topic": "Freebase Topic",
"value": "Value",
"skeleton-node": "Schema Alignment Skeleton Node",
"text": "text",
"int": "int",
"float": "float",
"double": "double",
"boolean": "boolean",
"date-time": "date/time",
"rawstring": "rawstring",
"set-to-cell": "Set to Cell in Column",
"cell-content-used": "The cell's content is used ...",
"specify-fb-topic": "to specify a Freebase topic, as reconciled",
"type-new-topics": "Type new topics as",
"literal-value": "as a literal value",
"literal-type": "Literal type",
"text-language": "Text language",
"key-namespace": "as a key in a namespace",
"namespace": "Namespace",
"generate-anonymous": "Generate an anonymous graph node",
"assign-type": "Assign a type to the node",
"use-existing-topic": "Use one existing Freebase topic",
"value-type": "Value type",
"language": "Language",
"use-literal-value": "Use a literal value",
"column-warning": "You must select at least one column",
"new-node-warning": "For creating a new graph node, you need to specify a type for it.",
"namespace-warning": "Please specify the namespace.",
"anonymous-node-warning": "For generating an anonymous graph node, you need to specify a type for it.",
"specify-topic-warning": "Please specify which existing Freebase topic to use",
"specify-value-warning": "Please specify the value to use"
},
"fb-interface": {
"dialog-header": "Align to Freebase's Schemas",
"body-text": "The schema alignment skeleton below specifies how your grid-shaped data will be transformed into graph-shaped data in Freebase's schemas.",
"find-more": "Find out more ...",
"skeleton": "Skeleton",
"mql-preview": "MQL-like Preview",
"tripleloader-preview": "TripleLoader Preview"
},
"fb-dialogs": {
"sign-in": "Sign into Freebase",
"enable-loading": "to enable loading",
"error-new-topic": "Error creating new topic",
"error-loading-data": "Error loading data",
"add-info-source": "Click here to add a new information source",
"dialog-header": "Load Data into Freebase",
"no-triples-dataset": "This dataset has no triples",
"warning-aligned": "Have you aligned it with Freebase's schemas yet?",
"name-of-data": "Name of data load",
"source-id": "Source ID (optional)",
"bodytext-1": "Note: Your data will only be loaded into",
"bodytext-2": "Sandbox is where everyone can experiment with Freebase technologies without disruption to the official",
"bodytext-3": "Sandbox gets",
"sandbox-link": " Sandbox",
"freebase-link": " Freebase",
"refreshed-link": " refreshed periodically",
"bodytext-4": "In order to load your data into the official Freebase, you must first load it into Sandbox. Then it must pass a Quality Assurance (QA) process before it can be loaded into Freebase proper.",
"quality-assurance": "Quality assurance",
"bodytext-5": "After loaded into Sandbox, enlist other people's help to double-check this data load's quality so that it can be loaded into Freebase.",
"triple-schedule": "triples successfully scheduled for loading",
"follow-progress": "Follow the loading progress in the ",
"refinery-link": "Freebase Refinery",
"signed-as": "Signed in as:",
"sign-out": "Sign Out"
},
"fb-qa": {
"header": "QA Data Load?",
"bodytext-1": "Other people will be enlisted to help double-check your data load for quality assurance purposes. Their time and labor have a cost.",
"bodytext-2": "You yourself should have taken all reasonable measures to eliminate errors from your data load. Your prudence is greatly appreciated.",
"tell-more": "Tell me more ...",
"ok-button": "Yes, QA Data Load"
},
"fb-extend": {
"add-column": "Add Columns from Freebase Based on Column",
"warning-add-properties": "Please add some properties first.",
"querying-freebase": "Querying Freebase ...",
"remove-column": "Remove this column",
"add-constraints": "Add constraints to this column",
"mql-constraints": "Enter MQL query constraints as JSON",
"warning-valid-json": "Please ensure that the JSON you enter is valid.",
"warning-json-obj": "The JSON you enter must be an object, that is, it is of this form { ... }.",
"app-property": "Add Property",
"suggested-properties": "Suggested Properties"
},
"fb-menu": {
"freebase": "Freebase",
"set-api-key": "Set Freebase API Key",
"align-schema": "Align to Freebase's schemas...",
"load": "Load into Freebase...",
"browse-data-load": "Browse data load details...",
"import-qa": "Import QA data",
"add-columns": "Add columns from Freebase ...",
"warning-load": "You have not tried to load the data in this project into Freebase yet."
},
"fb-buttons": {
"save": "Save",
"save-load": "Save & Load",
"close": "Close",
"reset": "Reset",
"cancel": "Cancel",
"align-now": "Align Now",
"settings": "Settings",
"preview": "Preview",
"load-sandbox": "Load to Sandbox",
"ok": "Ok"
}
}

View File

@ -0,0 +1,124 @@
{
"fb-schema-alignment": {
"close-confirm": "Ci sono cambiamenti non salvati. Chiudere comunque?",
"status-warning": "Ci sono cambiamenti non salvati.",
"assert-link-found": "Assert link when 'true' is found in column",
"search-pick-property": "Cerca una proprietà o scegline una dalle seguenti",
"search-property": "Cerca una proprietà",
"cell": "cella",
"cells": "celle",
"which-column": "Quale colonna?",
"configure": "Configura...",
"which-topic": "Quale topic?",
"what-value": "Quale valore?",
"anonymous": "anonimo",
"add-property": "aggiungi proprietà",
"anonymous-node": "Nodo Anonimo",
"freebase-topic": "Topic Freebase",
"value": "Valore",
"skeleton-node": "Schema Alignment Skeleton Node",
"text": "testo",
"int": "int",
"float": "float",
"double": "double",
"boolean": "boolean",
"date-time": "data/ora",
"rawstring": "rawstring",
"set-to-cell": "Set to Cell in Column",
"cell-content-used": "Il contenuto della cella è usato ...",
"specify-fb-topic": "per specificare un topic Freebase, come riconciliato",
"type-new-topics": "Inserisci il nuovo topic come",
"literal-value": "come un valore letterale",
"literal-type": "Tipo letterale",
"text-language": "Lingua di testo",
"key-namespace": "come una chiave nel namespace",
"namespace": "Namespace",
"generate-anonymous": "Genera un nodo anonimo nel grafo",
"assign-type": "Assegna un tipo al nodo",
"use-existing-topic": "Usa un topic Freebase esistente",
"value-type": "Tipo valore",
"language": "Lingua",
"use-literal-value": "Usa un valore letterale",
"column-warning": "Devi selezionare almeno una colonna",
"new-node-warning": "Per creare un nuovo nodo nel grafo, devi specificarne un tipo.",
"namespace-warning": "Specifica il namespace.",
"anonymous-node-warning": "Per generare un nodo anonimo nel grafo, devi specificarne un tipo.",
"specify-topic-warning": "Per favore specifica quale topic esistente di Freebase usare",
"specify-value-warning": "Per favore specifica il valore da usare"
},
"fb-interface": {
"dialog-header": "Allinea con gli schemi Freebase",
"body-text": "Lo scheletro per l'allineamento della schema specifica come i tuoi dati in formato tabellare saranno trasformati in un formato a grafo con lo schema di Freebase.",
"find-more": "Per saperne di più ...",
"skeleton": "Scheletro",
"mql-preview": "MQL-like Preview",
"tripleloader-preview": "TripleLoader Preview"
},
"fb-dialogs": {
"sign-in": "Accedi a Freebase",
"enable-loading": "per abilitare il caricamento",
"error-new-topic": "Errore nella creazione di un nuovo topic",
"error-loading-data": "Errore durante il caricamento dei dati",
"add-info-source": "Clicca qui per aggiungere una nuova sorgente di informazioni",
"dialog-header": "Carica i dati in Freebase",
"no-triples-dataset": "Questo dataset non ha triple",
"warning-aligned": "Hai già effettuato l'allineamento con lo schema Freebase?",
"name-of-data": "Nome del caricamento dati",
"source-id": "ID sorgente (opzionale)",
"bodytext-1": "Nota: i tuoi dati saranno caricati solamente in",
"bodytext-2": "Sandbox è dove chiunque può sperimentare le tecnologie Freebase senza creare danni all'ufficiale",
"bodytext-3": "Sandbox viene",
"sandbox-link": " Sandbox",
"freebase-link": " Freebase",
"refreshed-link": " aggiornata periodicamente",
"bodytext-4": "Per caricare i tuoi data su Freebase ufficiale, devi prima caricarli nel Sandbox. Successivamente, devono passare un processo di analisi qualitativa prima di essere caricati su Freebase.",
"quality-assurance": "Analisi qualitativa",
"bodytext-5": "Dopo essere caricati nella Sandbox, viene chiesto l'aiuto di altre persone per controllare due volte la qualità di questi dati in modo da poter poi essere caricati in Freebase.",
"triple-schedule": "triple pianificate con successo per il caricamento",
"follow-progress": "Segui il processo di caricamento nel ",
"refinery-link": "Freebase Refinery",
"signed-as": "Accesso effettuato come:",
"sign-out": "Esci"
},
"fb-qa": {
"header": "Caricamento dati con analisi qualitativa?",
"bodytext-1": "Alcune persone verranno incaricate per controllare i tuoi dati allo scopo di verificarne la qualità. Il loro tempo e lavoro ha un costo.",
"bodytext-2": "Tu stesso dovresti aver già effettuato la maggior parte dei controlli per assicurarti di aver rimosso errori dai dati. La tua prudenza è enormemente apprezzata.",
"tell-more": "Dimmi di più ...",
"ok-button": "Si, Caricamento dati con analisi qualitativa"
},
"fb-extend": {
"add-column": "Aggiungi colonne da Freebase basandoti sulla colonna",
"warning-add-properties": "Prima aggiungi delle proprietà.",
"querying-freebase": "Interrogando Freebase ...",
"remove-column": "Rimuovi questa colonna",
"add-constraints": "Aggiungi vincoli a questa colonna",
"mql-constraints": "Inserisci i vincoli per la query MQL come JSON",
"warning-valid-json": "Assicurati che l'oggetto JSON inserito sia valido.",
"warning-json-obj": "Il JSON che inserisci deve essere un oggetto, cioè in questa forma: { ... }.",
"app-property": "Aggiungi Proprietà",
"suggested-properties": "Proprietà suggerite"
},
"fb-menu": {
"freebase": "Freebase",
"set-api-key": "Imposta l'API Key Freebase",
"align-schema": "Allinea con lo schema Freebase...",
"load": "Carica in Freebase...",
"browse-data-load": "Vedi i dettagli per il caricamento dati...",
"import-qa": "Importa dati con controllo qualità",
"add-columns": "Aggiungi colonne da Freebase ...",
"warning-load": "Non hai ancora provato a caricare i dati di questo progetto in Freebase."
},
"fb-buttons": {
"save": "Salva",
"save-load": "Salva & Carica",
"close": "Chiudi",
"reset": "Reset",
"cancel": "cancella",
"align-now": "Allinea adesso",
"settings": "Settings",
"preview": "Preview",
"load-sandbox": "Carica nella Sandbox",
"ok": "Ok"
}
}

View File

@ -1,17 +1,12 @@
<div class="dialog-frame" style="width: 400px;"> <div class="dialog-frame" style="width: 400px;">
<div class="dialog-header" bind="dialogHeader">QA Data Load?</div> <div class="dialog-header" bind="dialogHeader"></div>
<div class="dialog-body" bind="dialogBody"> <div class="dialog-body" bind="dialogBody">
<p class="body-text">Other people will be enlisted to help double-check <p class="body-text" bind="bodytext1"></p>
your data load for quality assurance purposes. Their time and labor <p class="body-text" bind="bodytext2"></p>
have a cost. <p><a href="http://wiki.freebase.com/wiki/Refinery" target="_blank" bind="tellMore"></a></p>
</p>
<p class="body-text">You yourself should have taken all reasonable measures
to eliminate errors from your data load. Your prudence is greatly appreciated.
</p>
<p><a href="http://wiki.freebase.com/wiki/Refinery" target="_blank">Tell me more ...</a></p>
</div> </div>
<div class="dialog-footer" bind="dialogFooter"> <div class="dialog-footer" bind="dialogFooter">
<button class="button" bind="okButton">Yes, QA Data Load</button> <button class="button" bind="okButton"></button>
<button class="button" bind="cancelButton">Cancel</button> <button class="button" bind="cancelButton"></button>
</div> </div>
</div> </div>

View File

@ -3,16 +3,16 @@
<div class="dialog-body" bind="dialogBody"> <div class="dialog-body" bind="dialogBody">
<div class="grid-layout layout-normal layout-full"><table rows="4"> <div class="grid-layout layout-normal layout-full"><table rows="4">
<tr> <tr>
<td width="300" height="1">Add Property</td> <td width="300" height="1" bind="add_property"></td>
<td height="1">Preview</td> <td height="1">Preview</td>
<td height="1" width="1%"><button class="button" bind="resetButton">Reset</button></td> <td height="1" width="1%"><button class="button" bind="resetButton"></button></td>
</tr> </tr>
<tr> <tr>
<td style="vertical-align: top;" height="1"><div class="input-container"><input bind="addPropertyInput" /></div></td> <td style="vertical-align: top;" height="1"><div class="input-container"><input bind="addPropertyInput" /></div></td>
<td style="vertical-align: top;" rowspan="3" colspan="2"><div class="preview-container" bind="previewContainer"></div></td> <td style="vertical-align: top;" rowspan="3" colspan="2"><div class="preview-container" bind="previewContainer"></div></td>
</tr> </tr>
<tr> <tr>
<td height="1">Suggested Properties</td> <td height="1" bind="suggested_properties"></td>
</tr> </tr>
<tr> <tr>
<td><div class="suggested-property-container" bind="suggestedPropertyContainer"></div></td> <td><div class="suggested-property-container" bind="suggestedPropertyContainer"></div></td>
@ -20,7 +20,7 @@
</table></div> </table></div>
</div> </div>
<div class="dialog-footer" bind="dialogFooter"> <div class="dialog-footer" bind="dialogFooter">
<button class="button" bind="okButton">&nbsp;&nbsp;OK&nbsp;&nbsp;</button> <button class="button" bind="okButton"></button>
<button class="button" bind="cancelButton">Cancel</button> <button class="button" bind="cancelButton"></button>
</div> </div>
</div> </div>

View File

@ -41,7 +41,15 @@ function ExtendDataPreviewDialog(column, columnIndex, rowIndices, onDone) {
var self = this; var self = this;
this._dialog = $(DOM.loadHTML("freebase", "scripts/dialogs/extend-data-preview-dialog.html")); this._dialog = $(DOM.loadHTML("freebase", "scripts/dialogs/extend-data-preview-dialog.html"));
this._elmts = DOM.bind(this._dialog); this._elmts = DOM.bind(this._dialog);
this._elmts.dialogHeader.text("Add Columns from Freebase Based on Column " + column.name);
this._elmts.dialogHeader.text($.i18n._('fb-extend')["add-column"]);
this._elmts.add_property.text($.i18n._('fb-extend')["add-property"]);
this._elmts.suggested_properties.text($.i18n._('fb-extend')["suggested-properties"]);
this._elmts.resetButton.text($.i18n._('fb-buttons')["reset"]);
this._elmts.okButton.text('&nbsp;&nbsp;'+$.i18n._('fb-buttons')["ok"]+'&nbsp;&nbsp;');
this._elmts.cancelButton.text($.i18n._('fb-buttons')["cancel"]);
this._elmts.resetButton.click(function() { this._elmts.resetButton.click(function() {
self._extension.properties = []; self._extension.properties = [];
self._update(); self._update();
@ -49,7 +57,7 @@ function ExtendDataPreviewDialog(column, columnIndex, rowIndices, onDone) {
this._elmts.okButton.click(function() { this._elmts.okButton.click(function() {
if (self._extension.properties.length === 0) { if (self._extension.properties.length === 0) {
alert("Please add some properties first."); alert($.i18n._('fb-extend')["warning-add-properties"]);
} else { } else {
DialogSystem.dismissUntil(self._level - 1); DialogSystem.dismissUntil(self._level - 1);
self._onDone(self._extension); self._onDone(self._extension);
@ -157,7 +165,7 @@ ExtendDataPreviewDialog.prototype._show = function(properties) {
}; };
ExtendDataPreviewDialog.prototype._update = function() { ExtendDataPreviewDialog.prototype._update = function() {
this._elmts.previewContainer.empty().text("Querying Freebase ..."); this._elmts.previewContainer.empty().text($.i18n._('fb-extend')["querying-freebase"]);
var self = this; var self = this;
var params = { var params = {
@ -234,7 +242,7 @@ ExtendDataPreviewDialog.prototype._renderPreview = function(data) {
$('<a href="javascript:{}"></a>') $('<a href="javascript:{}"></a>')
.text("remove") .text("remove")
.addClass("action") .addClass("action")
.attr("title", "Remove this column") .attr("title", $.i18n._('fb-extend')["remove-column"])
.click(function() { .click(function() {
self._removeProperty(column.path); self._removeProperty(column.path);
}).appendTo(th); }).appendTo(th);
@ -242,7 +250,7 @@ ExtendDataPreviewDialog.prototype._renderPreview = function(data) {
$('<a href="javascript:{}"></a>') $('<a href="javascript:{}"></a>')
.text("constrain") .text("constrain")
.addClass("action") .addClass("action")
.attr("title", "Add constraints to this column") .attr("title", $.i18n._('fb-extend')["add-constraints"])
.click(function() { .click(function() {
self._constrainProperty(column.path); self._constrainProperty(column.path);
}).appendTo(th); }).appendTo(th);
@ -336,7 +344,7 @@ ExtendDataPreviewDialog.prototype._constrainProperty = function(path) {
body.html( body.html(
'<div class="grid-layout layout-normal layout-full"><table>' + '<div class="grid-layout layout-normal layout-full"><table>' +
'<tr><td>' + '<tr><td>' +
'Enter MQL query constraints as JSON' + $.i18n._('fb-extend')["mql-constraints"] +
'</td></tr>' + '</td></tr>' +
'<tr><td>' + '<tr><td>' +
'<textarea style="width: 100%; height: 300px; font-family: monospace;" bind="textarea"></textarea>' + '<textarea style="width: 100%; height: 300px; font-family: monospace;" bind="textarea"></textarea>' +
@ -353,7 +361,7 @@ ExtendDataPreviewDialog.prototype._constrainProperty = function(path) {
footer.html( footer.html(
'<button class="button" bind="okButton">&nbsp;&nbsp;OK&nbsp;&nbsp;</button>' + '<button class="button" bind="okButton">&nbsp;&nbsp;OK&nbsp;&nbsp;</button>' +
'<button class="button" bind="cancelButton">Cancel</button>' '<button class="button" bind="cancelButton">'+$.i18n._('fb-buttons')["cancel"]+'</button>'
); );
var footerElmts = DOM.bind(footer); var footerElmts = DOM.bind(footer);
@ -367,7 +375,7 @@ ExtendDataPreviewDialog.prototype._constrainProperty = function(path) {
try { try {
var o = JSON.parse(bodyElmts.textarea[0].value); var o = JSON.parse(bodyElmts.textarea[0].value);
if (o === undefined) { if (o === undefined) {
alert("Please ensure that the JSON you enter is valid."); alert($.i18n._('fb-extend')["warning-valid-json"]);
return; return;
} }
@ -375,7 +383,7 @@ ExtendDataPreviewDialog.prototype._constrainProperty = function(path) {
o = o[0]; o = o[0];
} }
if (!$.isPlainObject(o)) { if (!$.isPlainObject(o)) {
alert("The JSON you enter must be an object, that is, it is of this form { ... }."); alert($.i18n._('fb-extend')["warning-json-obj"]);
return; return;
} }

View File

@ -1,44 +1,40 @@
<div class="dialog-frame" style="width: 800px;"> <div class="dialog-frame" style="width: 800px;">
<div class="dialog-header" bind="dialogHeader">Load Data into Freebase</div> <div class="dialog-header" bind="dialogHeader"></div>
<div class="dialog-body" bind="dialogBody"> <div class="dialog-body" bind="dialogBody">
<div bind="unalignedCase" style="display: none;" class="freebase-loading-tripleloader-message"> <div bind="unalignedCase" style="display: none;" class="freebase-loading-tripleloader-message">
<h2>This dataset has no triples</h2> <h2 bind="no_triples_dataset"></h2>
<p>Have you aligned it with Freebase's schemas yet? <button class="button" bind="alignButton">Align Now</button></p> <p bind="warning_aligned"><button class="button" bind="alignButton"></button></p>
</div> </div>
<div bind="functionalCase" style="display: none;"> <div bind="functionalCase" style="display: none;">
<div class="refine-tabs" bind="functionalTabs"> <div class="refine-tabs" bind="functionalTabs">
<ul> <ul>
<li><a href="#freebase-loading-dialog-functional-tabs-settings">Settings</a></li> <li><a href="#freebase-loading-dialog-functional-tabs-settings" bind="settingsBtn"></a></li>
<li><a href="#freebase-loading-dialog-functional-tabs-preview">Preview</a></li> <li><a href="#freebase-loading-dialog-functional-tabs-preview" bind="previewBtn"></a></li>
</ul> </ul>
<div id="freebase-loading-dialog-functional-tabs-settings" <div id="freebase-loading-dialog-functional-tabs-settings"
class="freebase-loading-dialog-functional-tab-panel"><div class="grid-layout layout-normal"><table> class="freebase-loading-dialog-functional-tab-panel"><div class="grid-layout layout-normal"><table>
<tr><td width="20%">Name of data load</td> <tr><td width="20%" bind="name_of_data"></td>
<td colspan="2"><input type="text" size="40" id="freebase-loading-source-name" bind="source_name" /></td> <td colspan="2"><input type="text" size="40" id="freebase-loading-source-name" bind="source_name" /></td>
</tr> </tr>
<tr><td>Source ID (optional)</td> <tr><td bind="source_id_label"></td>
<td colspan="2"><input type="text" size="60" id="freebase-loading-source-id" bind="source_id" /></td> <td colspan="2"><input type="text" size="60" id="freebase-loading-source-id" bind="source_id" /></td>
</tr> </tr>
<tr> <tr>
<td colspan="3"> <td colspan="3">
<p class="body-text">Note: Your data will only be loaded into <p class="body-text"><span bind="bodytext1"></span>
<a href="http://www.sandbox-freebase.com/" target="_blank">Sandbox</a>. <a href="http://www.sandbox-freebase.com/" target="_blank" bind="sandbox_link"></a>.
Sandbox is where everyone can experiment with Freebase technologies without disruption <span bind="bodytext2"> </span><a href="http://www.freebase.com/" bind="freebase_link"></a>.
to the official <a href="http://www.freebase.com/">Freebase</a>. Sandbox gets <span bind="bodytext3"></span><a href="http://wiki.freebase.com/wiki/Sandbox"
<a href="http://wiki.freebase.com/wiki/Sandbox" target="_blank">refreshed periodically</a>. target="_blank" bind="refreshed_link"></a>.
</p> </p>
<p class="body-text">In order to load your data into the official Freebase, you must first load it <p class="body-text" bind="bodytext4">
into Sandbox. Then it must pass a Quality Assurance (QA) process before it can <a href="http://wiki.freebase.com/wiki/Refinery" target="_blank" bind="findOutMore"></a>
be loaded into Freebase proper.
<a href="http://wiki.freebase.com/wiki/Refinery" target="_blank">Find out more ...</a>
</p> </p>
</td> </td>
</tr> </tr>
<tr><td>Quality assurance</td> <tr><td bind="quality_assurance"></td>
<td><input bind="qaCheckbox" type="checkbox" name="qa" value="qa" /></td> <td><input bind="qaCheckbox" type="checkbox" name="qa" value="qa" /></td>
<td>After loaded into Sandbox, enlist other people's help to double-check <td bind="bodytext5"></td>
this data load's quality so that it can be loaded into Freebase.
</td>
</tr> </tr>
</table></div></div> </table></div></div>
<div id="freebase-loading-dialog-functional-tabs-preview" <div id="freebase-loading-dialog-functional-tabs-preview"
@ -49,8 +45,8 @@
</div> </div>
</div> </div>
<div bind="loadedCase" style="display: none;" class="freebase-loading-tripleloader-message"> <div bind="loadedCase" style="display: none;" class="freebase-loading-tripleloader-message">
<h2><span bind="tripleCountSpan"></span> triples successfully scheduled for loading</h2> <h2><span bind="tripleCountSpan"></span> <span bind="triple_success_load"></span></h2>
<h4>Follow the loading progress in the <a bind="refineryLink" target="_new">Freebase Refinery</a>.</h4> <h4><span bind="follow_progress"></span> <a bind="refineryLink" target="_new"></a>.</h4>
</div> </div>
<div bind="errorCase" style="display: none;" class="freebase-loading-tripleloader-message"> <div bind="errorCase" style="display: none;" class="freebase-loading-tripleloader-message">
<h2 bind="errorMessage"></h2> <h2 bind="errorMessage"></h2>
@ -59,13 +55,13 @@
</div> </div>
<div class="dialog-footer" bind="dialogFooter"><div class="grid-layout layout-normal layout-full"><table><tr> <div class="dialog-footer" bind="dialogFooter"><div class="grid-layout layout-normal layout-full"><table><tr>
<td bind="left" style="text-align: left" width="60%" nowrap="true"> <td bind="left" style="text-align: left" width="60%" nowrap="true">
<button class="button" bind="cancelButton" id="freebase-loading-cancel">Cancel</button> <button class="button" bind="cancelButton" id="freebase-loading-cancel"></button>
</td> </td>
<td bind="center" style="text-align: right" width="20%" nowrap="true"> <td bind="center" style="text-align: right" width="20%" nowrap="true">
<div bind="authorization" class="freebase-loading-authorization"></div> <div bind="authorization" class="freebase-loading-authorization"></div>
</td> </td>
<td bind="right" style="text-align: right" width="20%" nowrap="true"> <td bind="right" style="text-align: right" width="20%" nowrap="true">
<button class="button button-primary button-disabled" bind="loadButton" id="freebase-loading-load" disabled>Load to Sandbox</button> <button class="button button-primary button-disabled" bind="loadButton" id="freebase-loading-load" disabled></button>
</td> </td>
</tr></table></div></div> </tr></table></div></div>
</div> </div>

View File

@ -46,12 +46,36 @@ FreebaseLoadingDialog.prototype._createDialog = function() {
var authorization = this._elmts.authorization; var authorization = this._elmts.authorization;
var loadButton = this._elmts.loadButton; var loadButton = this._elmts.loadButton;
this._elmts.dialogHeader.text($.i18n._('fb-dialogs')["dialog-header"]);
this._elmts.no_triples_dataset.text($.i18n._('fb-dialogs')["no-triples-dataset"]);
this._elmts.warning_aligned.text($.i18n._('fb-dialogs')["warning-aligned"]);
this._elmts.alignButton.text($.i18n._('fb-buttons')["align-now"]);
this._elmts.settingsBtn.text($.i18n._('fb-buttons')["settings"]);
this._elmts.previewBtn.text($.i18n._('fb-buttons')["preview"]);
this._elmts.name_of_data.text($.i18n._('fb-dialogs')["name-of-data"]);
this._elmts.source_id_label.text($.i18n._('fb-dialogs')["source-id"]);
this._elmts.bodytext1.text($.i18n._('fb-dialogs')["bodytext-1"]);
this._elmts.bodytext2.text($.i18n._('fb-dialogs')["bodytext-2"]);
this._elmts.bodytext3.text($.i18n._('fb-dialogs')["bodytext-3"]);
this._elmts.sandbox_link.text($.i18n._('fb-dialogs')["sandbox-link"]);
this._elmts.freebase_link.text($.i18n._('fb-dialogs')["freebase-link"]);
this._elmts.refreshed_link.text($.i18n._('fb-dialogs')["refreshed-link"]);
this._elmts.bodytext4.text($.i18n._('fb-dialogs')["bodytext-4"]);
this._elmts.findOutMore.text($.i18n._('fb-interface')["find-more"]);
this._elmts.quality_assurance.text($.i18n._('fb-dialogs')["quality-assurance"]);
this._elmts.bodytext5.text($.i18n._('fb-dialogs')["bodytext-5"]);
this._elmts.triple_success_load.text($.i18n._('fb-dialogs')["triple-schedule"]);
this._elmts.follow_progress.text($.i18n._('fb-dialogs')["follow-progress"]);
this._elmts.refineryLink.text($.i18n._('fb-dialogs')["refinery-link"]);
this._elmts.cancelButton.text($.i18n._('fb-buttons')["cancel"]);
this._elmts.loadButton.text($.i18n._('fb-buttons')["load-sandbox"]);
// TODO: Does this need to be redone for the new API / freebase.com site? // TODO: Does this need to be redone for the new API / freebase.com site?
var check_authorization = function(cont) { var check_authorization = function(cont) {
var check_authorization_url = "command/freebase/check-authorization/" + provider; var check_authorization_url = "command/freebase/check-authorization/" + provider;
$.get(check_authorization_url, function(data) { $.get(check_authorization_url, function(data) {
if ("status" in data && data.code == "/api/status/ok") { if ("status" in data && data.code == "/api/status/ok") {
authorization.html('Signed in as: <a target="_new" href="http://www.freebase.com/view/user/' + data.username + '">' + data.username + '</a> | <a href="javascript:{}" bind="signout">Sign Out</a>').show(); authorization.html($.i18n._('fb-dialogs')["signed-as"]+' <a target="_new" href="http://www.freebase.com/view/user/' + data.username + '">' + data.username + '</a> | <a href="javascript:{}" bind="signout">'+$.i18n._('fb-dialogs')["sign-out"]+'</a>').show();
DOM.bind(authorization).signout.click(function() { DOM.bind(authorization).signout.click(function() {
self._signedin = false; self._signedin = false;
loadButton.attr("disabled","disabled"); loadButton.attr("disabled","disabled");
@ -71,7 +95,7 @@ FreebaseLoadingDialog.prototype._createDialog = function() {
if (typeof cont == "function") cont(data); if (typeof cont == "function") cont(data);
} else { } else {
authorization.html('<a href="javascript:{}" bind="signin">Sign into Freebase</a> to enable loading').show(); authorization.html('<a href="javascript:{}" bind="signin">'+$.i18n._('fb-dialogs')["sign-in"]+'</a> '+$.i18n._('fb-dialogs')["enable-loading"]).show();
self._signedin = false; self._signedin = false;
$("#freebase-loading-source-name").keyup(); $("#freebase-loading-source-name").keyup();
@ -104,7 +128,7 @@ FreebaseLoadingDialog.prototype._createDialog = function() {
self._elmts.source_id.val(data.result[0].id); self._elmts.source_id.val(data.result[0].id);
if (typeof cont == "function") cont(); if (typeof cont == "function") cont();
} else { } else {
self._show_error("Error creating new topic", data); self._show_error($.i18n._('fb-dialogs')["error-new-topic"], data);
} }
}, },
"json" "json"
@ -137,7 +161,7 @@ FreebaseLoadingDialog.prototype._createDialog = function() {
self._elmts.source_id.suggest({ self._elmts.source_id.suggest({
filter: "(all type:/dataworld/information_source)", filter: "(all type:/dataworld/information_source)",
suggest_new: "Click here to add a new information source" suggest_new: $.i18n._('fb-dialogs')["add-info-source"]
}).bind("fb-select", function(e, data) { }).bind("fb-select", function(e, data) {
self._elmts.source_id.val(data.id); self._elmts.source_id.val(data.id);
}).bind("fb-select-new", function(e, val) { }).bind("fb-select-new", function(e, val) {
@ -202,7 +226,7 @@ FreebaseLoadingDialog.prototype._load = function() {
self._elmts.loadedCase.show(); self._elmts.loadedCase.show();
self._end(); self._end();
} else { } else {
self._show_error("Error loading data",data); self._show_error($.i18n._('fb-dialogs')["error-loading-data"],data);
} }
}, },
"json" "json"
@ -217,6 +241,13 @@ FreebaseLoadingDialog.prototype._load = function() {
DialogSystem.dismissUntil(level - 1); DialogSystem.dismissUntil(level - 1);
}; };
this._elmts.refineryLink.text($.i18n._('fb-qa')["header"]);
this._elmts.bodytext1.text($.i18n._('fb-qa')["bodytext-1"]);
this._elmts.bodytext2.text($.i18n._('fb-qa')["bodytext-2"]);
this._elmts.tellMore.text($.i18n._('fb-qa')["tell-more"]);
this._elmts.okButton.text($.i18n._('fb-qa')["ok-button"]);
this._elmts.cancelButton.text($.i18n._('fb-qa')["ok-button"]);
elmts.okButton.click(function() { elmts.okButton.click(function() {
doLoad(); doLoad();
dismiss(); dismiss();

View File

@ -234,6 +234,17 @@ SchemaAlignmentDialog.prototype._createDialog = function() {
DialogSystem.dismissUntil(self._level - 1); DialogSystem.dismissUntil(self._level - 1);
}; };
elmts.dialogHeader.text($.i18n._('fb-interface')["dialog-header"]);
elmts.body_text.text($.i18n._('fb-interface')["body-text"]);
elmts.find_more.text($.i18n._('fb-interface')["find-more"]);
elmts.skeleton.text($.i18n._('fb-interface')["skeleton"]);
elmts.skeleton.text($.i18n._('fb-interface')["mql-preview"]);
elmts.skeleton.text($.i18n._('fb-interface')["tripleloader-preview"]);
elmts.saveButton.text($.i18n._('fb-buttons')["save"]);
elmts.saveAndLoadButton.text($.i18n._('fb-buttons')["save-load"]);
elmts.closeButton.text($.i18n._('fb-buttons')["close"]);
elmts.resetButton.text($.i18n._('fb-buttons')["reset"]);
elmts.saveButton.click(function() { elmts.saveButton.click(function() {
self._save(); self._save();
}); });
@ -247,7 +258,7 @@ SchemaAlignmentDialog.prototype._createDialog = function() {
self._reset(null); self._reset(null);
}); });
elmts.closeButton.click(function() { elmts.closeButton.click(function() {
if (!self._hasUnsavedChanges || window.confirm("There are unsaved changes. Close anyway?")) { if (!self._hasUnsavedChanges || window.confirm($.i18n._('fb-schema-alignment')["close-confirm"])) {
dismiss(); dismiss();
} }
}); });
@ -281,7 +292,7 @@ SchemaAlignmentDialog.prototype.preview = function(initial) {
this._previewPanes.empty(); this._previewPanes.empty();
if (!(initial)) { if (!(initial)) {
this._elmts.statusIndicator.show().text("There are unsaved changes."); this._elmts.statusIndicator.show().text($.i18n._('fb-schema-alignment')["status-warning"]);
this._hasUnsavedChanges = true; this._hasUnsavedChanges = true;
} }

View File

@ -1,16 +1,14 @@
<div class="dialog-frame" style="width: 800px;"> <div class="dialog-frame" style="width: 800px;">
<div class="dialog-header" bind="dialogHeader">Align to Freebase's Schemas</div> <div class="dialog-header" bind="dialogHeader"></div>
<div class="dialog-body" bind="dialogBody"> <div class="dialog-body" bind="dialogBody">
<p class="body-text"> <p class="body-text" bind="body_text">
The schema alignment skeleton below specifies how your grid-shaped data will be <a href="http://code.google.com/p/google-refine/wiki/SchemaAlignment" target="_blank" bind="find_more"></a>
transformed into graph-shaped data in Freebase's schemas.
<a href="http://code.google.com/p/google-refine/wiki/SchemaAlignment" target="_blank">Find out more ...</a>
</p> </p>
<div id="schema-alignment-tabs" class="refine-tabs"> <div id="schema-alignment-tabs" class="refine-tabs">
<ul> <ul>
<li><a href="#schema-alignment-tabs-protograph">Skeleton</a></li> <li><a href="#schema-alignment-tabs-protograph" bind="skeleton"></a></li>
<li><a href="#schema-alignment-tabs-preview-mqllike">MQL-like Preview</a></li> <li><a href="#schema-alignment-tabs-preview-mqllike" bind="mql_preview"></a></li>
<li><a href="#schema-alignment-tabs-preview-tripleloader">TripleLoader Preview</a></li> <li><a href="#schema-alignment-tabs-preview-tripleloader" bind="tripleloader_preview"></a></li>
</ul> </ul>
<div id="schema-alignment-tabs-protograph"> <div id="schema-alignment-tabs-protograph">
<div class="schema-alignment-dialog-canvas"></div> <div class="schema-alignment-dialog-canvas"></div>
@ -25,17 +23,17 @@
</div> </div>
<div class="dialog-footer" bind="dialogFooter"><div class="grid-layout layout-normal layout-full"><table><tr> <div class="dialog-footer" bind="dialogFooter"><div class="grid-layout layout-normal layout-full"><table><tr>
<td> <td>
<button class="button" bind="resetButton">Reset</button> <button class="button" bind="resetButton"></button>
</td> </td>
<td style="text-align:right;"> <td style="text-align:right;">
<button class="button button-primary" bind="saveButton">Save</button> <button class="button button-primary" bind="saveButton"></button>
<button class="button" bind="saveAndLoadButton">Save &amp; Load</button> <button class="button" bind="saveAndLoadButton"></button>
</td> </td>
<td style="text-align:center;" width="30%"> <td style="text-align:center;" width="30%">
<span class="schema-alignment-status-indicator" bind="statusIndicator"></span> <span class="schema-alignment-status-indicator" bind="statusIndicator"></span>
</td> </td>
<td style="text-align:right;" width="1%"> <td style="text-align:right;" width="1%">
<button class="button" bind="closeButton">Close</button> <button class="button" bind="closeButton"></button>
</td> </td>
</tr></table></div></div> </tr></table></div></div>
</div> </div>

View File

@ -239,7 +239,7 @@ SchemaAlignmentDialog.UILink.prototype._showPropertySuggestPopup = function(elmt
var divConditional = $('<div>') var divConditional = $('<div>')
.addClass("schema-alignment-link-menu-section") .addClass("schema-alignment-link-menu-section")
.html("Assert link when 'true' is found in column<br/>").appendTo(menu); .html($.i18n._('fb-schema-alignment')["assert-link-found"]+"<br/>").appendTo(menu);
var conditionalSelect = $('<select>').appendTo(divConditional); var conditionalSelect = $('<select>').appendTo(divConditional);
$('<option>') $('<option>')
@ -266,7 +266,7 @@ SchemaAlignmentDialog.UILink.prototype._showPropertySuggestPopup = function(elmt
divSearch = $('<div>') divSearch = $('<div>')
.addClass("schema-alignment-link-menu-section") .addClass("schema-alignment-link-menu-section")
.css("margin-bottom", "2em") .css("margin-bottom", "2em")
.html('<div>Search for a property or pick one below</div>').appendTo(menu); .html('<div>'+$.i18n._('fb-schema-alignment')["search-pick-property"]+'</div>').appendTo(menu);
var createSuggestion = function(suggestion) { var createSuggestion = function(suggestion) {
var menuItem = MenuSystem.createMenuItem().appendTo(menu); var menuItem = MenuSystem.createMenuItem().appendTo(menu);
@ -296,7 +296,7 @@ SchemaAlignmentDialog.UILink.prototype._showPropertySuggestPopup = function(elmt
} else { } else {
divSearch = $('<div>') divSearch = $('<div>')
.addClass("schema-alignment-link-menu-section-last") .addClass("schema-alignment-link-menu-section-last")
.html('<div>Search for a property</div>').appendTo(menu); .html('<div>'+$.i18n._('fb-schema-alignment')["search-property"]+'</div>').appendTo(menu);
} }
var input = $('<input />').appendTo($('<div>').appendTo(divSearch)); var input = $('<input />').appendTo($('<div>').appendTo(divSearch));

View File

@ -124,9 +124,12 @@ SchemaAlignmentDialog.UINode.prototype._renderMain = function() {
.appendTo(a); .appendTo(a);
} }
$('<span>').text(this._node.columnNames.length > 1 ? " cells" : " cell").appendTo(a); $('<span>').text(
this._node.columnNames.length > 1 ? " "
+ $.i18n._('fb-schema-alignment')["cells"] : " "
+ $.i18n._('fb-schema-alignment')["cell"]).appendTo(a);
} else { } else {
a.html(this._options.mustBeCellTopic ? "Which column?" : "Configure..."); a.html(this._options.mustBeCellTopic ? $.i18n._('fb-schema-alignment')["which-column"] : $.i18n._('fb-schema-alignment')["configure"]);
} }
} else if (this._node.nodeType == "topic") { } else if (this._node.nodeType == "topic") {
if ("topic" in this._node) { if ("topic" in this._node) {
@ -134,16 +137,16 @@ SchemaAlignmentDialog.UINode.prototype._renderMain = function() {
} else if ("id" in this._node) { } else if ("id" in this._node) {
a.html(this._node.topic.id); a.html(this._node.topic.id);
} else { } else {
a.html("Which topic?"); a.html($.i18n._('fb-schema-alignment')["which-topic"]);
} }
} else if (this._node.nodeType == "value") { } else if (this._node.nodeType == "value") {
if ("value" in this._node) { if ("value" in this._node) {
a.html(this._node.value); a.html(this._node.value);
} else { } else {
a.html("What value?"); a.html($.i18n._('fb-schema-alignment')["what-value"]);
} }
} else if (this._node.nodeType == "anonymous") { } else if (this._node.nodeType == "anonymous") {
a.html("(anonymous)"); a.html("("+$.i18n._('fb-schema-alignment')["anonymous"]+")");
} }
}; };
@ -212,7 +215,7 @@ SchemaAlignmentDialog.UINode.prototype._renderDetails = function() {
$('<a href="javascript:{}"></a>') $('<a href="javascript:{}"></a>')
.addClass("action") .addClass("action")
.text("add property") .text($.i18n._('fb-schema-alignment')["add-property"])
.appendTo(divFooter) .appendTo(divFooter)
.click(function() { .click(function() {
var newLink = { var newLink = {
@ -241,7 +244,7 @@ SchemaAlignmentDialog.UINode.prototype._showColumnPopupMenu = function(elmt) {
if (!this._options.mustBeCellTopic) { if (!this._options.mustBeCellTopic) {
menu.push({ menu.push({
label: "Anonymous Node", label: $.i18n._('fb-schema-alignment')["anonymous-node"],
click: function() { click: function() {
self._node.nodeType = "anonymous"; self._node.nodeType = "anonymous";
self._showExpandable(); self._showExpandable();
@ -249,7 +252,7 @@ SchemaAlignmentDialog.UINode.prototype._showColumnPopupMenu = function(elmt) {
} }
}); });
menu.push({ menu.push({
label: "Freebase Topic", label: $.i18n._('fb-schema-alignment')["freebase-topic"],
click: function() { click: function() {
self._node.nodeType = "topic"; self._node.nodeType = "topic";
self._hideExpandable(); self._hideExpandable();
@ -257,7 +260,7 @@ SchemaAlignmentDialog.UINode.prototype._showColumnPopupMenu = function(elmt) {
} }
}); });
menu.push({ menu.push({
label: "Value", label: $.i18n._('fb-schema-alignment')["value"],
click: function() { click: function() {
self._node.nodeType = "value"; self._node.nodeType = "value";
self._hideExpandable(); self._hideExpandable();
@ -292,7 +295,7 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
frame.width("750px"); frame.width("750px");
var header = $('<div></div>').addClass("dialog-header").text("Schema Alignment Skeleton Node").appendTo(frame); var header = $('<div></div>').addClass("dialog-header").text($.i18n._('fb-schema-alignment')["skeleton-node"]).appendTo(frame);
var body = $('<div></div>').addClass("dialog-body").appendTo(frame); var body = $('<div></div>').addClass("dialog-body").appendTo(frame);
var footer = $('<div></div>').addClass("dialog-footer").appendTo(frame); var footer = $('<div></div>').addClass("dialog-footer").appendTo(frame);
@ -301,13 +304,13 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
*-------------------------------------------------- *--------------------------------------------------
*/ */
var literalTypeSelectHtml = var literalTypeSelectHtml =
'<option value="/type/text" checked>text</option>' + '<option value="/type/text" checked>'+$.i18n._('fb-schema-alignment')["text"]+'</option>' +
'<option value="/type/int">int</option>' + '<option value="/type/int">'+$.i18n._('fb-schema-alignment')["int"]+'</option>' +
'<option value="/type/float">float</option>' + '<option value="/type/float">'+$.i18n._('fb-schema-alignment')["float"]+'</option>' +
'<option value="/type/double">double</option>' + '<option value="/type/double">'+$.i18n._('fb-schema-alignment')["double"]+'</option>' +
'<option value="/type/boolean">boolean</option>' + '<option value="/type/boolean">'+$.i18n._('fb-schema-alignment')["boolean"]+'</option>' +
'<option value="/type/datetime">date/time</option>' + '<option value="/type/datetime">'+$.i18n._('fb-schema-alignment')["date-time"]+'</option>' +
'<option value="/type/rawstring">rawstring</option>'; '<option value="/type/rawstring">'+$.i18n._('fb-schema-alignment')["rawstring"]+'</option>';
var html = $( var html = $(
'<div class="grid-layout layout-looser layout-full"><table>' + '<div class="grid-layout layout-looser layout-full"><table>' +
@ -317,7 +320,7 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
'<tr>' + '<tr>' +
'<td>' + '<td>' +
'<div class="schema-align-node-dialog-node-type">' + '<div class="schema-align-node-dialog-node-type">' +
'<input type="radio" name="schema-align-node-dialog-node-type" value="cell-as" bind="radioNodeTypeCellAs" /> Set to Cell in Column' + '<input type="radio" name="schema-align-node-dialog-node-type" value="cell-as" bind="radioNodeTypeCellAs" /> '+$.i18n._('fb-schema-alignment')["set-to-cell"]+'' +
'</div>' + '</div>' +
'</td>' + '</td>' +
'</tr>' + '</tr>' +
@ -329,15 +332,15 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
'<td>' + '<td>' +
'<div class="grid-layout layout-tight"><table cols="4">' + '<div class="grid-layout layout-tight"><table cols="4">' +
'<tr>' + '<tr>' +
'<td colspan="4">The cell\'s content is used ...</td>' + '<td colspan="4">'+$.i18n._('fb-schema-alignment')["cell-content-used"]+'</td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-topic" bind="radioNodeTypeCellAsTopic" /></td>' + '<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-topic" bind="radioNodeTypeCellAsTopic" /></td>' +
'<td colspan="3">to specify a Freebase topic, as reconciled</td>' + '<td colspan="3">'+$.i18n._('fb-schema-alignment')["specify-fb-topic"]+'</td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
'<td colspan="3">Type new topics as</td>' + '<td colspan="3">'+$.i18n._('fb-schema-alignment')["type-new-topic"]+'</td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
@ -345,26 +348,26 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-value" bind="radioNodeTypeCellAsValue" /></td>' + '<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-value" bind="radioNodeTypeCellAsValue" /></td>' +
'<td colspan="3">as a literal value</td>' + '<td colspan="3">'+$.i18n._('fb-schema-alignment')["literal-value"]+'</td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
'<td colspan="2">Literal type</td>' + '<td colspan="2">'+$.i18n._('fb-schema-alignment')["literal-type"]+'</td>' +
'<td colspan="1"><select bind="cellAsValueTypeSelect">' + literalTypeSelectHtml + '</select></td>' + '<td colspan="1"><select bind="cellAsValueTypeSelect">' + literalTypeSelectHtml + '</select></td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
'<td colspan="2">Text language</td>' + '<td colspan="2">'+$.i18n._('fb-schema-alignment')["text-language"]+'</td>' +
'<td colspan="1"><input bind="cellAsValueLanguageInput" /></td>' + '<td colspan="1"><input bind="cellAsValueLanguageInput" /></td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-key" bind="radioNodeTypeCellAsKey" /></td>' + '<td><input type="radio" name="schema-align-node-dialog-node-subtype" value="cell-as-key" bind="radioNodeTypeCellAsKey" /></td>' +
'<td colspan="3">as a key in a namespace</td>' + '<td colspan="3">'+$.i18n._('fb-schema-alignment')["key-namespace"]+'</td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
'<td colspan="2">Namespace</td>' + '<td colspan="2">'+$.i18n._('fb-schema-alignment')["namespace"]+'</td>' +
'<td colspan="1"><input bind="cellAsKeyInput" /></td>' + '<td colspan="1"><input bind="cellAsKeyInput" /></td>' +
'</tr>' + '</tr>' +
'</table></div>' + '</table></div>' +
@ -381,20 +384,20 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
'<tr>' + '<tr>' +
'<td colspan="3">' + '<td colspan="3">' +
'<div class="schema-align-node-dialog-node-type">' + '<div class="schema-align-node-dialog-node-type">' +
'<input type="radio" name="schema-align-node-dialog-node-type" value="anonymous" bind="radioNodeTypeAnonymous" /> Generate an anonymous graph node' + '<input type="radio" name="schema-align-node-dialog-node-type" value="anonymous" bind="radioNodeTypeAnonymous" /> '+$.i18n._('fb-schema-alignment')["generate-anonymous"]+'' +
'</div>' + '</div>' +
'</td>' + '</td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
'<td>Assign a type to the node</td>' + '<td>'+$.i18n._('fb-schema-alignment')["assign-type"]+'</td>' +
'<td>&nbsp;<input bind="anonymousNodeTypeInput" /></td>' + '<td>&nbsp;<input bind="anonymousNodeTypeInput" /></td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td colspan="3">' + '<td colspan="3">' +
'<div class="schema-align-node-dialog-node-type">' + '<div class="schema-align-node-dialog-node-type">' +
'<input type="radio" name="schema-align-node-dialog-node-type" value="topic" bind="radioNodeTypeTopic" /> Use one existing Freebase topic' + '<input type="radio" name="schema-align-node-dialog-node-type" value="topic" bind="radioNodeTypeTopic" /> '+$.i18n._('fb-schema-alignment')["use-existing-topic"]+'' +
'</div>' + '</div>' +
'</td>' + '</td>' +
'</tr>' + '</tr>' +
@ -407,23 +410,23 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
'<tr>' + '<tr>' +
'<td colspan="3">' + '<td colspan="3">' +
'<div class="schema-align-node-dialog-node-type">' + '<div class="schema-align-node-dialog-node-type">' +
'<input type="radio" name="schema-align-node-dialog-node-type" value="value" bind="radioNodeTypeValue" /> Use a literal value' + '<input type="radio" name="schema-align-node-dialog-node-type" value="value" bind="radioNodeTypeValue" /> '+$.i18n._('fb-schema-alignment')["use-literal-value"]+
'</div>' + '</div>' +
'</td>' + '</td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
'<td>Value</td>' + '<td>'+$.i18n._('fb-schema-alignment')["value"]+'</td>' +
'<td><input bind="valueNodeTypeValueInput" /></td>' + '<td><input bind="valueNodeTypeValueInput" /></td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
'<td>Value type</td>' + '<td>'+$.i18n._('fb-schema-alignment')["value-type"]+'</td>' +
'<td><select bind="valueNodeTypeValueTypeSelect">' + literalTypeSelectHtml + '</select></td>' + '<td><select bind="valueNodeTypeValueTypeSelect">' + literalTypeSelectHtml + '</select></td>' +
'</tr>' + '</tr>' +
'<tr>' + '<tr>' +
'<td></td>' + '<td></td>' +
'<td>Language</td>' + '<td>'+$.i18n._('fb-schema-alignment')["language"]+'</td>' +
'<td><input bind="valueNodeTypeLanguageInput" /></td>' + '<td><input bind="valueNodeTypeLanguageInput" /></td>' +
'</tr>' + '</tr>' +
'</table></div>' + '</table></div>' +
@ -581,14 +584,14 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
}).get(); }).get();
if (node.columnNames.length == 0) { if (node.columnNames.length == 0) {
alert("You must select at least one column."); alert($.i18n._('fb-schema-alignment')["column-warning"]);
return null; return null;
} }
if (node.nodeType == "cell-as-topic") { if (node.nodeType == "cell-as-topic") {
var t = elmts.cellAsTopicNodeTypeInput.data("data.suggest"); var t = elmts.cellAsTopicNodeTypeInput.data("data.suggest");
if (!(t)) { if (!(t)) {
alert("For creating a new graph node, you need to specify a type for it."); alert($.i18n._('fb-schema-alignment')["new-node-warning"]);
elmts.cellAsTopicNodeTypeInput.focus(); elmts.cellAsTopicNodeTypeInput.focus();
return null; return null;
} }
@ -606,7 +609,7 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
} else if (node.nodeType == "cell-as-key") { } else if (node.nodeType == "cell-as-key") {
var t = elmts.cellAsKeyInput.data("data.suggest"); var t = elmts.cellAsKeyInput.data("data.suggest");
if (!(t)) { if (!(t)) {
alert("Please specify the namespace."); alert($.i18n._('fb-schema-alignment')["namespace-warning"]);
return null; return null;
} }
node.namespace = { node.namespace = {
@ -617,7 +620,7 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
} else if (node.nodeType == "anonymous") { } else if (node.nodeType == "anonymous") {
var t = elmts.anonymousNodeTypeInput.data("data.suggest"); var t = elmts.anonymousNodeTypeInput.data("data.suggest");
if (!(t)) { if (!(t)) {
alert("For generating an anonymous graph node, you need to specify a type for it."); alert($.i18n._('fb-schema-alignment')["anonymous-node-warning"]);
return null; return null;
} }
node.type = { node.type = {
@ -627,7 +630,7 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
} else if (node.nodeType == "topic") { } else if (node.nodeType == "topic") {
var t = elmts.topicNodeTypeInput.data("data.suggest"); var t = elmts.topicNodeTypeInput.data("data.suggest");
if (!(t)) { if (!(t)) {
alert("Please specify which existing Freebase topic to use."); alert($.i18n._('fb-schema-alignment')["specify-topic-warning"]);
return null; return null;
} }
node.topic = { node.topic = {
@ -637,7 +640,7 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
} else if (node.nodeType == "value") { } else if (node.nodeType == "value") {
node.value = $.trim(elmts.valueNodeTypeValueInput[0].value); node.value = $.trim(elmts.valueNodeTypeValueInput[0].value);
if (!node.value.length) { if (!node.value.length) {
alert("Please specify the value to use."); alert($.i18n._('fb-schema-alignment')["specify-value-warning"]);
return null; return null;
} }
node.valueType = elmts.valueNodeTypeValueTypeSelect[0].value; node.valueType = elmts.valueNodeTypeValueTypeSelect[0].value;
@ -662,7 +665,7 @@ SchemaAlignmentDialog.UINode.prototype._showNodeConfigDialog = function() {
} }
}).appendTo(footer); }).appendTo(footer);
$('<button class="button"></button>').text("Cancel").click(function() { $('<button class="button"></button>').text($.i18n._('fb-buttons')["cancel"]).click(function() {
DialogSystem.dismissUntil(level - 1); DialogSystem.dismissUntil(level - 1);
}).appendTo(footer); }).appendTo(footer);

View File

@ -33,6 +33,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var FreebaseExtension = { handlers: {} }; var FreebaseExtension = { handlers: {} };
// Internationalization init
var lang = navigator.language.split("-")[0]
|| navigator.userLanguage.split("-")[0];
var dictionary = "";
$.ajax({
url : "/command/freebase/load-language?",
type : "POST",
async : false,
data : {
lng : lang
},
success : function(data) {
dictionary = data;
}
});
$.i18n.setDictionary(dictionary);
// End internationalization
FreebaseExtension.handlers.setFreebaseApiKey = function() { FreebaseExtension.handlers.setFreebaseApiKey = function() {
var value = window.prompt("Set Freebase API Key:"); var value = window.prompt("Set Freebase API Key:");
if (value !== null) { if (value !== null) {
@ -79,7 +98,7 @@ FreebaseExtension.handlers.browseToDataLoad = function() {
null, null,
function(data) { function(data) {
if (data.value == null) { if (data.value == null) {
alert("You have not tried to load the data in this project into Freebase yet."); alert($.i18n._('fb-menu')["warning-load"]);
} else { } else {
$(form).attr("action", "http://refinery.freebaseapps.com/load/" + data.value); $(form).attr("action", "http://refinery.freebaseapps.com/load/" + data.value);
form.submit(); form.submit();
@ -101,33 +120,35 @@ FreebaseExtension.handlers.importQAData = function() {
}; };
ExtensionBar.addExtensionMenu({ ExtensionBar.addExtensionMenu({
"id" : "freebase", "id" : "freebase",
"label" : "Freebase", "label" : $.i18n._('fb-menu')["freebase"],
"submenu" : [ "submenu" : [
{ {
"id" : "freebase/set-api-key", "id" : "freebase/set-api-key",
label: "Set Freebase API Key", label: $.i18n._('fb-menu')["set-api-key"],
click: FreebaseExtension.handlers.setFreebaseApiKey click: FreebaseExtension.handlers.setFreebaseApiKey
}, },
{ {
"id" : "freebase/schema-alignment", "id" : "freebase/schema-alignment",
label: "Align to Freebase's schemas...", label: $.i18n._('fb-menu')["align-schema"],
click: function() { FreebaseExtension.handlers.editSchemaAlignment(false); } click: function() { FreebaseExtension.handlers.editSchemaAlignment(false); }
}, },
{ {
"id" : "freebase/load-info-freebase", "id" : "freebase/load-info-freebase",
label: "Load into Freebase...", label: $.i18n._('fb-menu')["load"],
click: function() { FreebaseExtension.handlers.loadIntoFreebase(); } click: function() { FreebaseExtension.handlers.loadIntoFreebase(); }
}, },
{}, {},
{ {
"id" : "freebase/browse-load", "id" : "freebase/browse-load",
label: "Browse data load details...", label: $.i18n._('fb-menu')["browse-data-load"],
click: function() { FreebaseExtension.handlers.browseToDataLoad(); } click: function() { FreebaseExtension.handlers.browseToDataLoad(); }
}, },
{ {
"id" : "freebase/import-qa-data", "id" : "freebase/import-qa-data",
label: "Import QA data", label: $.i18n._('fb-menu')["import-qa"],
click: function() { FreebaseExtension.handlers.importQAData(); } click: function() { FreebaseExtension.handlers.importQAData(); }
} }
] ]
@ -163,7 +184,7 @@ DataTableColumnHeaderUI.extendMenu(function(column, columnHeaderUI, menu) {
[ "core/edit-column", "core/add-column-by-fetching-urls" ], [ "core/edit-column", "core/add-column-by-fetching-urls" ],
{ {
id: "freebase/add-columns-from-freebase", id: "freebase/add-columns-from-freebase",
label: "Add columns from Freebase ...", label: $.i18n._('fb-menu')["add-columns"],
click: doAddColumnFromFreebase click: doAddColumnFromFreebase
} }
); );

View File

@ -0,0 +1,67 @@
package com.google.refine.freebase.commands;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.refine.commands.Command;
public class LoadLanguageCommand extends Command {
public LoadLanguageCommand() {
// TODO Auto-generated constructor stub
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String rawDirectoryFile = request.getSession().getServletContext()
.getRealPath("extensions/freebase/module/langs/");
String cleanedDirectory = rawDirectoryFile.replace("main" + File.separator + "webapp" + File.separator, "");
BufferedReader reader = null;
String[] langs = request.getParameterValues("lng");
langs = langs[0].split(" ");
try {
String file = cleanedDirectory + File.separator + "translation-" + langs[0] + ".json";
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
} catch (FileNotFoundException e1) {
try {
String file = cleanedDirectory + File.separator + "translation-default.json";
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
} catch (FileNotFoundException e3) {
e3.printStackTrace();
}
}
String line = null;
String message = new String();
if (reader != null) {
while ((line = reader.readLine()) != null) {
// buffer.append(line);
message += line + System.getProperty("line.separator");
}
}
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
response.getWriter().println(message);
response.getWriter().flush();
response.getWriter().close();
}
}