diff options
author | David Robillard <d@drobilla.net> | 2008-11-08 19:53:30 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-11-08 19:53:30 +0000 |
commit | 0ff919f9b56903952aa76cd0315ccb808a7bd59c (patch) | |
tree | dca34d4f06f74fdea189e36f256dec071c9e4d0d /src/port.c | |
parent | f6e5dcc1a59c4d4103718d3dbf3ee77096eeaa88 (diff) | |
download | lilv-0ff919f9b56903952aa76cd0315ccb808a7bd59c.tar.gz lilv-0ff919f9b56903952aa76cd0315ccb808a7bd59c.tar.bz2 lilv-0ff919f9b56903952aa76cd0315ccb808a7bd59c.zip |
Support i18n literals via LANG environment variable.
Apply patch from larsl (ticket #186).
git-svn-id: http://svn.drobilla.net/lad/trunk/slv2@1705 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/port.c')
-rw-r--r-- | src/port.c | 37 |
1 files changed, 33 insertions, 4 deletions
@@ -141,7 +141,8 @@ slv2_port_get_value_by_qname(SLV2Plugin p, "SELECT DISTINCT ?value WHERE {\n" "<", slv2_value_as_uri(p->plugin_uri), "> lv2:port ?port .\n" "?port lv2:symbol \"", slv2_value_as_string(port->symbol), "\";\n\t", - property, " ?value .\n}", NULL); + property, " ?value .\n" + "FILTER(lang(?value) = \"\") }", NULL); results = slv2_plugin_query_variable(p, query, 0); @@ -188,6 +189,29 @@ slv2_port_get_value(SLV2Plugin p, } +SLV2Values +slv2_port_get_value_by_qname_i18n(SLV2Plugin p, + SLV2Port port, + const char* property) +{ + assert(property); + SLV2Values results = NULL; + + char* query = slv2_strjoin( + "SELECT DISTINCT ?value WHERE {\n" + "<", slv2_value_as_uri(p->plugin_uri), "> lv2:port ?port .\n" + "?port lv2:symbol \"", slv2_value_as_string(port->symbol), "\";\n\t", + property, " ?value .\n" + "FILTER(lang(?value) = \"", slv2_get_lang(), + "\") }", NULL); + + results = slv2_plugin_query_variable(p, query, 0); + + free(query); + return results; +} + + SLV2Value slv2_port_get_symbol(SLV2Plugin p, SLV2Port port) @@ -201,11 +225,16 @@ slv2_port_get_name(SLV2Plugin p, SLV2Port port) { SLV2Value ret = NULL; - SLV2Values results = slv2_port_get_value_by_qname(p, port, "lv2:name"); + SLV2Values results = slv2_port_get_value_by_qname_i18n(p, port, "lv2:name"); - if (results && slv2_values_size(results) == 1) + if (results && slv2_values_size(results) > 0) { ret = slv2_value_duplicate(slv2_values_get_at(results, 0)); - + } else { + results = slv2_port_get_value_by_qname(p, port, "lv2:name"); + if (results && slv2_values_size(results) > 0) + ret = slv2_value_duplicate(slv2_values_get_at(results, 0)); + } + slv2_values_free(results); return ret; |