You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

gloc-dev.rb 3.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # Copyright (c) 2005-2006 David Barri
  2. puts "GLoc v#{GLoc::VERSION} running in development mode. Strings can be modified at runtime."
  3. module GLoc
  4. class << self
  5. alias :actual_add_localized_strings :add_localized_strings
  6. def add_localized_strings(lang, symbol_hash, override=true, strings_charset=nil)
  7. _verbose_msg {"dev::add_localized_strings #{lang}, [#{symbol_hash.size}], #{override}, #{strings_charset ? strings_charset : 'nil'}"}
  8. STATE.push [:hash, lang, {}.merge(symbol_hash), override, strings_charset]
  9. _force_refresh
  10. end
  11. alias :actual_load_localized_strings :load_localized_strings
  12. def load_localized_strings(dir=nil, override=true)
  13. _verbose_msg {"dev::load_localized_strings #{dir ? dir : 'nil'}, #{override}"}
  14. STATE.push [:dir, dir, override]
  15. _get_lang_file_list(dir).each {|filename| FILES[filename]= nil}
  16. end
  17. alias :actual_clear_strings :clear_strings
  18. def clear_strings(*languages)
  19. _verbose_msg {"dev::clear_strings #{languages.map{|l|l.to_s}.join(', ')}"}
  20. STATE.push [:clear, languages.clone]
  21. _force_refresh
  22. end
  23. alias :actual_clear_strings_except :clear_strings_except
  24. def clear_strings_except(*languages)
  25. _verbose_msg {"dev::clear_strings_except #{languages.map{|l|l.to_s}.join(', ')}"}
  26. STATE.push [:clear_except, languages.clone]
  27. _force_refresh
  28. end
  29. # Replace methods
  30. [:_l, :_l_rule, :_l_has_string?, :similar_language, :valid_languages, :valid_language?].each do |m|
  31. class_eval <<-EOB
  32. alias :actual_#{m} :#{m}
  33. def #{m}(*args)
  34. _assert_gloc_strings_up_to_date
  35. actual_#{m}(*args)
  36. end
  37. EOB
  38. end
  39. #-------------------------------------------------------------------------
  40. private
  41. STATE= []
  42. FILES= {}
  43. def _assert_gloc_strings_up_to_date
  44. changed= @@force_refresh
  45. # Check if any lang files have changed
  46. unless changed
  47. FILES.each_pair {|f,mtime|
  48. changed ||= (File.stat(f).mtime != mtime)
  49. }
  50. end
  51. return unless changed
  52. puts "GLoc reloading strings..."
  53. @@force_refresh= false
  54. # Update file timestamps
  55. FILES.each_key {|f|
  56. FILES[f]= File.stat(f).mtime
  57. }
  58. # Reload strings
  59. actual_clear_strings
  60. STATE.each {|s|
  61. case s[0]
  62. when :dir then actual_load_localized_strings s[1], s[2]
  63. when :hash then actual_add_localized_strings s[1], s[2], s[3], s[4]
  64. when :clear then actual_clear_strings(*s[1])
  65. when :clear_except then actual_clear_strings_except(*s[1])
  66. else raise "Invalid state id: '#{s[0]}'"
  67. end
  68. }
  69. _verbose_msg :stats
  70. end
  71. @@force_refresh= false
  72. def _force_refresh
  73. @@force_refresh= true
  74. end
  75. alias :super_get_internal_state_vars :_get_internal_state_vars
  76. def _get_internal_state_vars
  77. super_get_internal_state_vars + [ STATE, FILES ]
  78. end
  79. end
  80. end