1 32 33 package it.businesslogic.ireport.plugin.locale; 34 35 36 import it.businesslogic.ireport.IReportConnection; 37 import it.businesslogic.ireport.gui.MainFrame; 38 import it.businesslogic.ireport.util.LocaleAdapter; 39 import it.businesslogic.ireport.util.Misc; 40 import java.io.File ; 41 import java.io.FileOutputStream ; 42 import java.util.Iterator ; 43 import java.util.List ; 44 import java.util.Locale ; 45 import java.util.Properties ; 46 import javax.swing.DefaultListSelectionModel ; 47 import javax.swing.JOptionPane ; 48 import javax.swing.event.ListSelectionEvent ; 49 import javax.swing.event.ListSelectionListener ; 50 import javax.swing.table.DefaultTableModel ; 51 import javax.swing.table.TableColumn ; 52 import javax.swing.table.TableColumnModel ; 53 import it.businesslogic.ireport.util.I18n; 54 import java.sql.PreparedStatement ; 55 import java.util.Enumeration ; 56 57 61 public class TranslationStatusDialog extends javax.swing.JDialog { 62 63 64 public TranslationStatusDialog(java.awt.Frame parent, boolean modal) { 65 super(parent, modal); 66 initComponents(); 67 68 TableColumnModel tcm = jTableLanguages.getColumnModel(); 69 TableColumn tc = tcm.getColumn(1); 70 tc.setCellRenderer(new ProgressBarCellRenderer()); 71 72 DefaultListSelectionModel dsm = new DefaultListSelectionModel (); 73 dsm.setSelectionMode( dsm.SINGLE_SELECTION ); 74 dsm.addListSelectionListener( new ListSelectionListener () { 75 public void valueChanged(ListSelectionEvent e) { 76 jButtonDetails.setEnabled( jTableLanguages.getSelectedRow() >= 0); 77 } 78 }); 79 jTableLanguages.setSelectionModel( dsm ); 80 81 82 applyI18n(); 83 84 updateStatus(); 85 86 this.jButtonInsertDb.setVisible(false); 87 88 pack(); 89 Misc.centerFrame(this); 90 91 javax.swing.KeyStroke escape = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0, false); 92 javax.swing.Action escapeAction = new javax.swing.AbstractAction () { 93 public void actionPerformed(java.awt.event.ActionEvent e) { 94 jButtonOkActionPerformed(e); 95 } 96 }; 97 98 getRootPane().getInputMap(javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE"); 99 getRootPane().getActionMap().put("ESCAPE", escapeAction); 100 101 102 103 this.getRootPane().setDefaultButton(this.jButtonOk); 105 } 106 107 108 public void updateStatus() 109 { 110 111 List listOfLanguages = it.businesslogic.ireport.util.I18n.getListOfAvailLanguages(); 112 113 DefaultTableModel dtm = (DefaultTableModel )jTableLanguages.getModel(); 114 dtm.setRowCount(0); 115 116 118 Properties props_default = new Properties (); 119 try { 120 props_default.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/Ireport.properties") ); 121 } catch (Exception ex) 122 { 123 ex.printStackTrace(); 124 } 125 126 jLabelLocalizableString.setText( I18n.getFormattedString("translationStatusDialog.localizableStrings","Localizable strings: {0}", new Object []{new Integer ( props_default.size() - 1 )} )); 127 128 129 for (int i=0; i< listOfLanguages.size(); ++i) 130 { 131 Locale lang = (Locale )listOfLanguages.get(i); 132 LocaleAdapter adapter = new LocaleAdapter(lang); 133 String language = lang.getLanguage(); 134 String country = lang.getCountry(); 135 String variant = lang.getVariant(); 136 137 String language_name = (language.length() > 0) ? "_" + language : ""; 138 language_name += (country.length() > 0) ? "_" + country : ""; 139 language_name += (variant.length() > 0) ? "_" + variant : ""; 140 141 language_name = "Ireport" + language_name + ".properties"; 142 143 int percentage_language = getLanguageCompletation(props_default,language_name); 144 151 152 dtm.addRow(new Object []{adapter,new Integer (percentage_language),language_name}); 153 } 154 155 156 157 } 158 159 public int getLanguageCompletation(Properties defaultTranslations, String language) 160 { 161 Properties props2 = new Properties (); 162 try { 163 props2.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/" + language ) ); 164 } catch (Exception ex){} 165 166 167 168 double size = 0; 169 Iterator namesIterator = defaultTranslations.keySet().iterator(); 170 size = defaultTranslations.size(); 171 double translated = 0; 172 while (namesIterator.hasNext()) 173 { 174 String name = ""+namesIterator.next(); 175 if (name.equals("defaultFont")) 176 { 177 size--; 178 continue; 179 } 180 if (props2.getProperty(name) != null) 181 { 182 translated++; 183 } 184 } 185 if (translated == 0) return 0; 186 return (int)((translated/size)*100); 187 } 188 189 194 private void initComponents() { 196 java.awt.GridBagConstraints gridBagConstraints; 197 198 jLabelLocalizableString = new javax.swing.JLabel (); 199 jScrollPane1 = new javax.swing.JScrollPane (); 200 jTableLanguages = new javax.swing.JTable (); 201 jPanel1 = new javax.swing.JPanel (); 202 jButtonDetails = new javax.swing.JButton (); 203 jButtonInsertDb = new javax.swing.JButton (); 204 jButtonExportToJB = new javax.swing.JButton (); 205 jButtonOk = new javax.swing.JButton (); 206 207 getContentPane().setLayout(new java.awt.GridBagLayout ()); 208 209 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 210 jLabelLocalizableString.setText("Localizable strings:"); 211 gridBagConstraints = new java.awt.GridBagConstraints (); 212 gridBagConstraints.gridwidth = 2; 213 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 214 gridBagConstraints.insets = new java.awt.Insets (4, 4, 4, 4); 215 getContentPane().add(jLabelLocalizableString, gridBagConstraints); 216 217 jTableLanguages.setModel(new javax.swing.table.DefaultTableModel ( 218 new Object [][] { 219 220 }, 221 new String [] { 222 "Title 1", "Title 2", "Title 3" 223 } 224 ) { 225 boolean[] canEdit = new boolean [] { 226 false, false, false 227 }; 228 229 public boolean isCellEditable(int rowIndex, int columnIndex) { 230 return canEdit [columnIndex]; 231 } 232 }); 233 jTableLanguages.setGridColor(new java.awt.Color (204, 204, 204)); 234 jTableLanguages.setShowVerticalLines(false); 235 jTableLanguages.addMouseListener(new java.awt.event.MouseAdapter () { 236 public void mouseClicked(java.awt.event.MouseEvent evt) { 237 jTableLanguagesMouseClicked(evt); 238 } 239 }); 240 241 jScrollPane1.setViewportView(jTableLanguages); 242 243 gridBagConstraints = new java.awt.GridBagConstraints (); 244 gridBagConstraints.gridx = 0; 245 gridBagConstraints.gridwidth = 2; 246 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 247 gridBagConstraints.weightx = 1.0; 248 gridBagConstraints.weighty = 1.0; 249 gridBagConstraints.insets = new java.awt.Insets (4, 4, 4, 4); 250 getContentPane().add(jScrollPane1, gridBagConstraints); 251 252 jPanel1.setLayout(new java.awt.GridBagLayout ()); 253 254 jButtonDetails.setText("Details..."); 255 jButtonDetails.setEnabled(false); 256 jButtonDetails.addActionListener(new java.awt.event.ActionListener () { 257 public void actionPerformed(java.awt.event.ActionEvent evt) { 258 jButtonDetailsActionPerformed(evt); 259 } 260 }); 261 262 gridBagConstraints = new java.awt.GridBagConstraints (); 263 gridBagConstraints.gridx = 0; 264 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 265 gridBagConstraints.insets = new java.awt.Insets (4, 4, 4, 4); 266 jPanel1.add(jButtonDetails, gridBagConstraints); 267 268 jButtonInsertDb.setText("InsertDB"); 269 jButtonInsertDb.addActionListener(new java.awt.event.ActionListener () { 270 public void actionPerformed(java.awt.event.ActionEvent evt) { 271 jButtonInsertDbActionPerformed(evt); 272 } 273 }); 274 275 jPanel1.add(jButtonInsertDb, new java.awt.GridBagConstraints ()); 276 277 jButtonExportToJB.setText("Import from JasperBabylon"); 278 jButtonExportToJB.addActionListener(new java.awt.event.ActionListener () { 279 public void actionPerformed(java.awt.event.ActionEvent evt) { 280 jButtonExportToJBjButtonDetailsActionPerformed2(evt); 281 } 282 }); 283 284 gridBagConstraints = new java.awt.GridBagConstraints (); 285 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 286 gridBagConstraints.weightx = 1.0; 287 gridBagConstraints.insets = new java.awt.Insets (4, 0, 4, 4); 288 jPanel1.add(jButtonExportToJB, gridBagConstraints); 289 290 jButtonOk.setText("Close"); 291 jButtonOk.addActionListener(new java.awt.event.ActionListener () { 292 public void actionPerformed(java.awt.event.ActionEvent evt) { 293 jButtonOkActionPerformed(evt); 294 } 295 }); 296 297 gridBagConstraints = new java.awt.GridBagConstraints (); 298 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 299 gridBagConstraints.weightx = 1.0; 300 gridBagConstraints.insets = new java.awt.Insets (4, 4, 4, 4); 301 jPanel1.add(jButtonOk, gridBagConstraints); 302 303 gridBagConstraints = new java.awt.GridBagConstraints (); 304 gridBagConstraints.gridx = 0; 305 gridBagConstraints.gridwidth = 2; 306 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 307 gridBagConstraints.weightx = 1.0; 308 gridBagConstraints.insets = new java.awt.Insets (0, 0, 4, 0); 309 getContentPane().add(jPanel1, gridBagConstraints); 310 311 pack(); 312 } 314 private void jButtonExportToJBjButtonDetailsActionPerformed2(java.awt.event.ActionEvent evt) { 316 QueryLocalesDialog qld = new QueryLocalesDialog(this, true); 317 qld.setVisible(true); 318 if (qld.getDialogResult() == JOptionPane.OK_OPTION) 319 { 320 Misc.saveTemporaryLocale(qld.getLocaleProperties(),"Ireport_" + qld.getLocale_code() + ".properties"); 321 this.updateStatus(); 322 } 323 324 } 326 private void jButtonInsertDbActionPerformed(java.awt.event.ActionEvent evt) { 328 IReportConnection c = (IReportConnection)MainFrame.getMainInstance().getProperties().get("DefaultConnection"); 329 java.sql.Connection conn = null; 330 PreparedStatement stmt = null; 331 try { 332 if (c == null || !( c instanceof it.businesslogic.ireport.connection.JDBCConnection) ) { 333 javax.swing.JOptionPane.showMessageDialog(this, "Not a JDBC connection","",javax.swing.JOptionPane.ERROR_MESSAGE); 334 return; 335 } 336 337 conn = c.getConnection(); 338 conn.createStatement().execute("delete from translations where app_id=1"); 339 340 stmt = conn.prepareStatement("insert into translations (app_id, language_id, s_key, s_value) values(1,?,?,?);"); 341 342 Properties props_default = new Properties (); 344 try { 345 props_default.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/Ireport.properties") ); 346 } catch (Exception ex) 347 { 348 ex.printStackTrace(); 349 } 350 Enumeration enum_keys = props_default.keys(); 351 while (enum_keys.hasMoreElements()) 352 { 353 String key = (""+enum_keys.nextElement()).trim(); 354 String val = props_default.getProperty(key); 355 356 stmt.setString(1,""); 357 stmt.setString(2,key); 358 stmt.setString(3,val); 359 stmt.executeUpdate(); 360 } 361 362 List listOfLanguages = it.businesslogic.ireport.util.I18n.getListOfAvailLanguages(); 363 364 System.out.println("Languages: " + listOfLanguages.size()); 365 for (int k=0; k<listOfLanguages.size(); ++k) 366 { 367 Locale lang = (Locale )listOfLanguages.get(k); 368 LocaleAdapter adapter = new LocaleAdapter(lang); 369 String language = lang.getLanguage(); 370 String country = lang.getCountry(); 371 String variant = lang.getVariant(); 372 373 String language_id = language; 374 language_id += (country.length() > 0) ? "_" + country : ""; 375 language_id += (variant.length() > 0) ? "_" + variant : ""; 376 377 String language_name = "Ireport" + ( (language.length() > 0) ? "_" : "") + language_id + ".properties"; 378 379 System.out.println("Working on " + language_name); 380 381 Properties props2 = new Properties (); 383 try { 384 props2.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/" + language_name ) ); 385 } catch (Exception ex){ 386 ex.printStackTrace(); 387 } 388 389 enum_keys = props2.keys(); 390 while (enum_keys.hasMoreElements()) 391 { 392 String key = (""+enum_keys.nextElement()).trim(); 393 String val = props2.getProperty(key); 394 if (props_default.containsKey(key)) 395 { 396 stmt.setString(1,language_id); 397 stmt.setString(2,key); 398 stmt.setString(3, val); 399 stmt.executeUpdate(); 400 } 401 } 402 } 403 404 } catch (Exception ex) 405 { 406 ex.printStackTrace(); 407 } 408 finally 409 { 410 if (conn != null) try {conn.close();} catch (Exception ex) { } 411 } 412 413 414 } 416 private void jButtonOkActionPerformed(java.awt.event.ActionEvent evt) { 418 this.setVisible(false); 419 this.dispose(); 420 421 } 423 private void jTableLanguagesMouseClicked(java.awt.event.MouseEvent evt) { if (evt.getClickCount() == 2 && 425 evt.getButton() == evt.BUTTON1) 426 { 427 jButtonDetailsActionPerformed(null); 428 } 429 430 } 432 private void jButtonDetailsActionPerformed(java.awt.event.ActionEvent evt) { 434 if (jTableLanguages.getSelectedRow() < 0) return; 435 int row = jTableLanguages.getSelectedRow(); 436 437 LocaleAdapter adapter = (LocaleAdapter)jTableLanguages.getValueAt(jTableLanguages.getSelectedRow(), 0); 438 439 TranslationStatusDetailDialog tsdd = new TranslationStatusDetailDialog(this,true); 440 441 Properties props_default = new Properties (); 442 try { 443 props_default.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/Ireport.properties") ); 444 } catch (Exception ex) 445 { 446 ex.printStackTrace(); 447 } 448 449 if (props_default != null) 450 { 451 tsdd.setLanguage( ""+ jTableLanguages.getValueAt(jTableLanguages.getSelectedRow(), 2),props_default); 452 tsdd.setVisible(true); 453 } 454 455 456 } 458 461 public static void main(String args[]) { 462 java.awt.EventQueue.invokeLater(new Runnable () { 463 public void run() { 464 new TranslationStatusDialog(new javax.swing.JFrame (), true).setVisible(true); 465 } 466 }); 467 } 468 469 private javax.swing.JButton jButtonDetails; 471 private javax.swing.JButton jButtonExportToJB; 472 private javax.swing.JButton jButtonInsertDb; 473 private javax.swing.JButton jButtonOk; 474 private javax.swing.JLabel jLabelLocalizableString; 475 private javax.swing.JPanel jPanel1; 476 private javax.swing.JScrollPane jScrollPane1; 477 private javax.swing.JTable jTableLanguages; 478 480 public void applyI18n(){ 481 jButtonDetails.setText(I18n.getString("translationStatusDialog.buttonDetails","Details...")); 483 jButtonOk.setText(I18n.getString("translationStatusDialog.buttonOk","Close")); 484 jLabelLocalizableString.setText( I18n.getFormattedString("translationStatusDialog.buttonOk","Close", new Object []{new Integer (0)} )); 485 487 jTableLanguages.getColumnModel().getColumn(0).setHeaderValue(I18n.getString("translationStatusDialog.table.Language","Language") ); 488 jTableLanguages.getColumnModel().getColumn(1).setHeaderValue(I18n.getString("translationStatusDialog.table.Status","Status") ); 489 jTableLanguages.getColumnModel().getColumn(2).setHeaderValue(I18n.getString("translationStatusDialog.table.File","File name") ); 490 } 491 } 492 | Popular Tags |